@openephemeris/mcp-server 4.17.0 → 4.19.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 (47) hide show
  1. package/CHANGELOG.md +52 -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/index.js +8 -110
  6. package/dist/prompts.js +26 -24
  7. package/dist/server-sse.d.ts +18 -0
  8. package/dist/server-sse.js +48 -120
  9. package/dist/tools/apps/_render-token.d.ts +34 -0
  10. package/dist/tools/apps/_render-token.js +50 -0
  11. package/dist/tools/apps/bazi-app.d.ts +1 -1
  12. package/dist/tools/apps/bazi-app.js +39 -14
  13. package/dist/tools/apps/bi-wheel-app.d.ts +10 -3
  14. package/dist/tools/apps/bi-wheel-app.js +79 -119
  15. package/dist/tools/apps/bodygraph-app.d.ts +7 -4
  16. package/dist/tools/apps/bodygraph-app.js +101 -46
  17. package/dist/tools/apps/chart-wheel-app.d.ts +1 -1
  18. package/dist/tools/apps/chart-wheel-app.js +59 -18
  19. package/dist/tools/apps/location-tools.js +10 -3
  20. package/dist/tools/apps/moon-phase-app.d.ts +1 -1
  21. package/dist/tools/apps/moon-phase-app.js +13 -4
  22. package/dist/tools/apps/transit-timeline-app.d.ts +1 -1
  23. package/dist/tools/apps/transit-timeline-app.js +6 -6
  24. package/dist/tools/apps/ui-resource.d.ts +43 -0
  25. package/dist/tools/apps/ui-resource.js +66 -0
  26. package/dist/tools/apps/ui-resources.d.ts +22 -0
  27. package/dist/tools/apps/ui-resources.js +105 -0
  28. package/dist/tools/apps/vedic-chart-app.d.ts +1 -1
  29. package/dist/tools/apps/vedic-chart-app.js +13 -3
  30. package/dist/tools/datetime-historical.js +7 -2
  31. package/dist/tools/datetime.js +2 -1
  32. package/dist/tools/dev.js +7 -6
  33. package/dist/tools/specialized/electional.js +4 -3
  34. package/dist/tools/specialized/ephemeris_extended.js +19 -4
  35. package/dist/tools/specialized/hd_group.js +2 -2
  36. package/dist/tools/specialized/moon.d.ts +1 -1
  37. package/dist/tools/specialized/moon.js +51 -43
  38. package/dist/tools/specialized/progressed.js +2 -25
  39. package/dist/tools/specialized/transits.js +5 -5
  40. package/dist/ui/bazi.html +1199 -1161
  41. package/dist/ui/bi-wheel.html +573 -504
  42. package/dist/ui/bodygraph.html +437 -337
  43. package/dist/ui/chart-wheel.html +654 -584
  44. package/dist/ui/moon-phase.html +190 -155
  45. package/dist/ui/transit-timeline.html +865 -830
  46. package/dist/ui/vedic-chart.html +971 -934
  47. package/package.json +2 -1
@@ -1,7 +1,7 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
3
  <head>
4
- <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; font-src data:; connect-src 'none'" />
4
+ <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; font-src data: https:; connect-src 'none'" />
5
5
  <meta charset="UTF-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <meta name="color-scheme" content="dark light" />
@@ -10,7 +10,7 @@
10
10
  <title>Chart Wheel Explorer</title>
11
11
 
12
12
 
13
- <style>:root{--bg:#010203;--surface:#040609;--surface-2:#0b0d13;--border:#13161d;--border-strong:#242932;--text:#e2e4e9;--text-secondary:#777a80;--gold:#cc9c42;--gold-dim:#7b6540;--gold-glow:rgba(204,156,66,.2);--gold-subtle:rgba(204,156,66,.1);--on-gold:#0d0802;--success:#1da871;--error:#c53443;--radius:10px;--radius-sm:6px;--radius-pill:99px;--shadow:0 4px 20px rgba(0,0,0,.45);--shadow-md:0 8px 40px rgba(0,0,0,.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 0 2px var(--gold-glow), 0 6px 24px rgba(0,0,0,.5);--planet-sun:#e9ab2b;--planet-moon:#abb8d2;--planet-mercury:#37b880;--planet-venus:#de73bd;--planet-mars:#dd4d57;--planet-jupiter:#9886ed;--planet-saturn:#589194;--planet-uranus:#24c1c9;--planet-neptune:#2f8adc;--planet-pluto:#a97cc9;--aspect-conjunction:#ffa94d;--aspect-opposition:#ff6b8a;--aspect-trine:#ffd166;--aspect-square:#ff6b8a;--aspect-sextile:#38bdf8;--color-fire:#ec6d3d;--color-earth:#779e4b;--color-air:#17a9cb;--color-water:#8678c9;--color-cardinal:#d9525a;--color-fixed:#cc9c42;--color-mutable:#1da871}@supports (color:color(display-p3 0 0 0)){:root{--bg:color(display-p3 .00515318 .00655345 .0110262);--surface:color(display-p3 .0181758 .0222118 .0344746);--surface-2:color(display-p3 .0438795 .0516065 .0708656);--border:color(display-p3 .0763929 .0859556 .109705);--border-strong:color(display-p3 .146313 .159736 .192938);--text:color(display-p3 .889546 .895785 .910689);--text-secondary:color(display-p3 .470023 .47923 .50135);--gold:color(display-p3 .76996 .617341 .321369);--gold-dim:color(display-p3 .469305 .400291 .270966);--gold-glow:color(display-p3 .76996 .617341 .321369/.2);--gold-subtle:color(display-p3 .76996 .617341 .321369/.1);--on-gold:color(display-p3 .0492866 .0328715 .0111297);--success:color(display-p3 .313719 .651039 .459895);--error:color(display-p3 .710345 .252818 .279408);--shadow:0 4px 20px color(display-p3 0 0 0/.45);--shadow-md:0 8px 40px color(display-p3 0 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 0 2px var(--gold-glow), 0 6px 24px color(display-p3 0 0 0/.5);--planet-sun:color(display-p3 .877131 .680603 .28424);--planet-moon:color(display-p3 .679472 .718322 .813586);--planet-mercury:color(display-p3 .376022 .713332 .518194);--planet-venus:color(display-p3 .815343 .471375 .72873);--planet-mars:color(display-p3 .803557 .340931 .357065);--planet-jupiter:color(display-p3 .584642 .526796 .904819);--planet-saturn:color(display-p3 .398313 .564522 .578019);--planet-uranus:color(display-p3 .364235 .746318 .77845);--planet-neptune:color(display-p3 .290256 .532943 .838196);--planet-pluto:color(display-p3 .635092 .494812 .769187);--color-fire:color(display-p3 .864679 .454605 .289251);--color-earth:color(display-p3 .496575 .613452 .334223);--color-air:color(display-p3 .308318 .651825 .781829);--color-water:color(display-p3 .515326 .47381 .767317);--color-cardinal:color(display-p3 .790049 .355864 .367143);--color-fixed:color(display-p3 .76996 .617341 .321369);--color-mutable:color(display-p3 .313719 .651039 .459895)}}@supports (color:lab(0% 0 0)){:root{--bg:lab(.455387% .00626594 -.517511);--surface:lab(1.54195% -.000223517 -1.4246);--surface-2:lab(3.66055% -.0193194 -3.00652);--border:lab(7.15581% -.0557452 -5.11242);--border-strong:lab(16.3845% -.109598 -6.65552);--text:lab(90.6942% -.142366 -2.26941);--text-secondary:lab(51.2352% -.205308 -3.76425);--gold:lab(67.5798% 11.9379 52.333);--gold-dim:lab(44.394% 5.21132 24.4453);--gold-glow:lab(67.5798% 11.9379 52.333/.2);--gold-subtle:lab(67.5798% 11.9379 52.333/.1);--on-gold:lab(2.4863% .883393 2.81807);--success:lab(61.2436% -46.7762 18.3644);--error:lab(45.8893% 57.7361 27.393);--shadow:0 4px 20px lab(0% 0 0/.45);--shadow-md:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 0 2px var(--gold-glow), 0 6px 24px lab(0% 0 0/.5);--planet-sun:lab(74.5017% 15.8158 68.8514);--planet-moon:lab(74.277% -.405699 -14.8565);--planet-mercury:lab(67.0478% -46.5952 18.3141);--planet-venus:lab(62.9358% 49.4917 -19.8999);--planet-mars:lab(54.0218% 57.6814 26.7913);--planet-jupiter:lab(60.9189% 25.1968 -50.641);--planet-saturn:lab(56.5081% -18.8848 -7.81488);--planet-uranus:lab(71.0008% -37.5682 -15.4301);--planet-neptune:lab(55.2086% -4.94954 -50.4575);--planet-pluto:lab(58.8593% 28.4679 -33.3653);--color-fire:lab(61.5466% 48.3829 50.2676);--color-earth:lab(60.647% -24.5491 38.2386);--color-air:lab(63.473% -27.315 -28.2614);--color-water:lab(54.4132% 19.4196 -40.6625);--color-cardinal:lab(54.1324% 54.4527 25.0799);--color-fixed:lab(67.5798% 11.9379 52.333);--color-mutable:lab(61.2436% -46.7762 18.3644)}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;height:100%}body{background:var(--bg);color:var(--text);background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.035'/%3E%3C/svg%3E");font-family:Geist,Space Grotesk,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:1.5;overflow-x:hidden}#app{flex-direction:column;display:flex;position:relative}#loading-state{color:var(--text-secondary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:14px;display:flex}#loading-state[hidden]{display:none}#loading-state p{letter-spacing:.05em;text-transform:uppercase;font-size:12px}.spinner{border:2px solid var(--border-strong);border-top-color:var(--gold);border-radius:50%;width:32px;height:32px;animation:1.1s cubic-bezier(.4,0,.6,1) infinite spin}@keyframes spin{to{transform:rotate(360deg)}}#chart-container{aspect-ratio:1;z-index:0;justify-content:center;align-items:center;width:100%;max-height:520px;padding:8px;display:flex;position:relative;overflow:hidden}#chart-container[hidden]{display:none}#chart-container svg{-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;height:100%;display:block;overflow:hidden}.info-panel,.overview-tbl td{-webkit-user-select:text;-moz-user-select:text;user-select:text}#chart-info{background:var(--surface);border-top:1px solid var(--border);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:5px;padding:6px 12px;display:flex}#chart-info[hidden]{display:none!important}.info-chip{color:var(--text-secondary);border-radius:var(--radius-pill);white-space:nowrap;letter-spacing:.03em;background:#13161c;background:color(display-p3 .0777944 .086043 .106387);background:lab(7.16788% -.0827834 -4.39059);align-items:center;gap:3px;padding:2px 8px;font-size:10px;font-weight:500;line-height:1.6;display:inline-flex}.info-chip.sect{color:var(--gold);background:var(--gold-subtle);font-weight:600}.hit-region{cursor:pointer;fill:transparent;stroke:transparent;transition:fill .15s,stroke .15s,opacity .2s}.hit-region:hover{fill:var(--gold-subtle);stroke:var(--gold-dim);stroke-width:1px;stroke-opacity:.5}.hit-region.planet-hit{rx:12px;ry:12px}.hit-region.planet-hit:not(.dim):hover{filter:drop-shadow(0 0 6px var(--gold-glow))}.hit-region:focus-visible{outline:2px solid var(--gold);outline-offset:2px;fill:var(--gold-subtle)}.hit-region.dim{opacity:.12}.hit-region.aspect-hit{stroke-width:13px}.hit-region.sign-hit:hover{fill:rgba(204,156,66,.06);fill:color(display-p3 .76996 .617341 .321369/.06);fill:lab(67.5798% 11.9379 52.333/.06);stroke:none}.info-panel{background:var(--surface-2);border:1px solid var(--border-strong);width:100%;box-shadow:0 8px 40px rgba(0,0,0,.6), 0 0 0 1px var(--border-strong);opacity:0;pointer-events:none;z-index:2;border-radius:10px;max-height:0;padding:0 16px;transition:max-height .26s cubic-bezier(.16,1,.3,1),opacity .2s,padding .2s;position:relative;overflow:hidden}@supports (color:color(display-p3 0 0 0)){.info-panel{box-shadow:0 8px 40px color(display-p3 0 0 0/.6), 0 0 0 1px var(--border-strong)}}@supports (color:lab(0% 0 0)){.info-panel{box-shadow:0 8px 40px lab(0% 0 0/.6), 0 0 0 1px var(--border-strong)}}.info-panel:before{content:"";background:var(--border-strong);border-radius:2px;flex-shrink:0;width:36px;height:4px;margin:0 auto 10px;display:block}.info-panel.visible{opacity:1;pointer-events:all;max-height:520px;padding:14px 16px 12px}.info-header{align-items:flex-start;gap:10px;margin-bottom:12px;display:flex}.info-glyph{text-align:center;flex-shrink:0;width:34px;font-size:28px;line-height:1}.info-title{color:var(--text);flex:1;font-size:13px;font-weight:700}.info-name-row{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.info-pos{color:var(--text-secondary);margin-top:2px;font-family:JetBrains Mono,Courier New,monospace;font-size:11px;font-weight:400}.retro{color:var(--error);font-style:normal}.info-close{cursor:pointer;color:var(--text-secondary);background:0 0;border:none;border-radius:4px;flex-shrink:0;padding:2px 4px;font-size:15px;line-height:1;transition:color .12s}.info-close:hover{color:var(--text)}.aspects-title{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);margin-bottom:6px;font-size:10px;font-weight:700}.aspects-list{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex-direction:column;gap:4px;max-height:140px;display:flex;overflow-y:auto}.aspects-list::-webkit-scrollbar{width:3px}.aspects-list::-webkit-scrollbar-track{background:0 0}.aspects-list::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:3px}.aspect-row{align-items:center;gap:7px;padding:3px 0;font-size:12px;display:flex}.aspect-dot{border-radius:50%;flex-shrink:0;width:7px;height:7px}.aspect-sym{text-align:center;flex-shrink:0;width:16px;font-size:14px}.aspect-other{color:var(--text);flex:1}.aspect-meta{color:var(--text-secondary);white-space:nowrap;font-family:JetBrains Mono,monospace;font-size:11px}.no-aspects{color:var(--text-secondary);padding:4px 0;font-size:11px;font-style:italic}.info-hint{color:var(--gold-dim);letter-spacing:.03em;text-align:center;margin-top:10px;font-size:10px}.ask-claude-btn{border-radius:var(--radius-sm);width:100%;color:var(--gold);letter-spacing:.04em;cursor:pointer;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);justify-content:center;align-items:center;gap:6px;margin-top:12px;padding:9px 16px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:12px;font-weight:600;transition:background .16s,border-color .16s,box-shadow .16s;display:flex}.ask-claude-btn:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65);box-shadow:0 0 0 3px rgba(204,156,66,.12);box-shadow:0 0 0 3px color(display-p3 .76996 .617341 .321369/.12);box-shadow:0 0 0 3px lab(67.5798% 11.9379 52.333/.12)}.ask-claude-btn:disabled{opacity:.5;cursor:not-allowed}.ask-claude-btn.sending{color:var(--gold-dim);opacity:.8;cursor:wait;pointer-events:none;background:rgba(204,156,66,.08);background:color(display-p3 .76996 .617341 .321369/.08);background:lab(67.5798% 11.9379 52.333/.08);border-color:rgba(204,156,66,.25);border-color:color(display-p3 .76996 .617341 .321369/.25);border-color:lab(67.5798% 11.9379 52.333/.25)}.ask-claude-btn.sent{color:var(--success);pointer-events:none;background:rgba(29,168,113,.15);background:color(display-p3 .313719 .651039 .459895/.15);background:lab(61.2436% -46.7762 18.3644/.15);border-color:rgba(29,168,113,.5);border-color:color(display-p3 .313719 .651039 .459895/.5);border-color:lab(61.2436% -46.7762 18.3644/.5)}.ask-claude-btn.error{color:var(--error);background:rgba(197,52,67,.15);background:color(display-p3 .710345 .252818 .279408/.15);background:lab(45.8893% 57.7361 27.393/.15);border-color:rgba(197,52,67,.5);border-color:color(display-p3 .710345 .252818 .279408/.5);border-color:lab(45.8893% 57.7361 27.393/.5)}.chart-status{min-height:0;max-height:0;color:var(--gold);letter-spacing:.04em;opacity:0;background:var(--surface);border-top:1px solid var(--border);padding:0 14px;font-size:11px;font-weight:500;transition:max-height .24s cubic-bezier(.16,1,.3,1),padding .24s cubic-bezier(.16,1,.3,1),opacity .24s;overflow:hidden}.chart-status[data-active]{opacity:1;max-height:32px;padding:6px 14px}.aspect-pair-row{justify-content:space-between;align-items:center;gap:8px;padding:6px 0;display:flex}.aspect-pair-planet{flex:1;align-items:center;gap:6px;display:flex}.aspect-pair-glyph{text-align:center;flex-shrink:0;width:24px;font-size:18px;line-height:1}.aspect-pair-name{color:var(--text);font-size:12px;font-weight:600}.aspect-pair-pos{color:var(--text-secondary);margin-top:1px;font-family:JetBrains Mono,monospace;font-size:10px}.aspect-pair-sym{text-align:center;flex-shrink:0;width:24px;font-size:20px}.pattern-ask-claude-btn{border-radius:var(--radius-pill);color:var(--gold);letter-spacing:.04em;cursor:pointer;background:rgba(204,156,66,.1);background:color(display-p3 .76996 .617341 .321369/.1);background:lab(67.5798% 11.9379 52.333/.1);border:1px solid rgba(204,156,66,.35);border:1px solid color(display-p3 .76996 .617341 .321369/.35);border:1px solid lab(67.5798% 11.9379 52.333/.35);flex-shrink:0;margin-left:6px;padding:3px 10px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:10px;font-weight:600;transition:background .15s,border-color .15s,box-shadow .15s}.pattern-ask-claude-btn:hover{background:rgba(204,156,66,.18);background:color(display-p3 .76996 .617341 .321369/.18);background:lab(67.5798% 11.9379 52.333/.18);border-color:rgba(204,156,66,.6);border-color:color(display-p3 .76996 .617341 .321369/.6);border-color:lab(67.5798% 11.9379 52.333/.6);box-shadow:0 0 0 2px rgba(204,156,66,.1);box-shadow:0 0 0 2px color(display-p3 .76996 .617341 .321369/.1);box-shadow:0 0 0 2px lab(67.5798% 11.9379 52.333/.1)}.pattern-ask-claude-btn:disabled{opacity:.45;cursor:default}.dignity-badge{border-radius:var(--radius-pill);white-space:nowrap;align-items:center;gap:3px;padding:1px 7px;font-size:10px;font-weight:600;line-height:1.6;display:inline-flex}.dignity-domicile{color:#4bc98f;color:color(display-p3 .438181 .776546 .577613);color:lab(72.8515% -46.4433 18.272);background:rgba(29,168,113,.15);background:color(display-p3 .313719 .651039 .459895/.15);background:lab(61.2436% -46.7762 18.3644/.15);border:1px solid rgba(29,168,113,.4);border:1px solid color(display-p3 .313719 .651039 .459895/.4);border:1px solid lab(61.2436% -46.7762 18.3644/.4)}.dignity-exaltation{color:#e6b55d;color:color(display-p3 .872302 .716587 .419329);color:lab(76.888% 11.458 50.9953);background:rgba(204,156,66,.15);background:color(display-p3 .76996 .617341 .321369/.15);background:lab(67.5798% 11.9379 52.333/.15);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4)}.dignity-detriment{color:#e17174;color:color(display-p3 .827266 .46738 .465289);color:lab(61.4259% 44.7499 19.9857);background:rgba(197,52,67,.12);background:color(display-p3 .710345 .252818 .279408/.12);background:lab(45.8893% 57.7361 27.393/.12);border:1px solid rgba(197,52,67,.35);border:1px solid color(display-p3 .710345 .252818 .279408/.35);border:1px solid lab(45.8893% 57.7361 27.393/.35)}.dignity-fall{color:#7a869f;color:color(display-p3 .488637 .525017 .615022);color:lab(55.7075% -.240624 -14.7889);background:rgba(88,99,123,.12);background:color(display-p3 .353624 .387759 .473149/.12);background:lab(41.7762% -.0450611 -14.7162/.12);border:1px solid rgba(88,99,123,.3);border:1px solid color(display-p3 .353624 .387759 .473149/.3);border:1px solid lab(41.7762% -.0450611 -14.7162/.3)}#tally-panel{border-top:1px solid var(--border);background:var(--surface);flex-shrink:0;align-items:center;gap:8px;padding:5px 12px;display:flex}.tally-section{flex-direction:column;gap:3px;display:flex}.tally-row{align-items:center;gap:6px;display:flex}.tally-item{white-space:nowrap;letter-spacing:.02em;border-radius:4px;padding:1px 6px;font-size:10px;font-weight:600}.tally-item.fire{color:var(--color-fire);background:rgba(236,109,61,.12);background:color(display-p3 .864679 .454605 .289251/.12);background:lab(61.5466% 48.3829 50.2676/.12)}.tally-item.earth{color:var(--color-earth);background:rgba(119,158,75,.12);background:color(display-p3 .496575 .613452 .334223/.12);background:lab(60.647% -24.5491 38.2386/.12)}.tally-item.air{color:var(--color-air);background:rgba(23,169,203,.12);background:color(display-p3 .308318 .651825 .781829/.12);background:lab(63.473% -27.315 -28.2614/.12)}.tally-item.water{color:var(--color-water);background:rgba(134,120,201,.12);background:color(display-p3 .515326 .47381 .767317/.12);background:lab(54.4132% 19.4196 -40.6625/.12)}.tally-item.cardinal{color:var(--color-cardinal);background:rgba(217,82,90,.1);background:color(display-p3 .790049 .355864 .367143/.1);background:lab(54.1324% 54.4527 25.0799/.1)}.tally-item.fixed{color:var(--color-fixed);background:rgba(204,156,66,.1);background:color(display-p3 .76996 .617341 .321369/.1);background:lab(67.5798% 11.9379 52.333/.1)}.tally-item.mutable{color:var(--color-mutable);background:rgba(29,168,113,.1);background:color(display-p3 .313719 .651039 .459895/.1);background:lab(61.2436% -46.7762 18.3644/.1)}.tally-bar-row{padding:2px 0}.tally-bar{background:var(--border);border-radius:2px;width:96px;height:3px;display:flex;overflow:hidden}.tally-bar-fill{height:100%;transition:width .5s cubic-bezier(.16,1,.3,1)}.tally-bar-fill.fire{background:var(--color-fire)}.tally-bar-fill.earth{background:var(--color-earth)}.tally-bar-fill.air{background:var(--color-air)}.tally-bar-fill.water{background:var(--color-water)}.tally-divider{background:var(--border-strong);flex-shrink:0;width:1px;height:26px}.tally-item[data-interactive]{cursor:pointer;transition:opacity .14s,box-shadow .14s,background .14s}.tally-item[data-interactive]:hover,.tally-item[data-interactive].active{opacity:1;box-shadow:0 0 0 2px}.tally-planets{flex-wrap:wrap;gap:3px;padding:2px 0 0;display:flex}.tally-planet-chip{color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:rgba(255,255,255,.05);background:color(display-p3 1 1 1/.05);background:lab(100% 0 0/.05);border-radius:3px;padding:0 4px;font-size:9px;font-weight:500;transition:color .12s,background .12s}.tally-planet-chip:hover{color:var(--gold);background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12)}#dignity-panel{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:6px;padding:4px 12px;display:flex}.dignity-chip{cursor:pointer;white-space:nowrap;border-radius:4px;align-items:center;gap:3px;padding:1px 7px;font-size:10px;font-weight:600;transition:opacity .14s,box-shadow .14s;display:inline-flex}.dignity-chip:hover{opacity:1;box-shadow:0 0 0 2px}.dignity-chip.active{box-shadow:0 0 0 2px}#overview-table{border-top:1px solid var(--border);background:var(--surface);flex-shrink:0}.overview-header{align-items:center;display:flex}.overview-header .overview-toggle{flex:auto;width:auto}.overview-copy{border:1px solid var(--border);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em;border-radius:var(--radius-sm,6px);cursor:pointer;background:0 0;flex-shrink:0;margin-right:8px;padding:3px 10px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:10px;font-weight:700;transition:color .14s,border-color .14s}.overview-copy:hover,.overview-copy.copied{color:var(--gold);border-color:var(--gold)}.overview-toggle{width:100%;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.1em;cursor:pointer;background:0 0;border:none;align-items:center;gap:6px;padding:6px 12px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:10px;font-weight:700;transition:color .14s;display:flex}.overview-toggle:hover{color:var(--gold)}.overview-chevron{font-size:8px;transition:transform .2s}.overview-toggle[aria-expanded=true] .overview-chevron{transform:rotate(90deg)}.overview-body{grid-template-rows:0fr;transition:grid-template-rows .28s cubic-bezier(.16,1,.3,1);display:grid;overflow:hidden}.overview-body>*{min-height:0}.overview-body.open{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;grid-template-rows:1fr;max-height:300px;overflow-x:hidden;overflow-y:auto}.overview-tbl{border-collapse:collapse;width:100%;font-size:11px}.overview-tbl th{text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary);text-align:left;border-bottom:1px solid var(--border);background:var(--surface);padding:3px 8px;font-size:9px;font-weight:700;position:-webkit-sticky;position:sticky;top:0}.overview-tbl td{color:var(--text);border-bottom:1px solid rgba(255,255,255,.04);border-bottom:1px solid color(display-p3 1 1 1/.04);border-bottom:1px solid lab(100% 0 0/.04);padding:4px 8px}.overview-tbl tr{cursor:pointer;transition:background .12s}.overview-tbl tbody tr:hover{background:rgba(204,156,66,.06);background:color(display-p3 .76996 .617341 .321369/.06);background:lab(67.5798% 11.9379 52.333/.06)}.overview-tbl tbody tr.active-row{background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12)}.overview-tbl tbody tr.extended-row{opacity:.72}.overview-tbl tbody tr.extended-row td:first-child:after{content:" ·";color:var(--text-secondary);font-size:8px}.overview-tbl .planet-sym{text-align:center;width:20px;font-family:serif;font-size:14px;display:inline-block}.overview-tbl .retro-mark{color:#e05252;margin-left:2px;font-size:9px}#patterns-strip{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:5px;padding:5px 12px;display:flex}.patterns-label{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);white-space:nowrap;margin-right:2px;font-size:9px;font-weight:700}.pattern-pill{border-radius:var(--radius-pill);cursor:pointer;white-space:nowrap;opacity:.75;background:0 0;border:1px solid;align-items:center;gap:4px;padding:5px 9px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:10px;font-weight:600;transition:opacity .14s,box-shadow .14s;display:inline-flex}.pattern-pill:hover{opacity:1;box-shadow:0 0 0 2px currentColor / .2}.pattern-pill.active{color:#010203;color:color(display-p3 .00515318 .00655345 .0110262);color:lab(.455387% .00626594 -.517511);opacity:1;border-color:transparent;box-shadow:0 2px 10px rgba(0,0,0,.3);box-shadow:0 2px 10px color(display-p3 0 0 0/.3);box-shadow:0 2px 10px lab(0% 0 0/.3)}#aspect-filter{border-top:1px solid var(--border);scrollbar-width:none;flex-shrink:0;align-items:center;gap:4px;padding:4px 12px;display:flex;overflow-x:auto}#aspect-filter::-webkit-scrollbar{display:none}#aspect-filter[hidden]{display:none!important}#controls-panel{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:6px;padding:8px 12px;display:flex}.controls-label{color:var(--text-secondary);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;margin-right:2px;font-size:10px;font-weight:700}.control-btn{border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:0 0;padding:6px 10px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:11px;transition:background .12s,color .12s,border-color .12s}.control-btn:hover{background:var(--gold-subtle);color:var(--gold);border-color:rgba(204,156,66,.4);border-color:color(display-p3 .76996 .617341 .321369/.4);border-color:lab(67.5798% 11.9379 52.333/.4)}.control-btn.active{color:var(--gold);background:rgba(204,156,66,.18);background:color(display-p3 .76996 .617341 .321369/.18);background:lab(67.5798% 11.9379 52.333/.18);border-color:rgba(204,156,66,.6);border-color:color(display-p3 .76996 .617341 .321369/.6);border-color:lab(67.5798% 11.9379 52.333/.6);font-weight:600}.controls-divider{background:var(--border-strong);flex-shrink:0;width:1px;height:18px;margin:0 4px}.error-state{text-align:center;color:var(--text-secondary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px;display:flex}.error-state .error-icon{opacity:.6;margin-bottom:4px;font-size:28px}.error-retry-btn{border:1px solid var(--border,rgba(128,128,160,.3));color:var(--gold,var(--accent-warm,var(--text,inherit)));font:inherit;letter-spacing:.02em;cursor:pointer;background:0 0;border-radius:999px;margin-top:4px;padding:7px 20px;font-size:11px;font-weight:600;transition:background .18s,border-color .18s}.error-retry-btn:hover{background:rgba(128,128,160,.12)}.info-drawer{background:var(--surface-2,#080b11);border:1px solid var(--border-strong,#242933);width:100%;box-shadow:0 8px 40px rgba(0,0,0,.65), 0 0 0 1px var(--border-strong,#242933);opacity:0;pointer-events:none;border-radius:10px;max-height:0;padding:14px 16px 12px;transition:max-height .26s cubic-bezier(.16,1,.3,1),opacity .2s,padding .2s;position:relative;overflow:hidden}@supports (color:color(display-p3 0 0 0)){.info-drawer{background:var(--surface-2,color(display-p3 .0345774 .0431759 .0653236));border:1px solid var(--border-strong,color(display-p3 .144788 .159634 .196542));box-shadow:0 8px 40px color(display-p3 0 0 0/.65), 0 0 0 1px var(--border-strong,color(display-p3 .144788 .159634 .196542))}}@supports (color:lab(0% 0 0)){.info-drawer{background:var(--surface-2,lab(3.00584% .0228807 -3.15676));border:1px solid var(--border-strong,lab(16.3712% -.0768155 -7.37782));box-shadow:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong,lab(16.3712% -.0768155 -7.37782))}}.info-drawer:before{content:"";background:var(--border-strong,#242933);border-radius:2px;flex-shrink:0;width:36px;height:4px;margin:0 auto 10px;display:block}@supports (color:color(display-p3 0 0 0)){.info-drawer:before{background:var(--border-strong,color(display-p3 .144788 .159634 .196542))}}@supports (color:lab(0% 0 0)){.info-drawer:before{background:var(--border-strong,lab(16.3712% -.0768155 -7.37782))}}.info-drawer.open{opacity:1;pointer-events:all;max-height:500px;padding:14px 16px 12px}.hd-action-bar{z-index:2;background:var(--bg);flex-wrap:wrap;gap:8px;padding:10px 16px 6px;display:flex;position:relative}.action-btn{border:1px solid var(--gold-glow);background:var(--gold-subtle);color:var(--gold);letter-spacing:.02em;cursor:pointer;white-space:nowrap;border-radius:8px;align-items:center;gap:6px;padding:7px 16px;font-size:12px;font-weight:600;transition:background .2s,border-color .2s;display:inline-flex}.action-btn:hover{background:rgba(204,156,66,.15);background:color(display-p3 .76996 .617341 .321369/.15);background:lab(67.5798% 11.9379 52.333/.15);border-color:rgba(204,156,66,.45);border-color:color(display-p3 .76996 .617341 .321369/.45);border-color:lab(67.5798% 11.9379 52.333/.45)}.action-btn:active{background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2)}.action-btn--primary{background:rgba(204,156,66,.18);background:color(display-p3 .76996 .617341 .321369/.18);background:lab(67.5798% 11.9379 52.333/.18);border-color:rgba(204,156,66,.5);border-color:color(display-p3 .76996 .617341 .321369/.5);border-color:lab(67.5798% 11.9379 52.333/.5)}.action-btn--primary:hover{background:rgba(204,156,66,.25);background:color(display-p3 .76996 .617341 .321369/.25);background:lab(67.5798% 11.9379 52.333/.25);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65)}.pan-zoom-controls{z-index:800;flex-direction:column;gap:6px;display:flex;position:absolute;bottom:12px;right:12px}.pan-zoom-controls[hidden]{display:none!important}.pan-btn{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);border-radius:var(--radius-sm);cursor:pointer;width:40px;height:40px;box-shadow:var(--shadow-md);justify-content:center;align-items:center;font-family:inherit;font-size:18px;transition:all .15s;display:flex}.pan-btn.reset{width:auto;padding:0 10px;font-size:11px;font-weight:500}.pan-btn:hover{background:var(--surface);border-color:var(--gold-dim);color:var(--gold)}.pan-btn:active{transform:scale(.95)}.pan-btn--fullscreen{width:40px;height:40px}body.is-fullscreen{height:100vh;overflow:hidden}body.is-fullscreen #app{flex-direction:column;gap:0;width:100vw;height:100vh;padding:0;display:flex;overflow:hidden}body.is-fullscreen #chart-container{flex:1;justify-content:center;align-items:center;min-height:0;padding:16px 24px 0;display:flex;overflow:hidden}body.is-fullscreen #chart-container>svg{width:auto;max-width:100%;height:100%;max-height:100%}body.is-fullscreen #chart-status{display:none}body.is-fullscreen #loading-state{flex:1;height:auto;min-height:0}body.is-fullscreen .pan-zoom-controls{top:16px;right:16px}#fs-bottom-bar{border-top:1px solid var(--border);background:#020306;background:color(display-p3 .0100648 .0127997 .0215356);background:lab(.889429% .0122339 -1.01076);flex-shrink:0;grid-template-rows:1fr;grid-template-columns:220px 1fr 220px;height:240px;min-height:180px;max-height:280px;display:grid}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex-direction:column;gap:4px;padding:10px 14px 12px;display:flex;overflow-x:hidden;overflow-y:auto}#fs-bottom-bar [data-column=left]{border-right:1px solid var(--border)}#fs-bottom-bar [data-column=center]{pointer-events:none}#fs-bottom-bar [data-column=right]{border-left:1px solid var(--border);overflow-y:auto}#fs-bottom-bar [data-column]>*+*{border-top:1px solid var(--border);margin-top:4px;padding-top:8px}#fs-bottom-bar .cw-action-bar,#fs-bottom-bar .hd-action-bar{flex-direction:column;padding:8px 0 0}#fs-bottom-bar .action-btn{justify-content:center;width:100%}.cancel-toast{background:var(--surface-2,#1e1e2e);border:1px solid var(--border-strong,#444);color:var(--text-secondary);border-radius:var(--radius-sm,6px);opacity:0;z-index:9999;pointer-events:none;box-shadow:var(--shadow-md,0 4px 12px rgba(0,0,0,.3));padding:8px 16px;font-family:inherit;font-size:12px;transition:opacity .3s,transform .3s;position:fixed;bottom:20px;left:50%;transform:translate(-50%)translateY(20px)}.cancel-toast.visible{opacity:1;transform:translate(-50%)translateY(0)}.oe-loader{width:64px;height:64px;stroke:var(--gold);stroke-width:2px;fill:none;stroke-dasharray:200;stroke-dashoffset:200px;filter:drop-shadow(0 0 4px var(--gold-glow));animation:2.5s cubic-bezier(.16,1,.3,1) infinite oe-draw}@keyframes oe-draw{0%{stroke-dashoffset:200px;stroke-opacity:.1}50%{stroke-dashoffset:0;stroke-opacity:1;filter:drop-shadow(0 0 8px var(--gold))}to{stroke-dashoffset:-200px;stroke-opacity:.1}}#aspect-filter{padding:0}.asp-panel{flex-wrap:wrap;align-items:center;gap:6px 16px;padding:6px 0;display:flex}.asp-section{align-items:center;gap:6px;display:flex}.asp-section-label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);white-space:nowrap;font-size:10px;font-weight:700}.aspect-toggle-btn,.orb-preset-btn{border:1.5px solid var(--border-strong);color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border-radius:20px;padding:4px 10px;font-size:11px;font-weight:600;transition:background .15s,color .15s,border-color .15s}.aspect-toggle-btn:hover,.orb-preset-btn:hover{border-color:var(--gold-dim);color:var(--text)}.aspect-toggle-btn.active{background:var(--gold);border-color:var(--gold);color:var(--on-gold)}.orb-preset-btn.active{background:var(--surface-2);border-color:var(--gold);color:var(--gold)}.glyph-legend{margin-top:8px;font-size:11px}.glyph-legend>summary{cursor:pointer;border:1px solid var(--border);color:var(--text-secondary);-webkit-user-select:none;-moz-user-select:none;user-select:none;border-radius:999px;align-items:center;gap:5px;padding:4px 10px;list-style:none;display:inline-flex}.glyph-legend>summary::-webkit-details-marker{display:none}.glyph-legend>summary:hover{color:var(--text);border-color:var(--gold-dim)}.glyph-legend[open]>summary{color:var(--text)}.glyph-legend .legend-spark{color:var(--gold)}.legend-body{flex-direction:column;gap:10px;padding:10px 2px 2px;display:flex}.legend-group{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.legend-group-title{text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary);width:100%;font-size:9px}.legend-item{color:var(--text-secondary);align-items:center;gap:4px;display:inline-flex}.legend-glyph{color:var(--text);text-align:center;min-width:16px;font-size:14px}.chart-layer{opacity:1;transform-origin:310px 310px;animation:.5s cubic-bezier(.16,1,.3,1) both svgLayerAssemble;animation-delay:calc(var(--layer-index,0) * 80ms);transform:scale(1)}@keyframes svgLayerAssemble{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.tooltip{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;border-radius:var(--radius,10px);pointer-events:none;z-index:1000;opacity:0;background:rgba(12,12,22,.97);border:1px solid rgba(60,58,80,.8);max-width:240px;padding:8px 12px;font-size:12px;transition:opacity .12s;position:fixed;box-shadow:0 8px 32px rgba(0,0,0,.55),inset 0 .5px rgba(255,255,255,.04)}.tooltip.visible{opacity:1}.tooltip-title{color:#e8e8f4;margin-bottom:2px;font-weight:700}.tooltip-detail{color:#9090b0;line-height:1.4}.tooltip-hint{color:#a08840;letter-spacing:.03em;margin-top:4px;font-size:10px}:root[data-theme=light]{--aspect-conjunction:#b45d00;--aspect-opposition:#b42318;--aspect-trine:#8f6a00;--aspect-square:#b42318;--aspect-sextile:#0c6e94;--bg:#f7f5f1;--surface:#fff;--surface-2:#f1eee9;--border:#dbd7d0;--border-strong:#bdb6ac;--text:#101215;--text-secondary:#4f5359;--gold:#825700;--gold-dim:#6d4b00;--gold-glow:rgba(130,87,0,.25);--gold-subtle:rgba(130,87,0,.1);--on-gold:#fcf4e6;--success:#007145;--error:#b1002b;--shadow:0 4px 20px rgba(0,0,0,.1);--shadow-md:0 8px 32px rgba(0,0,0,.14), 0 0 0 1px var(--border-strong)}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light]{--bg:color(display-p3 .967616 .959866 .945308);--surface:color(display-p3 1 1 1);--surface-2:color(display-p3 .943798 .93351 .914195);--border:color(display-p3 .855616 .842987 .819292);--border-strong:color(display-p3 .73602 .716348 .67952);--text:color(display-p3 .0633107 .0687189 .081922);--text-secondary:color(display-p3 .313002 .323251 .348016);--gold:color(display-p3 .49809 .342102 -.0880434);--gold-dim:color(display-p3 .414099 .299019 .034461);--gold-glow:color(display-p3 .49809 .342102 -.0880434/.25);--gold-subtle:color(display-p3 .49809 .342102 -.0880434/.1);--on-gold:color(display-p3 .983924 .957955 .909341);--success:color(display-p3 -.0793084 .456092 .255685);--error:color(display-p3 .642198 .101724 .18242);--shadow:0 4px 20px color(display-p3 0 0 0/.1);--shadow-md:0 8px 32px color(display-p3 0 0 0/.14), 0 0 0 1px var(--border-strong)}}@supports (color:lab(0% 0 0)){:root[data-theme=light]{--bg:lab(96.5376% .34079 2.2589);--surface:lab(100% 0 0);--surface-2:lab(94.2232% .459701 3.01524);--border:lab(86.1085% .583261 3.77473);--border-strong:lab(74.5232% .975847 6.06879);--text:lab(5.23809% -.0738502 -2.43738);--text-secondary:lab(34.9842% -.210062 -4.49808);--gold:lab(40.7346% 15.7445 75.3139);--gold-dim:lab(35.0077% 11.3181 50.9422);--gold-glow:lab(40.7346% 15.7445 75.3139/.25);--gold-subtle:lab(40.7346% 15.7445 75.3139/.1);--on-gold:lab(96.574% 1.22041 7.58642);--success:lab(41.7514% -55.3249 21.5039);--error:lab(37.5238% 64.2774 32.6097);--shadow:0 4px 20px lab(0% 0 0/.1);--shadow-md:0 8px 32px lab(0% 0 0/.14), 0 0 0 1px var(--border-strong)}}:root[data-theme=light],:root[data-theme=light] body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background-image:none}:root[data-theme=light] .hd-action-bar{background:var(--bg)}:root[data-theme=light] .info-chip{background:var(--surface-2);color:var(--text-secondary);border:1px solid var(--border)}:root[data-theme=light] .info-chip.sect{background:var(--gold-subtle);color:var(--gold);border-color:rgba(141,95,0,.3);border-color:color(display-p3 .542549 .371783 -.107551/.3);border-color:lab(44.1995% 17.0662 84.3373/.3)}:root[data-theme=light] .tooltip{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--text);border-color:var(--border-strong);background:rgba(255,255,255,.96);background:color(display-p3 1 1 1/.96);background:lab(100% 0 0/.96);box-shadow:0 8px 32px rgba(0,0,0,.18),inset 0 .5px rgba(255,255,255,.6);box-shadow:0 8px 32px color(display-p3 0 0 0/.18),inset 0 .5px color(display-p3 1 1 1/.6);box-shadow:0 8px 32px lab(0% 0 0/.18),inset 0 .5px lab(100% 0 0/.6)}:root[data-theme=light] .tooltip-title{color:var(--text)}:root[data-theme=light] .tooltip-detail{color:var(--text-secondary)}:root[data-theme=light] .tooltip-hint{color:var(--gold-dim)}:root[data-theme=light] .chart-status{background:rgba(247,245,241,.92);background:color(display-p3 .967616 .959866 .945308/.92);background:lab(96.5376% .34079 2.2589/.92);border-color:rgba(141,95,0,.35);border-color:color(display-p3 .542549 .371783 -.107551/.35);border-color:lab(44.1995% 17.0662 84.3373/.35)}:root[data-theme=light] .hit-region:hover{fill:rgba(141,95,0,.1);fill:color(display-p3 .542549 .371783 -.107551/.1);fill:lab(44.1995% 17.0662 84.3373/.1);stroke:var(--gold-dim)}:root[data-theme=light] .hit-region.sign-hit:hover{fill:rgba(141,95,0,.07);fill:color(display-p3 .542549 .371783 -.107551/.07);fill:lab(44.1995% 17.0662 84.3373/.07)}:root[data-theme=light] .pan-btn{background:var(--surface)}:root[data-theme=light] .pan-btn:hover{background:var(--surface-2)}:root[data-theme=light] #fs-bottom-bar{background:#f7f5f1;background:color(display-p3 .967616 .959866 .945308);background:lab(96.5376% .34079 2.2589);border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] #fs-bottom-bar [data-column=left],:root[data-theme=light] #fs-bottom-bar [data-column=right]{background:#f1eeea;background:color(display-p3 .941472 .933762 .919279);background:lab(94.2176% .341028 2.25905)}:root[data-theme=light] #fs-bottom-bar [data-column=left]{border-right-color:#caced4;border-right-color:color(display-p3 .796183 .806346 .830691);border-right-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] #fs-bottom-bar [data-column=right]{border-left-color:#caced4;border-left-color:color(display-p3 .796183 .806346 .830691);border-left-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] #fs-bottom-bar [data-column]>*+*{border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}@media (max-width:480px){body,#app{padding:0}#pan-zoom-controls{flex-wrap:wrap;gap:5px}.pan-btn{background:color-mix(in oklab, var(--surface-2) 72%, transparent);-webkit-backdrop-filter:blur(6px);width:32px;min-width:32px;height:32px;min-height:32px;font-size:15px}.pan-btn.reset{width:32px;padding:0;font-size:0}.pan-btn.reset:before{content:"⟲";font-size:15px}#date-controls,.controls,.control-row{flex-wrap:wrap;gap:8px}#fs-bottom-bar{flex-wrap:wrap}#fs-bottom-bar [data-column]{border:0;flex:100%}}.param-controls{background:var(--surface);border-top:1px solid var(--border);flex-shrink:0;padding:6px 12px}.param-controls-grid{flex-wrap:wrap;align-items:center;gap:6px 10px;display:flex}.param-group{flex-direction:row;align-items:center;gap:6px;display:flex}.param-group label{text-transform:uppercase;color:var(--text-secondary);letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:700}.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);color-scheme:inherit;border-radius:var(--radius-sm);width:120px;height:24px;padding:3px 6px;font-family:inherit;font-size:11px}@media (prefers-reduced-motion:no-preference){.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{transition:border-color .15s}}.param-group input:focus{border-color:var(--gold-dim);outline:none}.loc-searching{border-color:var(--gold-dim)!important}@media (prefers-reduced-motion:no-preference){.loc-searching{animation:1s ease-in-out infinite alternate loc-pulse}}@keyframes loc-pulse{0%{border-color:var(--gold-dim)}to{border-color:rgba(204,156,66,.55);border-color:color(display-p3 .76996 .617341 .321369/.55);border-color:lab(67.5798% 11.9379 52.333/.55)}}.param-group-loc{flex:1;position:relative}.param-group-loc input{width:100%}.loc-suggestions{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius-sm);z-index:100;max-height:200px;margin-top:4px;position:absolute;top:100%;left:0;right:0;overflow-y:auto;box-shadow:0 4px 12px rgba(0,0,0,.35);box-shadow:0 4px 12px color(display-p3 0 0 0/.35);box-shadow:0 4px 12px lab(0% 0 0/.35)}.loc-item{color:var(--text);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid var(--border);padding:8px 10px;font-size:12px;overflow:hidden}.loc-item:last-child{border-bottom:none}@media (prefers-reduced-motion:no-preference){.loc-item{transition:background .1s,color .1s}}.loc-item:hover,.loc-item--active{background:var(--gold-subtle);color:var(--gold)}.loc-status{color:var(--text-secondary);letter-spacing:.01em;padding:8px 10px;font-size:11px;font-style:italic}.loc-status-error{color:#d76a5a;color:color(display-p3 .788241 .439621 .373983);color:lab(58.1265% 42.6447 29.9439);font-style:normal;font-weight:600}.param-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.param-cost-hint{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;font-size:10px}.param-btn-icon{border:1px solid var(--border-strong);color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;background:0 0;justify-content:center;align-items:center;width:24px;height:24px;display:flex}@media (prefers-reduced-motion:no-preference){.param-btn-icon{transition:background .15s,border-color .15s,color .15s}}.param-btn-icon:hover{background:var(--surface-2);color:var(--text);border-color:var(--gold-dim)}.param-btn-primary{color:var(--gold);border-radius:var(--radius-sm);cursor:pointer;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);height:24px;padding:3px 10px;font-family:inherit;font-size:10px;font-weight:600}@media (prefers-reduced-motion:no-preference){.param-btn-primary{transition:background .15s,border-color .15s}}.param-btn-primary:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65)}.param-btn-primary:disabled{opacity:.5;cursor:not-allowed}.param-extra-toggle{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;cursor:pointer;align-items:center;gap:5px;font-size:10px;display:flex}.param-extra-toggle input[type=checkbox]{width:13px;height:13px;accent-color:var(--gold,oklch(72% .12 80));cursor:pointer}.param-extra-toggle input[type=checkbox]:disabled{cursor:not-allowed}.param-extra-toggle input[type=checkbox]:disabled~span{opacity:.5}:root[data-theme=light] .param-group input[type=date],:root[data-theme=light] .param-group input[type=time],:root[data-theme=light] .param-group input[type=text]{border-color:var(--border-strong);color:var(--text);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167638 1.12768)}:root[data-theme=light] .loc-suggestions{border-color:var(--border-strong);background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167638 1.12768)}:root[data-theme=light] .param-btn-primary{background:rgba(160,112,0,.12);background:color(display-p3 .615135 .441554 -.0204711/.12);background:lab(51.2092% 16.2654 78.3504/.12);border-color:rgba(160,112,0,.4);border-color:color(display-p3 .615135 .441554 -.0204711/.4);border-color:lab(51.2092% 16.2654 78.3504/.4)}:root[data-theme=light] .param-btn-primary:hover:not(:disabled){background:rgba(160,112,0,.22);background:color(display-p3 .615135 .441554 -.0204711/.22);background:lab(51.2092% 16.2654 78.3504/.22);border-color:rgba(160,112,0,.65);border-color:color(display-p3 .615135 .441554 -.0204711/.65);border-color:lab(51.2092% 16.2654 78.3504/.65)}.param-summary-bar{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:2px 0;margin-bottom:4px;padding:3px 4px 5px;font-size:10px;line-height:1.3;display:flex}.param-summary-bar[hidden]{display:none}.summary-name{color:var(--gold,#d6a54d);letter-spacing:.01em;padding-right:2px;font-size:12px;font-weight:700}@supports (color:color(display-p3 0 0 0)){.summary-name{color:var(--gold,color(display-p3 .808073 .654274 .358094))}}@supports (color:lab(0% 0 0)){.summary-name{color:var(--gold,lab(71.071% 11.7474 51.7651))}}.summary-datetime{font-variant-numeric:tabular-nums;color:var(--text-secondary);align-items:baseline;gap:4px;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-size:11px;display:inline-flex}.summary-time-sep{color:var(--border-strong);opacity:.7;font-family:inherit;font-size:9px}.summary-loc{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:200px;padding-left:2px;font-size:11px;font-style:italic;overflow:hidden}.summary-sep{background:var(--border-strong);opacity:.5;vertical-align:middle;flex-shrink:0;width:1px;height:11px;margin:0 7px;display:inline-block}
13
+ <style>:root{--bg:#010102;--surface:#030408;--surface-2:#080b11;--border:#13161d;--border-strong:#242933;--text:#e2e4e9;--text-secondary:#a1a5ab;--muted:#84868b;--gold:#cc9c42;--gold-dim:#7b6540;--gold-glow:rgba(204,156,66,.2);--gold-subtle:rgba(204,156,66,.1);--success:#1da871;--error:#c53443;--radius:10px;--radius-sm:6px;--radius-pill:99px;--oe-shadow-md:0 8px 40px rgba(0,0,0,.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px rgba(204,156,66,.15), 0 0 0 1px rgba(204,156,66,.2);--font-ui:var(--font-sans,system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif);--font-code:var(--font-mono,ui-monospace, "SFMono-Regular", "Cascadia Mono", Menlo, Consolas, monospace);--oe-page-bg:var(--color-background-primary,var(--bg));--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@supports (color:color(display-p3 0 0 0)){:root{--bg:color(display-p3 .00306656 .00431968 .00888397);--surface:color(display-p3 .013072 .016989 .0298495);--surface-2:color(display-p3 .0345774 .0431759 .0653236);--border:color(display-p3 .0763929 .0859556 .109705);--border-strong:color(display-p3 .144788 .159634 .196542);--text:color(display-p3 .889546 .895785 .910689);--text-secondary:color(display-p3 .635245 .644982 .668335);--muted:color(display-p3 .518127 .525635 .543633);--gold:color(display-p3 .76996 .617341 .321369);--gold-dim:color(display-p3 .469305 .400291 .270966);--gold-glow:color(display-p3 .76996 .617341 .321369/.2);--gold-subtle:color(display-p3 .76996 .617341 .321369/.1);--success:color(display-p3 .313719 .651039 .459895);--error:color(display-p3 .710345 .252818 .279408);--oe-shadow-md:0 8px 40px color(display-p3 0 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px color(display-p3 .76996 .617341 .321369/.15), 0 0 0 1px color(display-p3 .76996 .617341 .321369/.2)}}@supports (color:lab(0% 0 0)){:root{--bg:lab(.302122% .0219196 -.522962);--surface:lab(1.18159% .0276566 -1.4848);--surface-2:lab(3.00584% .0228807 -3.15676);--border:lab(7.15581% -.0557452 -5.11242);--border-strong:lab(16.3712% -.0768155 -7.37782);--text:lab(90.6942% -.142366 -2.26941);--text-secondary:lab(67.4758% -.215352 -3.76978);--muted:lab(55.8848% -.174642 -3.01716);--gold:lab(67.5798% 11.9379 52.333);--gold-dim:lab(44.394% 5.21132 24.4453);--gold-glow:lab(67.5798% 11.9379 52.333/.2);--gold-subtle:lab(67.5798% 11.9379 52.333/.1);--success:lab(61.2436% -46.7762 18.3644);--error:lab(45.8893% 57.7361 27.393);--oe-shadow-md:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px lab(67.5798% 11.9379 52.333/.15), 0 0 0 1px lab(67.5798% 11.9379 52.333/.2)}}:root[data-theme=light]{--bg:#f4f5f8;--surface:#fbfcfe;--surface-2:#eceef3;--border:#d5d7dd;--border-strong:#babec6;--text:#181b1f;--text-secondary:#4a4d54;--muted:#606369;--gold:#8a6000;--gold-dim:#967c4f;--gold-glow:rgba(141,95,0,.25);--gold-subtle:rgba(141,95,0,.07);--success:#007145;--error:#b1002b;--oe-shadow-md:0 4px 24px rgba(0,0,0,.12), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 16px rgba(141,95,0,.18), 0 0 0 1px rgba(141,95,0,.22);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light]{--bg:color(display-p3 .956515 .960735 .970805);--surface:color(display-p3 .98376 .986943 .994535);--surface-2:color(display-p3 .928401 .934691 .949715);--border:color(display-p3 .836244 .844458 .864107);--border-strong:color(display-p3 .731542 .743532 .772301);--text:color(display-p3 .096883 .103987 .12134);--text-secondary:color(display-p3 .291758 .301882 .326359);--muted:color(display-p3 .379924 .388781 .410092);--gold:color(display-p3 .524671 .380491 .0387678);--gold-dim:color(display-p3 .572756 .489268 .332751);--gold-glow:color(display-p3 .542549 .371783 -.107551/.25);--gold-subtle:color(display-p3 .542549 .371783 -.107551/.07);--success:color(display-p3 -.0793084 .456092 .255685);--error:color(display-p3 .642198 .101724 .18242);--oe-shadow-md:0 4px 24px color(display-p3 0 0 0/.12), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 16px color(display-p3 .542549 .371783 -.107551/.18), 0 0 0 1px color(display-p3 .542549 .371783 -.107551/.22)}}@supports (color:lab(0% 0 0)){:root[data-theme=light]{--bg:lab(96.503% -.0977516 -1.51461);--surface:lab(98.8273% -.0742674 -1.13657);--surface-2:lab(94.1743% -.142753 -2.26963);--border:lab(86.0453% -.183702 -3.02233);--border-strong:lab(76.7468% -.254452 -4.52154);--text:lab(9.4703% -.119448 -3.722);--text-secondary:lab(32.6639% -.205323 -4.4957);--muted:lab(41.9548% -.197023 -3.7598);--gold:lab(44.2758% 13.6718 62.9124);--gold-dim:lab(53.685% 6.10271 28.558);--gold-glow:lab(44.1995% 17.0662 84.3373/.25);--gold-subtle:lab(44.1995% 17.0662 84.3373/.07);--success:lab(41.7514% -55.3249 21.5039);--error:lab(37.5238% 64.2774 32.6097);--oe-shadow-md:0 4px 24px lab(0% 0 0/.12), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 16px lab(44.1995% 17.0662 84.3373/.18), 0 0 0 1px lab(44.1995% 17.0662 84.3373/.22)}}:root{--safe-top:0px;--safe-right:0px;--safe-bottom:0px;--safe-left:0px;--oe-host-h:var(--host-height,var(--host-max-height,640px));--oe-chart-max:clamp(260px, calc(var(--oe-host-h) * .72), 560px);--oe-chart-max-lg:clamp(280px, calc(var(--oe-host-h) * .8), 720px);--oe-drawer-max:clamp(160px, calc(var(--oe-host-h) * .4), 360px);--oe-scroll-max:clamp(240px, calc(var(--oe-host-h) * .7), 560px)}html,body{font-family:var(--font-ui)}body{background-color:var(--oe-page-bg)}.oe-pannable{touch-action:pan-y}body.is-fullscreen .oe-pannable{touch-action:none}.pan-zoom-controls [hidden],.pan-btn[hidden]{display:none!important}.fs-hint-banner{top:calc(12px + var(--safe-top));z-index:9999;border-radius:var(--radius-pill);border:1px solid color-mix(in oklab, var(--gold) 35%, transparent);background:color-mix(in oklab, var(--surface-2) 92%, transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);max-width:calc(100% - 32px);color:var(--text);font:600 11px/1.4 var(--font-ui);letter-spacing:.04em;white-space:nowrap;text-overflow:ellipsis;pointer-events:none;opacity:0;padding:6px 16px;transition:opacity .3s;position:fixed;left:50%;overflow:hidden;transform:translate(-50%)}.fs-hint-banner.visible{opacity:1}@media (prefers-reduced-motion:reduce){.fs-hint-banner{transition:none}}body.is-fullscreen{height:100vh;height:100dvh;overflow:hidden}body.is-fullscreen #app{width:100%;max-width:none;height:100%;min-height:0;padding:var(--safe-top) var(--safe-right) var(--safe-bottom) var(--safe-left);flex-direction:column;gap:0;margin:0;display:flex;overflow:hidden}body.is-fullscreen #app:has(>#fs-bottom-bar){padding-bottom:0}body.is-fullscreen #app .oe-stage{aspect-ratio:auto;width:100%;max-width:none;height:auto;min-height:0;max-height:none;box-shadow:none;background:0 0;border:0;border-radius:0;flex:auto;justify-content:center;align-items:center;margin:0;padding:16px 24px 8px;display:flex;overflow:hidden}body.is-fullscreen #app .oe-stage>svg{width:auto;max-width:100%;height:100%;max-height:100%}body.is-fullscreen #app .oe-stage--doc{width:100%;max-width:880px;padding:20px 24px calc(16px + var(--safe-bottom));flex-direction:column;justify-content:flex-start;align-items:stretch;margin:0 auto;display:flex;overflow-y:auto}body.is-fullscreen #app #loading-state{flex:1;height:auto;min-height:0}body.is-fullscreen #app .pan-zoom-controls{top:calc(54px + var(--safe-top));right:calc(12px + var(--safe-right));bottom:auto}body .oe-info-button{top:calc(12px + var(--safe-top));right:calc(12px + var(--safe-right))}#app #fs-bottom-bar{height:clamp(170px, calc(var(--oe-host-h) * .3), 280px);padding-bottom:var(--safe-bottom);border-top:1px solid var(--border);background:var(--surface);flex-shrink:0;grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(200px,260px) minmax(0,1fr) minmax(200px,260px);display:grid}:root[data-safe-bottom] #app #fs-bottom-bar{height:calc(clamp(170px, calc(var(--oe-host-h) * .3), 280px) + var(--safe-bottom));grid-template-columns:minmax(0,1fr) minmax(0,1fr)}:root[data-safe-bottom] #fs-bottom-bar [data-column=center]{display:none}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex-direction:column;gap:4px;min-height:0;padding:10px 14px 12px;display:flex;overflow-x:hidden;overflow-y:auto}#fs-bottom-bar [data-column=left]{border-right:1px solid var(--border)}#fs-bottom-bar [data-column=right]{border-left:1px solid var(--border)}#fs-bottom-bar [data-column=center]{pointer-events:none}#fs-bottom-bar [data-column]>*+*{border-top:1px solid var(--border);margin-top:4px;padding-top:8px}#fs-bottom-bar [class$=-action-bar],#fs-bottom-bar [class*=-action-bar\ ]{flex-direction:column;padding:8px 0 0}#fs-bottom-bar .action-btn{justify-content:center;width:100%}@media (max-width:640px){#app #fs-bottom-bar,:root[data-safe-bottom] #app #fs-bottom-bar{height:auto;max-height:42%;display:block;overflow-y:auto}#fs-bottom-bar [data-column=center]{display:none}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{border:0;min-height:auto;overflow:visible}#fs-bottom-bar [data-column=right]{border-top:1px solid var(--border)}body.is-fullscreen #app .oe-stage{padding:8px}}body.is-pip{overflow:hidden}body.is-pip #app{gap:6px;padding:6px 8px}body.is-pip .oe-pip-hide,body.is-pip #param-controls-container,body.is-pip #chart-status,body.is-pip .oe-info-button{display:none!important}body.is-pip #app .pan-zoom-controls{top:6px;right:6px}:root{--on-gold:#0d0802;--shadow:0 4px 20px rgba(0,0,0,.45);--shadow-gold:0 0 0 2px var(--gold-glow), 0 6px 24px rgba(0,0,0,.5);--planet-sun:#e9ab2b;--planet-moon:#abb8d2;--planet-mercury:#37b880;--planet-venus:#de73bd;--planet-mars:#dd4d57;--planet-jupiter:#9886ed;--planet-saturn:#589194;--planet-uranus:#24c1c9;--planet-neptune:#2f8adc;--planet-pluto:#a97cc9;--aspect-conjunction:#ffa94d;--aspect-opposition:#ff6b8a;--aspect-trine:#ffd166;--aspect-square:#ff6b8a;--aspect-sextile:#38bdf8;--color-fire:#ec6d3d;--color-earth:#779e4b;--color-air:#17a9cb;--color-water:#8678c9;--color-cardinal:#d9525a;--color-fixed:#cc9c42;--color-mutable:#1da871}@supports (color:color(display-p3 0 0 0)){:root{--on-gold:color(display-p3 .0492866 .0328715 .0111297);--shadow:0 4px 20px color(display-p3 0 0 0/.45);--shadow-gold:0 0 0 2px var(--gold-glow), 0 6px 24px color(display-p3 0 0 0/.5);--planet-sun:color(display-p3 .877131 .680603 .28424);--planet-moon:color(display-p3 .679472 .718322 .813586);--planet-mercury:color(display-p3 .376022 .713332 .518194);--planet-venus:color(display-p3 .815343 .471375 .72873);--planet-mars:color(display-p3 .803557 .340931 .357065);--planet-jupiter:color(display-p3 .584642 .526796 .904819);--planet-saturn:color(display-p3 .398313 .564522 .578019);--planet-uranus:color(display-p3 .364235 .746318 .77845);--planet-neptune:color(display-p3 .290256 .532943 .838196);--planet-pluto:color(display-p3 .635092 .494812 .769187);--color-fire:color(display-p3 .864679 .454605 .289251);--color-earth:color(display-p3 .496575 .613452 .334223);--color-air:color(display-p3 .308318 .651825 .781829);--color-water:color(display-p3 .515326 .47381 .767317);--color-cardinal:color(display-p3 .790049 .355864 .367143);--color-fixed:color(display-p3 .76996 .617341 .321369);--color-mutable:color(display-p3 .313719 .651039 .459895)}}@supports (color:lab(0% 0 0)){:root{--on-gold:lab(2.4863% .883393 2.81807);--shadow:0 4px 20px lab(0% 0 0/.45);--shadow-gold:0 0 0 2px var(--gold-glow), 0 6px 24px lab(0% 0 0/.5);--planet-sun:lab(74.5017% 15.8158 68.8514);--planet-moon:lab(74.277% -.405699 -14.8565);--planet-mercury:lab(67.0478% -46.5952 18.3141);--planet-venus:lab(62.9358% 49.4917 -19.8999);--planet-mars:lab(54.0218% 57.6814 26.7913);--planet-jupiter:lab(60.9189% 25.1968 -50.641);--planet-saturn:lab(56.5081% -18.8848 -7.81488);--planet-uranus:lab(71.0008% -37.5682 -15.4301);--planet-neptune:lab(55.2086% -4.94954 -50.4575);--planet-pluto:lab(58.8593% 28.4679 -33.3653);--color-fire:lab(61.5466% 48.3829 50.2676);--color-earth:lab(60.647% -24.5491 38.2386);--color-air:lab(63.473% -27.315 -28.2614);--color-water:lab(54.4132% 19.4196 -40.6625);--color-cardinal:lab(54.1324% 54.4527 25.0799);--color-fixed:lab(67.5798% 11.9379 52.333);--color-mutable:lab(61.2436% -46.7762 18.3644)}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;height:100%}body{background:var(--oe-page-bg);color:var(--text);font-family:var(--font-ui);font-size:13px;line-height:1.5;overflow-x:hidden}#app{flex-direction:column;display:flex;position:relative}#loading-state{color:var(--text-secondary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:14px;display:flex}#loading-state[hidden]{display:none}#loading-state p{letter-spacing:.05em;text-transform:uppercase;font-size:12px}.spinner{border:2px solid var(--border-strong);border-top-color:var(--gold);border-radius:50%;width:32px;height:32px;animation:1.1s cubic-bezier(.4,0,.6,1) infinite spin}@keyframes spin{to{transform:rotate(360deg)}}#chart-container{width:min(100%, var(--oe-chart-max));aspect-ratio:1;z-index:0;justify-content:center;align-items:center;margin-left:auto;margin-right:auto;padding:8px;display:flex;position:relative;overflow:hidden}#chart-container[hidden]{display:none}#chart-container svg{-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;height:100%;display:block;overflow:hidden}.info-panel,.overview-tbl td{-webkit-user-select:text;-moz-user-select:text;user-select:text}#chart-info{background:var(--surface);border-top:1px solid var(--border);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:5px;padding:6px 12px;display:flex}#chart-info[hidden]{display:none!important}.info-chip{color:var(--text-secondary);border-radius:var(--radius-pill);white-space:nowrap;letter-spacing:.03em;background:#13161c;background:color(display-p3 .0777944 .086043 .106387);background:lab(7.16788% -.0827834 -4.39059);align-items:center;gap:3px;padding:2px 8px;font-size:10px;font-weight:500;line-height:1.6;display:inline-flex}.info-chip.sect{color:var(--gold);background:var(--gold-subtle);font-weight:600}.hit-region{cursor:pointer;fill:transparent;stroke:transparent;transition:fill .15s,stroke .15s,opacity .2s}.hit-region:hover{fill:var(--gold-subtle);stroke:var(--gold-dim);stroke-width:1px;stroke-opacity:.5}.hit-region.planet-hit{rx:12px;ry:12px}.hit-region.planet-hit:not(.dim):hover{filter:drop-shadow(0 0 6px var(--gold-glow))}.hit-region:focus-visible{outline:2px solid var(--gold);outline-offset:2px;fill:var(--gold-subtle)}.hit-region.dim{opacity:.12}.hit-region.aspect-hit{stroke-width:13px}.hit-region.sign-hit:hover{fill:rgba(204,156,66,.06);fill:color(display-p3 .76996 .617341 .321369/.06);fill:lab(67.5798% 11.9379 52.333/.06);stroke:none}.info-panel{background:var(--surface-2);border:1px solid var(--border-strong);width:100%;box-shadow:0 8px 40px rgba(0,0,0,.6), 0 0 0 1px var(--border-strong);opacity:0;pointer-events:none;z-index:2;border-radius:10px;max-height:0;padding:0 16px;transition:max-height .26s cubic-bezier(.16,1,.3,1),opacity .2s,padding .2s;position:relative;overflow:hidden}@supports (color:color(display-p3 0 0 0)){.info-panel{box-shadow:0 8px 40px color(display-p3 0 0 0/.6), 0 0 0 1px var(--border-strong)}}@supports (color:lab(0% 0 0)){.info-panel{box-shadow:0 8px 40px lab(0% 0 0/.6), 0 0 0 1px var(--border-strong)}}.info-panel:before{content:"";background:var(--border-strong);border-radius:2px;flex-shrink:0;width:36px;height:4px;margin:0 auto 10px;display:block}.info-panel.visible{opacity:1;pointer-events:all;max-height:520px;padding:14px 16px 12px}.info-header{align-items:flex-start;gap:10px;margin-bottom:12px;display:flex}.info-glyph{text-align:center;flex-shrink:0;width:34px;font-size:28px;line-height:1}.info-title{color:var(--text);flex:1;font-size:13px;font-weight:700}.info-name-row{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.info-pos{color:var(--text-secondary);font-size:11px;font-weight:400;font-family:var(--font-code);margin-top:2px}.retro{color:var(--error);font-style:normal}.info-close{cursor:pointer;color:var(--text-secondary);background:0 0;border:none;border-radius:4px;flex-shrink:0;padding:2px 4px;font-size:15px;line-height:1;transition:color .12s}.info-close:hover{color:var(--text)}.aspects-title{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);margin-bottom:6px;font-size:10px;font-weight:700}.aspects-list{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex-direction:column;gap:4px;max-height:140px;display:flex;overflow-y:auto}.aspects-list::-webkit-scrollbar{width:3px}.aspects-list::-webkit-scrollbar-track{background:0 0}.aspects-list::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:3px}.aspect-row{align-items:center;gap:7px;padding:3px 0;font-size:12px;display:flex}.aspect-dot{border-radius:50%;flex-shrink:0;width:7px;height:7px}.aspect-sym{text-align:center;flex-shrink:0;width:16px;font-size:14px}.aspect-other{color:var(--text);flex:1}.aspect-meta{color:var(--text-secondary);white-space:nowrap;font-size:11px;font-family:var(--font-code)}.no-aspects{color:var(--text-secondary);padding:4px 0;font-size:11px;font-style:italic}.info-hint{color:var(--gold-dim);letter-spacing:.03em;text-align:center;margin-top:10px;font-size:10px}.ask-claude-btn{border-radius:var(--radius-sm);width:100%;color:var(--gold);font-family:var(--font-ui);letter-spacing:.04em;cursor:pointer;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);justify-content:center;align-items:center;gap:6px;margin-top:12px;padding:9px 16px;font-size:12px;font-weight:600;transition:background .16s,border-color .16s,box-shadow .16s;display:flex}.ask-claude-btn:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65);box-shadow:0 0 0 3px rgba(204,156,66,.12);box-shadow:0 0 0 3px color(display-p3 .76996 .617341 .321369/.12);box-shadow:0 0 0 3px lab(67.5798% 11.9379 52.333/.12)}.ask-claude-btn:disabled{opacity:.5;cursor:not-allowed}.ask-claude-btn.sending{color:var(--gold-dim);opacity:.8;cursor:wait;pointer-events:none;background:rgba(204,156,66,.08);background:color(display-p3 .76996 .617341 .321369/.08);background:lab(67.5798% 11.9379 52.333/.08);border-color:rgba(204,156,66,.25);border-color:color(display-p3 .76996 .617341 .321369/.25);border-color:lab(67.5798% 11.9379 52.333/.25)}.ask-claude-btn.sent{color:var(--success);pointer-events:none;background:rgba(29,168,113,.15);background:color(display-p3 .313719 .651039 .459895/.15);background:lab(61.2436% -46.7762 18.3644/.15);border-color:rgba(29,168,113,.5);border-color:color(display-p3 .313719 .651039 .459895/.5);border-color:lab(61.2436% -46.7762 18.3644/.5)}.ask-claude-btn.error{color:var(--error);background:rgba(197,52,67,.15);background:color(display-p3 .710345 .252818 .279408/.15);background:lab(45.8893% 57.7361 27.393/.15);border-color:rgba(197,52,67,.5);border-color:color(display-p3 .710345 .252818 .279408/.5);border-color:lab(45.8893% 57.7361 27.393/.5)}.chart-status{min-height:0;max-height:0;color:var(--gold);letter-spacing:.04em;opacity:0;background:var(--surface);border-top:1px solid var(--border);padding:0 14px;font-size:11px;font-weight:500;transition:max-height .24s cubic-bezier(.16,1,.3,1),padding .24s cubic-bezier(.16,1,.3,1),opacity .24s;overflow:hidden}.chart-status[data-active]{opacity:1;max-height:32px;padding:6px 14px}.aspect-pair-row{justify-content:space-between;align-items:center;gap:8px;padding:6px 0;display:flex}.aspect-pair-planet{flex:1;align-items:center;gap:6px;display:flex}.aspect-pair-glyph{text-align:center;flex-shrink:0;width:24px;font-size:18px;line-height:1}.aspect-pair-name{color:var(--text);font-size:12px;font-weight:600}.aspect-pair-pos{color:var(--text-secondary);font-size:10px;font-family:var(--font-code);margin-top:1px}.aspect-pair-sym{text-align:center;flex-shrink:0;width:24px;font-size:20px}.pattern-ask-claude-btn{border-radius:var(--radius-pill);color:var(--gold);font-family:var(--font-ui);letter-spacing:.04em;cursor:pointer;background:rgba(204,156,66,.1);background:color(display-p3 .76996 .617341 .321369/.1);background:lab(67.5798% 11.9379 52.333/.1);border:1px solid rgba(204,156,66,.35);border:1px solid color(display-p3 .76996 .617341 .321369/.35);border:1px solid lab(67.5798% 11.9379 52.333/.35);flex-shrink:0;margin-left:6px;padding:3px 10px;font-size:10px;font-weight:600;transition:background .15s,border-color .15s,box-shadow .15s}.pattern-ask-claude-btn:hover{background:rgba(204,156,66,.18);background:color(display-p3 .76996 .617341 .321369/.18);background:lab(67.5798% 11.9379 52.333/.18);border-color:rgba(204,156,66,.6);border-color:color(display-p3 .76996 .617341 .321369/.6);border-color:lab(67.5798% 11.9379 52.333/.6);box-shadow:0 0 0 2px rgba(204,156,66,.1);box-shadow:0 0 0 2px color(display-p3 .76996 .617341 .321369/.1);box-shadow:0 0 0 2px lab(67.5798% 11.9379 52.333/.1)}.pattern-ask-claude-btn:disabled{opacity:.45;cursor:default}.dignity-badge{border-radius:var(--radius-pill);white-space:nowrap;align-items:center;gap:3px;padding:1px 7px;font-size:10px;font-weight:600;line-height:1.6;display:inline-flex}.dignity-domicile{color:#4bc98f;color:color(display-p3 .438181 .776546 .577613);color:lab(72.8515% -46.4433 18.272);background:rgba(29,168,113,.15);background:color(display-p3 .313719 .651039 .459895/.15);background:lab(61.2436% -46.7762 18.3644/.15);border:1px solid rgba(29,168,113,.4);border:1px solid color(display-p3 .313719 .651039 .459895/.4);border:1px solid lab(61.2436% -46.7762 18.3644/.4)}.dignity-exaltation{color:#e6b55d;color:color(display-p3 .872302 .716587 .419329);color:lab(76.888% 11.458 50.9953);background:rgba(204,156,66,.15);background:color(display-p3 .76996 .617341 .321369/.15);background:lab(67.5798% 11.9379 52.333/.15);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4)}.dignity-detriment{color:#e17174;color:color(display-p3 .827266 .46738 .465289);color:lab(61.4259% 44.7499 19.9857);background:rgba(197,52,67,.12);background:color(display-p3 .710345 .252818 .279408/.12);background:lab(45.8893% 57.7361 27.393/.12);border:1px solid rgba(197,52,67,.35);border:1px solid color(display-p3 .710345 .252818 .279408/.35);border:1px solid lab(45.8893% 57.7361 27.393/.35)}.dignity-fall{color:#7a869f;color:color(display-p3 .488637 .525017 .615022);color:lab(55.7075% -.240624 -14.7889);background:rgba(88,99,123,.12);background:color(display-p3 .353624 .387759 .473149/.12);background:lab(41.7762% -.0450611 -14.7162/.12);border:1px solid rgba(88,99,123,.3);border:1px solid color(display-p3 .353624 .387759 .473149/.3);border:1px solid lab(41.7762% -.0450611 -14.7162/.3)}#tally-panel{border-top:1px solid var(--border);background:var(--surface);flex-shrink:0;align-items:center;gap:8px;padding:5px 12px;display:flex}.tally-section{flex-direction:column;gap:3px;display:flex}.tally-row{align-items:center;gap:6px;display:flex}.tally-item{white-space:nowrap;letter-spacing:.02em;border-radius:4px;padding:1px 6px;font-size:10px;font-weight:600}.tally-item.fire{color:var(--color-fire);background:rgba(236,109,61,.12);background:color(display-p3 .864679 .454605 .289251/.12);background:lab(61.5466% 48.3829 50.2676/.12)}.tally-item.earth{color:var(--color-earth);background:rgba(119,158,75,.12);background:color(display-p3 .496575 .613452 .334223/.12);background:lab(60.647% -24.5491 38.2386/.12)}.tally-item.air{color:var(--color-air);background:rgba(23,169,203,.12);background:color(display-p3 .308318 .651825 .781829/.12);background:lab(63.473% -27.315 -28.2614/.12)}.tally-item.water{color:var(--color-water);background:rgba(134,120,201,.12);background:color(display-p3 .515326 .47381 .767317/.12);background:lab(54.4132% 19.4196 -40.6625/.12)}.tally-item.cardinal{color:var(--color-cardinal);background:rgba(217,82,90,.1);background:color(display-p3 .790049 .355864 .367143/.1);background:lab(54.1324% 54.4527 25.0799/.1)}.tally-item.fixed{color:var(--color-fixed);background:rgba(204,156,66,.1);background:color(display-p3 .76996 .617341 .321369/.1);background:lab(67.5798% 11.9379 52.333/.1)}.tally-item.mutable{color:var(--color-mutable);background:rgba(29,168,113,.1);background:color(display-p3 .313719 .651039 .459895/.1);background:lab(61.2436% -46.7762 18.3644/.1)}.tally-bar-row{padding:2px 0}.tally-bar{background:var(--border);border-radius:2px;width:96px;height:3px;display:flex;overflow:hidden}.tally-bar-fill{height:100%;transition:width .5s cubic-bezier(.16,1,.3,1)}.tally-bar-fill.fire{background:var(--color-fire)}.tally-bar-fill.earth{background:var(--color-earth)}.tally-bar-fill.air{background:var(--color-air)}.tally-bar-fill.water{background:var(--color-water)}.tally-divider{background:var(--border-strong);flex-shrink:0;width:1px;height:26px}.tally-item[data-interactive]{cursor:pointer;transition:opacity .14s,box-shadow .14s,background .14s}.tally-item[data-interactive]:hover,.tally-item[data-interactive].active{opacity:1;box-shadow:0 0 0 2px}.tally-planets{flex-wrap:wrap;gap:3px;padding:2px 0 0;display:flex}.tally-planet-chip{color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:rgba(255,255,255,.05);background:color(display-p3 1 1 1/.05);background:lab(100% 0 0/.05);border-radius:3px;padding:0 4px;font-size:9px;font-weight:500;transition:color .12s,background .12s}.tally-planet-chip:hover{color:var(--gold);background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12)}#dignity-panel{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:6px;padding:4px 12px;display:flex}.dignity-chip{cursor:pointer;white-space:nowrap;border-radius:4px;align-items:center;gap:3px;padding:1px 7px;font-size:10px;font-weight:600;transition:opacity .14s,box-shadow .14s;display:inline-flex}.dignity-chip:hover{opacity:1;box-shadow:0 0 0 2px}.dignity-chip.active{box-shadow:0 0 0 2px}#overview-table{border-top:1px solid var(--border);background:var(--surface);flex-shrink:0}.overview-header{align-items:center;display:flex}.overview-header .overview-toggle{flex:auto;width:auto}.overview-copy{border:1px solid var(--border);color:var(--text-secondary);font-family:var(--font-ui);text-transform:uppercase;letter-spacing:.08em;border-radius:var(--radius-sm,6px);cursor:pointer;background:0 0;flex-shrink:0;margin-right:8px;padding:3px 10px;font-size:10px;font-weight:700;transition:color .14s,border-color .14s}.overview-copy:hover,.overview-copy.copied{color:var(--gold);border-color:var(--gold)}.overview-toggle{width:100%;color:var(--text-secondary);font-family:var(--font-ui);text-transform:uppercase;letter-spacing:.1em;cursor:pointer;background:0 0;border:none;align-items:center;gap:6px;padding:6px 12px;font-size:10px;font-weight:700;transition:color .14s;display:flex}.overview-toggle:hover{color:var(--gold)}.overview-chevron{font-size:8px;transition:transform .2s}.overview-toggle[aria-expanded=true] .overview-chevron{transform:rotate(90deg)}.overview-body{grid-template-rows:0fr;transition:grid-template-rows .28s cubic-bezier(.16,1,.3,1);display:grid;overflow:hidden}.overview-body>*{min-height:0}.overview-body.open{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;grid-template-rows:1fr;max-height:300px;overflow-x:hidden;overflow-y:auto}.overview-tbl{border-collapse:collapse;width:100%;font-size:11px}.overview-tbl th{text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary);text-align:left;border-bottom:1px solid var(--border);background:var(--surface);padding:3px 8px;font-size:9px;font-weight:700;position:-webkit-sticky;position:sticky;top:0}.overview-tbl td{color:var(--text);border-bottom:1px solid rgba(255,255,255,.04);border-bottom:1px solid color(display-p3 1 1 1/.04);border-bottom:1px solid lab(100% 0 0/.04);padding:4px 8px}.overview-tbl tr{cursor:pointer;transition:background .12s}.overview-tbl tbody tr:hover{background:rgba(204,156,66,.06);background:color(display-p3 .76996 .617341 .321369/.06);background:lab(67.5798% 11.9379 52.333/.06)}.overview-tbl tbody tr.active-row{background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12)}.overview-tbl tbody tr.extended-row{opacity:.72}.overview-tbl tbody tr.extended-row td:first-child:after{content:" ·";color:var(--text-secondary);font-size:8px}.overview-tbl .planet-sym{text-align:center;width:20px;font-family:serif;font-size:14px;display:inline-block}.overview-tbl .retro-mark{color:#e05252;margin-left:2px;font-size:9px}#patterns-strip{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:5px;padding:5px 12px;display:flex}.patterns-label{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);white-space:nowrap;margin-right:2px;font-size:9px;font-weight:700}.pattern-pill{border-radius:var(--radius-pill);font-size:10px;font-weight:600;font-family:var(--font-ui);cursor:pointer;white-space:nowrap;opacity:.75;background:0 0;border:1px solid;align-items:center;gap:4px;padding:5px 9px;transition:opacity .14s,box-shadow .14s;display:inline-flex}.pattern-pill:hover{opacity:1;box-shadow:0 0 0 2px currentColor / .2}.pattern-pill.active{color:#010203;color:color(display-p3 .00515318 .00655345 .0110262);color:lab(.455387% .00626594 -.517511);opacity:1;border-color:transparent;box-shadow:0 2px 10px rgba(0,0,0,.3);box-shadow:0 2px 10px color(display-p3 0 0 0/.3);box-shadow:0 2px 10px lab(0% 0 0/.3)}#aspect-filter{border-top:1px solid var(--border);scrollbar-width:none;flex-shrink:0;align-items:center;gap:4px;padding:4px 12px;display:flex;overflow-x:auto}#aspect-filter::-webkit-scrollbar{display:none}#aspect-filter[hidden]{display:none!important}#controls-panel{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:6px;padding:8px 12px;display:flex}.controls-label{color:var(--text-secondary);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;margin-right:2px;font-size:10px;font-weight:700}.control-btn{border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--text-secondary);cursor:pointer;font-size:11px;font-family:var(--font-ui);white-space:nowrap;background:0 0;padding:6px 10px;transition:background .12s,color .12s,border-color .12s}.control-btn:hover{background:var(--gold-subtle);color:var(--gold);border-color:rgba(204,156,66,.4);border-color:color(display-p3 .76996 .617341 .321369/.4);border-color:lab(67.5798% 11.9379 52.333/.4)}.control-btn.active{color:var(--gold);background:rgba(204,156,66,.18);background:color(display-p3 .76996 .617341 .321369/.18);background:lab(67.5798% 11.9379 52.333/.18);border-color:rgba(204,156,66,.6);border-color:color(display-p3 .76996 .617341 .321369/.6);border-color:lab(67.5798% 11.9379 52.333/.6);font-weight:600}.controls-divider{background:var(--border-strong);flex-shrink:0;width:1px;height:18px;margin:0 4px}.error-state{text-align:center;color:var(--text-secondary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px;display:flex}.error-state .error-icon{opacity:.6;margin-bottom:4px;font-size:28px}.error-retry-btn{border:1px solid var(--border,rgba(128,128,160,.3));color:var(--gold,var(--accent-warm,var(--text,inherit)));font:inherit;letter-spacing:.02em;cursor:pointer;background:0 0;border-radius:999px;margin-top:4px;padding:7px 20px;font-size:11px;font-weight:600;transition:background .18s,border-color .18s}.error-retry-btn:hover{background:rgba(128,128,160,.12)}.info-drawer{background:var(--surface-2,#080b11);border:1px solid var(--border-strong,#242933);width:100%;box-shadow:0 8px 40px rgba(0,0,0,.65), 0 0 0 1px var(--border-strong,#242933);opacity:0;pointer-events:none;border-radius:10px;max-height:0;padding:14px 16px 12px;transition:max-height .26s cubic-bezier(.16,1,.3,1),opacity .2s,padding .2s;position:relative;overflow:hidden}@supports (color:color(display-p3 0 0 0)){.info-drawer{background:var(--surface-2,color(display-p3 .0345774 .0431759 .0653236));border:1px solid var(--border-strong,color(display-p3 .144788 .159634 .196542));box-shadow:0 8px 40px color(display-p3 0 0 0/.65), 0 0 0 1px var(--border-strong,color(display-p3 .144788 .159634 .196542))}}@supports (color:lab(0% 0 0)){.info-drawer{background:var(--surface-2,lab(3.00584% .0228807 -3.15676));border:1px solid var(--border-strong,lab(16.3712% -.0768155 -7.37782));box-shadow:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong,lab(16.3712% -.0768155 -7.37782))}}.info-drawer:before{content:"";background:var(--border-strong,#242933);border-radius:2px;flex-shrink:0;width:36px;height:4px;margin:0 auto 10px;display:block}@supports (color:color(display-p3 0 0 0)){.info-drawer:before{background:var(--border-strong,color(display-p3 .144788 .159634 .196542))}}@supports (color:lab(0% 0 0)){.info-drawer:before{background:var(--border-strong,lab(16.3712% -.0768155 -7.37782))}}.info-drawer.open{opacity:1;pointer-events:all;max-height:500px;padding:14px 16px 12px}.hd-action-bar{z-index:2;background:var(--bg);flex-wrap:wrap;gap:8px;padding:10px 16px 6px;display:flex;position:relative}.action-btn{border:1px solid var(--gold-glow);background:var(--gold-subtle);color:var(--gold);letter-spacing:.02em;cursor:pointer;white-space:nowrap;border-radius:8px;align-items:center;gap:6px;padding:7px 16px;font-size:12px;font-weight:600;transition:background .2s,border-color .2s;display:inline-flex}.action-btn:hover{background:rgba(204,156,66,.15);background:color(display-p3 .76996 .617341 .321369/.15);background:lab(67.5798% 11.9379 52.333/.15);border-color:rgba(204,156,66,.45);border-color:color(display-p3 .76996 .617341 .321369/.45);border-color:lab(67.5798% 11.9379 52.333/.45)}.action-btn:active{background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2)}.action-btn--primary{background:rgba(204,156,66,.18);background:color(display-p3 .76996 .617341 .321369/.18);background:lab(67.5798% 11.9379 52.333/.18);border-color:rgba(204,156,66,.5);border-color:color(display-p3 .76996 .617341 .321369/.5);border-color:lab(67.5798% 11.9379 52.333/.5)}.action-btn--primary:hover{background:rgba(204,156,66,.25);background:color(display-p3 .76996 .617341 .321369/.25);background:lab(67.5798% 11.9379 52.333/.25);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65)}.pan-zoom-controls{z-index:800;flex-direction:column;gap:6px;display:flex;position:absolute;bottom:12px;right:12px}.pan-zoom-controls[hidden]{display:none!important}@media (min-width:680px){body:not(.is-fullscreen):not(.is-pip) #chart-container{overflow:visible}body:not(.is-fullscreen):not(.is-pip) #chart-container>.pan-zoom-controls{right:-60px}}.pan-btn{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);border-radius:var(--radius-sm);cursor:pointer;width:40px;height:40px;box-shadow:var(--oe-shadow-md);justify-content:center;align-items:center;font-family:inherit;font-size:18px;transition:all .15s;display:flex}.pan-btn.reset{width:auto;padding:0 10px;font-size:11px;font-weight:500}.pan-btn:hover{background:var(--surface);border-color:var(--gold-dim);color:var(--gold)}.pan-btn:active{transform:scale(.95)}.pan-btn--fullscreen{width:40px;height:40px}body.is-fullscreen #chart-status{display:none}.cancel-toast{background:var(--surface-2,#1e1e2e);border:1px solid var(--border-strong,#444);color:var(--text-secondary);border-radius:var(--radius-sm,6px);opacity:0;z-index:9999;pointer-events:none;box-shadow:var(--oe-shadow-md,0 4px 12px rgba(0,0,0,.3));padding:8px 16px;font-family:inherit;font-size:12px;transition:opacity .3s,transform .3s;position:fixed;bottom:20px;left:50%;transform:translate(-50%)translateY(20px)}.cancel-toast.visible{opacity:1;transform:translate(-50%)translateY(0)}.oe-loader{width:64px;height:64px;stroke:var(--gold);stroke-width:2px;fill:none;stroke-dasharray:200;stroke-dashoffset:200px;filter:drop-shadow(0 0 4px var(--gold-glow));animation:2.5s cubic-bezier(.16,1,.3,1) infinite oe-draw}@keyframes oe-draw{0%{stroke-dashoffset:200px;stroke-opacity:.1}50%{stroke-dashoffset:0;stroke-opacity:1;filter:drop-shadow(0 0 8px var(--gold))}to{stroke-dashoffset:-200px;stroke-opacity:.1}}#aspect-filter{padding:0}.asp-panel{flex-wrap:wrap;align-items:center;gap:6px 16px;padding:6px 0;display:flex}.asp-section{align-items:center;gap:6px;display:flex}.asp-section-label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);white-space:nowrap;font-size:10px;font-weight:700}.aspect-toggle-btn,.orb-preset-btn{border:1.5px solid var(--border-strong);color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border-radius:20px;padding:4px 10px;font-size:11px;font-weight:600;transition:background .15s,color .15s,border-color .15s}.aspect-toggle-btn:hover,.orb-preset-btn:hover{border-color:var(--gold-dim);color:var(--text)}.aspect-toggle-btn.active{background:var(--gold);border-color:var(--gold);color:var(--on-gold)}.orb-preset-btn.active{background:var(--surface-2);border-color:var(--gold);color:var(--gold)}.glyph-legend{margin-top:8px;font-size:11px}.glyph-legend>summary{cursor:pointer;border:1px solid var(--border);color:var(--text-secondary);-webkit-user-select:none;-moz-user-select:none;user-select:none;border-radius:999px;align-items:center;gap:5px;padding:4px 10px;list-style:none;display:inline-flex}.glyph-legend>summary::-webkit-details-marker{display:none}.glyph-legend>summary:hover{color:var(--text);border-color:var(--gold-dim)}.glyph-legend[open]>summary{color:var(--text)}.glyph-legend .legend-spark{color:var(--gold)}.legend-body{flex-direction:column;gap:10px;padding:10px 2px 2px;display:flex}.legend-group{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.legend-group-title{text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary);width:100%;font-size:9px}.legend-item{color:var(--text-secondary);align-items:center;gap:4px;display:inline-flex}.legend-glyph{color:var(--text);text-align:center;min-width:16px;font-size:14px}.chart-layer{opacity:1;transform-origin:310px 310px;animation:.5s cubic-bezier(.16,1,.3,1) both svgLayerAssemble;animation-delay:calc(var(--layer-index,0) * 80ms);transform:scale(1)}@keyframes svgLayerAssemble{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.tooltip{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;border-radius:var(--radius,10px);pointer-events:none;z-index:1000;opacity:0;background:rgba(12,12,22,.97);border:1px solid rgba(60,58,80,.8);max-width:240px;padding:8px 12px;font-size:12px;transition:opacity .12s;position:fixed;box-shadow:0 8px 32px rgba(0,0,0,.55),inset 0 .5px rgba(255,255,255,.04)}.tooltip.visible{opacity:1}.tooltip-title{color:#e8e8f4;margin-bottom:2px;font-weight:700}.tooltip-detail{color:#9090b0;line-height:1.4}.tooltip-hint{color:#a08840;letter-spacing:.03em;margin-top:4px;font-size:10px}:root[data-theme=light]{--aspect-conjunction:#b45d00;--aspect-opposition:#b42318;--aspect-trine:#8f6a00;--aspect-square:#b42318;--aspect-sextile:#0c6e94;--bg:#f7f5f1;--surface:#fff;--surface-2:#f1eee9;--border:#dbd7d0;--border-strong:#bdb6ac;--text:#101215;--text-secondary:#4f5359;--gold:#825700;--gold-dim:#6d4b00;--gold-glow:rgba(130,87,0,.25);--gold-subtle:rgba(130,87,0,.1);--on-gold:#fcf4e6;--success:#007145;--error:#b1002b;--shadow:0 4px 20px rgba(0,0,0,.1);--oe-shadow-md:0 8px 32px rgba(0,0,0,.14), 0 0 0 1px var(--border-strong)}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light]{--bg:color(display-p3 .967616 .959866 .945308);--surface:color(display-p3 1 1 1);--surface-2:color(display-p3 .943798 .93351 .914195);--border:color(display-p3 .855616 .842987 .819292);--border-strong:color(display-p3 .73602 .716348 .67952);--text:color(display-p3 .0633107 .0687189 .081922);--text-secondary:color(display-p3 .313002 .323251 .348016);--gold:color(display-p3 .49809 .342102 -.0880434);--gold-dim:color(display-p3 .414099 .299019 .034461);--gold-glow:color(display-p3 .49809 .342102 -.0880434/.25);--gold-subtle:color(display-p3 .49809 .342102 -.0880434/.1);--on-gold:color(display-p3 .983924 .957955 .909341);--success:color(display-p3 -.0793084 .456092 .255685);--error:color(display-p3 .642198 .101724 .18242);--shadow:0 4px 20px color(display-p3 0 0 0/.1);--oe-shadow-md:0 8px 32px color(display-p3 0 0 0/.14), 0 0 0 1px var(--border-strong)}}@supports (color:lab(0% 0 0)){:root[data-theme=light]{--bg:lab(96.5376% .34079 2.2589);--surface:lab(100% 0 0);--surface-2:lab(94.2232% .459701 3.01524);--border:lab(86.1085% .583261 3.77473);--border-strong:lab(74.5232% .975847 6.06879);--text:lab(5.23809% -.0738502 -2.43738);--text-secondary:lab(34.9842% -.210062 -4.49808);--gold:lab(40.7346% 15.7445 75.3139);--gold-dim:lab(35.0077% 11.3181 50.9422);--gold-glow:lab(40.7346% 15.7445 75.3139/.25);--gold-subtle:lab(40.7346% 15.7445 75.3139/.1);--on-gold:lab(96.574% 1.22041 7.58642);--success:lab(41.7514% -55.3249 21.5039);--error:lab(37.5238% 64.2774 32.6097);--shadow:0 4px 20px lab(0% 0 0/.1);--oe-shadow-md:0 8px 32px lab(0% 0 0/.14), 0 0 0 1px var(--border-strong)}}:root[data-theme=light],:root[data-theme=light] body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background-image:none}:root[data-theme=light] .hd-action-bar{background:var(--bg)}:root[data-theme=light] .info-chip{background:var(--surface-2);color:var(--text-secondary);border:1px solid var(--border)}:root[data-theme=light] .info-chip.sect{background:var(--gold-subtle);color:var(--gold);border-color:rgba(141,95,0,.3);border-color:color(display-p3 .542549 .371783 -.107551/.3);border-color:lab(44.1995% 17.0662 84.3373/.3)}:root[data-theme=light] .tooltip{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--text);border-color:var(--border-strong);background:rgba(255,255,255,.96);background:color(display-p3 1 1 1/.96);background:lab(100% 0 0/.96);box-shadow:0 8px 32px rgba(0,0,0,.18),inset 0 .5px rgba(255,255,255,.6);box-shadow:0 8px 32px color(display-p3 0 0 0/.18),inset 0 .5px color(display-p3 1 1 1/.6);box-shadow:0 8px 32px lab(0% 0 0/.18),inset 0 .5px lab(100% 0 0/.6)}:root[data-theme=light] .tooltip-title{color:var(--text)}:root[data-theme=light] .tooltip-detail{color:var(--text-secondary)}:root[data-theme=light] .tooltip-hint{color:var(--gold-dim)}:root[data-theme=light] .chart-status{background:rgba(247,245,241,.92);background:color(display-p3 .967616 .959866 .945308/.92);background:lab(96.5376% .34079 2.2589/.92);border-color:rgba(141,95,0,.35);border-color:color(display-p3 .542549 .371783 -.107551/.35);border-color:lab(44.1995% 17.0662 84.3373/.35)}:root[data-theme=light] .hit-region:hover{fill:rgba(141,95,0,.1);fill:color(display-p3 .542549 .371783 -.107551/.1);fill:lab(44.1995% 17.0662 84.3373/.1);stroke:var(--gold-dim)}:root[data-theme=light] .hit-region.sign-hit:hover{fill:rgba(141,95,0,.07);fill:color(display-p3 .542549 .371783 -.107551/.07);fill:lab(44.1995% 17.0662 84.3373/.07)}:root[data-theme=light] .pan-btn{background:var(--surface)}:root[data-theme=light] .pan-btn:hover{background:var(--surface-2)}@media (max-width:480px){body,#app{padding:0}#pan-zoom-controls{flex-wrap:wrap;gap:5px}.pan-btn{background:color-mix(in oklab, var(--surface-2) 72%, transparent);-webkit-backdrop-filter:blur(6px);width:32px;min-width:32px;height:32px;min-height:32px;font-size:15px}.pan-btn.reset{width:32px;padding:0;font-size:0}.pan-btn.reset:before{content:"⟲";font-size:15px}#date-controls,.controls,.control-row{flex-wrap:wrap;gap:8px}}.param-controls{background:var(--surface);border-top:1px solid var(--border);flex-shrink:0;padding:6px 12px}.param-controls-grid{flex-wrap:wrap;align-items:center;gap:6px 10px;display:flex}.param-group{flex-direction:row;align-items:center;gap:6px;display:flex}.param-group label{text-transform:uppercase;color:var(--text-secondary);letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:700}.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);color-scheme:inherit;border-radius:var(--radius-sm);width:120px;height:24px;padding:3px 6px;font-family:inherit;font-size:11px}@media (prefers-reduced-motion:no-preference){.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{transition:border-color .15s}}.param-group input:focus{border-color:var(--gold-dim);outline:none}.loc-searching{border-color:var(--gold-dim)!important}@media (prefers-reduced-motion:no-preference){.loc-searching{animation:1s ease-in-out infinite alternate loc-pulse}}@keyframes loc-pulse{0%{border-color:var(--gold-dim)}to{border-color:rgba(204,156,66,.55);border-color:color(display-p3 .76996 .617341 .321369/.55);border-color:lab(67.5798% 11.9379 52.333/.55)}}.param-group-loc{flex:1;position:relative}.param-group-loc input{width:100%}.loc-suggestions{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius-sm);z-index:100;max-height:200px;margin-top:4px;position:absolute;top:100%;left:0;right:0;overflow-y:auto;box-shadow:0 4px 12px rgba(0,0,0,.35);box-shadow:0 4px 12px color(display-p3 0 0 0/.35);box-shadow:0 4px 12px lab(0% 0 0/.35)}.loc-item{color:var(--text);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid var(--border);padding:8px 10px;font-size:12px;overflow:hidden}.loc-item:last-child{border-bottom:none}@media (prefers-reduced-motion:no-preference){.loc-item{transition:background .1s,color .1s}}.loc-item:hover,.loc-item--active{background:var(--gold-subtle);color:var(--gold)}.loc-status{color:var(--text-secondary);letter-spacing:.01em;padding:8px 10px;font-size:11px;font-style:italic}.loc-status-error{color:#d76a5a;color:color(display-p3 .788241 .439621 .373983);color:lab(58.1265% 42.6447 29.9439);font-style:normal;font-weight:600}.param-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.param-cost-hint{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;font-size:10px}.param-btn-icon{border:1px solid var(--border-strong);color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;background:0 0;justify-content:center;align-items:center;width:24px;height:24px;display:flex}@media (prefers-reduced-motion:no-preference){.param-btn-icon{transition:background .15s,border-color .15s,color .15s}}.param-btn-icon:hover{background:var(--surface-2);color:var(--text);border-color:var(--gold-dim)}.param-btn-primary{color:var(--gold);border-radius:var(--radius-sm);cursor:pointer;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);height:24px;padding:3px 10px;font-family:inherit;font-size:10px;font-weight:600}@media (prefers-reduced-motion:no-preference){.param-btn-primary{transition:background .15s,border-color .15s}}.param-btn-primary:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65)}.param-btn-primary:disabled{opacity:.5;cursor:not-allowed}.param-extra-toggle{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;cursor:pointer;align-items:center;gap:5px;font-size:10px;display:flex}.param-extra-toggle input[type=checkbox]{width:13px;height:13px;accent-color:var(--gold,oklch(72% .12 80));cursor:pointer}.param-extra-toggle input[type=checkbox]:disabled{cursor:not-allowed}.param-extra-toggle input[type=checkbox]:disabled~span{opacity:.5}:root[data-theme=light] .param-group input[type=date],:root[data-theme=light] .param-group input[type=time],:root[data-theme=light] .param-group input[type=text]{border-color:var(--border-strong);color:var(--text);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167638 1.12768)}:root[data-theme=light] .loc-suggestions{border-color:var(--border-strong);background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167638 1.12768)}:root[data-theme=light] .param-btn-primary{background:rgba(160,112,0,.12);background:color(display-p3 .615135 .441554 -.0204711/.12);background:lab(51.2092% 16.2654 78.3504/.12);border-color:rgba(160,112,0,.4);border-color:color(display-p3 .615135 .441554 -.0204711/.4);border-color:lab(51.2092% 16.2654 78.3504/.4)}:root[data-theme=light] .param-btn-primary:hover:not(:disabled){background:rgba(160,112,0,.22);background:color(display-p3 .615135 .441554 -.0204711/.22);background:lab(51.2092% 16.2654 78.3504/.22);border-color:rgba(160,112,0,.65);border-color:color(display-p3 .615135 .441554 -.0204711/.65);border-color:lab(51.2092% 16.2654 78.3504/.65)}.param-summary-bar{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:2px 0;margin-bottom:4px;padding:3px 4px 5px;font-size:10px;line-height:1.3;display:flex}.param-summary-bar[hidden]{display:none}.summary-name{color:var(--gold,#d6a54d);letter-spacing:.01em;padding-right:2px;font-size:12px;font-weight:700}@supports (color:color(display-p3 0 0 0)){.summary-name{color:var(--gold,color(display-p3 .808073 .654274 .358094))}}@supports (color:lab(0% 0 0)){.summary-name{color:var(--gold,lab(71.071% 11.7474 51.7651))}}.summary-datetime{font-family:var(--font-code,ui-monospace, "Cascadia Mono", Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--text-secondary);align-items:baseline;gap:4px;font-size:11px;display:inline-flex}.summary-time-sep{color:var(--border-strong);opacity:.7;font-family:inherit;font-size:9px}.summary-loc{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:200px;padding-left:2px;font-size:11px;font-style:italic;overflow:hidden}.summary-sep{background:var(--border-strong);opacity:.5;vertical-align:middle;flex-shrink:0;width:1px;height:11px;margin:0 7px;display:inline-block}
14
14
  /*$vite$:1*/</style>
15
15
  </head>
16
16
  <body>
@@ -19,7 +19,7 @@
19
19
  <svg class="oe-loader" viewBox="0 0 100 100"><circle cx="50" cy="50" r="45"/></svg>
20
20
  <p>Mapping the sky at your birth moment…</p>
21
21
  </div>
22
- <div id="chart-container" hidden>
22
+ <div id="chart-container" class="oe-stage" hidden>
23
23
  <div id="pan-zoom-controls" class="pan-zoom-controls" hidden>
24
24
  <button id="btn-zoom-in" class="pan-btn" aria-label="Zoom in">+</button>
25
25
  <button id="btn-zoom-out" class="pan-btn" aria-label="Zoom out">-</button>
@@ -128,7 +128,7 @@ var l = /* @__PURE__ */ Symbol("zod_brand"), u = class extends Error {
128
128
  function p(e5) {
129
129
  return e5 && Object.assign(f, e5), f;
130
130
  }
131
- var m = t({ BIGINT_FORMAT_RANGES: () => Te, Class: () => qe, NUMBER_FORMAT_RANGES: () => we, aborted: () => Ne, allowsEval: () => pe, assert: () => ee, assertEqual: () => h, assertIs: () => _, assertNever: () => v, assertNotEqual: () => g, assignProp: () => E, base64ToUint8Array: () => Ve, base64urlToUint8Array: () => Ue, cached: () => S, captureStackTrace: () => de, cleanEnum: () => Be, cleanRegex: () => w, clone: () => xe, cloneDef: () => ae, createTransparentProxy: () => Se, defineLazy: () => T, esc: () => le, escapeRegex: () => be, extend: () => Oe, finalizeIssue: () => Ie, floatSafeRemainder: () => te, getElementAtPath: () => oe, getEnumValues: () => y, getLengthableOrigin: () => Re, getParsedType: () => _e, getSizableOrigin: () => Le, hexToUint8Array: () => Ge, isObject: () => fe, isPlainObject: () => me, issue: () => ze, joinValues: () => b, jsonStringifyReplacer: () => x, merge: () => Ae, mergeDefs: () => ie, normalizeParams: () => D, nullish: () => C, numKeys: () => ge, objectClone: () => re, omit: () => De, optionalKeys: () => Ce, parsedType: () => k, partial: () => je, pick: () => Ee, prefixIssues: () => Pe, primitiveTypes: () => ye, promiseAllObject: () => se, propertyKeyTypes: () => ve, randomString: () => ce, required: () => Me, safeExtend: () => ke, shallowClone: () => he, slugify: () => ue, stringifyPrimitive: () => O, uint8ArrayToBase64: () => He, uint8ArrayToBase64url: () => We, uint8ArrayToHex: () => Ke, unwrapMessage: () => Fe });
131
+ var m = t({ BIGINT_FORMAT_RANGES: () => Te, Class: () => qe, NUMBER_FORMAT_RANGES: () => we, aborted: () => Ne, allowsEval: () => pe, assert: () => ee, assertEqual: () => h, assertIs: () => _, assertNever: () => v, assertNotEqual: () => g, assignProp: () => T, base64ToUint8Array: () => Ve, base64urlToUint8Array: () => Ue, cached: () => te, captureStackTrace: () => de, cleanEnum: () => Be, cleanRegex: () => C, clone: () => xe, cloneDef: () => ae, createTransparentProxy: () => Se, defineLazy: () => w, esc: () => le, escapeRegex: () => be, extend: () => Oe, finalizeIssue: () => Ie, floatSafeRemainder: () => ne, getElementAtPath: () => oe, getEnumValues: () => y, getLengthableOrigin: () => Re, getParsedType: () => _e, getSizableOrigin: () => Le, hexToUint8Array: () => Ge, isObject: () => fe, isPlainObject: () => me, issue: () => ze, joinValues: () => b, jsonStringifyReplacer: () => x, merge: () => Ae, mergeDefs: () => E, normalizeParams: () => D, nullish: () => S, numKeys: () => ge, objectClone: () => ie, omit: () => De, optionalKeys: () => Ce, parsedType: () => k, partial: () => je, pick: () => Ee, prefixIssues: () => Pe, primitiveTypes: () => ye, promiseAllObject: () => se, propertyKeyTypes: () => ve, randomString: () => ce, required: () => Me, safeExtend: () => ke, shallowClone: () => he, slugify: () => ue, stringifyPrimitive: () => O, uint8ArrayToBase64: () => He, uint8ArrayToBase64url: () => We, uint8ArrayToHex: () => Ke, unwrapMessage: () => Fe });
132
132
  function h(e5) {
133
133
  return e5;
134
134
  }
@@ -152,7 +152,7 @@ function b(e5, t2 = "|") {
152
152
  function x(e5, t2) {
153
153
  return typeof t2 == "bigint" ? t2.toString() : t2;
154
154
  }
155
- function S(e5) {
155
+ function te(e5) {
156
156
  return { get value() {
157
157
  {
158
158
  let t2 = e5();
@@ -161,14 +161,14 @@ function S(e5) {
161
161
  throw Error("cached value already set");
162
162
  } };
163
163
  }
164
- function C(e5) {
164
+ function S(e5) {
165
165
  return e5 == null;
166
166
  }
167
- function w(e5) {
167
+ function C(e5) {
168
168
  let t2 = +!!e5.startsWith("^"), n2 = e5.endsWith("$") ? e5.length - 1 : e5.length;
169
169
  return e5.slice(t2, n2);
170
170
  }
171
- function te(e5, t2) {
171
+ function ne(e5, t2) {
172
172
  let n2 = (e5.toString().split(".")[1] || "").length, r2 = t2.toString(), i2 = (r2.split(".")[1] || "").length;
173
173
  if (i2 === 0 && /\d?e-\d?/.test(r2)) {
174
174
  let e6 = r2.match(/\d?e-(\d?)/);
@@ -177,28 +177,28 @@ function te(e5, t2) {
177
177
  let a2 = n2 > i2 ? n2 : i2;
178
178
  return Number.parseInt(e5.toFixed(a2).replace(".", "")) % Number.parseInt(t2.toFixed(a2).replace(".", "")) / 10 ** a2;
179
179
  }
180
- var ne = /* @__PURE__ */ Symbol("evaluating");
181
- function T(e5, t2, n2) {
180
+ var re = /* @__PURE__ */ Symbol("evaluating");
181
+ function w(e5, t2, n2) {
182
182
  let r2;
183
183
  Object.defineProperty(e5, t2, { get() {
184
- if (r2 !== ne) return r2 === void 0 && (r2 = ne, r2 = n2()), r2;
184
+ if (r2 !== re) return r2 === void 0 && (r2 = re, r2 = n2()), r2;
185
185
  }, set(n3) {
186
186
  Object.defineProperty(e5, t2, { value: n3 });
187
187
  }, configurable: true });
188
188
  }
189
- function re(e5) {
189
+ function ie(e5) {
190
190
  return Object.create(Object.getPrototypeOf(e5), Object.getOwnPropertyDescriptors(e5));
191
191
  }
192
- function E(e5, t2, n2) {
192
+ function T(e5, t2, n2) {
193
193
  Object.defineProperty(e5, t2, { value: n2, writable: true, enumerable: true, configurable: true });
194
194
  }
195
- function ie(...e5) {
195
+ function E(...e5) {
196
196
  let t2 = {};
197
197
  for (let n2 of e5) Object.assign(t2, Object.getOwnPropertyDescriptors(n2));
198
198
  return Object.defineProperties({}, t2);
199
199
  }
200
200
  function ae(e5) {
201
- return ie(e5._zod.def);
201
+ return E(e5._zod.def);
202
202
  }
203
203
  function oe(e5, t2) {
204
204
  return t2 ? t2.reduce((e6, t3) => e6 == null ? void 0 : e6[t3], e5) : e5;
@@ -227,7 +227,7 @@ var de = "captureStackTrace" in Error ? Error.captureStackTrace : (...e5) => {
227
227
  function fe(e5) {
228
228
  return typeof e5 == "object" && !!e5 && !Array.isArray(e5);
229
229
  }
230
- var pe = S(() => {
230
+ var pe = te(() => {
231
231
  var e5;
232
232
  if (typeof navigator < "u" && !((e5 = navigator) == null || (e5 = e5.userAgent) == null) && e5.includes("Cloudflare")) return false;
233
233
  try {
@@ -319,25 +319,25 @@ var we = { safeint: [-(2 ** 53 - 1), 2 ** 53 - 1], int32: [-2147483648, 21474836
319
319
  function Ee(e5, t2) {
320
320
  let n2 = e5._zod.def, r2 = n2.checks;
321
321
  if (r2 && r2.length > 0) throw Error(".pick() cannot be used on object schemas containing refinements");
322
- return xe(e5, ie(e5._zod.def, { get shape() {
322
+ return xe(e5, E(e5._zod.def, { get shape() {
323
323
  let e6 = {};
324
324
  for (let r3 in t2) {
325
325
  if (!(r3 in n2.shape)) throw Error('Unrecognized key: "'.concat(r3, '"'));
326
326
  t2[r3] && (e6[r3] = n2.shape[r3]);
327
327
  }
328
- return E(this, "shape", e6), e6;
328
+ return T(this, "shape", e6), e6;
329
329
  }, checks: [] }));
330
330
  }
331
331
  function De(e5, t2) {
332
332
  let n2 = e5._zod.def, r2 = n2.checks;
333
333
  if (r2 && r2.length > 0) throw Error(".omit() cannot be used on object schemas containing refinements");
334
- return xe(e5, ie(e5._zod.def, { get shape() {
334
+ return xe(e5, E(e5._zod.def, { get shape() {
335
335
  let r3 = { ...e5._zod.def.shape };
336
336
  for (let e6 in t2) {
337
337
  if (!(e6 in n2.shape)) throw Error('Unrecognized key: "'.concat(e6, '"'));
338
338
  t2[e6] && delete r3[e6];
339
339
  }
340
- return E(this, "shape", r3), r3;
340
+ return T(this, "shape", r3), r3;
341
341
  }, checks: [] }));
342
342
  }
343
343
  function Oe(e5, t2) {
@@ -347,22 +347,22 @@ function Oe(e5, t2) {
347
347
  let n3 = e5._zod.def.shape;
348
348
  for (let e6 in t2) if (Object.getOwnPropertyDescriptor(n3, e6) !== void 0) throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.");
349
349
  }
350
- return xe(e5, ie(e5._zod.def, { get shape() {
350
+ return xe(e5, E(e5._zod.def, { get shape() {
351
351
  let n3 = { ...e5._zod.def.shape, ...t2 };
352
- return E(this, "shape", n3), n3;
352
+ return T(this, "shape", n3), n3;
353
353
  } }));
354
354
  }
355
355
  function ke(e5, t2) {
356
356
  if (!me(t2)) throw Error("Invalid input to safeExtend: expected a plain object");
357
- return xe(e5, ie(e5._zod.def, { get shape() {
357
+ return xe(e5, E(e5._zod.def, { get shape() {
358
358
  let n2 = { ...e5._zod.def.shape, ...t2 };
359
- return E(this, "shape", n2), n2;
359
+ return T(this, "shape", n2), n2;
360
360
  } }));
361
361
  }
362
362
  function Ae(e5, t2) {
363
- return xe(e5, ie(e5._zod.def, { get shape() {
363
+ return xe(e5, E(e5._zod.def, { get shape() {
364
364
  let n2 = { ...e5._zod.def.shape, ...t2._zod.def.shape };
365
- return E(this, "shape", n2), n2;
365
+ return T(this, "shape", n2), n2;
366
366
  }, get catchall() {
367
367
  return t2._zod.def.catchall;
368
368
  }, checks: [] }));
@@ -370,25 +370,25 @@ function Ae(e5, t2) {
370
370
  function je(e5, t2, n2) {
371
371
  let r2 = t2._zod.def.checks;
372
372
  if (r2 && r2.length > 0) throw Error(".partial() cannot be used on object schemas containing refinements");
373
- return xe(t2, ie(t2._zod.def, { get shape() {
373
+ return xe(t2, E(t2._zod.def, { get shape() {
374
374
  let r3 = t2._zod.def.shape, i2 = { ...r3 };
375
375
  if (n2) for (let t3 in n2) {
376
376
  if (!(t3 in r3)) throw Error('Unrecognized key: "'.concat(t3, '"'));
377
377
  n2[t3] && (i2[t3] = e5 ? new e5({ type: "optional", innerType: r3[t3] }) : r3[t3]);
378
378
  }
379
379
  else for (let t3 in r3) i2[t3] = e5 ? new e5({ type: "optional", innerType: r3[t3] }) : r3[t3];
380
- return E(this, "shape", i2), i2;
380
+ return T(this, "shape", i2), i2;
381
381
  }, checks: [] }));
382
382
  }
383
383
  function Me(e5, t2, n2) {
384
- return xe(t2, ie(t2._zod.def, { get shape() {
384
+ return xe(t2, E(t2._zod.def, { get shape() {
385
385
  let r2 = t2._zod.def.shape, i2 = { ...r2 };
386
386
  if (n2) for (let t3 in n2) {
387
387
  if (!(t3 in i2)) throw Error('Unrecognized key: "'.concat(t3, '"'));
388
388
  n2[t3] && (i2[t3] = new e5({ type: "nonoptional", innerType: r2[t3] }));
389
389
  }
390
390
  else for (let t3 in r2) i2[t3] = new e5({ type: "nonoptional", innerType: r2[t3] });
391
- return E(this, "shape", i2), i2;
391
+ return T(this, "shape", i2), i2;
392
392
  } }));
393
393
  }
394
394
  function Ne(e5, t2 = 0) {
@@ -632,7 +632,7 @@ var Sn = /^[0-9a-fA-F]{32}$/, Cn = bn(22, "=="), wn = xn(22), Tn = /^[0-9a-fA-F]
632
632
  (n2 = e6._zod.bag).multipleOf != null || (n2.multipleOf = t2.value);
633
633
  }), e5._zod.check = (n2) => {
634
634
  if (typeof n2.value != typeof t2.value) throw Error("Cannot mix number and bigint in multiple_of check.");
635
- (typeof n2.value == "bigint" ? n2.value % t2.value === BigInt(0) : te(n2.value, t2.value) === 0) || n2.issues.push({ origin: typeof n2.value, code: "not_multiple_of", divisor: t2.value, input: n2.value, inst: e5, continue: !t2.abort });
635
+ (typeof n2.value == "bigint" ? n2.value % t2.value === BigInt(0) : ne(n2.value, t2.value) === 0) || n2.issues.push({ origin: typeof n2.value, code: "not_multiple_of", divisor: t2.value, input: n2.value, inst: e5, continue: !t2.abort });
636
636
  };
637
637
  }), Vn = c("$ZodCheckNumberFormat", (e5, t2) => {
638
638
  var n2;
@@ -669,7 +669,7 @@ var Sn = /^[0-9a-fA-F]{32}$/, Cn = bn(22, "=="), wn = xn(22), Tn = /^[0-9a-fA-F]
669
669
  var n2;
670
670
  A.init(e5, t2), (n2 = e5._zod.def).when != null || (n2.when = (e6) => {
671
671
  let t3 = e6.value;
672
- return !C(t3) && t3.size !== void 0;
672
+ return !S(t3) && t3.size !== void 0;
673
673
  }), e5._zod.onattach.push((e6) => {
674
674
  var n3;
675
675
  let r2 = (n3 = e6._zod.bag.maximum) == null ? 1 / 0 : n3;
@@ -682,7 +682,7 @@ var Sn = /^[0-9a-fA-F]{32}$/, Cn = bn(22, "=="), wn = xn(22), Tn = /^[0-9a-fA-F]
682
682
  var n2;
683
683
  A.init(e5, t2), (n2 = e5._zod.def).when != null || (n2.when = (e6) => {
684
684
  let t3 = e6.value;
685
- return !C(t3) && t3.size !== void 0;
685
+ return !S(t3) && t3.size !== void 0;
686
686
  }), e5._zod.onattach.push((e6) => {
687
687
  var n3;
688
688
  let r2 = (n3 = e6._zod.bag.minimum) == null ? -1 / 0 : n3;
@@ -695,7 +695,7 @@ var Sn = /^[0-9a-fA-F]{32}$/, Cn = bn(22, "=="), wn = xn(22), Tn = /^[0-9a-fA-F]
695
695
  var n2;
696
696
  A.init(e5, t2), (n2 = e5._zod.def).when != null || (n2.when = (e6) => {
697
697
  let t3 = e6.value;
698
- return !C(t3) && t3.size !== void 0;
698
+ return !S(t3) && t3.size !== void 0;
699
699
  }), e5._zod.onattach.push((e6) => {
700
700
  let n3 = e6._zod.bag;
701
701
  n3.minimum = t2.size, n3.maximum = t2.size, n3.size = t2.size;
@@ -709,7 +709,7 @@ var Sn = /^[0-9a-fA-F]{32}$/, Cn = bn(22, "=="), wn = xn(22), Tn = /^[0-9a-fA-F]
709
709
  var n2;
710
710
  A.init(e5, t2), (n2 = e5._zod.def).when != null || (n2.when = (e6) => {
711
711
  let t3 = e6.value;
712
- return !C(t3) && t3.length !== void 0;
712
+ return !S(t3) && t3.length !== void 0;
713
713
  }), e5._zod.onattach.push((e6) => {
714
714
  var n3;
715
715
  let r2 = (n3 = e6._zod.bag.maximum) == null ? 1 / 0 : n3;
@@ -724,7 +724,7 @@ var Sn = /^[0-9a-fA-F]{32}$/, Cn = bn(22, "=="), wn = xn(22), Tn = /^[0-9a-fA-F]
724
724
  var n2;
725
725
  A.init(e5, t2), (n2 = e5._zod.def).when != null || (n2.when = (e6) => {
726
726
  let t3 = e6.value;
727
- return !C(t3) && t3.length !== void 0;
727
+ return !S(t3) && t3.length !== void 0;
728
728
  }), e5._zod.onattach.push((e6) => {
729
729
  var n3;
730
730
  let r2 = (n3 = e6._zod.bag.minimum) == null ? -1 / 0 : n3;
@@ -739,7 +739,7 @@ var Sn = /^[0-9a-fA-F]{32}$/, Cn = bn(22, "=="), wn = xn(22), Tn = /^[0-9a-fA-F]
739
739
  var n2;
740
740
  A.init(e5, t2), (n2 = e5._zod.def).when != null || (n2.when = (e6) => {
741
741
  let t3 = e6.value;
742
- return !C(t3) && t3.length !== void 0;
742
+ return !S(t3) && t3.length !== void 0;
743
743
  }), e5._zod.onattach.push((e6) => {
744
744
  let n3 = e6._zod.bag;
745
745
  n3.minimum = t2.length, n3.maximum = t2.length, n3.length = t2.length;
@@ -889,7 +889,7 @@ var rr = c("$ZodCheckProperty", (e5, t2) => {
889
889
  return t3(o2, i2, a3);
890
890
  };
891
891
  }
892
- T(e5, "~standard", () => ({ validate: (t3) => {
892
+ w(e5, "~standard", () => ({ validate: (t3) => {
893
893
  try {
894
894
  var n3;
895
895
  let r3 = st(e5, t3);
@@ -1154,8 +1154,8 @@ var ti = c("$ZodObject", (e5, t2) => {
1154
1154
  return Object.defineProperty(t2, "shape", { value: n3 }), n3;
1155
1155
  } });
1156
1156
  }
1157
- let r2 = S(() => $r(t2));
1158
- T(e5._zod, "propValues", () => {
1157
+ let r2 = te(() => $r(t2));
1158
+ w(e5._zod, "propValues", () => {
1159
1159
  let e6 = t2.shape, n3 = {};
1160
1160
  for (let t3 in e6) {
1161
1161
  let r3 = e6[t3]._zod;
@@ -1181,7 +1181,7 @@ var ti = c("$ZodObject", (e5, t2) => {
1181
1181
  };
1182
1182
  }), ni = c("$ZodObjectJIT", (e5, t2) => {
1183
1183
  ti.init(e5, t2);
1184
- let n2 = e5._zod.parse, r2 = S(() => $r(t2)), i2 = (e6) => {
1184
+ let n2 = e5._zod.parse, r2 = te(() => $r(t2)), i2 = (e6) => {
1185
1185
  let t3 = new or(["shape", "payload", "ctx"]), n3 = r2.value, i3 = (e7) => {
1186
1186
  let t4 = le(e7);
1187
1187
  return "shape[".concat(t4, "]._zod.run({ value: input[").concat(t4, "], issues: [] }, ctx)");
@@ -1211,12 +1211,12 @@ function ri(e5, t2, n2, r2) {
1211
1211
  return i2.length === 1 ? (t2.value = i2[0].value, i2[0]) : (t2.issues.push({ code: "invalid_union", input: t2.value, inst: n2, errors: e5.map((e6) => e6.issues.map((e7) => Ie(e7, r2, p()))) }), t2);
1212
1212
  }
1213
1213
  var ii = c("$ZodUnion", (e5, t2) => {
1214
- j.init(e5, t2), T(e5._zod, "optin", () => t2.options.some((e6) => e6._zod.optin === "optional") ? "optional" : void 0), T(e5._zod, "optout", () => t2.options.some((e6) => e6._zod.optout === "optional") ? "optional" : void 0), T(e5._zod, "values", () => {
1214
+ j.init(e5, t2), w(e5._zod, "optin", () => t2.options.some((e6) => e6._zod.optin === "optional") ? "optional" : void 0), w(e5._zod, "optout", () => t2.options.some((e6) => e6._zod.optout === "optional") ? "optional" : void 0), w(e5._zod, "values", () => {
1215
1215
  if (t2.options.every((e6) => e6._zod.values)) return new Set(t2.options.flatMap((e6) => Array.from(e6._zod.values)));
1216
- }), T(e5._zod, "pattern", () => {
1216
+ }), w(e5._zod, "pattern", () => {
1217
1217
  if (t2.options.every((e6) => e6._zod.pattern)) {
1218
1218
  let e6 = t2.options.map((e7) => e7._zod.pattern);
1219
- return RegExp("^(".concat(e6.map((e7) => w(e7.source)).join("|"), ")$"));
1219
+ return RegExp("^(".concat(e6.map((e7) => C(e7.source)).join("|"), ")$"));
1220
1220
  }
1221
1221
  });
1222
1222
  let n2 = t2.options.length === 1, r2 = t2.options[0]._zod.run;
@@ -1253,7 +1253,7 @@ var oi = c("$ZodXor", (e5, t2) => {
1253
1253
  }), si = c("$ZodDiscriminatedUnion", (e5, t2) => {
1254
1254
  t2.inclusive = false, ii.init(e5, t2);
1255
1255
  let n2 = e5._zod.parse;
1256
- T(e5._zod, "propValues", () => {
1256
+ w(e5._zod, "propValues", () => {
1257
1257
  let e6 = {};
1258
1258
  for (let n3 of t2.options) {
1259
1259
  let r3 = n3._zod.propValues;
@@ -1265,7 +1265,7 @@ var oi = c("$ZodXor", (e5, t2) => {
1265
1265
  }
1266
1266
  return e6;
1267
1267
  });
1268
- let r2 = S(() => {
1268
+ let r2 = te(() => {
1269
1269
  let e6 = t2.options, n3 = /* @__PURE__ */ new Map();
1270
1270
  for (let i2 of e6) {
1271
1271
  var r3;
@@ -1469,9 +1469,9 @@ function Si(e5, t2) {
1469
1469
  return e5.issues.length && t2 === void 0 ? { issues: [], value: void 0 } : e5;
1470
1470
  }
1471
1471
  var Ci = c("$ZodOptional", (e5, t2) => {
1472
- j.init(e5, t2), e5._zod.optin = "optional", e5._zod.optout = "optional", T(e5._zod, "values", () => t2.innerType._zod.values ? /* @__PURE__ */ new Set([...t2.innerType._zod.values, void 0]) : void 0), T(e5._zod, "pattern", () => {
1472
+ j.init(e5, t2), e5._zod.optin = "optional", e5._zod.optout = "optional", w(e5._zod, "values", () => t2.innerType._zod.values ? /* @__PURE__ */ new Set([...t2.innerType._zod.values, void 0]) : void 0), w(e5._zod, "pattern", () => {
1473
1473
  let e6 = t2.innerType._zod.pattern;
1474
- return e6 ? RegExp("^(".concat(w(e6.source), ")?$")) : void 0;
1474
+ return e6 ? RegExp("^(".concat(C(e6.source), ")?$")) : void 0;
1475
1475
  }), e5._zod.parse = (e6, n2) => {
1476
1476
  if (t2.innerType._zod.optin === "optional") {
1477
1477
  let r2 = t2.innerType._zod.run(e6, n2);
@@ -1480,14 +1480,14 @@ var Ci = c("$ZodOptional", (e5, t2) => {
1480
1480
  return e6.value === void 0 ? e6 : t2.innerType._zod.run(e6, n2);
1481
1481
  };
1482
1482
  }), wi = c("$ZodExactOptional", (e5, t2) => {
1483
- Ci.init(e5, t2), T(e5._zod, "values", () => t2.innerType._zod.values), T(e5._zod, "pattern", () => t2.innerType._zod.pattern), e5._zod.parse = (e6, n2) => t2.innerType._zod.run(e6, n2);
1483
+ Ci.init(e5, t2), w(e5._zod, "values", () => t2.innerType._zod.values), w(e5._zod, "pattern", () => t2.innerType._zod.pattern), e5._zod.parse = (e6, n2) => t2.innerType._zod.run(e6, n2);
1484
1484
  }), Ti = c("$ZodNullable", (e5, t2) => {
1485
- j.init(e5, t2), T(e5._zod, "optin", () => t2.innerType._zod.optin), T(e5._zod, "optout", () => t2.innerType._zod.optout), T(e5._zod, "pattern", () => {
1485
+ j.init(e5, t2), w(e5._zod, "optin", () => t2.innerType._zod.optin), w(e5._zod, "optout", () => t2.innerType._zod.optout), w(e5._zod, "pattern", () => {
1486
1486
  let e6 = t2.innerType._zod.pattern;
1487
- return e6 ? RegExp("^(".concat(w(e6.source), "|null)$")) : void 0;
1488
- }), T(e5._zod, "values", () => t2.innerType._zod.values ? /* @__PURE__ */ new Set([...t2.innerType._zod.values, null]) : void 0), e5._zod.parse = (e6, n2) => e6.value === null ? e6 : t2.innerType._zod.run(e6, n2);
1487
+ return e6 ? RegExp("^(".concat(C(e6.source), "|null)$")) : void 0;
1488
+ }), w(e5._zod, "values", () => t2.innerType._zod.values ? /* @__PURE__ */ new Set([...t2.innerType._zod.values, null]) : void 0), e5._zod.parse = (e6, n2) => e6.value === null ? e6 : t2.innerType._zod.run(e6, n2);
1489
1489
  }), Ei = c("$ZodDefault", (e5, t2) => {
1490
- j.init(e5, t2), e5._zod.optin = "optional", T(e5._zod, "values", () => t2.innerType._zod.values), e5._zod.parse = (e6, n2) => {
1490
+ j.init(e5, t2), e5._zod.optin = "optional", w(e5._zod, "values", () => t2.innerType._zod.values), e5._zod.parse = (e6, n2) => {
1491
1491
  if (n2.direction === "backward") return t2.innerType._zod.run(e6, n2);
1492
1492
  if (e6.value === void 0) return e6.value = t2.defaultValue, e6;
1493
1493
  let r2 = t2.innerType._zod.run(e6, n2);
@@ -1498,9 +1498,9 @@ function Di(e5, t2) {
1498
1498
  return e5.value === void 0 && (e5.value = t2.defaultValue), e5;
1499
1499
  }
1500
1500
  var Oi = c("$ZodPrefault", (e5, t2) => {
1501
- j.init(e5, t2), e5._zod.optin = "optional", T(e5._zod, "values", () => t2.innerType._zod.values), e5._zod.parse = (e6, n2) => (n2.direction === "backward" || e6.value === void 0 && (e6.value = t2.defaultValue), t2.innerType._zod.run(e6, n2));
1501
+ j.init(e5, t2), e5._zod.optin = "optional", w(e5._zod, "values", () => t2.innerType._zod.values), e5._zod.parse = (e6, n2) => (n2.direction === "backward" || e6.value === void 0 && (e6.value = t2.defaultValue), t2.innerType._zod.run(e6, n2));
1502
1502
  }), ki = c("$ZodNonOptional", (e5, t2) => {
1503
- j.init(e5, t2), T(e5._zod, "values", () => {
1503
+ j.init(e5, t2), w(e5._zod, "values", () => {
1504
1504
  let e6 = t2.innerType._zod.values;
1505
1505
  return e6 ? new Set([...e6].filter((e7) => e7 !== void 0)) : void 0;
1506
1506
  }), e5._zod.parse = (n2, r2) => {
@@ -1518,7 +1518,7 @@ var ji = c("$ZodSuccess", (e5, t2) => {
1518
1518
  return r2 instanceof Promise ? r2.then((t3) => (e6.value = t3.issues.length === 0, e6)) : (e6.value = r2.issues.length === 0, e6);
1519
1519
  };
1520
1520
  }), Mi = c("$ZodCatch", (e5, t2) => {
1521
- j.init(e5, t2), T(e5._zod, "optin", () => t2.innerType._zod.optin), T(e5._zod, "optout", () => t2.innerType._zod.optout), T(e5._zod, "values", () => t2.innerType._zod.values), e5._zod.parse = (e6, n2) => {
1521
+ j.init(e5, t2), w(e5._zod, "optin", () => t2.innerType._zod.optin), w(e5._zod, "optout", () => t2.innerType._zod.optout), w(e5._zod, "values", () => t2.innerType._zod.values), e5._zod.parse = (e6, n2) => {
1522
1522
  if (n2.direction === "backward") return t2.innerType._zod.run(e6, n2);
1523
1523
  let r2 = t2.innerType._zod.run(e6, n2);
1524
1524
  return r2 instanceof Promise ? r2.then((r3) => (e6.value = r3.value, r3.issues.length && (e6.value = t2.catchValue({ ...e6, error: { issues: r3.issues.map((e7) => Ie(e7, n2, p())) }, input: e6.value }), e6.issues = []), e6)) : (e6.value = r2.value, r2.issues.length && (e6.value = t2.catchValue({ ...e6, error: { issues: r2.issues.map((e7) => Ie(e7, n2, p())) }, input: e6.value }), e6.issues = []), e6);
@@ -1526,7 +1526,7 @@ var ji = c("$ZodSuccess", (e5, t2) => {
1526
1526
  }), Ni = c("$ZodNaN", (e5, t2) => {
1527
1527
  j.init(e5, t2), e5._zod.parse = (t3, n2) => ((typeof t3.value != "number" || !Number.isNaN(t3.value)) && t3.issues.push({ input: t3.value, inst: e5, expected: "nan", code: "invalid_type" }), t3);
1528
1528
  }), Pi = c("$ZodPipe", (e5, t2) => {
1529
- j.init(e5, t2), T(e5._zod, "values", () => t2.in._zod.values), T(e5._zod, "optin", () => t2.in._zod.optin), T(e5._zod, "optout", () => t2.out._zod.optout), T(e5._zod, "propValues", () => t2.in._zod.propValues), e5._zod.parse = (e6, n2) => {
1529
+ j.init(e5, t2), w(e5._zod, "values", () => t2.in._zod.values), w(e5._zod, "optin", () => t2.in._zod.optin), w(e5._zod, "optout", () => t2.out._zod.optout), w(e5._zod, "propValues", () => t2.in._zod.propValues), e5._zod.parse = (e6, n2) => {
1530
1530
  if (n2.direction === "backward") {
1531
1531
  let r3 = t2.out._zod.run(e6, n2);
1532
1532
  return r3 instanceof Promise ? r3.then((e7) => Fi(e7, t2.in, n2)) : Fi(r3, t2.in, n2);
@@ -1539,7 +1539,7 @@ function Fi(e5, t2, n2) {
1539
1539
  return e5.issues.length ? (e5.aborted = true, e5) : t2._zod.run({ value: e5.value, issues: e5.issues }, n2);
1540
1540
  }
1541
1541
  var Ii = c("$ZodCodec", (e5, t2) => {
1542
- j.init(e5, t2), T(e5._zod, "values", () => t2.in._zod.values), T(e5._zod, "optin", () => t2.in._zod.optin), T(e5._zod, "optout", () => t2.out._zod.optout), T(e5._zod, "propValues", () => t2.in._zod.propValues), e5._zod.parse = (e6, n2) => {
1542
+ j.init(e5, t2), w(e5._zod, "values", () => t2.in._zod.values), w(e5._zod, "optin", () => t2.in._zod.optin), w(e5._zod, "optout", () => t2.out._zod.optout), w(e5._zod, "propValues", () => t2.in._zod.propValues), e5._zod.parse = (e6, n2) => {
1543
1543
  if ((n2.direction || "forward") === "forward") {
1544
1544
  let r2 = t2.in._zod.run(e6, n2);
1545
1545
  return r2 instanceof Promise ? r2.then((e7) => Li(e7, t2, n2)) : Li(r2, t2, n2);
@@ -1563,10 +1563,10 @@ function Ri(e5, t2, n2, r2) {
1563
1563
  return e5.issues.length ? (e5.aborted = true, e5) : n2._zod.run({ value: t2, issues: e5.issues }, r2);
1564
1564
  }
1565
1565
  var zi = c("$ZodReadonly", (e5, t2) => {
1566
- j.init(e5, t2), T(e5._zod, "propValues", () => t2.innerType._zod.propValues), T(e5._zod, "values", () => t2.innerType._zod.values), T(e5._zod, "optin", () => {
1566
+ j.init(e5, t2), w(e5._zod, "propValues", () => t2.innerType._zod.propValues), w(e5._zod, "values", () => t2.innerType._zod.values), w(e5._zod, "optin", () => {
1567
1567
  var e6;
1568
1568
  return (e6 = t2.innerType) == null || (e6 = e6._zod) == null ? void 0 : e6.optin;
1569
- }), T(e5._zod, "optout", () => {
1569
+ }), w(e5._zod, "optout", () => {
1570
1570
  var e6;
1571
1571
  return (e6 = t2.innerType) == null || (e6 = e6._zod) == null ? void 0 : e6.optout;
1572
1572
  }), e5._zod.parse = (e6, n2) => {
@@ -1618,16 +1618,16 @@ var Vi = c("$ZodTemplateLiteral", (e5, t2) => {
1618
1618
  }, e5)), Ui = c("$ZodPromise", (e5, t2) => {
1619
1619
  j.init(e5, t2), e5._zod.parse = (e6, n2) => Promise.resolve(e6.value).then((e7) => t2.innerType._zod.run({ value: e7, issues: [] }, n2));
1620
1620
  }), Wi = c("$ZodLazy", (e5, t2) => {
1621
- j.init(e5, t2), T(e5._zod, "innerType", () => t2.getter()), T(e5._zod, "pattern", () => {
1621
+ j.init(e5, t2), w(e5._zod, "innerType", () => t2.getter()), w(e5._zod, "pattern", () => {
1622
1622
  var t3;
1623
1623
  return (t3 = e5._zod.innerType) == null || (t3 = t3._zod) == null ? void 0 : t3.pattern;
1624
- }), T(e5._zod, "propValues", () => {
1624
+ }), w(e5._zod, "propValues", () => {
1625
1625
  var t3;
1626
1626
  return (t3 = e5._zod.innerType) == null || (t3 = t3._zod) == null ? void 0 : t3.propValues;
1627
- }), T(e5._zod, "optin", () => {
1627
+ }), w(e5._zod, "optin", () => {
1628
1628
  var t3, n2;
1629
1629
  return (t3 = (n2 = e5._zod.innerType) == null || (n2 = n2._zod) == null ? void 0 : n2.optin) == null ? void 0 : t3;
1630
- }), T(e5._zod, "optout", () => {
1630
+ }), w(e5._zod, "optout", () => {
1631
1631
  var t3, n2;
1632
1632
  return (t3 = (n2 = e5._zod.innerType) == null || (n2 = n2._zod) == null ? void 0 : n2.optout) == null ? void 0 : t3;
1633
1633
  }), e5._zod.parse = (t3, n2) => e5._zod.innerType._zod.run(t3, n2);
@@ -2444,27 +2444,27 @@ var wa = () => {
2444
2444
  var ee2, y2, x2;
2445
2445
  let e6 = o2(t3.origin), n4 = i2((ee2 = t3.origin) == null ? "value" : ee2);
2446
2446
  if (t3.origin === "string") {
2447
- var S2, C2;
2448
- return "".concat((S2 = e6 == null ? void 0 : e6.shortLabel) == null ? "\u05E7\u05E6\u05E8" : S2, " \u05DE\u05D3\u05D9: ").concat(n4, " \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ").concat(t3.minimum.toString(), " ").concat((C2 = e6 == null ? void 0 : e6.unit) == null ? "" : C2, " ").concat(t3.inclusive ? "\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8" : "\u05DC\u05E4\u05D7\u05D5\u05EA").trim();
2447
+ var te2, S2;
2448
+ return "".concat((te2 = e6 == null ? void 0 : e6.shortLabel) == null ? "\u05E7\u05E6\u05E8" : te2, " \u05DE\u05D3\u05D9: ").concat(n4, " \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ").concat(t3.minimum.toString(), " ").concat((S2 = e6 == null ? void 0 : e6.unit) == null ? "" : S2, " ").concat(t3.inclusive ? "\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8" : "\u05DC\u05E4\u05D7\u05D5\u05EA").trim();
2449
2449
  }
2450
2450
  if (t3.origin === "number") return "\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ".concat(n4, " \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ").concat(t3.inclusive ? "\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-".concat(t3.minimum) : "\u05D2\u05D3\u05D5\u05DC \u05DE-".concat(t3.minimum));
2451
2451
  if (t3.origin === "array" || t3.origin === "set") {
2452
- var w2, te2;
2452
+ var C2, ne2;
2453
2453
  let r4 = t3.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA";
2454
- return t3.minimum === 1 && t3.inclusive ? "\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ".concat(n4, " ").concat(r4, " \u05DC\u05D4\u05DB\u05D9\u05DC ").concat((t3.origin, "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3")) : "\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ".concat(n4, " ").concat(r4, " \u05DC\u05D4\u05DB\u05D9\u05DC ").concat(t3.inclusive ? "".concat(t3.minimum, " ").concat((w2 = e6 == null ? void 0 : e6.unit) == null ? "" : w2, " \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8") : "\u05D9\u05D5\u05EA\u05E8 \u05DE-".concat(t3.minimum, " ").concat((te2 = e6 == null ? void 0 : e6.unit) == null ? "" : te2)).trim();
2454
+ return t3.minimum === 1 && t3.inclusive ? "\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ".concat(n4, " ").concat(r4, " \u05DC\u05D4\u05DB\u05D9\u05DC ").concat((t3.origin, "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3")) : "\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ".concat(n4, " ").concat(r4, " \u05DC\u05D4\u05DB\u05D9\u05DC ").concat(t3.inclusive ? "".concat(t3.minimum, " ").concat((C2 = e6 == null ? void 0 : e6.unit) == null ? "" : C2, " \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8") : "\u05D9\u05D5\u05EA\u05E8 \u05DE-".concat(t3.minimum, " ").concat((ne2 = e6 == null ? void 0 : e6.unit) == null ? "" : ne2)).trim();
2455
2455
  }
2456
2456
  let r3 = t3.inclusive ? ">=" : ">", s3 = a2((y2 = t3.origin) == null ? "value" : y2);
2457
2457
  return e6 != null && e6.unit ? "".concat(e6.shortLabel, " \u05DE\u05D3\u05D9: ").concat(n4, " ").concat(s3, " ").concat(r3).concat(t3.minimum.toString(), " ").concat(e6.unit) : "".concat((x2 = e6 == null ? void 0 : e6.shortLabel) == null ? "\u05E7\u05D8\u05DF" : x2, " \u05DE\u05D3\u05D9: ").concat(n4, " ").concat(s3, " ").concat(r3).concat(t3.minimum.toString());
2458
2458
  }
2459
2459
  case "invalid_format": {
2460
- var ne2, T2;
2460
+ var re2, w2;
2461
2461
  let e6 = t3;
2462
2462
  if (e6.format === "starts_with") return '\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 "'.concat(e6.prefix, '"');
2463
2463
  if (e6.format === "ends_with") return '\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 "'.concat(e6.suffix, '"');
2464
2464
  if (e6.format === "includes") return '\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC "'.concat(e6.includes, '"');
2465
2465
  if (e6.format === "regex") return "\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ".concat(e6.pattern);
2466
2466
  let n4 = s2[e6.format];
2467
- return "".concat((ne2 = n4 == null ? void 0 : n4.label) == null ? e6.format : ne2, " \u05DC\u05D0 ").concat(((T2 = n4 == null ? void 0 : n4.gender) == null ? "m" : T2) === "f" ? "\u05EA\u05E7\u05D9\u05E0\u05D4" : "\u05EA\u05E7\u05D9\u05DF");
2467
+ return "".concat((re2 = n4 == null ? void 0 : n4.label) == null ? e6.format : re2, " \u05DC\u05D0 ").concat(((w2 = n4 == null ? void 0 : n4.gender) == null ? "m" : w2) === "f" ? "\u05EA\u05E7\u05D9\u05E0\u05D4" : "\u05EA\u05E7\u05D9\u05DF");
2468
2468
  }
2469
2469
  case "not_multiple_of":
2470
2470
  return "\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ".concat(t3.divisor);
@@ -2475,8 +2475,8 @@ var wa = () => {
2475
2475
  case "invalid_union":
2476
2476
  return "\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF";
2477
2477
  case "invalid_element":
2478
- var re2;
2479
- return "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1".concat(i2((re2 = t3.origin) == null ? "array" : re2));
2478
+ var ie2;
2479
+ return "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1".concat(i2((ie2 = t3.origin) == null ? "array" : ie2));
2480
2480
  default:
2481
2481
  return "\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF";
2482
2482
  }
@@ -4942,7 +4942,7 @@ var pu = (e5, t2) => {
4942
4942
  } } });
4943
4943
  }, mu = c("ZodError", pu), hu = c("ZodError", pu, { Parent: Error }), gu = nt(hu), _u = it(hu), vu = ot(hu), yu = ct(hu), bu = ut(hu), xu = ft(hu), Su = mt(hu), Cu = gt(hu), wu = vt(hu), Tu = bt(hu), Eu = St(hu), Du = wt(hu), Ou = t({ ZodAny: () => Gd, ZodArray: () => ef, ZodBase64: () => pd, ZodBase64URL: () => hd, ZodBigInt: () => Pd, ZodBigIntFormat: () => Id, ZodBoolean: () => Nd, ZodCIDRv4: () => ld, ZodCIDRv6: () => dd, ZodCUID: () => qu, ZodCUID2: () => Yu, ZodCatch: () => Wf, ZodCodec: () => Xf, ZodCustom: () => cp, ZodCustomStringFormat: () => xd, ZodDate: () => Qd, ZodDefault: () => If, ZodDiscriminatedUnion: () => lf, ZodE164: () => _d, ZodEmail: () => ju, ZodEmoji: () => Uu, ZodEnum: () => Sf, ZodExactOptional: () => jf, ZodFile: () => Ef, ZodFunction: () => op, ZodGUID: () => Nu, ZodIPv4: () => rd, ZodIPv6: () => sd, ZodIntersection: () => df, ZodJWT: () => yd, ZodKSUID: () => td, ZodLazy: () => np, ZodLiteral: () => Tf, ZodMAC: () => ad, ZodMap: () => vf, ZodNaN: () => Kf, ZodNanoID: () => Gu, ZodNever: () => Jd, ZodNonOptional: () => Bf, ZodNull: () => Ud, ZodNullable: () => Nf, ZodNumber: () => Ed, ZodNumberFormat: () => Dd, ZodObject: () => nf, ZodOptional: () => Af, ZodPipe: () => Jf, ZodPrefault: () => Rf, ZodPromise: () => ip, ZodReadonly: () => Qf, ZodRecord: () => hf, ZodSet: () => bf, ZodString: () => Au, ZodStringFormat: () => I, ZodSuccess: () => Hf, ZodSymbol: () => zd, ZodTemplateLiteral: () => ep, ZodTransform: () => Of, ZodTuple: () => pf, ZodType: () => P, ZodULID: () => Zu, ZodURL: () => Bu, ZodUUID: () => Fu, ZodUndefined: () => Vd, ZodUnion: () => of, ZodUnknown: () => qd, ZodVoid: () => Xd, ZodXID: () => $u, ZodXor: () => sf, _ZodString: () => ku, _default: () => Lf, _function: () => sp, any: () => Kd, array: () => B, base64: () => md, base64url: () => gd, bigint: () => Fd, boolean: () => R, catch: () => Gf, check: () => lp, cidrv4: () => ud, cidrv6: () => fd, codec: () => Zf, cuid: () => Ju, cuid2: () => Xu, custom: () => up, date: () => $d, describe: () => pp, discriminatedUnion: () => uf, e164: () => vd, email: () => Mu, emoji: () => Wu, enum: () => Cf, exactOptional: () => Mf, file: () => Df, float32: () => kd, float64: () => Ad, function: () => sp, guid: () => Pu, hash: () => Td, hex: () => wd, hostname: () => Cd, httpUrl: () => Hu, instanceof: () => hp, int: () => Od, int32: () => jd, int64: () => Ld, intersection: () => ff, ipv4: () => id, ipv6: () => cd, json: () => _p, jwt: () => bd, keyof: () => tf, ksuid: () => nd, lazy: () => rp, literal: () => W, looseObject: () => af, looseRecord: () => _f, mac: () => od, map: () => yf, meta: () => mp, nan: () => qf, nanoid: () => Ku, nativeEnum: () => wf, never: () => Yd, nonoptional: () => Vf, null: () => Wd, nullable: () => Pf, nullish: () => Ff, number: () => L, object: () => V, optional: () => G, partialRecord: () => gf, pipe: () => Yf, prefault: () => zf, preprocess: () => vp, promise: () => ap, readonly: () => $f, record: () => U, refine: () => dp, set: () => xf, strictObject: () => rf, string: () => F, stringFormat: () => Sd, stringbool: () => gp, success: () => Uf, superRefine: () => fp, symbol: () => Bd, templateLiteral: () => tp, transform: () => kf, tuple: () => mf, uint32: () => Md, uint64: () => Rd, ulid: () => Qu, undefined: () => Hd, union: () => H, unknown: () => z, url: () => Vu, uuid: () => Iu, uuidv4: () => Lu, uuidv6: () => Ru, uuidv7: () => zu, void: () => Zd, xid: () => ed, xor: () => cf }), P = c("ZodType", (e5, t2) => (j.init(e5, t2), Object.assign(e5["~standard"], { jsonSchema: { input: sl(e5, "input"), output: sl(e5, "output") } }), e5.toJSONSchema = ol(e5, {}), e5.def = t2, e5.type = t2.type, Object.defineProperty(e5, "_def", { value: t2 }), e5.check = (...n2) => {
4944
4944
  var r2;
4945
- return e5.clone(ie(t2, { checks: [...(r2 = t2.checks) == null ? [] : r2, ...n2.map((e6) => typeof e6 == "function" ? { _zod: { check: e6, def: { check: "custom" }, onattach: [] } } : e6)] }), { parent: true });
4945
+ return e5.clone(E(t2, { checks: [...(r2 = t2.checks) == null ? [] : r2, ...n2.map((e6) => typeof e6 == "function" ? { _zod: { check: e6, def: { check: "custom" }, onattach: [] } } : e6)] }), { parent: true });
4946
4946
  }, e5.with = e5.check, e5.clone = (t3, n2) => xe(e5, t3, n2), e5.brand = () => e5, e5.register = ((t3, n2) => (t3.add(e5, n2), e5)), e5.parse = (t3, n2) => gu(e5, t3, n2, { callee: e5.parse }), e5.safeParse = (t3, n2) => vu(e5, t3, n2), e5.parseAsync = async (t3, n2) => _u(e5, t3, n2, { callee: e5.parseAsync }), e5.safeParseAsync = async (t3, n2) => yu(e5, t3, n2), e5.spa = e5.safeParseAsync, e5.encode = (t3, n2) => bu(e5, t3, n2), e5.decode = (t3, n2) => xu(e5, t3, n2), e5.encodeAsync = async (t3, n2) => Su(e5, t3, n2), e5.decodeAsync = async (t3, n2) => Cu(e5, t3, n2), e5.safeEncode = (t3, n2) => wu(e5, t3, n2), e5.safeDecode = (t3, n2) => Tu(e5, t3, n2), e5.safeEncodeAsync = async (t3, n2) => Eu(e5, t3, n2), e5.safeDecodeAsync = async (t3, n2) => Du(e5, t3, n2), e5.refine = (t3, n2) => e5.check(dp(t3, n2)), e5.superRefine = (t3) => e5.check(fp(t3)), e5.overwrite = (t3) => e5.check(_c(t3)), e5.optional = () => G(e5), e5.exactOptional = () => Mf(e5), e5.nullable = () => Pf(e5), e5.nullish = () => G(Pf(e5)), e5.nonoptional = (t3) => Vf(e5, t3), e5.array = () => B(e5), e5.or = (t3) => H([e5, t3]), e5.and = (t3) => ff(e5, t3), e5.transform = (t3) => Yf(e5, kf(t3)), e5.default = (t3) => Lf(e5, t3), e5.prefault = (t3) => zf(e5, t3), e5.catch = (t3) => Gf(e5, t3), e5.pipe = (t3) => Yf(e5, t3), e5.readonly = () => $f(e5), e5.describe = (t3) => {
4947
4947
  let n2 = e5.clone();
4948
4948
  return Jo.add(n2, { description: t3 }), n2;
@@ -5228,7 +5228,7 @@ function tf(e5) {
5228
5228
  return Cf(Object.keys(t2));
5229
5229
  }
5230
5230
  var nf = c("ZodObject", (e5, t2) => {
5231
- ni.init(e5, t2), P.init(e5, t2), e5._zod.processJSONSchema = (t3, n2, r2) => Nl(e5, t3, n2, r2), T(e5, "shape", () => t2.shape), e5.keyof = () => Cf(Object.keys(e5._zod.def.shape)), e5.catchall = (t3) => e5.clone({ ...e5._zod.def, catchall: t3 }), e5.passthrough = () => e5.clone({ ...e5._zod.def, catchall: z() }), e5.loose = () => e5.clone({ ...e5._zod.def, catchall: z() }), e5.strict = () => e5.clone({ ...e5._zod.def, catchall: Yd() }), e5.strip = () => e5.clone({ ...e5._zod.def, catchall: void 0 }), e5.extend = (t3) => Oe(e5, t3), e5.safeExtend = (t3) => ke(e5, t3), e5.merge = (t3) => Ae(e5, t3), e5.pick = (t3) => Ee(e5, t3), e5.omit = (t3) => De(e5, t3), e5.partial = (...t3) => je(Af, e5, t3[0]), e5.required = (...t3) => Me(Bf, e5, t3[0]);
5231
+ ni.init(e5, t2), P.init(e5, t2), e5._zod.processJSONSchema = (t3, n2, r2) => Nl(e5, t3, n2, r2), w(e5, "shape", () => t2.shape), e5.keyof = () => Cf(Object.keys(e5._zod.def.shape)), e5.catchall = (t3) => e5.clone({ ...e5._zod.def, catchall: t3 }), e5.passthrough = () => e5.clone({ ...e5._zod.def, catchall: z() }), e5.loose = () => e5.clone({ ...e5._zod.def, catchall: z() }), e5.strict = () => e5.clone({ ...e5._zod.def, catchall: Yd() }), e5.strip = () => e5.clone({ ...e5._zod.def, catchall: void 0 }), e5.extend = (t3) => Oe(e5, t3), e5.safeExtend = (t3) => ke(e5, t3), e5.merge = (t3) => Ae(e5, t3), e5.pick = (t3) => Ee(e5, t3), e5.omit = (t3) => De(e5, t3), e5.partial = (...t3) => je(Af, e5, t3[0]), e5.required = (...t3) => Me(Bf, e5, t3[0]);
5232
5232
  });
5233
5233
  function V(e5, t2) {
5234
5234
  return new nf({ type: "object", shape: e5 == null ? {} : e5, ...D(t2) });
@@ -6331,7 +6331,15 @@ async function n_(e5, t2, n2 = "") {
6331
6331
  }
6332
6332
  return r2.value;
6333
6333
  }
6334
- var r_ = class e3 extends Og {
6334
+ function r_(e5, t2 = document.documentElement) {
6335
+ for (let [n2, r2] of Object.entries(e5)) r2 !== void 0 && t2.style.setProperty(n2, r2);
6336
+ }
6337
+ function i_(e5) {
6338
+ if (document.getElementById("__mcp-host-fonts")) return;
6339
+ let t2 = document.createElement("style");
6340
+ t2.id = "__mcp-host-fonts", t2.textContent = e5, document.head.appendChild(t2);
6341
+ }
6342
+ var a_ = class e3 extends Og {
6335
6343
  _assertInitialized(e5) {
6336
6344
  var t2;
6337
6345
  if (this._initializedSent) return;
@@ -6563,14 +6571,14 @@ var r_ = class e3 extends Og {
6563
6571
  }
6564
6572
  }
6565
6573
  };
6566
- o(r_, "ONE_SHOT_EVENTS", /* @__PURE__ */ new Set(["toolinput", "toolinputpartial", "toolresult", "toolcancelled"]));
6567
- function i_(e5, t2) {
6574
+ o(a_, "ONE_SHOT_EVENTS", /* @__PURE__ */ new Set(["toolinput", "toolinputpartial", "toolresult", "toolcancelled"]));
6575
+ function o_(e5, t2) {
6568
6576
  var n2, r2, i2, a2, o2, s2;
6569
6577
  let c2 = document.getElementById(t2), l2 = c2 == null ? void 0 : c2.querySelector("#btn-zoom-in"), u2 = c2 == null ? void 0 : c2.querySelector("#btn-zoom-out"), d2 = c2 == null ? void 0 : c2.querySelector("#btn-reset-view");
6570
6578
  c2 && (c2.hidden = false);
6571
6579
  let f2 = (n2 = (r2 = e5.getAttribute("viewBox")) == null ? void 0 : r2.split(/[\s,]+/).map(Number)) == null ? [0, 0, 500, 500] : n2, p2 = (i2 = f2[0]) == null ? 0 : i2, m2 = (a2 = f2[1]) == null ? 0 : a2, h2 = (o2 = f2[2]) == null ? 500 : o2, g2 = (s2 = f2[3]) == null ? 500 : s2, _2 = h2 / 5, v2 = h2 * 2, ee2 = p2, y2 = m2, b2 = h2, x2 = g2;
6572
- e5.style.touchAction = "none";
6573
- let S2 = () => e5.setAttribute("viewBox", "".concat(ee2, " ").concat(y2, " ").concat(b2, " ").concat(x2)), C2 = (e6, t3, n3) => {
6580
+ e5.classList.add("oe-pannable");
6581
+ let te2 = () => document.body.classList.contains("is-fullscreen"), S2 = () => e5.setAttribute("viewBox", "".concat(ee2, " ").concat(y2, " ").concat(b2, " ").concat(x2)), C2 = (e6, t3, n3) => {
6574
6582
  t3 === void 0 && (t3 = ee2 + b2 / 2), n3 === void 0 && (n3 = y2 + x2 / 2);
6575
6583
  let r3 = b2 * e6;
6576
6584
  r3 < _2 && (r3 = _2), r3 > v2 && (r3 = v2), r3 !== b2 && (e6 = r3 / b2, ee2 = t3 - (t3 - ee2) * e6, y2 = n3 - (n3 - y2) * e6, b2 = r3, x2 *= e6, S2());
@@ -6578,119 +6586,121 @@ function i_(e5, t2) {
6578
6586
  l2 == null || l2.addEventListener("click", () => C2(0.8)), u2 == null || u2.addEventListener("click", () => C2(1.25)), d2 == null || d2.addEventListener("click", () => {
6579
6587
  ee2 = p2, y2 = m2, b2 = h2, x2 = g2, S2();
6580
6588
  });
6581
- let w2 = (t3, n3) => {
6589
+ let ne2 = (t3, n3) => {
6582
6590
  let r3 = e5.getBoundingClientRect();
6583
6591
  return { x: ee2 + (t3 - r3.left) / r3.width * b2, y: y2 + (n3 - r3.top) / r3.height * x2 };
6584
6592
  };
6585
6593
  e5.addEventListener("wheel", (e6) => {
6594
+ if (!te2() && !e6.ctrlKey && !e6.metaKey) return;
6586
6595
  e6.preventDefault();
6587
- let t3 = Math.exp((e6.deltaY < 0 ? -1 : 1) * 0.1), n3 = w2(e6.clientX, e6.clientY);
6596
+ let t3 = Math.exp((e6.deltaY < 0 ? -1 : 1) * 0.1), n3 = ne2(e6.clientX, e6.clientY);
6588
6597
  C2(t3, n3.x, n3.y);
6589
6598
  }, { passive: false });
6590
- let te2 = /* @__PURE__ */ new Map(), ne2 = null, T2 = () => {
6591
- let [e6, t3] = [...te2.values()];
6599
+ let re2 = /* @__PURE__ */ new Map(), w2 = null, ie2 = () => {
6600
+ let [e6, t3] = [...re2.values()];
6592
6601
  return { dist: Math.hypot(e6.x - t3.x, e6.y - t3.y), midX: (e6.x + t3.x) / 2, midY: (e6.y + t3.y) / 2 };
6593
- }, re2 = (t3, n3) => {
6602
+ }, T2 = (t3, n3) => {
6594
6603
  let r3 = e5.getBoundingClientRect();
6595
6604
  ee2 -= t3 / r3.width * b2, y2 -= n3 / r3.height * x2, S2();
6596
6605
  };
6597
6606
  e5.addEventListener("pointerdown", (t3) => {
6607
+ if (t3.pointerType === "touch" && !te2()) return;
6598
6608
  let n3 = t3.target, r3 = !!(n3.closest && (n3.closest('[class*="-hit"]') || n3.closest('[class*="-activation"]') || n3.closest(".variable-arrow") || n3.closest("button")));
6599
- te2.set(t3.pointerId, { x: t3.clientX, y: t3.clientY, interactive: r3 }), r3 || (e5.setPointerCapture(t3.pointerId), e5.style.cursor = "grabbing"), te2.size === 2 && (ne2 = T2());
6609
+ re2.set(t3.pointerId, { x: t3.clientX, y: t3.clientY, interactive: r3 }), r3 || (e5.setPointerCapture(t3.pointerId), e5.style.cursor = "grabbing"), re2.size === 2 && (w2 = ie2());
6600
6610
  }), e5.addEventListener("pointermove", (e6) => {
6601
- let t3 = te2.get(e6.pointerId);
6602
- if (t3) if (te2.set(e6.pointerId, { x: e6.clientX, y: e6.clientY, interactive: t3.interactive }), te2.size >= 2 && ne2) {
6603
- let e7 = T2();
6604
- if (ne2.dist > 0 && e7.dist > 0) {
6605
- let t4 = w2(e7.midX, e7.midY);
6606
- C2(ne2.dist / e7.dist, t4.x, t4.y);
6607
- }
6608
- re2(e7.midX - ne2.midX, e7.midY - ne2.midY), ne2 = e7;
6609
- } else te2.size === 1 && !t3.interactive && re2(e6.clientX - t3.x, e6.clientY - t3.y);
6611
+ let t3 = re2.get(e6.pointerId);
6612
+ if (t3) if (re2.set(e6.pointerId, { x: e6.clientX, y: e6.clientY, interactive: t3.interactive }), re2.size >= 2 && w2) {
6613
+ let e7 = ie2();
6614
+ if (w2.dist > 0 && e7.dist > 0) {
6615
+ let t4 = ne2(e7.midX, e7.midY);
6616
+ C2(w2.dist / e7.dist, t4.x, t4.y);
6617
+ }
6618
+ T2(e7.midX - w2.midX, e7.midY - w2.midY), w2 = e7;
6619
+ } else re2.size === 1 && !t3.interactive && T2(e6.clientX - t3.x, e6.clientY - t3.y);
6610
6620
  });
6611
6621
  let E2 = (t3) => {
6612
- te2.delete(t3.pointerId) && (e5.hasPointerCapture(t3.pointerId) && e5.releasePointerCapture(t3.pointerId), ne2 = te2.size >= 2 ? T2() : null, te2.size === 0 && (e5.style.cursor = "default"));
6622
+ re2.delete(t3.pointerId) && (e5.hasPointerCapture(t3.pointerId) && e5.releasePointerCapture(t3.pointerId), w2 = re2.size >= 2 ? ie2() : null, re2.size === 0 && (e5.style.cursor = "default"));
6613
6623
  };
6614
6624
  e5.addEventListener("pointerup", E2), e5.addEventListener("pointercancel", E2);
6615
6625
  }
6616
- var a_ = '"Segoe UI Symbol", "Noto Sans Symbols", "Noto Sans Symbols2", "Apple Symbols", "DejaVu Sans", serif', o_ = { background: "#1b1b1d", foreground: "#f7f3f0", dim: "#6f7580", fire: "#d9506f", earth: "#22a67a", air: "#dcb238", water: "#3f93c2", points: "#2f89ab", others: "#d69a3a", house: "#7a8695", transit: "#c19bf2", fireTint: "rgba(217,80,111,0.20)", earthTint: "rgba(34,166,122,0.20)", airTint: "rgba(220,178,56,0.20)", waterTint: "rgba(63,147,194,0.20)", zodiacFillOpacity: 0.34, houseFillOpacity: 0.1, houseStrokeOpacity: 0.45 }, s_ = { background: "#fffdf1", foreground: "#0b1220", dim: "#6b5c4a", fire: "#c9456f", earth: "#1f9968", air: "#c9a23c", water: "#1f7fa3", points: "#1f6f96", others: "#c9903f", house: "#6f8496", transit: "#7b3fb5", fireTint: "rgba(201,69,111,0.34)", earthTint: "rgba(31,153,104,0.34)", airTint: "rgba(201,162,60,0.38)", waterTint: "rgba(31,127,163,0.34)", zodiacFillOpacity: 0.48, houseFillOpacity: 0.2, houseStrokeOpacity: 0.95 };
6617
- function c_(e5) {
6618
- return e5 ? o_ : s_;
6626
+ var s_ = '"Segoe UI Symbol", "Noto Sans Symbols", "Noto Sans Symbols2", "Apple Symbols", "DejaVu Sans", serif', c_ = { background: "#1b1b1d", foreground: "#f7f3f0", dim: "#6f7580", fire: "#d9506f", earth: "#22a67a", air: "#dcb238", water: "#3f93c2", points: "#2f89ab", others: "#d69a3a", house: "#7a8695", transit: "#c19bf2", fireTint: "rgba(217,80,111,0.20)", earthTint: "rgba(34,166,122,0.20)", airTint: "rgba(220,178,56,0.20)", waterTint: "rgba(63,147,194,0.20)", zodiacFillOpacity: 0.34, houseFillOpacity: 0.1, houseStrokeOpacity: 0.45 }, l_ = { background: "#fffdf1", foreground: "#0b1220", dim: "#6b5c4a", fire: "#c9456f", earth: "#1f9968", air: "#c9a23c", water: "#1f7fa3", points: "#1f6f96", others: "#c9903f", house: "#6f8496", transit: "#7b3fb5", fireTint: "rgba(201,69,111,0.34)", earthTint: "rgba(31,153,104,0.34)", airTint: "rgba(201,162,60,0.38)", waterTint: "rgba(31,127,163,0.34)", zodiacFillOpacity: 0.48, houseFillOpacity: 0.2, houseStrokeOpacity: 0.95 };
6627
+ function u_(e5) {
6628
+ return e5 ? c_ : l_;
6619
6629
  }
6620
- function l_(e5, t2) {
6621
- let n2 = c_(t2);
6630
+ function d_(e5, t2) {
6631
+ let n2 = u_(t2);
6622
6632
  return [n2.fire, n2.earth, n2.air, n2.water][(e5 % 12 + 12) % 12 % 4];
6623
6633
  }
6624
- function u_(e5, t2) {
6625
- let n2 = c_(t2);
6634
+ function f_(e5, t2) {
6635
+ let n2 = u_(t2);
6626
6636
  return [n2.fireTint, n2.earthTint, n2.airTint, n2.waterTint][(e5 % 12 + 12) % 12 % 4];
6627
6637
  }
6628
- function d_(e5) {
6629
- let t2 = c_(e5);
6638
+ function p_(e5) {
6639
+ let t2 = u_(e5);
6630
6640
  return { ring: { stroke: t2.dim, opacity: 0.85 }, cuspIntermediate: { stroke: t2.dim, opacity: 0.85 }, cuspAngular: { stroke: t2.foreground, opacity: 0.75 }, tickMajor: { stroke: t2.foreground, opacity: 0.73 }, tickMinor: { stroke: t2.foreground, opacity: 0.48 }, cuspDash: (e6) => "".concat((e6 * 1.5).toFixed(2), " ").concat((e6 * 3).toFixed(2)), center: e5 ? t2.background : "#efeae1" };
6631
6641
  }
6632
- var f_;
6633
- function p_() {
6634
- return f_ ? f_ === "dark" : window.matchMedia("(prefers-color-scheme: dark)").matches;
6642
+ var m_;
6643
+ function h_() {
6644
+ return m_ ? m_ === "dark" : window.matchMedia("(prefers-color-scheme: dark)").matches;
6635
6645
  }
6636
- function m_(e5 = p_()) {
6646
+ function g_(e5 = h_()) {
6637
6647
  let t2 = e5 ? "dark" : "light";
6638
6648
  return document.documentElement.setAttribute("data-theme", t2), t2;
6639
6649
  }
6640
- function h_(e5) {
6641
- m_();
6650
+ function __(e5) {
6651
+ g_();
6642
6652
  try {
6643
6653
  window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (t2) => {
6644
- f_ || e5 == null || e5(m_(t2.matches));
6654
+ m_ || e5 == null || e5(g_(t2.matches));
6645
6655
  });
6646
6656
  } catch (e6) {
6647
6657
  }
6648
6658
  }
6649
- function g_(e5, t2) {
6659
+ function v_(e5, t2) {
6650
6660
  var n2, r2;
6651
6661
  let i2 = (e6) => {
6652
6662
  let n3 = e6 == null ? void 0 : e6.theme;
6653
6663
  if (n3 !== "light" && n3 !== "dark") return;
6654
- f_ = n3;
6655
- let r3 = document.documentElement.getAttribute("data-theme"), i3 = m_(n3 === "dark");
6664
+ m_ = n3;
6665
+ let r3 = document.documentElement.getAttribute("data-theme"), i3 = g_(n3 === "dark");
6656
6666
  i3 !== r3 && (t2 == null || t2(i3));
6657
6667
  };
6658
6668
  (n2 = e5.addEventListener) == null || n2.call(e5, "hostcontextchanged", i2), i2((r2 = e5.getHostContext) == null ? void 0 : r2.call(e5));
6659
6669
  }
6660
- function __(e5, t2) {
6670
+ function y_(e5, t2) {
6661
6671
  if (e5.length <= 1) {
6662
6672
  let t3 = /* @__PURE__ */ new Map();
6663
6673
  for (let n3 of e5) t3.set(n3.name, n3.longitude);
6664
6674
  return t3;
6665
6675
  }
6666
6676
  let n2 = [...e5].sort((e6, t3) => e6.longitude - t3.longitude), r2 = [], i2 = [];
6667
- for (let e6 of n2) r2.push(e6.longitude), i2.push(v_(e6.longitude, i2, t2));
6668
- b_(i2, r2, t2);
6677
+ for (let e6 of n2) r2.push(e6.longitude), i2.push(b_(e6.longitude, i2, t2));
6678
+ S_(i2, r2, t2);
6669
6679
  let a2 = /* @__PURE__ */ new Map();
6670
- for (let e6 = 0; e6 < n2.length; e6++) a2.set(n2[e6].name, S_(i2[e6]));
6680
+ for (let e6 = 0; e6 < n2.length; e6++) a2.set(n2[e6].name, w_(i2[e6]));
6671
6681
  return a2;
6672
6682
  }
6673
- function v_(e5, t2, n2) {
6683
+ function b_(e5, t2, n2) {
6674
6684
  if (t2.length === 0) return e5;
6675
6685
  let r2 = Math.max(0.55, n2 / 4), i2 = Math.max(8, Math.min(40, n2 * 5)), a2 = Math.floor(i2 / r2);
6676
- if (y_(e5, t2, n2)) return e5;
6686
+ if (x_(e5, t2, n2)) return e5;
6677
6687
  for (let i3 = 1; i3 <= a2; i3++) {
6678
6688
  let a3 = i3 * r2;
6679
- if (y_(e5 + a3, t2, n2)) return e5 + a3;
6680
- if (y_(e5 - a3, t2, n2)) return e5 - a3;
6689
+ if (x_(e5 + a3, t2, n2)) return e5 + a3;
6690
+ if (x_(e5 - a3, t2, n2)) return e5 - a3;
6681
6691
  }
6682
6692
  return e5;
6683
6693
  }
6684
- function y_(e5, t2, n2) {
6685
- for (let r2 of t2) if (x_(e5, r2) < n2) return false;
6694
+ function x_(e5, t2, n2) {
6695
+ for (let r2 of t2) if (C_(e5, r2) < n2) return false;
6686
6696
  return true;
6687
6697
  }
6688
- function b_(e5, t2, n2) {
6698
+ function S_(e5, t2, n2) {
6689
6699
  let r2 = e5.length;
6690
6700
  if (!(r2 <= 1)) for (let t3 = 0; t3 < 80; t3++) {
6691
6701
  let t4 = true;
6692
6702
  for (let i2 = 0; i2 < r2; i2++) for (let a2 = i2 + 1; a2 < r2; a2++) {
6693
- let r3 = n2 - x_(e5[i2], e5[a2]);
6703
+ let r3 = n2 - C_(e5[i2], e5[a2]);
6694
6704
  if (r3 > 0.01) {
6695
6705
  t4 = false;
6696
6706
  let n3 = r3 * 0.65 / 2, o2 = e5[a2] - e5[i2];
@@ -6702,93 +6712,128 @@ function b_(e5, t2, n2) {
6702
6712
  if (t4) break;
6703
6713
  }
6704
6714
  }
6705
- function x_(e5, t2) {
6715
+ function C_(e5, t2) {
6706
6716
  let n2 = ((t2 - e5) % 360 + 540) % 360 - 180;
6707
6717
  return Math.abs(n2);
6708
6718
  }
6709
- function S_(e5) {
6719
+ function w_(e5) {
6710
6720
  return (e5 % 360 + 360) % 360;
6711
6721
  }
6712
- var C_ = 250, w_ = 250, T_ = 240, E_ = 204, D_ = 190, O_ = 152, k_ = 118, A_ = 112, j_ = 15, M_ = 20;
6722
+ var T_ = "north node (mean)", E_ = "north node (true)", D_ = "south node (mean)", O_ = "south node (true)", k_ = [T_, E_, D_, O_], A_ = { [T_]: T_, north_node_mean: T_, "north node": T_, north_node: T_, "mean node": T_, mean_node: T_, [E_]: E_, north_node_true: E_, "true node": E_, true_node: E_, [D_]: D_, south_node_mean: D_, "south node": D_, south_node: D_, [O_]: O_, south_node_true: O_, "true south node": O_, true_south_node: O_ };
6723
+ function j_(e5) {
6724
+ var t2;
6725
+ return (t2 = A_[e5.trim().toLowerCase()]) == null ? null : t2;
6726
+ }
6727
+ function M_(e5) {
6728
+ return j_(e5) !== null;
6729
+ }
6730
+ var N_ = { [T_]: "\u260A\uFE0E", [E_]: "\u260A\uFE0E", [D_]: "\u260B\uFE0E", [O_]: "\u260B\uFE0E" }, P_ = { [T_]: "soul direction", [E_]: "soul direction", [D_]: "past-life gifts", [O_]: "past-life gifts" };
6731
+ function F_(e5) {
6732
+ let t2 = /* @__PURE__ */ new Set();
6733
+ for (let n2 of e5) {
6734
+ let e6 = j_(n2);
6735
+ e6 && t2.add(e6);
6736
+ }
6737
+ return t2.has("north node (mean)") && t2.has("north node (true)") || t2.has("south node (mean)") && t2.has("south node (true)");
6738
+ }
6739
+ function I_(e5, t2) {
6740
+ let n2 = new Set(e5.map((e6) => j_(e6.name)).filter(Boolean)), r2 = /* @__PURE__ */ new Set(), i2 = [[T_, E_], [D_, O_]];
6741
+ for (let [e6, a2] of i2) n2.has(e6) && n2.has(a2) && r2.add(t2 === "true" ? e6 : a2);
6742
+ return r2.size === 0 ? e5 : e5.filter((e6) => {
6743
+ var t3;
6744
+ return !r2.has((t3 = j_(e6.name)) == null ? "" : t3);
6745
+ });
6746
+ }
6747
+ var L_ = "lilith (mean)", R_ = "lilith (true)", z_ = "lilith (interpolated)", B_ = [L_, R_, z_], V_ = { [L_]: L_, lilith: L_, mean_lilith: L_, lilith_mean: L_, "mean apogee": L_, "black moon lilith": L_, [R_]: R_, lilith_true: R_, true_lilith: R_, "osculating apogee": R_, [z_]: z_, lilith_interpolated: z_, lilith_natural: z_, "interpolated apogee": z_ };
6748
+ function H_(e5) {
6749
+ var t2;
6750
+ return (t2 = V_[e5.trim().toLowerCase()]) == null ? null : t2;
6751
+ }
6752
+ var U_ = { [L_]: "\u26B8\uFE0E", [R_]: "\u26B8\uFE0E", [z_]: "\u26B8\uFE0E" }, W_ = { [L_]: "primal feminine & shadow", [R_]: "primal feminine & shadow", [z_]: "primal feminine & shadow" };
6753
+ function G_(e5) {
6754
+ var t2, n2;
6755
+ return (t2 = (n2 = j_(e5)) == null ? H_(e5) : n2) == null ? e5 : t2;
6756
+ }
6757
+ var K_ = 250, q_ = 250, J_ = 240, Y_ = 204, X_ = 190, Z_ = 152, Q_ = 118, $_ = 112, ev = 15, tv = 20;
6713
6758
  function Y(e5, t2, n2) {
6714
6759
  let r2 = -(e5 - n2 + 180) * Math.PI / 180;
6715
- return { x: C_ + t2 * Math.cos(r2), y: w_ + t2 * Math.sin(r2) };
6760
+ return { x: K_ + t2 * Math.cos(r2), y: q_ + t2 * Math.sin(r2) };
6716
6761
  }
6717
6762
  function X(e5) {
6718
6763
  return document.createElementNS("http://www.w3.org/2000/svg", e5);
6719
6764
  }
6720
- function N_(e5, t2, n2, r2, i2) {
6765
+ function nv(e5, t2, n2, r2, i2) {
6721
6766
  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);
6722
6767
  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(" ");
6723
6768
  }
6724
- var P_ = { sun: "\u2609\uFE0E", moon: "\u263D\uFE0E", mercury: "\u263F\uFE0E", venus: "\u2640\uFE0E", mars: "\u2642\uFE0E", jupiter: "\u2643\uFE0E", saturn: "\u2644\uFE0E", uranus: "\u2645\uFE0E", neptune: "\u2646\uFE0E", pluto: "\u2647\uFE0E", "north node": "\u260A\uFE0E", "south node": "\u260B\uFE0E", chiron: "\u26B7\uFE0E", "true node": "\u260A\uFE0E", mean_lilith: "\u26B8\uFE0E", lilith: "\u26B8\uFE0E", true_lilith: "\u26B8\uFE0E", ceres: "\u26B3\uFE0E", juno: "\u26B5\uFE0E", vesta: "\u26B6\uFE0E", pallas: "\u26B4\uFE0E", pholus: "\u2BDB\uFE0E", vertex: "Vx", part_of_fortune: "\u2295\uFE0E", "part of fortune": "\u2295\uFE0E", eris: "\u2BF0\uFE0E", sedna: "\u2BF2\uFE0E" }, F_ = ["\u2648", "\u2649", "\u264A", "\u264B", "\u264C", "\u264D", "\u264E", "\u264F", "\u2650", "\u2651", "\u2652", "\u2653"].map((e5) => e5 + "\uFE0E"), I_ = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"], L_ = { conjunction: "\u260C", opposition: "\u260D", trine: "\u25B3", square: "\u25A1", sextile: "\u26B9", quincunx: "\u26BB", semisquare: "\u2220" };
6725
- function R_(e5) {
6769
+ var rv = { 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", ...N_, ...U_, mean_lilith: "\u26B8\uFE0E", lilith: "\u26B8\uFE0E", true_lilith: "\u26B8\uFE0E", ceres: "\u26B3\uFE0E", juno: "\u26B5\uFE0E", vesta: "\u26B6\uFE0E", pallas: "\u26B4\uFE0E", pholus: "\u2BDB\uFE0E", vertex: "Vx", part_of_fortune: "\u2295\uFE0E", "part of fortune": "\u2295\uFE0E", eris: "\u2BF0\uFE0E", sedna: "\u2BF2\uFE0E" }, iv = ["\u2648", "\u2649", "\u264A", "\u264B", "\u264C", "\u264D", "\u264E", "\u264F", "\u2650", "\u2651", "\u2652", "\u2653"].map((e5) => e5 + "\uFE0E"), av = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"], ov = { conjunction: "\u260C", opposition: "\u260D", trine: "\u25B3", square: "\u25A1", sextile: "\u26B9", quincunx: "\u26BB", semisquare: "\u2220" };
6770
+ function sv(e5) {
6726
6771
  var t2;
6727
6772
  let n2 = e5.toLowerCase(), r2 = "--aspect-".concat(n2);
6728
6773
  return getComputedStyle(document.documentElement).getPropertyValue(r2).trim() || ((t2 = { conjunction: "#9a7fd4", opposition: "#e05252", trine: "#52a8e0", square: "#e08a52", sextile: "#52c07a", quincunx: "#c0b052", semisquare: "#b07a5a" }[n2]) == null ? "#888" : t2);
6729
6774
  }
6730
- var z_ = p_, B_ = (e5) => l_(e5, z_());
6731
- function V_(e5) {
6775
+ var cv = h_, lv = (e5) => d_(e5, cv());
6776
+ function uv(e5) {
6732
6777
  let t2 = "--planet-".concat(e5.toLowerCase().replace(/\s+/g, "-"));
6733
6778
  return getComputedStyle(document.documentElement).getPropertyValue(t2).trim() || "var(--text)";
6734
6779
  }
6735
- var H_ = /* @__PURE__ */ new Set(["sun", "moon", "mercury", "venus", "mars", "jupiter", "saturn", "uranus", "neptune", "pluto", "chiron", "north node", "south node", "true node"]), U_ = /* @__PURE__ */ new Set(["mean_lilith", "lilith", "true_lilith", "ceres", "juno", "vesta", "pallas", "pholus", "vertex", "part_of_fortune", "part of fortune", "eris", "sedna"]), W_ = /* @__PURE__ */ new Set([...H_, ...U_]);
6736
- function G_(e5) {
6780
+ var dv = /* @__PURE__ */ new Set(["sun", "moon", "mercury", "venus", "mars", "jupiter", "saturn", "uranus", "neptune", "pluto", "chiron", "north node", "south node", "true node", ...k_]), fv = /* @__PURE__ */ new Set(["mean_lilith", "lilith", "true_lilith", ...B_, "ceres", "juno", "vesta", "pallas", "pholus", "vertex", "part_of_fortune", "part of fortune", "eris", "sedna"]), pv = /* @__PURE__ */ new Set([...dv, ...fv]);
6781
+ function mv(e5) {
6737
6782
  let t2 = (e5 % 360 + 360) % 360, n2 = Math.floor(t2 / 30), r2 = Math.floor(t2 % 30);
6738
- return "".concat(r2, "\xB0").concat(Math.floor((t2 % 30 - r2) * 60).toString().padStart(2, "0"), "\u2032 ").concat(I_[n2]);
6783
+ return "".concat(r2, "\xB0").concat(Math.floor((t2 % 30 - r2) * 60).toString().padStart(2, "0"), "\u2032 ").concat(av[n2]);
6739
6784
  }
6740
6785
  function Z(e5) {
6741
6786
  return e5.replace(/\b\w/g, (e6) => e6.toUpperCase());
6742
6787
  }
6743
- var K_ = "true";
6744
- function q_(e5) {
6745
- K_ = e5;
6788
+ var hv = "true";
6789
+ function gv(e5) {
6790
+ hv = e5;
6746
6791
  }
6747
- function J_(e5) {
6748
- let t2 = e5.some((e6) => e6.name.toLowerCase() === "true node"), n2 = e5.some((e6) => e6.name.toLowerCase() === "north node");
6749
- if (!t2 || !n2) return e5;
6750
- let r2 = K_ === "true" ? "north node" : "true node";
6751
- return e5.filter((e6) => e6.name.toLowerCase() !== r2);
6792
+ function _v(e5) {
6793
+ return I_(e5.map((e6) => {
6794
+ let t2 = G_(e6.name);
6795
+ return t2 === e6.name ? e6 : { ...e6, name: t2 };
6796
+ }), hv);
6752
6797
  }
6753
- function Y_(e5) {
6754
- return Array.isArray(e5) ? J_(e5) : e5 && typeof e5 == "object" ? J_(Object.entries(e5).filter(([e6]) => W_.has(e6.toLowerCase())).map(([e6, t2]) => {
6798
+ function vv(e5) {
6799
+ return Array.isArray(e5) ? _v(e5) : e5 && typeof e5 == "object" ? _v(Object.entries(e5).filter(([e6]) => pv.has(e6.toLowerCase())).map(([e6, t2]) => {
6755
6800
  var n2, r2, i2, a2, o2, s2;
6756
6801
  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 };
6757
6802
  })) : [];
6758
6803
  }
6759
- var X_ = document.getElementById("tooltip");
6760
- function Z_(e5, t2, n2, r2, i2) {
6761
- X_.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 ");
6762
- let a2 = X_.getBoundingClientRect(), o2 = a2.width || 220, s2 = a2.height || 80, c2 = e5 + 14, l2 = t2 + 14;
6763
- c2 + o2 > window.innerWidth - 14 && (c2 = e5 - o2 - 14), l2 + s2 > window.innerHeight - 14 && (l2 = t2 - s2 - 14), X_.style.left = "".concat(Math.max(14, c2), "px"), X_.style.top = "".concat(Math.max(14, l2), "px"), X_.classList.add("visible");
6804
+ var yv = document.getElementById("tooltip");
6805
+ function bv(e5, t2, n2, r2, i2) {
6806
+ yv.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 ");
6807
+ let a2 = yv.getBoundingClientRect(), o2 = a2.width || 220, s2 = a2.height || 80, c2 = e5 + 14, l2 = t2 + 14;
6808
+ c2 + o2 > window.innerWidth - 14 && (c2 = e5 - o2 - 14), l2 + s2 > window.innerHeight - 14 && (l2 = t2 - s2 - 14), yv.style.left = "".concat(Math.max(14, c2), "px"), yv.style.top = "".concat(Math.max(14, l2), "px"), yv.classList.add("visible");
6764
6809
  }
6765
- function Q_() {
6766
- X_.classList.remove("visible");
6810
+ function xv() {
6811
+ yv.classList.remove("visible");
6767
6812
  }
6768
- var $_ = { 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", mean_lilith: "primal feminine & shadow", lilith: "primal feminine & shadow", true_lilith: "primal feminine & shadow", ceres: "nurturing & sustenance", juno: "partnership & commitment", vesta: "devotion & sacred focus", pallas: "wisdom & strategy", pholus: "catalyst & small cause, big effect", vertex: "fated encounters", part_of_fortune: "joy & worldly success", "part of fortune": "joy & worldly success", eris: "discord & radical individuation", sedna: "deep betrayal & transcendence" }, ev = { 1: "self & first impressions", 2: "resources & values", 3: "communication & learning", 4: "home & roots", 5: "creativity & joy", 6: "health & service", 7: "partnerships & others", 8: "transformation & shared resources", 9: "philosophy & exploration", 10: "career & public role", 11: "community & ideals", 12: "solitude & the unconscious" }, tv = { Aries: "initiative & courage", Taurus: "stability & patience", Gemini: "curiosity & adaptability", Cancer: "nurturing & emotional depth", Leo: "self-expression & confidence", Virgo: "precision & service", Libra: "harmony & relationships", Scorpio: "intensity & transformation", Sagittarius: "expansion & seeking", Capricorn: "discipline & ambition", Aquarius: "innovation & vision", Pisces: "empathy & imagination" }, nv = { conjunction: "fusion & amplification", opposition: "polarity & integration", trine: "ease & natural flow", square: "tension & growth", sextile: "opportunity & cooperation", quincunx: "adjustment & recalibration", semisquare: "friction & minor tension" };
6769
- function rv(e5) {
6813
+ var Sv = { 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", ...P_, ...W_, mean_lilith: "primal feminine & shadow", lilith: "primal feminine & shadow", true_lilith: "primal feminine & shadow", ceres: "nurturing & sustenance", juno: "partnership & commitment", vesta: "devotion & sacred focus", pallas: "wisdom & strategy", pholus: "catalyst & small cause, big effect", vertex: "fated encounters", part_of_fortune: "joy & worldly success", "part of fortune": "joy & worldly success", eris: "discord & radical individuation", sedna: "deep betrayal & transcendence" }, Cv = { 1: "self & first impressions", 2: "resources & values", 3: "communication & learning", 4: "home & roots", 5: "creativity & joy", 6: "health & service", 7: "partnerships & others", 8: "transformation & shared resources", 9: "philosophy & exploration", 10: "career & public role", 11: "community & ideals", 12: "solitude & the unconscious" }, wv = { Aries: "initiative & courage", Taurus: "stability & patience", Gemini: "curiosity & adaptability", Cancer: "nurturing & emotional depth", Leo: "self-expression & confidence", Virgo: "precision & service", Libra: "harmony & relationships", Scorpio: "intensity & transformation", Sagittarius: "expansion & seeking", Capricorn: "discipline & ambition", Aquarius: "innovation & vision", Pisces: "empathy & imagination" }, Tv = { conjunction: "fusion & amplification", opposition: "polarity & integration", trine: "ease & natural flow", square: "tension & growth", sextile: "opportunity & cooperation", quincunx: "adjustment & recalibration", semisquare: "friction & minor tension" };
6814
+ function Ev(e5) {
6770
6815
  return Math.floor((e5 % 360 + 360) % 360 / 30);
6771
6816
  }
6772
- var iv = { sun: [4], moon: [3], mercury: [2, 5], venus: [1, 6], mars: [0, 7], jupiter: [8, 11], saturn: [9, 10] }, av = { sun: 0, moon: 1, mercury: 5, venus: 11, mars: 9, jupiter: 3, saturn: 6 };
6773
- function ov(e5, t2) {
6774
- let n2 = e5.toLowerCase(), r2 = rv(t2), i2 = iv[n2];
6817
+ var Dv = { sun: [4], moon: [3], mercury: [2, 5], venus: [1, 6], mars: [0, 7], jupiter: [8, 11], saturn: [9, 10] }, Ov = { sun: 0, moon: 1, mercury: 5, venus: 11, mars: 9, jupiter: 3, saturn: 6 };
6818
+ function kv(e5, t2) {
6819
+ let n2 = e5.toLowerCase(), r2 = Ev(t2), i2 = Dv[n2];
6775
6820
  if (i2 != null && i2.includes(r2)) return { type: "domicile", label: "Domicile", emoji: "\u2302", cssClass: "dignity-domicile" };
6776
6821
  if (i2 && i2.map((e6) => (e6 + 6) % 12).includes(r2)) return { type: "detriment", label: "Detriment", emoji: "\u2B07", cssClass: "dignity-detriment" };
6777
- let a2 = av[n2];
6822
+ let a2 = Ov[n2];
6778
6823
  return a2 !== void 0 && a2 === r2 ? { type: "exaltation", label: "Exaltation", emoji: "\u2605", cssClass: "dignity-exaltation" } : a2 !== void 0 && (a2 + 6) % 12 === r2 ? { type: "fall", label: "Fall", emoji: "\u2193", cssClass: "dignity-fall" } : null;
6779
6824
  }
6780
- var sv = ["fire", "earth", "air", "water", "fire", "earth", "air", "water", "fire", "earth", "air", "water"], cv = ["cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable"];
6781
- function lv(e5, t2) {
6825
+ var Av = ["fire", "earth", "air", "water", "fire", "earth", "air", "water", "fire", "earth", "air", "water"], jv = ["cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable"];
6826
+ function Mv(e5, t2) {
6782
6827
  return [e5.toLowerCase(), t2.toLowerCase()].sort().join("|");
6783
6828
  }
6784
- function uv(e5, t2) {
6829
+ function Nv(e5, t2) {
6785
6830
  return e5.filter((e6) => {
6786
6831
  var n2;
6787
6832
  return ((n2 = e6.type) == null ? "" : n2).toLowerCase() === t2;
6788
6833
  });
6789
6834
  }
6790
- function dv(e5, t2) {
6791
- let n2 = [], r2 = uv(e5, "square"), i2 = uv(e5, "opposition"), a2 = uv(e5, "trine"), o2 = uv(e5, "sextile"), s2 = uv(e5, "quincunx"), c2 = /* @__PURE__ */ new Set();
6835
+ function Pv(e5, t2) {
6836
+ let n2 = [], r2 = Nv(e5, "square"), i2 = Nv(e5, "opposition"), a2 = Nv(e5, "trine"), o2 = Nv(e5, "sextile"), s2 = Nv(e5, "quincunx"), c2 = /* @__PURE__ */ new Set();
6792
6837
  for (let e6 of i2) {
6793
6838
  let i3 = e6.planet1.toLowerCase(), a3 = e6.planet2.toLowerCase(), o3 = r2.filter((e7) => e7.planet1.toLowerCase() === i3 || e7.planet2.toLowerCase() === i3);
6794
6839
  for (let e7 of o3) {
@@ -6797,8 +6842,8 @@ function dv(e5, t2) {
6797
6842
  let s3 = [i3, a3, o4].sort().join("|");
6798
6843
  if (!c2.has(s3) && r2.find((e8) => e8.planet1.toLowerCase() === o4 && e8.planet2.toLowerCase() === a3 || e8.planet2.toLowerCase() === o4 && e8.planet1.toLowerCase() === a3)) {
6799
6844
  c2.add(s3);
6800
- let e8 = t2.find((e9) => e9.name.toLowerCase() === o4), r3 = e8 ? Z(cv[rv(e8.longitude)]) : "";
6801
- n2.push({ name: "T-Square", description: "".concat(r3 ? r3 + " \xB7 " : "", "Apex: ").concat(Z(o4)), planets: [.../* @__PURE__ */ new Set([i3, a3, o4])], aspectKeys: [lv(i3, a3), lv(i3, o4), lv(a3, o4)] });
6845
+ let e8 = t2.find((e9) => e9.name.toLowerCase() === o4), r3 = e8 ? Z(jv[Ev(e8.longitude)]) : "";
6846
+ n2.push({ name: "T-Square", description: "".concat(r3 ? r3 + " \xB7 " : "", "Apex: ").concat(Z(o4)), planets: [.../* @__PURE__ */ new Set([i3, a3, o4])], aspectKeys: [Mv(i3, a3), Mv(i3, o4), Mv(a3, o4)] });
6802
6847
  break;
6803
6848
  }
6804
6849
  }
@@ -6808,7 +6853,7 @@ function dv(e5, t2) {
6808
6853
  let r3 = a2[e6], i3 = a2[t3], o3 = [r3.planet1.toLowerCase(), r3.planet2.toLowerCase()], s3 = [i3.planet1.toLowerCase(), i3.planet2.toLowerCase()], c3 = o3.find((e7) => s3.includes(e7));
6809
6854
  if (!c3) continue;
6810
6855
  let u3 = o3.find((e7) => e7 !== c3), d3 = s3.find((e7) => e7 !== c3), f3 = [u3, c3, d3].sort().join("|");
6811
- l2.has(f3) || a2.find((e7) => e7.planet1.toLowerCase() === u3 && e7.planet2.toLowerCase() === d3 || e7.planet2.toLowerCase() === u3 && e7.planet1.toLowerCase() === d3) && (l2.add(f3), n2.push({ name: "Grand Trine", description: "".concat(Z(u3), " \xB7 ").concat(Z(c3), " \xB7 ").concat(Z(d3)), planets: [u3, c3, d3], aspectKeys: [lv(u3, c3), lv(c3, d3), lv(u3, d3)] }));
6856
+ l2.has(f3) || a2.find((e7) => e7.planet1.toLowerCase() === u3 && e7.planet2.toLowerCase() === d3 || e7.planet2.toLowerCase() === u3 && e7.planet1.toLowerCase() === d3) && (l2.add(f3), n2.push({ name: "Grand Trine", description: "".concat(Z(u3), " \xB7 ").concat(Z(c3), " \xB7 ").concat(Z(d3)), planets: [u3, c3, d3], aspectKeys: [Mv(u3, c3), Mv(c3, d3), Mv(u3, d3)] }));
6812
6857
  }
6813
6858
  if (i2.length >= 2 && r2.length >= 4) for (let e6 = 0; e6 < i2.length; e6++) for (let a3 = e6 + 1; a3 < i2.length; a3++) {
6814
6859
  let o3 = i2[e6], s3 = i2[a3], [c3, l3] = [o3.planet1.toLowerCase(), o3.planet2.toLowerCase()], [u3, d3] = [s3.planet1.toLowerCase(), s3.planet2.toLowerCase()];
@@ -6819,19 +6864,19 @@ function dv(e5, t2) {
6819
6864
  var n3, r3;
6820
6865
  return { name: e8, lon: (n3 = (r3 = t2.find((t3) => t3.name.toLowerCase() === e8)) == null ? void 0 : r3.longitude) == null ? 0 : n3 };
6821
6866
  }).sort((e8, t3) => e8.lon - t3.lon).map((e8) => e8.name);
6822
- n2.push({ name: "Grand Cross", description: e7.map(Z).join(" \xB7 "), planets: [c3, l3, u3, d3], aspectKeys: [lv(c3, l3), lv(u3, d3), ...f3.map(([e8, t3]) => lv(e8, t3))] });
6867
+ n2.push({ name: "Grand Cross", description: e7.map(Z).join(" \xB7 "), planets: [c3, l3, u3, d3], aspectKeys: [Mv(c3, l3), Mv(u3, d3), ...f3.map(([e8, t3]) => Mv(e8, t3))] });
6823
6868
  }
6824
6869
  }
6825
- let u2 = /* @__PURE__ */ new Set(["north node", "south node", "true node", "chiron"]), d2 = t2.filter((e6) => !u2.has(e6.name.toLowerCase())).map((e6) => ({ name: e6.name.toLowerCase(), lon: e6.longitude })), f2 = /* @__PURE__ */ new Map();
6870
+ let u2 = /* @__PURE__ */ new Set(["chiron"]), d2 = t2.filter((e6) => !u2.has(e6.name.toLowerCase()) && !M_(e6.name)).map((e6) => ({ name: e6.name.toLowerCase(), lon: e6.longitude })), f2 = /* @__PURE__ */ new Map();
6826
6871
  for (let { name: e6, lon: t3 } of d2) {
6827
6872
  var p2;
6828
- let n3 = rv(t3), r3 = (p2 = f2.get(n3)) == null ? [] : p2;
6873
+ let n3 = Ev(t3), r3 = (p2 = f2.get(n3)) == null ? [] : p2;
6829
6874
  r3.push(e6), f2.set(n3, r3);
6830
6875
  }
6831
6876
  for (let [e6, t3] of f2) if (t3.length >= 3) {
6832
6877
  let r3 = [...t3].sort().join("|"), i3 = [];
6833
- for (let e7 = 0; e7 < t3.length; e7++) for (let n3 = e7 + 1; n3 < t3.length; n3++) i3.push(lv(t3[e7], t3[n3]));
6834
- n2.push({ name: "Stellium", description: "".concat(I_[e6], ": ").concat(t3.map(Z).join(", ")), planets: t3, aspectKeys: i3, _dedupeKey: r3 });
6878
+ for (let e7 = 0; e7 < t3.length; e7++) for (let n3 = e7 + 1; n3 < t3.length; n3++) i3.push(Mv(t3[e7], t3[n3]));
6879
+ n2.push({ name: "Stellium", description: "".concat(av[e6], ": ").concat(t3.map(Z).join(", ")), planets: t3, aspectKeys: i3, _dedupeKey: r3 });
6835
6880
  }
6836
6881
  let m2 = [...d2].sort((e6, t3) => e6.lon - t3.lon), h2 = [...m2, ...m2.map((e6) => ({ ...e6, lon: e6.lon + 360 }))], g2 = /* @__PURE__ */ new Set();
6837
6882
  for (let e6 = 0; e6 < h2.length - 2; e6++) {
@@ -6844,7 +6889,7 @@ function dv(e5, t2) {
6844
6889
  if (g2.has(t4)) continue;
6845
6890
  if (g2.add(t4), !n2.some((e8) => e8._dedupeKey === t4)) {
6846
6891
  let t5 = [];
6847
- for (let n3 = 0; n3 < e7.length; n3++) for (let r4 = n3 + 1; r4 < e7.length; r4++) t5.push(lv(e7[n3], e7[r4]));
6892
+ for (let n3 = 0; n3 < e7.length; n3++) for (let r4 = n3 + 1; r4 < e7.length; r4++) t5.push(Mv(e7[n3], e7[r4]));
6848
6893
  n2.push({ name: "Stellium", description: "Tight cluster: ".concat(e7.map(Z).join(", ")), planets: e7, aspectKeys: t5 });
6849
6894
  }
6850
6895
  }
@@ -6854,7 +6899,7 @@ function dv(e5, t2) {
6854
6899
  let r3 = s2[e6], i3 = s2[t3], a3 = [r3.planet1.toLowerCase(), r3.planet2.toLowerCase()], c3 = [i3.planet1.toLowerCase(), i3.planet2.toLowerCase()], l3 = a3.find((e7) => c3.includes(e7));
6855
6900
  if (!l3) continue;
6856
6901
  let u3 = a3.find((e7) => e7 !== l3), d3 = c3.find((e7) => e7 !== l3), f3 = [l3, u3, d3].sort().join("|");
6857
- _2.has(f3) || o2.find((e7) => e7.planet1.toLowerCase() === u3 && e7.planet2.toLowerCase() === d3 || e7.planet2.toLowerCase() === u3 && e7.planet1.toLowerCase() === d3) && (_2.add(f3), n2.push({ name: "Yod", description: "Apex: ".concat(Z(l3)), planets: [l3, u3, d3], aspectKeys: [lv(l3, u3), lv(l3, d3), lv(u3, d3)] }));
6902
+ _2.has(f3) || o2.find((e7) => e7.planet1.toLowerCase() === u3 && e7.planet2.toLowerCase() === d3 || e7.planet2.toLowerCase() === u3 && e7.planet1.toLowerCase() === d3) && (_2.add(f3), n2.push({ name: "Yod", description: "Apex: ".concat(Z(l3)), planets: [l3, u3, d3], aspectKeys: [Mv(l3, u3), Mv(l3, d3), Mv(u3, d3)] }));
6858
6903
  }
6859
6904
  let v2 = /* @__PURE__ */ new Set(), ee2 = n2.filter((e6) => e6.name === "Grand Trine");
6860
6905
  for (let e6 of ee2) {
@@ -6865,43 +6910,43 @@ function dv(e5, t2) {
6865
6910
  let p3 = o2.find((e7) => e7.planet1.toLowerCase() === f3 && e7.planet2.toLowerCase() === l3 || e7.planet2.toLowerCase() === f3 && e7.planet1.toLowerCase() === l3), m3 = o2.find((e7) => e7.planet1.toLowerCase() === f3 && e7.planet2.toLowerCase() === u3 || e7.planet2.toLowerCase() === f3 && e7.planet1.toLowerCase() === u3);
6866
6911
  if (!p3 || !m3) continue;
6867
6912
  let h3 = [t3, r3, a3, f3].sort().join("|");
6868
- v2.has(h3) || (v2.add(h3), n2.push({ name: "Kite", description: "Apex: ".concat(Z(f3), " \xB7 Tail: ").concat(Z(c3)), planets: [t3, r3, a3, f3], aspectKeys: [...e6.aspectKeys, lv(f3, c3), lv(f3, l3), lv(f3, u3)] }));
6913
+ v2.has(h3) || (v2.add(h3), n2.push({ name: "Kite", description: "Apex: ".concat(Z(f3), " \xB7 Tail: ").concat(Z(c3)), planets: [t3, r3, a3, f3], aspectKeys: [...e6.aspectKeys, Mv(f3, c3), Mv(f3, l3), Mv(f3, u3)] }));
6869
6914
  }
6870
6915
  }
6871
6916
  for (let e6 of n2) delete e6._dedupeKey;
6872
6917
  return n2;
6873
6918
  }
6874
- var fv = null, pv = null, Q = null, mv = null, hv = null, gv = null;
6875
- function _v(e5) {
6876
- gv = e5;
6919
+ var Fv = null, Iv = null, Q = null, Lv = null, Rv = null, zv = null;
6920
+ function Bv(e5) {
6921
+ zv = e5;
6877
6922
  }
6878
- var vv = /* @__PURE__ */ new Map();
6879
- function yv() {
6923
+ var Vv = /* @__PURE__ */ new Map();
6924
+ function Hv() {
6880
6925
  var e5;
6881
- if (fv) return fv;
6926
+ if (Fv) return Fv;
6882
6927
  let t2 = document.getElementById("info-panel");
6883
- if (t2) return fv = t2, fv;
6884
- fv = document.createElement("div"), fv.id = "info-panel", fv.className = "info-panel";
6928
+ if (t2) return Fv = t2, Fv;
6929
+ Fv = document.createElement("div"), Fv.id = "info-panel", Fv.className = "info-panel";
6885
6930
  let n2 = document.getElementById("chart-container");
6886
- return n2 != null && n2.parentElement ? n2.parentElement.insertBefore(fv, n2.nextSibling) : (e5 = document.getElementById("app")) == null || e5.appendChild(fv), fv;
6931
+ return n2 != null && n2.parentElement ? n2.parentElement.insertBefore(Fv, n2.nextSibling) : (e5 = document.getElementById("app")) == null || e5.appendChild(Fv), Fv;
6887
6932
  }
6888
- function bv(e5, t2, n2) {
6933
+ function Uv(e5, t2, n2) {
6889
6934
  var r2, i2, a2, o2;
6890
- let s2 = yv(), c2 = (r2 = P_[t2.name.toLowerCase()]) == null ? "\u2605" : r2, l2 = (i2 = F_[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "" : i2, u2 = ov(t2.name, t2.longitude), d2 = u2 ? '<span class="dignity-badge '.concat(u2.cssClass, '" title="').concat(u2.label, '">').concat(u2.emoji, " ").concat(u2.label, "</span>") : "", f2 = n2.filter((e6) => e6.planet1.toLowerCase() === t2.name.toLowerCase() || e6.planet2.toLowerCase() === t2.name.toLowerCase()).sort((e6, t3) => {
6935
+ let s2 = Hv(), c2 = (r2 = rv[t2.name.toLowerCase()]) == null ? "\u2605" : r2, l2 = (i2 = iv[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "" : i2, u2 = kv(t2.name, t2.longitude), d2 = u2 ? '<span class="dignity-badge '.concat(u2.cssClass, '" title="').concat(u2.label, '">').concat(u2.emoji, " ").concat(u2.label, "</span>") : "", f2 = n2.filter((e6) => e6.planet1.toLowerCase() === t2.name.toLowerCase() || e6.planet2.toLowerCase() === t2.name.toLowerCase()).sort((e6, t3) => {
6891
6936
  var n3, r3;
6892
6937
  return ((n3 = e6.orb) == null ? 99 : n3) - ((r3 = t3.orb) == null ? 99 : r3);
6893
6938
  }), p2 = f2.length ? f2.map((e6) => {
6894
6939
  var n3, r3, i3, a3, o3, s3, c3;
6895
- let l3 = e6.planet1.toLowerCase() === t2.name.toLowerCase() ? e6.planet2 : e6.planet1, u3 = (n3 = P_[l3.toLowerCase()]) == null ? l3 : n3, d3 = (r3 = (i3 = L_[(a3 = (o3 = e6.type) == null ? void 0 : o3.toLowerCase()) == null ? "" : a3]) == null ? e6.type : i3) == null ? "\u2014" : r3, f3 = (s3 = R_((c3 = e6.type) == null ? "" : c3)) == null ? "#888" : s3, p3 = e6.orb == null ? "" : "".concat(e6.orb.toFixed(1), "\xB0"), m3 = e6.applying === true ? "\u2197" : e6.applying === false ? "\u2198" : "\xB7";
6940
+ let l3 = e6.planet1.toLowerCase() === t2.name.toLowerCase() ? e6.planet2 : e6.planet1, u3 = (n3 = rv[l3.toLowerCase()]) == null ? l3 : n3, d3 = (r3 = (i3 = ov[(a3 = (o3 = e6.type) == null ? void 0 : o3.toLowerCase()) == null ? "" : a3]) == null ? e6.type : i3) == null ? "\u2014" : r3, f3 = (s3 = sv((c3 = e6.type) == null ? "" : c3)) == null ? "#888" : s3, p3 = e6.orb == null ? "" : "".concat(e6.orb.toFixed(1), "\xB0"), m3 = e6.applying === true ? "\u2197" : e6.applying === false ? "\u2198" : "\xB7";
6896
6941
  return '<div class="aspect-row">\n <span class="aspect-dot" style="background:'.concat(f3, '"></span>\n <span class="aspect-sym" style="color:').concat(f3, '">').concat(d3, '</span>\n <span class="aspect-other">').concat(u3, " ").concat(Z(l3), '</span>\n <span class="aspect-meta">').concat(p3, " ").concat(m3, "</span>\n </div>");
6897
- }).join("") : '<div class="no-aspects">No listed aspects</div>', m2 = hv ? '<button class="ask-claude-btn" id="ask-claude-btn">Interpret</button>' : '<div class="info-hint">Click an aspect line for full interpretation</div>';
6898
- s2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph">'.concat(c2, '</span>\n <div class="info-title">\n <div class="info-name-row">\n <strong>').concat(Z(t2.name), "</strong>").concat(t2.retrograde ? " <span class='retro'>\u211E</span>" : "", "\n ").concat(d2, '\n </div>\n <div class="info-pos">').concat(l2, " ").concat(G_(t2.longitude)).concat(t2.house ? " \xB7 House ".concat(t2.house) : "", '</div>\n </div>\n <button class="info-close" id="info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title">Aspects</div>\n <div class="aspects-list">').concat(p2, "</div>\n ").concat(m2, "\n "), s2.classList.add("visible"), s2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (a2 = document.getElementById("info-close-btn")) == null || a2.addEventListener("click", () => {
6899
- Dv(), Fv();
6942
+ }).join("") : '<div class="no-aspects">No listed aspects</div>', m2 = Rv ? '<button class="ask-claude-btn" id="ask-claude-btn">Interpret</button>' : '<div class="info-hint">Click an aspect line for full interpretation</div>';
6943
+ s2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph">'.concat(c2, '</span>\n <div class="info-title">\n <div class="info-name-row">\n <strong>').concat(Z(t2.name), "</strong>").concat(t2.retrograde ? " <span class='retro'>\u211E</span>" : "", "\n ").concat(d2, '\n </div>\n <div class="info-pos">').concat(l2, " ").concat(mv(t2.longitude)).concat(t2.house ? " \xB7 House ".concat(t2.house) : "", '</div>\n </div>\n <button class="info-close" id="info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title">Aspects</div>\n <div class="aspects-list">').concat(p2, "</div>\n ").concat(m2, "\n "), s2.classList.add("visible"), s2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (a2 = document.getElementById("info-close-btn")) == null || a2.addEventListener("click", () => {
6944
+ Xv(), iy();
6900
6945
  }), (o2 = document.getElementById("ask-claude-btn")) == null || o2.addEventListener("click", () => {
6901
6946
  var e6, n3, r3, i3, a3;
6902
- if (!hv) return;
6947
+ if (!Rv) return;
6903
6948
  let o3 = document.getElementById("ask-claude-btn");
6904
- !o3 || o3.disabled || (o3.disabled = true, o3.textContent = "Sending\u2026", o3.classList.remove("sent", "error"), o3.classList.add("sending"), hv({ type: "planet", data: { name: t2.name, longitude: t2.longitude, sign: (e6 = t2.sign) == null ? G_(t2.longitude) : e6, house: (n3 = t2.house) == null ? null : n3, retrograde: (r3 = t2.retrograde) == null ? false : r3, speed: (i3 = t2.speed) == null ? null : i3, dignity: (a3 = u2 == null ? void 0 : u2.label) == null ? null : a3, aspects: f2.map((e7) => ({ other: e7.planet1.toLowerCase() === t2.name.toLowerCase() ? e7.planet2 : e7.planet1, type: e7.type, orb: e7.orb, applying: e7.applying })) } }).then(() => {
6949
+ !o3 || o3.disabled || (o3.disabled = true, o3.textContent = "Sending\u2026", o3.classList.remove("sent", "error"), o3.classList.add("sending"), Rv({ type: "planet", data: { name: t2.name, longitude: t2.longitude, sign: (e6 = t2.sign) == null ? mv(t2.longitude) : e6, house: (n3 = t2.house) == null ? null : n3, retrograde: (r3 = t2.retrograde) == null ? false : r3, speed: (i3 = t2.speed) == null ? null : i3, dignity: (a3 = u2 == null ? void 0 : u2.label) == null ? null : a3, aspects: f2.map((e7) => ({ other: e7.planet1.toLowerCase() === t2.name.toLowerCase() ? e7.planet2 : e7.planet1, type: e7.type, orb: e7.orb, applying: e7.applying })) } }).then(() => {
6905
6950
  o3.textContent = "\u2713 Sent", o3.classList.remove("sending"), o3.classList.add("sent"), setTimeout(() => {
6906
6951
  o3.textContent = "\u2728 Interpret this", o3.classList.remove("sent"), o3.disabled = false;
6907
6952
  }, 2500);
@@ -6910,16 +6955,16 @@ function bv(e5, t2, n2) {
6910
6955
  }));
6911
6956
  });
6912
6957
  }
6913
- function xv(e5, t2, n2) {
6958
+ function Wv(e5, t2, n2) {
6914
6959
  var r2, i2, a2, o2, s2, c2, l2, u2, d2, f2;
6915
- let p2 = yv(), m2 = n2.find((e6) => e6.name.toLowerCase() === t2.planet1.toLowerCase()), h2 = n2.find((e6) => e6.name.toLowerCase() === t2.planet2.toLowerCase()), g2 = (r2 = P_[t2.planet1.toLowerCase()]) == null ? t2.planet1 : r2, _2 = (i2 = P_[t2.planet2.toLowerCase()]) == null ? t2.planet2 : i2, v2 = (a2 = L_[(o2 = (s2 = t2.type) == null ? void 0 : s2.toLowerCase()) == null ? "" : o2]) == null ? "" : a2, ee2 = R_((c2 = (l2 = t2.type) == null ? void 0 : l2.toLowerCase()) == null ? "" : c2), y2 = t2.orb == null ? "unknown orb" : "".concat(t2.orb.toFixed(2), "\xB0"), b2 = t2.applying === true ? "Applying (growing closer)" : t2.applying === false ? "Separating (moving apart)" : "", x2 = m2 ? "".concat(G_(m2.longitude)).concat(m2.house ? " \xB7 H".concat(m2.house) : "") : "", S2 = h2 ? "".concat(G_(h2.longitude)).concat(h2.house ? " \xB7 H".concat(h2.house) : "") : "", C2 = hv ? '<button class="ask-claude-btn" id="ask-claude-btn">Interpret</button>' : "";
6916
- p2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(ee2, '">').concat(v2, '</span>\n <div class="info-title">\n <div class="info-name-row">\n <strong>').concat(Z((u2 = t2.type) == null ? "Aspect" : u2), '</strong>\n </div>\n <div class="info-pos">').concat(y2).concat(b2 ? " \xB7 ".concat(b2) : "", '</div>\n </div>\n <button class="info-close" id="info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title">Planets in Aspect</div>\n <div class="aspect-pair-row">\n <div class="aspect-pair-planet">\n <span class="aspect-pair-glyph">').concat(g2, '</span>\n <div>\n <div class="aspect-pair-name">').concat(Z(t2.planet1), '</div>\n <div class="aspect-pair-pos">').concat(x2, '</div>\n </div>\n </div>\n <span class="aspect-pair-sym" style="color:').concat(ee2, '">').concat(v2, '</span>\n <div class="aspect-pair-planet">\n <span class="aspect-pair-glyph">').concat(_2, '</span>\n <div>\n <div class="aspect-pair-name">').concat(Z(t2.planet2), '</div>\n <div class="aspect-pair-pos">').concat(S2, "</div>\n </div>\n </div>\n </div>\n ").concat(C2, "\n "), p2.classList.add("visible"), p2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (d2 = document.getElementById("info-close-btn")) == null || d2.addEventListener("click", () => {
6917
- Dv(), Fv();
6960
+ let p2 = Hv(), m2 = n2.find((e6) => e6.name.toLowerCase() === t2.planet1.toLowerCase()), h2 = n2.find((e6) => e6.name.toLowerCase() === t2.planet2.toLowerCase()), g2 = (r2 = rv[t2.planet1.toLowerCase()]) == null ? t2.planet1 : r2, _2 = (i2 = rv[t2.planet2.toLowerCase()]) == null ? t2.planet2 : i2, v2 = (a2 = ov[(o2 = (s2 = t2.type) == null ? void 0 : s2.toLowerCase()) == null ? "" : o2]) == null ? "" : a2, ee2 = sv((c2 = (l2 = t2.type) == null ? void 0 : l2.toLowerCase()) == null ? "" : c2), y2 = t2.orb == null ? "unknown orb" : "".concat(t2.orb.toFixed(2), "\xB0"), b2 = t2.applying === true ? "Applying (growing closer)" : t2.applying === false ? "Separating (moving apart)" : "", x2 = m2 ? "".concat(mv(m2.longitude)).concat(m2.house ? " \xB7 H".concat(m2.house) : "") : "", te2 = h2 ? "".concat(mv(h2.longitude)).concat(h2.house ? " \xB7 H".concat(h2.house) : "") : "", S2 = Rv ? '<button class="ask-claude-btn" id="ask-claude-btn">Interpret</button>' : "";
6961
+ p2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(ee2, '">').concat(v2, '</span>\n <div class="info-title">\n <div class="info-name-row">\n <strong>').concat(Z((u2 = t2.type) == null ? "Aspect" : u2), '</strong>\n </div>\n <div class="info-pos">').concat(y2).concat(b2 ? " \xB7 ".concat(b2) : "", '</div>\n </div>\n <button class="info-close" id="info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title">Planets in Aspect</div>\n <div class="aspect-pair-row">\n <div class="aspect-pair-planet">\n <span class="aspect-pair-glyph">').concat(g2, '</span>\n <div>\n <div class="aspect-pair-name">').concat(Z(t2.planet1), '</div>\n <div class="aspect-pair-pos">').concat(x2, '</div>\n </div>\n </div>\n <span class="aspect-pair-sym" style="color:').concat(ee2, '">').concat(v2, '</span>\n <div class="aspect-pair-planet">\n <span class="aspect-pair-glyph">').concat(_2, '</span>\n <div>\n <div class="aspect-pair-name">').concat(Z(t2.planet2), '</div>\n <div class="aspect-pair-pos">').concat(te2, "</div>\n </div>\n </div>\n </div>\n ").concat(S2, "\n "), p2.classList.add("visible"), p2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (d2 = document.getElementById("info-close-btn")) == null || d2.addEventListener("click", () => {
6962
+ Xv(), iy();
6918
6963
  }), (f2 = document.getElementById("ask-claude-btn")) == null || f2.addEventListener("click", () => {
6919
6964
  var e6, n3, r3, i3, a3, o3, s3, c3;
6920
- if (!hv) return;
6965
+ if (!Rv) return;
6921
6966
  let l3 = document.getElementById("ask-claude-btn");
6922
- !l3 || l3.disabled || (l3.disabled = true, l3.textContent = "Sending\u2026", l3.classList.add("sending"), hv({ type: "aspect", data: { planet1: t2.planet1, planet2: t2.planet2, aspect_type: (e6 = t2.type) == null ? null : e6, orb: (n3 = t2.orb) == null ? null : n3, applying: (r3 = t2.applying) == null ? null : r3, angle: (i3 = t2.angle) == null ? null : i3, planet1_sign: (a3 = m2 == null ? void 0 : m2.sign) == null ? null : a3, planet1_house: (o3 = m2 == null ? void 0 : m2.house) == null ? null : o3, planet2_sign: (s3 = h2 == null ? void 0 : h2.sign) == null ? null : s3, planet2_house: (c3 = h2 == null ? void 0 : h2.house) == null ? null : c3 } }).then(() => {
6967
+ !l3 || l3.disabled || (l3.disabled = true, l3.textContent = "Sending\u2026", l3.classList.add("sending"), Rv({ type: "aspect", data: { planet1: t2.planet1, planet2: t2.planet2, aspect_type: (e6 = t2.type) == null ? null : e6, orb: (n3 = t2.orb) == null ? null : n3, applying: (r3 = t2.applying) == null ? null : r3, angle: (i3 = t2.angle) == null ? null : i3, planet1_sign: (a3 = m2 == null ? void 0 : m2.sign) == null ? null : a3, planet1_house: (o3 = m2 == null ? void 0 : m2.house) == null ? null : o3, planet2_sign: (s3 = h2 == null ? void 0 : h2.sign) == null ? null : s3, planet2_house: (c3 = h2 == null ? void 0 : h2.house) == null ? null : c3 } }).then(() => {
6923
6968
  l3.textContent = "Sent", l3.classList.remove("sending"), l3.classList.add("sent"), setTimeout(() => {
6924
6969
  l3.textContent = "Interpret", l3.classList.remove("sent"), l3.disabled = false;
6925
6970
  }, 2500);
@@ -6928,22 +6973,22 @@ function xv(e5, t2, n2) {
6928
6973
  }));
6929
6974
  });
6930
6975
  }
6931
- function Sv(e5, t2, n2) {
6976
+ function Gv(e5, t2, n2) {
6932
6977
  var r2, i2, a2, o2, s2;
6933
- let c2 = yv(), l2 = Math.floor((t2.cusp_lon % 360 + 360) % 360 / 30), u2 = (r2 = F_[l2]) == null ? "" : r2, d2 = (i2 = (a2 = t2.sign) == null ? I_[l2] : a2) == null ? "" : i2, f2 = n2.filter((e6) => e6.house === t2.number), p2 = f2.length ? f2.map((e6) => {
6978
+ let c2 = Hv(), l2 = Math.floor((t2.cusp_lon % 360 + 360) % 360 / 30), u2 = (r2 = iv[l2]) == null ? "" : r2, d2 = (i2 = (a2 = t2.sign) == null ? av[l2] : a2) == null ? "" : i2, f2 = n2.filter((e6) => e6.house === t2.number), p2 = f2.length ? f2.map((e6) => {
6934
6979
  var t3;
6935
- let n3 = (t3 = P_[e6.name.toLowerCase()]) == null ? e6.name : t3, r3 = G_(e6.longitude), i3 = e6.retrograde ? " <span class='retro'>\u211E</span>" : "";
6980
+ let n3 = (t3 = rv[e6.name.toLowerCase()]) == null ? e6.name : t3, r3 = mv(e6.longitude), i3 = e6.retrograde ? " <span class='retro'>\u211E</span>" : "";
6936
6981
  return '<div class="aspect-row">\n <span class="aspect-sym">'.concat(n3, '</span>\n <span class="aspect-other">').concat(Z(e6.name)).concat(i3, '</span>\n <span class="aspect-meta">').concat(r3, "</span>\n </div>");
6937
- }).join("") : '<div class="no-aspects">No planets in this house</div>', m2 = hv ? '<button class="ask-claude-btn" id="ask-claude-btn">Interpret</button>' : "";
6982
+ }).join("") : '<div class="no-aspects">No planets in this house</div>', m2 = Rv ? '<button class="ask-claude-btn" id="ask-claude-btn">Interpret</button>' : "";
6938
6983
  c2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph">'.concat(u2, '</span>\n <div class="info-title">\n <div class="info-name-row">\n <strong>House ').concat(t2.number, '</strong>\n </div>\n <div class="info-pos">').concat(u2, " ").concat(d2, " on cusp").concat(t2.ruler ? " \xB7 ruled by ".concat(Z(t2.ruler)) : "", '</div>\n </div>\n <button class="info-close" id="info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title">Planets in House ').concat(t2.number, '</div>\n <div class="aspects-list">').concat(p2, "</div>\n ").concat(m2, "\n "), c2.classList.add("visible"), c2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (o2 = document.getElementById("info-close-btn")) == null || o2.addEventListener("click", () => {
6939
- Dv(), Fv();
6984
+ Xv(), iy();
6940
6985
  }), (s2 = document.getElementById("ask-claude-btn")) == null || s2.addEventListener("click", () => {
6941
6986
  var e6;
6942
- if (!hv) return;
6987
+ if (!Rv) return;
6943
6988
  let n3 = document.getElementById("ask-claude-btn");
6944
- !n3 || n3.disabled || (n3.disabled = true, n3.textContent = "Sending\u2026", n3.classList.add("sending"), hv({ type: "house", data: { house_number: t2.number, sign: d2, cusp_longitude: t2.cusp_lon, ruler: (e6 = t2.ruler) == null ? null : e6, planets_in_house: f2.map((e7) => {
6989
+ !n3 || n3.disabled || (n3.disabled = true, n3.textContent = "Sending\u2026", n3.classList.add("sending"), Rv({ type: "house", data: { house_number: t2.number, sign: d2, cusp_longitude: t2.cusp_lon, ruler: (e6 = t2.ruler) == null ? null : e6, planets_in_house: f2.map((e7) => {
6945
6990
  var t3, n4;
6946
- return { name: e7.name, sign: (t3 = e7.sign) == null ? G_(e7.longitude) : t3, retrograde: (n4 = e7.retrograde) == null ? false : n4 };
6991
+ return { name: e7.name, sign: (t3 = e7.sign) == null ? mv(e7.longitude) : t3, retrograde: (n4 = e7.retrograde) == null ? false : n4 };
6947
6992
  }) } }).then(() => {
6948
6993
  n3.textContent = "Sent", n3.classList.remove("sending"), n3.classList.add("sent"), setTimeout(() => {
6949
6994
  n3.textContent = "Interpret", n3.classList.remove("sent"), n3.disabled = false;
@@ -6953,22 +6998,22 @@ function Sv(e5, t2, n2) {
6953
6998
  }));
6954
6999
  });
6955
7000
  }
6956
- var Cv = { Aries: "Mars", Taurus: "Venus", Gemini: "Mercury", Cancer: "Moon", Leo: "Sun", Virgo: "Mercury", Libra: "Venus", Scorpio: "Mars", Sagittarius: "Jupiter", Capricorn: "Saturn", Aquarius: "Saturn", Pisces: "Jupiter" };
6957
- function wv(e5, t2, n2) {
7001
+ var Kv = { Aries: "Mars", Taurus: "Venus", Gemini: "Mercury", Cancer: "Moon", Leo: "Sun", Virgo: "Mercury", Libra: "Venus", Scorpio: "Mars", Sagittarius: "Jupiter", Capricorn: "Saturn", Aquarius: "Saturn", Pisces: "Jupiter" };
7002
+ function qv(e5, t2, n2) {
6958
7003
  var r2, i2, a2, o2, s2;
6959
- let c2 = yv(), l2 = I_[t2], u2 = F_[t2], d2 = Z(sv[t2]), f2 = Z(cv[t2]), p2 = (r2 = Cv[l2]) == null ? "" : r2, m2 = (i2 = P_[p2.toLowerCase()]) == null ? "" : i2, h2 = n2.filter((e6) => Math.floor((e6.longitude % 360 + 360) % 360 / 30) === t2), g2 = h2.length ? h2.map((e6) => {
7004
+ let c2 = Hv(), l2 = av[t2], u2 = iv[t2], d2 = Z(Av[t2]), f2 = Z(jv[t2]), p2 = (r2 = Kv[l2]) == null ? "" : r2, m2 = (i2 = rv[p2.toLowerCase()]) == null ? "" : i2, h2 = n2.filter((e6) => Math.floor((e6.longitude % 360 + 360) % 360 / 30) === t2), g2 = h2.length ? h2.map((e6) => {
6960
7005
  var t3;
6961
- let n3 = (t3 = P_[e6.name.toLowerCase()]) == null ? e6.name : t3, r3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), i3 = Math.floor((e6.longitude % 30 - r3) * 60), a3 = e6.retrograde ? " <span class='retro'>\u211E</span>" : "", o3 = ov(e6.name, e6.longitude), s3 = o3 ? ' <span class="dignity-badge '.concat(o3.cssClass, '">').concat(o3.emoji, " ").concat(o3.label, "</span>") : "";
7006
+ let n3 = (t3 = rv[e6.name.toLowerCase()]) == null ? e6.name : t3, r3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), i3 = Math.floor((e6.longitude % 30 - r3) * 60), a3 = e6.retrograde ? " <span class='retro'>\u211E</span>" : "", o3 = kv(e6.name, e6.longitude), s3 = o3 ? ' <span class="dignity-badge '.concat(o3.cssClass, '">').concat(o3.emoji, " ").concat(o3.label, "</span>") : "";
6962
7007
  return '<div class="aspect-row">\n <span class="aspect-sym">'.concat(n3, '</span>\n <span class="aspect-other">').concat(Z(e6.name)).concat(a3).concat(s3, '</span>\n <span class="aspect-meta">').concat(r3, "\xB0").concat(i3.toString().padStart(2, "0"), "\u2032</span>\n </div>");
6963
- }).join("") : '<div class="no-aspects">No planets in '.concat(l2, "</div>"), _2 = (a2 = { Fire: "\u{1F525}", Earth: "\u{1F33F}", Air: "\u{1F4A8}", Water: "\u{1F4A7}" }[d2]) == null ? "" : a2, v2 = hv ? '<button class="ask-claude-btn" id="sign-ask-claude-btn">Interpret '.concat(l2, "</button>") : "";
6964
- c2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(B_(t2), '">').concat(u2, '</span>\n <div class="info-title">\n <div class="info-name-row">\n <strong>').concat(l2, '</strong>\n </div>\n <div class="info-pos">').concat(_2, " ").concat(d2, " \xB7 ").concat(f2).concat(p2 ? " \xB7 Ruled by ".concat(m2, " ").concat(p2) : "", '</div>\n </div>\n <button class="info-close" id="info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title">Planets in ').concat(l2, '</div>\n <div class="aspects-list">').concat(g2, "</div>\n ").concat(v2, "\n "), c2.classList.add("visible"), c2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (o2 = document.getElementById("info-close-btn")) == null || o2.addEventListener("click", () => {
6965
- Dv(), Fv();
7008
+ }).join("") : '<div class="no-aspects">No planets in '.concat(l2, "</div>"), _2 = (a2 = { Fire: "\u{1F525}", Earth: "\u{1F33F}", Air: "\u{1F4A8}", Water: "\u{1F4A7}" }[d2]) == null ? "" : a2, v2 = Rv ? '<button class="ask-claude-btn" id="sign-ask-claude-btn">Interpret '.concat(l2, "</button>") : "";
7009
+ c2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(lv(t2), '">').concat(u2, '</span>\n <div class="info-title">\n <div class="info-name-row">\n <strong>').concat(l2, '</strong>\n </div>\n <div class="info-pos">').concat(_2, " ").concat(d2, " \xB7 ").concat(f2).concat(p2 ? " \xB7 Ruled by ".concat(m2, " ").concat(p2) : "", '</div>\n </div>\n <button class="info-close" id="info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title">Planets in ').concat(l2, '</div>\n <div class="aspects-list">').concat(g2, "</div>\n ").concat(v2, "\n "), c2.classList.add("visible"), c2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (o2 = document.getElementById("info-close-btn")) == null || o2.addEventListener("click", () => {
7010
+ Xv(), iy();
6966
7011
  }), (s2 = document.getElementById("sign-ask-claude-btn")) == null || s2.addEventListener("click", () => {
6967
- if (!hv) return;
7012
+ if (!Rv) return;
6968
7013
  let e6 = document.getElementById("sign-ask-claude-btn");
6969
- !e6 || e6.disabled || (e6.disabled = true, e6.textContent = "Sending\u2026", e6.classList.add("sending"), hv({ type: "sign", data: { sign: l2, element: d2, modality: f2, ruler: p2 || null, planets_in_sign: h2.map((e7) => {
7014
+ !e6 || e6.disabled || (e6.disabled = true, e6.textContent = "Sending\u2026", e6.classList.add("sending"), Rv({ type: "sign", data: { sign: l2, element: d2, modality: f2, ruler: p2 || null, planets_in_sign: h2.map((e7) => {
6970
7015
  var t3, n3;
6971
- return { name: e7.name, longitude: e7.longitude, position: G_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3, house: (n3 = e7.house) == null ? null : n3 };
7016
+ return { name: e7.name, longitude: e7.longitude, position: mv(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3, house: (n3 = e7.house) == null ? null : n3 };
6972
7017
  }) } }).then(() => {
6973
7018
  e6.textContent = "Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
6974
7019
  e6.textContent = "Interpret ".concat(l2), e6.classList.remove("sent"), e6.disabled = false;
@@ -6978,17 +7023,17 @@ function wv(e5, t2, n2) {
6978
7023
  }));
6979
7024
  });
6980
7025
  }
6981
- var Tv = { 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. It colours every first impression you make.", 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. It is the shadow-partner of the Ascendant \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 (Medium Coeli) marks the highest point of the chart and governs reputation, career, and the long arc of your public life. It describes the contribution the world remembers you for.", themes: ["career", "ambition", "reputation", "authority", "life direction"] }, IC: { title: "Imum Coeli", symbol: "IC", keyword: "roots & inner foundation", meaning: "The IC (Imum Coeli) anchors the chart at its lowest point \u2014 home, ancestry, psychological foundations, and the private self that sustains the public Midheaven. It is where you return to be restored.", themes: ["home", "family", "ancestry", "inner life", "psychological roots"] } };
6982
- function Ev(e5, t2, n2) {
7026
+ var Jv = { 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. It colours every first impression you make.", 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. It is the shadow-partner of the Ascendant \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 (Medium Coeli) marks the highest point of the chart and governs reputation, career, and the long arc of your public life. It describes the contribution the world remembers you for.", themes: ["career", "ambition", "reputation", "authority", "life direction"] }, IC: { title: "Imum Coeli", symbol: "IC", keyword: "roots & inner foundation", meaning: "The IC (Imum Coeli) anchors the chart at its lowest point \u2014 home, ancestry, psychological foundations, and the private self that sustains the public Midheaven. It is where you return to be restored.", themes: ["home", "family", "ancestry", "inner life", "psychological roots"] } };
7027
+ function Yv(e5, t2, n2) {
6983
7028
  var r2, i2;
6984
- let a2 = yv(), o2 = Tv[t2];
7029
+ let a2 = Hv(), o2 = Jv[t2];
6985
7030
  if (!o2) return;
6986
- let s2 = G_(n2), c2 = Math.floor((n2 % 360 + 360) % 360 / 30), l2 = Z(sv[c2]), u2 = Z(cv[c2]), d2 = F_[c2], f2 = B_(c2);
7031
+ let s2 = mv(n2), c2 = Math.floor((n2 % 360 + 360) % 360 / 30), l2 = Z(Av[c2]), u2 = Z(jv[c2]), d2 = iv[c2], f2 = lv(c2);
6987
7032
  a2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:#7060b8;font-family:system-ui;font-weight:700;font-size:15px">'.concat(o2.symbol, '</span>\n <div class="info-title">\n <div class="info-name-row"><strong>').concat(o2.title, '</strong></div>\n <div class="info-pos">').concat(o2.keyword, '</div>\n </div>\n <button class="info-close" id="info-close-btn">\u2715</button>\n </div>\n <div class="planet-in-sign" style="margin:8px 0 4px">\n <span style="color:').concat(f2, ';font-family:serif;font-size:14px;margin-right:4px">').concat(d2, '</span>\n <span style="font-size:12px;color:var(--text-muted,#888)">').concat(s2, " &nbsp;\xB7&nbsp; ").concat(l2, " \xB7 ").concat(u2, '</span>\n </div>\n <div class="planet-meaning" style="font-size:12px;line-height:1.55;margin-bottom:8px">').concat(o2.meaning, '</div>\n <div class="aspects-title">Themes</div>\n <div class="aspects-list">\n ').concat(o2.themes.map((e6) => '<div class="aspect-row"><span class="aspect-other">'.concat(e6, "</span></div>")).join(""), '\n </div>\n <div class="panel-actions" style="margin-top:10px">\n <button class="ask-claude-btn" id="angle-ask-claude-btn">\n Interpret ').concat(o2.title, "\n </button>\n </div>\n "), a2.classList.add("visible"), a2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (r2 = document.getElementById("info-close-btn")) == null || r2.addEventListener("click", () => {
6988
- Dv(), Fv();
7033
+ Xv(), iy();
6989
7034
  }), (i2 = document.getElementById("angle-ask-claude-btn")) == null || i2.addEventListener("click", (e6) => {
6990
7035
  let t3 = e6.currentTarget;
6991
- t3.textContent = "Sending\u2026", t3.disabled = true, hv == null || hv({ type: "angle_interpretation", data: { angle: o2.title, longitude: n2, sign: I_[c2], position: s2, element: l2, modality: u2 } }).then(() => {
7036
+ t3.textContent = "Sending\u2026", t3.disabled = true, Rv == null || Rv({ type: "angle_interpretation", data: { angle: o2.title, longitude: n2, sign: av[c2], position: s2, element: l2, modality: u2 } }).then(() => {
6992
7037
  t3.textContent = "Sent", setTimeout(() => {
6993
7038
  t3.textContent = "Interpret ".concat(o2.title), t3.disabled = false;
6994
7039
  }, 2500);
@@ -6997,22 +7042,22 @@ function Ev(e5, t2, n2) {
6997
7042
  });
6998
7043
  });
6999
7044
  }
7000
- function Dv() {
7001
- fv == null || fv.classList.remove("visible"), pv = null, jv(), gv == null || gv(null);
7045
+ function Xv() {
7046
+ Fv == null || Fv.classList.remove("visible"), Iv = null, ey(), zv == null || zv(null);
7002
7047
  }
7003
- var Ov = null, kv = 0;
7004
- function Av(e5, t2 = false) {
7005
- let n2 = Ov;
7048
+ var Zv = null, Qv = 0;
7049
+ function $v(e5, t2 = false) {
7050
+ let n2 = Zv;
7006
7051
  if (!n2) return;
7007
- let r2 = kv, i2 = Y(e5, T_, r2), a2 = Y(e5, 198, r2);
7052
+ let r2 = Qv, i2 = Y(e5, J_, r2), a2 = Y(e5, 198, r2);
7008
7053
  n2.setAttribute("x1", i2.x.toFixed(1)), n2.setAttribute("y1", i2.y.toFixed(1)), n2.setAttribute("x2", a2.x.toFixed(1)), n2.setAttribute("y2", a2.y.toFixed(1)), n2.style.opacity = "1", n2.style.strokeWidth = t2 ? "1.5" : "1";
7009
7054
  }
7010
- function jv() {
7011
- Ov && (Ov.style.opacity = "0");
7055
+ function ey() {
7056
+ Zv && (Zv.style.opacity = "0");
7012
7057
  }
7013
- function Mv(e5) {
7058
+ function ty(e5) {
7014
7059
  let t2 = e5.toLowerCase(), n2 = /* @__PURE__ */ new Set();
7015
- vv.forEach(({ vis: e6, color: r2, symbolEls: i2 }, a2) => {
7060
+ Vv.forEach(({ vis: e6, color: r2, symbolEls: i2 }, a2) => {
7016
7061
  let o2 = a2.split("|");
7017
7062
  if (o2.includes(t2)) {
7018
7063
  e6.style.stroke = r2, e6.style.strokeOpacity = "0.95", e6.style.strokeWidth = "2", e6.setAttribute("filter", "url(#aspect-glow)"), i2.forEach((e7) => {
@@ -7032,9 +7077,9 @@ function Mv(e5) {
7032
7077
  e6.classList.toggle("dim", i2 !== t2 && !n2.has(i2));
7033
7078
  });
7034
7079
  }
7035
- function Nv(e5, t2) {
7080
+ function ny(e5, t2) {
7036
7081
  let n2 = new Set(e5.map((e6) => e6.toLowerCase())), r2 = new Set(t2);
7037
- vv.forEach(({ vis: e6, color: t3, symbolEls: n3 }, i2) => {
7082
+ Vv.forEach(({ vis: e6, color: t3, symbolEls: n3 }, i2) => {
7038
7083
  r2.has(i2) ? (e6.style.stroke = t3, e6.style.strokeOpacity = "0.95", e6.style.strokeWidth = "2", e6.setAttribute("filter", "url(#aspect-glow)"), n3.forEach((e7) => {
7039
7084
  e7.style.opacity = "1";
7040
7085
  })) : (e6.style.strokeOpacity = "0.05", e6.style.strokeWidth = "0.7", e6.removeAttribute("filter"), n3.forEach((e7) => {
@@ -7048,8 +7093,8 @@ function Nv(e5, t2) {
7048
7093
  return e6.classList.toggle("dim", !n2.has((t3 = e6.dataset.planet) == null ? "" : t3));
7049
7094
  });
7050
7095
  }
7051
- function Pv() {
7052
- vv.forEach(({ vis: e5, symbolEls: t2 }) => {
7096
+ function ry() {
7097
+ Vv.forEach(({ vis: e5, symbolEls: t2 }) => {
7053
7098
  e5.style.strokeOpacity = "0.05", e5.style.strokeWidth = "0.7", e5.removeAttribute("filter"), t2.forEach((e6) => {
7054
7099
  e6.style.opacity = "0.12";
7055
7100
  });
@@ -7057,17 +7102,17 @@ function Pv() {
7057
7102
  e5.style.opacity = "0.35";
7058
7103
  }), Q == null || Q.querySelectorAll(".planet-hit").forEach((e5) => e5.classList.add("dim"));
7059
7104
  }
7060
- function Fv() {
7061
- vv.forEach(({ vis: e5, color: t2, baseOpacity: n2, baseWidth: r2, symbolEls: i2 }) => {
7105
+ function iy() {
7106
+ Vv.forEach(({ vis: e5, color: t2, baseOpacity: n2, baseWidth: r2, symbolEls: i2 }) => {
7062
7107
  e5.style.stroke = t2, e5.style.strokeOpacity = n2, e5.style.strokeWidth = r2, e5.removeAttribute("filter"), i2.forEach((e6) => {
7063
7108
  e6.style.opacity = "";
7064
7109
  });
7065
7110
  }), Q == null || Q.querySelectorAll(".planet-glyph-group").forEach((e5) => {
7066
7111
  e5.style.opacity = "";
7067
- }), Q == null || Q.querySelectorAll(".planet-hit").forEach((e5) => e5.classList.remove("dim")), zv();
7112
+ }), Q == null || Q.querySelectorAll(".planet-hit").forEach((e5) => e5.classList.remove("dim")), cy();
7068
7113
  }
7069
- var Iv = { "T-Square": "rgba(224,138, 82, 0.14)", "Grand Trine": "rgba( 82,168,224, 0.14)", "Grand Cross": "rgba(224, 82, 82, 0.14)", Stellium: "rgba(154,127,212, 0.14)", Yod: "rgba( 82,192,122, 0.14)", Kite: "rgba(192,176, 82, 0.14)" }, Lv = { "T-Square": "rgba(224,138, 82, 0.70)", "Grand Trine": "rgba( 82,168,224, 0.70)", "Grand Cross": "rgba(224, 82, 82, 0.70)", Stellium: "rgba(154,127,212, 0.70)", Yod: "rgba( 82,192,122, 0.70)", Kite: "rgba(192,176, 82, 0.70)" };
7070
- function Rv(e5, t2, n2) {
7114
+ var ay = { "T-Square": "rgba(224,138, 82, 0.14)", "Grand Trine": "rgba( 82,168,224, 0.14)", "Grand Cross": "rgba(224, 82, 82, 0.14)", Stellium: "rgba(154,127,212, 0.14)", Yod: "rgba( 82,192,122, 0.14)", Kite: "rgba(192,176, 82, 0.14)" }, oy = { "T-Square": "rgba(224,138, 82, 0.70)", "Grand Trine": "rgba( 82,168,224, 0.70)", "Grand Cross": "rgba(224, 82, 82, 0.70)", Stellium: "rgba(154,127,212, 0.70)", Yod: "rgba( 82,192,122, 0.70)", Kite: "rgba(192,176, 82, 0.70)" };
7115
+ function sy(e5, t2, n2) {
7071
7116
  var r2, i2;
7072
7117
  if (!Q) return null;
7073
7118
  let a2 = /* @__PURE__ */ new Map();
@@ -7075,26 +7120,26 @@ function Rv(e5, t2, n2) {
7075
7120
  let o2 = [];
7076
7121
  for (let t3 of e5.planets) {
7077
7122
  let e6 = a2.get(t3.toLowerCase());
7078
- e6 != null && o2.push(Y(e6, A_, n2));
7123
+ e6 != null && o2.push(Y(e6, $_, n2));
7079
7124
  }
7080
7125
  if (o2.length < 2) return null;
7081
- let s2 = (r2 = Iv[e5.name]) == null ? "rgba(128,128,128,0.12)" : r2, c2 = (i2 = Lv[e5.name]) == null ? "rgba(128,128,128,0.60)" : i2, l2;
7126
+ let s2 = (r2 = ay[e5.name]) == null ? "rgba(128,128,128,0.12)" : r2, c2 = (i2 = oy[e5.name]) == null ? "rgba(128,128,128,0.60)" : i2, l2;
7082
7127
  if (o2.length === 2) {
7083
7128
  let e6 = X("line");
7084
7129
  e6.setAttribute("x1", o2[0].x.toFixed(1)), e6.setAttribute("y1", o2[0].y.toFixed(1)), e6.setAttribute("x2", o2[1].x.toFixed(1)), e6.setAttribute("y2", o2[1].y.toFixed(1)), e6.setAttribute("stroke", c2), e6.setAttribute("stroke-width", "2"), e6.setAttribute("fill", "none"), l2 = e6;
7085
7130
  } else {
7086
- let e6 = [...o2].sort((e7, t4) => Math.atan2(e7.y - w_, e7.x - C_) - Math.atan2(t4.y - w_, t4.x - C_)).map((e7) => "".concat(e7.x.toFixed(1), ",").concat(e7.y.toFixed(1))).join(" "), t3 = X("polygon");
7131
+ let e6 = [...o2].sort((e7, t4) => Math.atan2(e7.y - q_, e7.x - K_) - Math.atan2(t4.y - q_, t4.x - K_)).map((e7) => "".concat(e7.x.toFixed(1), ",").concat(e7.y.toFixed(1))).join(" "), t3 = X("polygon");
7087
7132
  t3.setAttribute("points", e6), t3.setAttribute("fill", s2), t3.setAttribute("stroke", c2), t3.setAttribute("stroke-width", "1.5"), t3.setAttribute("stroke-linejoin", "round"), l2 = t3;
7088
7133
  }
7089
7134
  l2.setAttribute("pointer-events", "none"), l2.setAttribute("class", "pattern-overlay");
7090
7135
  let u2 = Q.querySelector(".aspect-hit");
7091
7136
  return u2 ? Q.insertBefore(l2, u2) : Q.appendChild(l2), l2;
7092
7137
  }
7093
- function zv() {
7138
+ function cy() {
7094
7139
  Q == null || Q.querySelectorAll(".pattern-overlay").forEach((e5) => e5.remove());
7095
7140
  }
7096
- function Bv(e5) {
7097
- vv.forEach(({ vis: t2, color: n2, baseOpacity: r2, baseWidth: i2, symbolEls: a2 }) => {
7141
+ function ly(e5) {
7142
+ Vv.forEach(({ vis: t2, color: n2, baseOpacity: r2, baseWidth: i2, symbolEls: a2 }) => {
7098
7143
  e5 ? (t2.style.stroke = n2, t2.style.strokeOpacity = r2, t2.style.strokeWidth = i2) : t2.style.strokeOpacity = "0", a2.forEach((t3) => {
7099
7144
  t3.style.display = e5 ? "" : "none";
7100
7145
  });
@@ -7102,8 +7147,8 @@ function Bv(e5) {
7102
7147
  t2.style.pointerEvents = e5 ? "all" : "none";
7103
7148
  });
7104
7149
  }
7105
- function Vv(e5) {
7106
- vv.forEach(({ vis: t2, color: n2, baseOpacity: r2, baseWidth: i2, orb: a2, symbolEls: o2 }) => {
7150
+ function uy(e5) {
7151
+ Vv.forEach(({ vis: t2, color: n2, baseOpacity: r2, baseWidth: i2, orb: a2, symbolEls: o2 }) => {
7107
7152
  a2 <= e5 ? (t2.style.stroke = n2, t2.style.strokeOpacity = r2, t2.style.strokeWidth = i2, t2.style.display = "") : t2.style.display = "none", o2.forEach((t3) => {
7108
7153
  t3.style.display = a2 <= e5 ? "" : "none";
7109
7154
  });
@@ -7111,242 +7156,242 @@ function Vv(e5) {
7111
7156
  e6.style.display = "";
7112
7157
  });
7113
7158
  }
7114
- function Hv(e5, t2, n2, r2, i2, a2, o2) {
7159
+ function dy(e5, t2, n2, r2, i2, a2, o2) {
7115
7160
  var s2, c2, l2, u2, d2, f2, p2, m2, h2;
7116
- hv = a2 == null ? null : a2;
7161
+ Rv = a2 == null ? null : a2;
7117
7162
  let g2 = e5.querySelector("#pan-zoom-controls");
7118
- e5.innerHTML = "", g2 && e5.appendChild(g2), vv.clear(), pv = null, Dv();
7119
- let _2 = Y_(t2.planets), v2 = (s2 = t2.houses) == null ? [] : s2, ee2 = (c2 = t2.aspects) == null ? [] : c2, y2 = (l2 = (u2 = (d2 = v2[0]) == null ? void 0 : d2.cusp_lon) == null ? t2.ascendant : u2) == null ? 0 : l2, b2 = X("svg");
7163
+ e5.innerHTML = "", g2 && e5.appendChild(g2), Vv.clear(), Iv = null, Xv();
7164
+ let _2 = vv(t2.planets), v2 = (s2 = t2.houses) == null ? [] : s2, ee2 = (c2 = t2.aspects) == null ? [] : c2, y2 = (l2 = (u2 = (d2 = v2[0]) == null ? void 0 : d2.cusp_lon) == null ? t2.ascendant : u2) == null ? 0 : l2, b2 = X("svg");
7120
7165
  b2.setAttribute("viewBox", "0 0 500 500"), b2.setAttribute("width", "100%"), b2.setAttribute("height", "100%"), b2.setAttribute("overflow", "visible"), b2.style.overflow = "visible", b2.style.display = "block", e5.appendChild(b2), Q = b2;
7121
7166
  {
7122
7167
  let e6 = X("defs");
7123
7168
  e6.innerHTML = '\n <filter id="aspect-glow" x="-50%" y="-50%" width="200%" height="200%">\n <feGaussianBlur in="SourceGraphic" stdDeviation="3" result="blur"/>\n <feMerge>\n <feMergeNode in="blur"/>\n <feMergeNode in="SourceGraphic"/>\n </feMerge>\n </filter>\n ', b2.insertBefore(e6, b2.firstChild);
7124
7169
  }
7125
- i_(b2, "pan-zoom-controls");
7170
+ o_(b2, "pan-zoom-controls");
7126
7171
  let x2 = X("g");
7127
7172
  x2.setAttribute("class", "chart-layer"), x2.style.setProperty("--layer-index", "1"), b2.appendChild(x2);
7173
+ let te2 = X("g");
7174
+ te2.setAttribute("class", "chart-layer"), te2.style.setProperty("--layer-index", "2"), b2.appendChild(te2);
7128
7175
  let S2 = X("g");
7129
- S2.setAttribute("class", "chart-layer"), S2.style.setProperty("--layer-index", "2"), b2.appendChild(S2);
7176
+ S2.setAttribute("class", "chart-layer"), S2.style.setProperty("--layer-index", "3"), b2.appendChild(S2);
7130
7177
  let C2 = X("g");
7131
- C2.setAttribute("class", "chart-layer"), C2.style.setProperty("--layer-index", "3"), b2.appendChild(C2);
7132
- let w2 = X("g");
7133
- w2.setAttribute("class", "chart-layer"), w2.style.setProperty("--layer-index", "4"), b2.appendChild(w2);
7134
- let te2 = X("g");
7135
- te2.setAttribute("class", "chart-layer"), te2.style.setProperty("--layer-index", "5"), b2.appendChild(te2);
7178
+ C2.setAttribute("class", "chart-layer"), C2.style.setProperty("--layer-index", "4"), b2.appendChild(C2);
7136
7179
  let ne2 = X("g");
7137
- b2.appendChild(ne2), kv = y2;
7138
- let T2 = X("line");
7139
- T2.setAttribute("stroke", "#7060b8"), T2.setAttribute("stroke-width", "1"), T2.setAttribute("stroke-dasharray", "2 2"), T2.setAttribute("pointer-events", "none"), T2.style.opacity = "0", T2.style.transition = "opacity 150ms ease", S2.appendChild(T2), Ov = T2;
7140
- let re2 = X("circle");
7141
- re2.setAttribute("cx", "250"), re2.setAttribute("cy", "250"), re2.setAttribute("r", "244"), re2.style.fill = "var(--bg, #faf9f5)", re2.setAttribute("pointer-events", "none"), x2.appendChild(re2);
7142
- let E2 = z_(), ie2 = d_(E2), ae2 = (e6, t3) => {
7143
- e6.setAttribute("stroke", ie2.ring.stroke), e6.setAttribute("stroke-opacity", String(ie2.ring.opacity)), e6.setAttribute("stroke-width", t3);
7180
+ ne2.setAttribute("class", "chart-layer"), ne2.style.setProperty("--layer-index", "5"), b2.appendChild(ne2);
7181
+ let re2 = X("g");
7182
+ b2.appendChild(re2), Qv = y2;
7183
+ let w2 = X("line");
7184
+ w2.setAttribute("stroke", "#7060b8"), w2.setAttribute("stroke-width", "1"), w2.setAttribute("stroke-dasharray", "2 2"), w2.setAttribute("pointer-events", "none"), w2.style.opacity = "0", w2.style.transition = "opacity 150ms ease", te2.appendChild(w2), Zv = w2;
7185
+ let ie2 = X("circle");
7186
+ ie2.setAttribute("cx", "250"), ie2.setAttribute("cy", "250"), ie2.setAttribute("r", "244"), ie2.style.fill = "var(--bg, #faf9f5)", ie2.setAttribute("pointer-events", "none"), x2.appendChild(ie2);
7187
+ let T2 = cv(), E2 = p_(T2), ae2 = (e6, t3) => {
7188
+ e6.setAttribute("stroke", E2.ring.stroke), e6.setAttribute("stroke-opacity", String(E2.ring.opacity)), e6.setAttribute("stroke-width", t3);
7144
7189
  };
7145
- ae2(re2, "0.5");
7190
+ ae2(ie2, "0.5");
7146
7191
  let oe2 = X("circle");
7147
- oe2.setAttribute("cx", "250"), oe2.setAttribute("cy", "250"), oe2.setAttribute("r", String(T_)), oe2.style.fill = "var(--surface, #f2f1ea)", ae2(oe2, "0.6"), oe2.setAttribute("pointer-events", "none"), S2.appendChild(oe2);
7192
+ oe2.setAttribute("cx", "250"), oe2.setAttribute("cy", "250"), oe2.setAttribute("r", String(J_)), oe2.style.fill = "var(--surface, #f2f1ea)", ae2(oe2, "0.6"), oe2.setAttribute("pointer-events", "none"), te2.appendChild(oe2);
7148
7193
  let se2 = X("circle");
7149
- se2.setAttribute("cx", "250"), se2.setAttribute("cy", "250"), se2.setAttribute("r", String(E_)), se2.style.fill = "var(--bg, #faf9f5)", ae2(se2, "0.6"), se2.setAttribute("pointer-events", "none"), S2.appendChild(se2);
7150
- let ce2 = Array.from({ length: 12 }, (e6, t3) => u_(t3, E2));
7194
+ se2.setAttribute("cx", "250"), se2.setAttribute("cy", "250"), se2.setAttribute("r", String(Y_)), se2.style.fill = "var(--bg, #faf9f5)", ae2(se2, "0.6"), se2.setAttribute("pointer-events", "none"), te2.appendChild(se2);
7195
+ let ce2 = Array.from({ length: 12 }, (e6, t3) => f_(t3, T2));
7151
7196
  for (let e6 = 0; e6 < 12; e6++) {
7152
- let t3 = e6 * 30, n3 = (e6 + 1) * 30, r3 = Y(t3, T_, y2), i3 = Y(n3, T_, y2), a3 = Y(t3, E_, y2), o3 = Y(n3, E_, y2), s3 = X("path");
7153
- s3.setAttribute("d", ["M ".concat(r3.x.toFixed(1), " ").concat(r3.y.toFixed(1)), "A ".concat(T_, " ").concat(T_, " 0 0 0 ").concat(i3.x.toFixed(1), " ").concat(i3.y.toFixed(1)), "L ".concat(o3.x.toFixed(1), " ").concat(o3.y.toFixed(1)), "A ".concat(E_, " ").concat(E_, " 0 0 1 ").concat(a3.x.toFixed(1), " ").concat(a3.y.toFixed(1)), "Z"].join(" ")), s3.setAttribute("fill", ce2[e6]), s3.setAttribute("pointer-events", "none"), b2.appendChild(s3);
7154
- let { x: c3, y: l3 } = Y(t3, E_, y2), { x: u3, y: d3 } = Y(t3, T_, y2), f3 = X("line");
7155
- f3.setAttribute("x1", c3.toFixed(1)), f3.setAttribute("y1", l3.toFixed(1)), f3.setAttribute("x2", u3.toFixed(1)), f3.setAttribute("y2", d3.toFixed(1)), ae2(f3, "0.5"), f3.setAttribute("pointer-events", "none"), S2.appendChild(f3);
7197
+ let t3 = e6 * 30, n3 = (e6 + 1) * 30, r3 = Y(t3, J_, y2), i3 = Y(n3, J_, y2), a3 = Y(t3, Y_, y2), o3 = Y(n3, Y_, y2), s3 = X("path");
7198
+ s3.setAttribute("d", ["M ".concat(r3.x.toFixed(1), " ").concat(r3.y.toFixed(1)), "A ".concat(J_, " ").concat(J_, " 0 0 0 ").concat(i3.x.toFixed(1), " ").concat(i3.y.toFixed(1)), "L ".concat(o3.x.toFixed(1), " ").concat(o3.y.toFixed(1)), "A ".concat(Y_, " ").concat(Y_, " 0 0 1 ").concat(a3.x.toFixed(1), " ").concat(a3.y.toFixed(1)), "Z"].join(" ")), s3.setAttribute("fill", ce2[e6]), s3.setAttribute("pointer-events", "none"), b2.appendChild(s3);
7199
+ let { x: c3, y: l3 } = Y(t3, Y_, y2), { x: u3, y: d3 } = Y(t3, J_, y2), f3 = X("line");
7200
+ f3.setAttribute("x1", c3.toFixed(1)), f3.setAttribute("y1", l3.toFixed(1)), f3.setAttribute("x2", u3.toFixed(1)), f3.setAttribute("y2", d3.toFixed(1)), ae2(f3, "0.5"), f3.setAttribute("pointer-events", "none"), te2.appendChild(f3);
7156
7201
  let { x: p3, y: m3 } = Y(t3 + 15, 444 / 2, y2), h3 = X("text");
7157
- 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", "13"), h3.setAttribute("fill", l_(e6, E2)), h3.setAttribute("pointer-events", "none"), h3.style.fontFamily = a_, h3.textContent = F_[e6], S2.appendChild(h3);
7202
+ 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", "13"), h3.setAttribute("fill", d_(e6, T2)), h3.setAttribute("pointer-events", "none"), h3.style.fontFamily = s_, h3.textContent = iv[e6], te2.appendChild(h3);
7158
7203
  for (let e7 = 1; e7 < 30; e7++) {
7159
- let n4 = t3 + e7, r4 = e7 % 5 == 0, i4 = r4 ? T_ - 7 : T_ - 3, { x: a4, y: o4 } = Y(n4, T_, y2), { x: s4, y: c4 } = Y(n4, i4, y2), l4 = X("line");
7204
+ let n4 = t3 + e7, r4 = e7 % 5 == 0, i4 = r4 ? J_ - 7 : J_ - 3, { x: a4, y: o4 } = Y(n4, J_, y2), { x: s4, y: c4 } = Y(n4, i4, y2), l4 = X("line");
7160
7205
  l4.setAttribute("x1", a4.toFixed(1)), l4.setAttribute("y1", o4.toFixed(1)), l4.setAttribute("x2", s4.toFixed(1)), l4.setAttribute("y2", c4.toFixed(1));
7161
- let u4 = r4 ? ie2.tickMajor : ie2.tickMinor;
7162
- 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"), S2.appendChild(l4);
7206
+ let u4 = r4 ? E2.tickMajor : E2.tickMinor;
7207
+ 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"), te2.appendChild(l4);
7163
7208
  }
7164
7209
  }
7165
7210
  let le2 = { Aries: "Mars", Taurus: "Venus", Gemini: "Mercury", Cancer: "Moon", Leo: "Sun", Virgo: "Mercury", Libra: "Venus", Scorpio: "Mars", Sagittarius: "Jupiter", Capricorn: "Saturn", Aquarius: "Saturn", Pisces: "Jupiter" };
7166
7211
  for (let e6 = 0; e6 < 12; e6++) {
7167
7212
  var ue2, de2;
7168
- let t3 = e6 * 30, n3 = (e6 + 1) * 30, r3 = Y(t3, T_, y2), i3 = Y(n3, T_, y2), a3 = Y(t3, E_, y2), o3 = Y(n3, E_, y2), s3 = X("path");
7169
- s3.setAttribute("d", ["M ".concat(r3.x.toFixed(1), " ").concat(r3.y.toFixed(1)), "A ".concat(T_, " ").concat(T_, " 0 0 0 ").concat(i3.x.toFixed(1), " ").concat(i3.y.toFixed(1)), "L ".concat(o3.x.toFixed(1), " ").concat(o3.y.toFixed(1)), "A ".concat(E_, " ").concat(E_, " 0 0 1 ").concat(a3.x.toFixed(1), " ").concat(a3.y.toFixed(1)), "Z"].join(" ")), s3.setAttribute("fill", "transparent"), s3.setAttribute("class", "hit-region sign-hit"), s3.style.pointerEvents = "all", Uv(s3, "".concat(I_[e6], " \u2014 click for sign info"));
7170
- let c3 = Z(sv[e6]), l3 = Z(cv[e6]), u3 = (ue2 = le2[I_[e6]]) == null ? "" : ue2, d3 = (de2 = tv[I_[e6]]) == null ? "" : de2, f3 = "".concat(d3 ? d3 + " \xB7 " : "").concat(c3, " \xB7 ").concat(l3).concat(u3 ? " \xB7 Ruled by ".concat(u3) : "");
7171
- s3.addEventListener("mouseenter", (t4) => Z_(t4.clientX, t4.clientY, "".concat(F_[e6], " ").concat(I_[e6]), f3, "Click for sign detail")), s3.addEventListener("mousemove", (t4) => Z_(t4.clientX, t4.clientY, "".concat(F_[e6], " ").concat(I_[e6]), f3, "Click for sign detail")), s3.addEventListener("mouseleave", Q_), s3.addEventListener("click", (t4) => {
7172
- Q_(), gv == null || gv("".concat(F_[e6], " ").concat(I_[e6])), wv(t4, e6, _2);
7173
- }), ne2.appendChild(s3);
7213
+ let t3 = e6 * 30, n3 = (e6 + 1) * 30, r3 = Y(t3, J_, y2), i3 = Y(n3, J_, y2), a3 = Y(t3, Y_, y2), o3 = Y(n3, Y_, y2), s3 = X("path");
7214
+ s3.setAttribute("d", ["M ".concat(r3.x.toFixed(1), " ").concat(r3.y.toFixed(1)), "A ".concat(J_, " ").concat(J_, " 0 0 0 ").concat(i3.x.toFixed(1), " ").concat(i3.y.toFixed(1)), "L ".concat(o3.x.toFixed(1), " ").concat(o3.y.toFixed(1)), "A ".concat(Y_, " ").concat(Y_, " 0 0 1 ").concat(a3.x.toFixed(1), " ").concat(a3.y.toFixed(1)), "Z"].join(" ")), s3.setAttribute("fill", "transparent"), s3.setAttribute("class", "hit-region sign-hit"), s3.style.pointerEvents = "all", fy(s3, "".concat(av[e6], " \u2014 click for sign info"));
7215
+ let c3 = Z(Av[e6]), l3 = Z(jv[e6]), u3 = (ue2 = le2[av[e6]]) == null ? "" : ue2, d3 = (de2 = wv[av[e6]]) == null ? "" : de2, f3 = "".concat(d3 ? d3 + " \xB7 " : "").concat(c3, " \xB7 ").concat(l3).concat(u3 ? " \xB7 Ruled by ".concat(u3) : "");
7216
+ s3.addEventListener("mouseenter", (t4) => bv(t4.clientX, t4.clientY, "".concat(iv[e6], " ").concat(av[e6]), f3, "Click for sign detail")), s3.addEventListener("mousemove", (t4) => bv(t4.clientX, t4.clientY, "".concat(iv[e6], " ").concat(av[e6]), f3, "Click for sign detail")), s3.addEventListener("mouseleave", xv), s3.addEventListener("click", (t4) => {
7217
+ xv(), zv == null || zv("".concat(iv[e6], " ").concat(av[e6])), qv(t4, e6, _2);
7218
+ }), re2.appendChild(s3);
7174
7219
  }
7175
7220
  let fe2 = X("circle");
7176
- fe2.setAttribute("cx", "250"), fe2.setAttribute("cy", "250"), fe2.setAttribute("r", String(E_)), fe2.style.fill = "var(--surface, #f2f1ea)", fe2.setAttribute("pointer-events", "none"), C2.appendChild(fe2);
7221
+ fe2.setAttribute("cx", "250"), fe2.setAttribute("cy", "250"), fe2.setAttribute("r", String(Y_)), fe2.style.fill = "var(--surface, #f2f1ea)", fe2.setAttribute("pointer-events", "none"), S2.appendChild(fe2);
7177
7222
  let pe2 = X("circle");
7178
- if (pe2.setAttribute("cx", "250"), pe2.setAttribute("cy", "250"), pe2.setAttribute("r", String(k_)), pe2.style.fill = ie2.center, ae2(pe2, "0.6"), pe2.setAttribute("pointer-events", "none"), C2.appendChild(pe2), v2.length > 0) for (let e6 = 0; e6 < v2.length; e6++) {
7223
+ if (pe2.setAttribute("cx", "250"), pe2.setAttribute("cy", "250"), pe2.setAttribute("r", String(Q_)), pe2.style.fill = E2.center, ae2(pe2, "0.6"), pe2.setAttribute("pointer-events", "none"), S2.appendChild(pe2), v2.length > 0) for (let e6 = 0; e6 < v2.length; e6++) {
7179
7224
  let t3 = v2[e6], n3 = v2[(e6 + 1) % v2.length], r3 = [1, 4, 7, 10].includes(t3.number), i3 = X("path");
7180
- i3.setAttribute("d", N_(t3.cusp_lon, n3.cusp_lon, k_, E_, y2)), i3.setAttribute("fill", l_(Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30), E2)), i3.setAttribute("fill-opacity", String(c_(E2).houseFillOpacity)), i3.setAttribute("pointer-events", "none"), C2.appendChild(i3);
7181
- let { x: a3, y: o3 } = Y(t3.cusp_lon, k_, y2), { x: s3, y: c3 } = Y(t3.cusp_lon, E_, y2), l3 = X("line");
7225
+ i3.setAttribute("d", nv(t3.cusp_lon, n3.cusp_lon, Q_, Y_, y2)), i3.setAttribute("fill", d_(Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30), T2)), i3.setAttribute("fill-opacity", String(u_(T2).houseFillOpacity)), i3.setAttribute("pointer-events", "none"), S2.appendChild(i3);
7226
+ let { x: a3, y: o3 } = Y(t3.cusp_lon, Q_, y2), { x: s3, y: c3 } = Y(t3.cusp_lon, Y_, y2), l3 = X("line");
7182
7227
  l3.setAttribute("x1", a3.toFixed(1)), l3.setAttribute("y1", o3.toFixed(1)), l3.setAttribute("x2", s3.toFixed(1)), l3.setAttribute("y2", c3.toFixed(1));
7183
- let u3 = r3 ? ie2.cuspAngular : ie2.cuspIntermediate;
7184
- l3.setAttribute("stroke", u3.stroke), l3.setAttribute("stroke-opacity", String(u3.opacity)), l3.setAttribute("stroke-width", r3 ? "1.6" : "0.8"), r3 || l3.setAttribute("stroke-dasharray", ie2.cuspDash(0.8)), l3.setAttribute("pointer-events", "none"), C2.appendChild(l3);
7185
- let d3 = (n3.cusp_lon - t3.cusp_lon + 360) % 360, { x: f3, y: p3 } = Y(t3.cusp_lon + d3 / 2, O_, y2), m3 = X("text");
7186
- 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("font-weight", r3 ? "700" : "600"), m3.setAttribute("fill", c_(E2).foreground), m3.setAttribute("opacity", "0.9"), m3.setAttribute("pointer-events", "none"), m3.textContent = String(t3.number), C2.appendChild(m3);
7228
+ let u3 = r3 ? E2.cuspAngular : E2.cuspIntermediate;
7229
+ l3.setAttribute("stroke", u3.stroke), l3.setAttribute("stroke-opacity", String(u3.opacity)), l3.setAttribute("stroke-width", r3 ? "1.6" : "0.8"), r3 || l3.setAttribute("stroke-dasharray", E2.cuspDash(0.8)), l3.setAttribute("pointer-events", "none"), S2.appendChild(l3);
7230
+ let d3 = (n3.cusp_lon - t3.cusp_lon + 360) % 360, { x: f3, y: p3 } = Y(t3.cusp_lon + d3 / 2, Z_, y2), m3 = X("text");
7231
+ 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("font-weight", r3 ? "700" : "600"), m3.setAttribute("fill", u_(T2).foreground), m3.setAttribute("opacity", "0.9"), m3.setAttribute("pointer-events", "none"), m3.textContent = String(t3.number), S2.appendChild(m3);
7187
7232
  }
7188
7233
  let me2 = v2.find((e6) => e6.number === 1), he2 = v2.find((e6) => e6.number === 4), ge2 = v2.find((e6) => e6.number === 7), _e2 = v2.find((e6) => e6.number === 10), ve2 = [{ lon: (f2 = me2 == null ? void 0 : me2.cusp_lon) == null ? y2 : f2, label: "ASC" }, { lon: (p2 = ge2 == null ? void 0 : ge2.cusp_lon) == null ? (y2 + 180) % 360 : p2, label: "DSC" }, { lon: (m2 = _e2 == null ? void 0 : _e2.cusp_lon) == null ? (y2 + 270) % 360 : m2, label: "MC" }, { lon: (h2 = he2 == null ? void 0 : he2.cusp_lon) == null ? (y2 + 90) % 360 : h2, label: "IC" }];
7189
7234
  for (let e6 of ve2) {
7190
7235
  var ye2, be2;
7191
- let t3 = Tv[e6.label], { x: n3, y: r3 } = Y(e6.lon, 256, y2);
7236
+ let t3 = Jv[e6.label], { x: n3, y: r3 } = Y(e6.lon, 256, y2);
7192
7237
  n3 = Math.min(Math.max(n3, 14), 486), r3 = Math.min(Math.max(r3, 10), 490);
7193
7238
  let i3 = X("text");
7194
- 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", "11"), i3.setAttribute("font-weight", "700"), i3.setAttribute("fill", c_(E2).foreground), i3.setAttribute("pointer-events", "none"), i3.setAttribute("class", "angle-label angle-".concat(e6.label.toLowerCase())), i3.style.transition = "opacity 150ms ease", i3.textContent = e6.label, C2.appendChild(i3);
7239
+ 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", "11"), i3.setAttribute("font-weight", "700"), i3.setAttribute("fill", u_(T2).foreground), i3.setAttribute("pointer-events", "none"), i3.setAttribute("class", "angle-label angle-".concat(e6.label.toLowerCase())), i3.style.transition = "opacity 150ms ease", i3.textContent = e6.label, S2.appendChild(i3);
7195
7240
  let a3 = X("circle");
7196
- 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((ye2 = t3 == null ? void 0 : t3.title) == null ? e6.label : ye2, " \u2014 click for interpretation"));
7197
- let o3 = (be2 = t3 == null ? void 0 : t3.keyword) == null ? "" : be2, s3 = G_(e6.lon), c3 = "".concat(o3 ? o3 + " \xB7 " : "").concat(s3);
7241
+ 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", fy(a3, "".concat((ye2 = t3 == null ? void 0 : t3.title) == null ? e6.label : ye2, " \u2014 click for interpretation"));
7242
+ let o3 = (be2 = t3 == null ? void 0 : t3.keyword) == null ? "" : be2, s3 = mv(e6.lon), c3 = "".concat(o3 ? o3 + " \xB7 " : "").concat(s3);
7198
7243
  a3.addEventListener("mouseenter", (n4) => {
7199
7244
  var r4;
7200
- Z_(n4.clientX, n4.clientY, "".concat(e6.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4), c3, "Click for interpretation"), Av(e6.lon), i3.style.opacity = "0.6";
7245
+ bv(n4.clientX, n4.clientY, "".concat(e6.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4), c3, "Click for interpretation"), $v(e6.lon), i3.style.opacity = "0.6";
7201
7246
  }), a3.addEventListener("mouseleave", () => {
7202
- Q_(), jv(), i3.style.opacity = "";
7247
+ xv(), ey(), i3.style.opacity = "";
7203
7248
  }), a3.addEventListener("click", (n4) => {
7204
7249
  var r4;
7205
- Q_(), Av(e6.lon, true), Pv(), gv == null || gv("".concat(e6.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4, " \xB7 ").concat(s3)), Ev(n4, e6.label, e6.lon);
7206
- }), ne2.appendChild(a3);
7250
+ xv(), $v(e6.lon, true), ry(), zv == null || zv("".concat(e6.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4, " \xB7 ").concat(s3)), Yv(n4, e6.label, e6.lon);
7251
+ }), re2.appendChild(a3);
7207
7252
  }
7208
7253
  {
7209
7254
  let e6 = X("g");
7210
7255
  e6.setAttribute("pointer-events", "none");
7211
- let t3 = C_ - 50, n3 = w_ - 50;
7212
- e6.setAttribute("transform", "translate(".concat(t3, ",").concat(n3, ") scale(").concat(0.5813953488372093.toFixed(4), ") translate(-69,-110)")), e6.setAttribute("opacity", E2 ? "0.08" : "0.05");
7256
+ let t3 = K_ - 50, n3 = q_ - 50;
7257
+ e6.setAttribute("transform", "translate(".concat(t3, ",").concat(n3, ") scale(").concat(0.5813953488372093.toFixed(4), ") translate(-69,-110)")), e6.setAttribute("opacity", T2 ? "0.08" : "0.05");
7213
7258
  let r3 = X("path");
7214
- r3.setAttribute("fill", c_(E2).foreground), r3.setAttribute("d", "M225.711945,199.983551 C225.292816,213.680542 221.995255,226.061340 214.416275,237.110443 C193.610641,267.442230 154.827423,271.316071 127.459396,255.072189 C123.775551,252.885712 120.882744,252.441498 116.873688,254.137070 C109.048920,257.446503 100.934502,259.899628 92.190125,259.379364 C83.542915,258.864868 78.616745,253.946121 78.684906,245.377151 C78.745262,237.789108 81.850891,231.152817 85.454010,224.735641 C88.304489,219.658905 91.245934,214.612274 95.084061,210.184647 C97.704369,207.161865 98.745560,203.844788 98.740883,199.721481 C98.699577,163.227264 125.082115,136.164413 161.509293,135.193466 C165.322968,135.092 169.315643,134.951 172.935333,135.916 C178.310226,137.349 182.595856,135.650 187.146591,133.280 C195.742508,128.804 204.726822,125.462 214.488632,124.281 C227.834183,122.666 234.932129,130.259 231.851456,143.429 C230.052628,151.119 226.752274,158.212 222.361359,164.760 C220.327988,167.792 220.017624,170.616 221.473969,174.100 C224.861847,182.205 225.468460,190.867 225.711945,199.983551 M212.976044,168.510834 C218.716415,160.882339 223.731537,152.880203 226.146439,143.492218 C228.308197,135.088409 225.333649,129.095078 217.846207,128.560104 C206.177933,127.726410 196.082672,132.729645 185.171341,138.349640 C187.816025,139.540573 189.463272,140.263855 191.095154,141.020279 C200.031250,145.162369 207.546783,151.055435 213.272079,159.124069 C214.113724,160.310181 215.663269,161.586777 214.829697,163.091461 C211.652573,168.826584 208.025726,174.252899 202.566681,179.006516 C201.549835,176.444733 200.923126,174.750778 200.212067,173.093002 C195.433319,161.951874 188.776291,152.487198 177.473648,146.963547 C174.609192,145.563675 172.292969,145.608887 169.595505,147.317566 C152.514618,158.137161 136.926010,170.829269 122.270142,184.706512 C120.686935,186.205612 119.364059,187.876480 119.190598,190.236053 C118.688568,197.065308 118.869385,203.864960 119.793037,210.651215 C121.255951,221.399521 126.239235,230.774902 131.349335,240.326111 C132.993088,240.252151 134.400635,239.345810 135.765091,238.453430 C144.400665,232.805634 153.133560,227.309341 161.286926,220.942139 C164.075363,218.764557 165.766891,216.649643 165.788437,212.774612 C165.823334,206.491791 170.826294,202.743942 176.973877,204.085724 C179.390350,204.613144 181.027267,204.346497 182.788132,202.634048 C193.536697,192.180939 204.343719,181.790634 212.976044,168.510834 M196.311264,238.774429 C205.223999,223.519989 207.059082,207.185013 204.308746,188.929276 C197.720764,194.995590 193.078613,201.379272 186.899475,206.146912 C184.795013,207.770645 183.863800,209.506882 184.135178,212.471619 C184.705627,218.704117 179.426636,223.881546 173.582184,222.584213 C169.742706,221.731949 167.311813,222.850525 164.693726,225.165817 C162.585052,227.030579 160.129227,228.496109 157.916992,230.251648 C151.305984,235.497787 144.002090,239.748337 136.880554,244.346085 C150.810440,260.746155 181.289062,262.140137 196.311264,238.774429 M101.954178,222.323334 C101.003220,218.898468 100.052269,215.473602 98.901512,211.329163 C91.673454,221.459351 85.061653,230.979462 83.800476,243.065674 C83.190475,248.911530 86.140854,252.991577 91.843674,253.598953 C100.879066,254.561295 109.050667,251.508087 117.776840,247.739761 C110.183830,240.480621 105.126755,232.419739 101.954178,222.323334 M129.303619,173.800827 C141.200867,163.092194 153.936737,153.435806 167.699600,144.113556 C142.265121,138.861908 122.832809,158.201233 120.741943,181.434265 C123.701614,178.779602 126.227280,176.514221 129.303619,173.800827 z"), e6.appendChild(r3), x2.appendChild(e6);
7259
+ r3.setAttribute("fill", u_(T2).foreground), r3.setAttribute("d", "M225.711945,199.983551 C225.292816,213.680542 221.995255,226.061340 214.416275,237.110443 C193.610641,267.442230 154.827423,271.316071 127.459396,255.072189 C123.775551,252.885712 120.882744,252.441498 116.873688,254.137070 C109.048920,257.446503 100.934502,259.899628 92.190125,259.379364 C83.542915,258.864868 78.616745,253.946121 78.684906,245.377151 C78.745262,237.789108 81.850891,231.152817 85.454010,224.735641 C88.304489,219.658905 91.245934,214.612274 95.084061,210.184647 C97.704369,207.161865 98.745560,203.844788 98.740883,199.721481 C98.699577,163.227264 125.082115,136.164413 161.509293,135.193466 C165.322968,135.092 169.315643,134.951 172.935333,135.916 C178.310226,137.349 182.595856,135.650 187.146591,133.280 C195.742508,128.804 204.726822,125.462 214.488632,124.281 C227.834183,122.666 234.932129,130.259 231.851456,143.429 C230.052628,151.119 226.752274,158.212 222.361359,164.760 C220.327988,167.792 220.017624,170.616 221.473969,174.100 C224.861847,182.205 225.468460,190.867 225.711945,199.983551 M212.976044,168.510834 C218.716415,160.882339 223.731537,152.880203 226.146439,143.492218 C228.308197,135.088409 225.333649,129.095078 217.846207,128.560104 C206.177933,127.726410 196.082672,132.729645 185.171341,138.349640 C187.816025,139.540573 189.463272,140.263855 191.095154,141.020279 C200.031250,145.162369 207.546783,151.055435 213.272079,159.124069 C214.113724,160.310181 215.663269,161.586777 214.829697,163.091461 C211.652573,168.826584 208.025726,174.252899 202.566681,179.006516 C201.549835,176.444733 200.923126,174.750778 200.212067,173.093002 C195.433319,161.951874 188.776291,152.487198 177.473648,146.963547 C174.609192,145.563675 172.292969,145.608887 169.595505,147.317566 C152.514618,158.137161 136.926010,170.829269 122.270142,184.706512 C120.686935,186.205612 119.364059,187.876480 119.190598,190.236053 C118.688568,197.065308 118.869385,203.864960 119.793037,210.651215 C121.255951,221.399521 126.239235,230.774902 131.349335,240.326111 C132.993088,240.252151 134.400635,239.345810 135.765091,238.453430 C144.400665,232.805634 153.133560,227.309341 161.286926,220.942139 C164.075363,218.764557 165.766891,216.649643 165.788437,212.774612 C165.823334,206.491791 170.826294,202.743942 176.973877,204.085724 C179.390350,204.613144 181.027267,204.346497 182.788132,202.634048 C193.536697,192.180939 204.343719,181.790634 212.976044,168.510834 M196.311264,238.774429 C205.223999,223.519989 207.059082,207.185013 204.308746,188.929276 C197.720764,194.995590 193.078613,201.379272 186.899475,206.146912 C184.795013,207.770645 183.863800,209.506882 184.135178,212.471619 C184.705627,218.704117 179.426636,223.881546 173.582184,222.584213 C169.742706,221.731949 167.311813,222.850525 164.693726,225.165817 C162.585052,227.030579 160.129227,228.496109 157.916992,230.251648 C151.305984,235.497787 144.002090,239.748337 136.880554,244.346085 C150.810440,260.746155 181.289062,262.140137 196.311264,238.774429 M101.954178,222.323334 C101.003220,218.898468 100.052269,215.473602 98.901512,211.329163 C91.673454,221.459351 85.061653,230.979462 83.800476,243.065674 C83.190475,248.911530 86.140854,252.991577 91.843674,253.598953 C100.879066,254.561295 109.050667,251.508087 117.776840,247.739761 C110.183830,240.480621 105.126755,232.419739 101.954178,222.323334 M129.303619,173.800827 C141.200867,163.092194 153.936737,153.435806 167.699600,144.113556 C142.265121,138.861908 122.832809,158.201233 120.741943,181.434265 C123.701614,178.779602 126.227280,176.514221 129.303619,173.800827 z"), e6.appendChild(r3), x2.appendChild(e6);
7215
7260
  }
7216
7261
  for (let e6 of ee2) {
7217
7262
  var xe2, D2, Se2, O2, Ce2, we2, Te2, Ee2, De2, Oe2, ke2, Ae2, je2, Me2, Ne2, Pe2, Fe2, Ie2, Le2;
7218
7263
  let t3 = _2.find((t4) => t4.name.toLowerCase() === e6.planet1.toLowerCase()), n3 = _2.find((t4) => t4.name.toLowerCase() === e6.planet2.toLowerCase());
7219
7264
  if (!t3 || !n3) continue;
7220
- let r3 = (xe2 = R_((D2 = e6.type) == null ? "" : D2)) == null ? "#aaa" : xe2, { x: a3, y: o3 } = Y(t3.longitude, A_, y2), { x: s3, y: c3 } = Y(n3.longitude, A_, y2), l3 = Math.min((Se2 = e6.orb) == null ? 10 : Se2, 10), u3 = 0.95 - l3 / 10 * 0.55, d3 = X("line");
7221
- d3.setAttribute("x1", a3.toFixed(1)), d3.setAttribute("y1", o3.toFixed(1)), d3.setAttribute("x2", s3.toFixed(1)), d3.setAttribute("y2", c3.toFixed(1)), d3.setAttribute("pointer-events", "none"), d3.style.stroke = r3, d3.style.strokeOpacity = String(u3), d3.style.strokeWidth = l3 < 2 ? "1.6" : "1.1", w2.appendChild(d3);
7222
- let f3 = (O2 = L_[(Ce2 = (we2 = e6.type) == null ? void 0 : we2.toLowerCase()) == null ? "" : Ce2]) == null ? "" : O2, p3 = a3 + (s3 - a3) * 0.35, m3 = o3 + (c3 - o3) * 0.35, h3 = [];
7265
+ let r3 = (xe2 = sv((D2 = e6.type) == null ? "" : D2)) == null ? "#aaa" : xe2, { x: a3, y: o3 } = Y(t3.longitude, $_, y2), { x: s3, y: c3 } = Y(n3.longitude, $_, y2), l3 = Math.min((Se2 = e6.orb) == null ? 10 : Se2, 10), u3 = 0.95 - l3 / 10 * 0.55, d3 = X("line");
7266
+ d3.setAttribute("x1", a3.toFixed(1)), d3.setAttribute("y1", o3.toFixed(1)), d3.setAttribute("x2", s3.toFixed(1)), d3.setAttribute("y2", c3.toFixed(1)), d3.setAttribute("pointer-events", "none"), d3.style.stroke = r3, d3.style.strokeOpacity = String(u3), d3.style.strokeWidth = l3 < 2 ? "1.6" : "1.1", C2.appendChild(d3);
7267
+ let f3 = (O2 = ov[(Ce2 = (we2 = e6.type) == null ? void 0 : we2.toLowerCase()) == null ? "" : Ce2]) == null ? "" : O2, p3 = a3 + (s3 - a3) * 0.35, m3 = o3 + (c3 - o3) * 0.35, h3 = [];
7223
7268
  if (f3 && Math.hypot(s3 - a3, c3 - o3) > 36) {
7224
7269
  let e7 = X("circle");
7225
- e7.setAttribute("cx", p3.toFixed(1)), e7.setAttribute("cy", m3.toFixed(1)), e7.setAttribute("r", "9"), e7.setAttribute("fill", ie2.center), e7.setAttribute("stroke", r3), e7.setAttribute("stroke-opacity", "0.9"), e7.setAttribute("stroke-width", "1"), e7.setAttribute("pointer-events", "none"), w2.appendChild(e7), h3.push(e7);
7270
+ e7.setAttribute("cx", p3.toFixed(1)), e7.setAttribute("cy", m3.toFixed(1)), e7.setAttribute("r", "9"), e7.setAttribute("fill", E2.center), e7.setAttribute("stroke", r3), e7.setAttribute("stroke-opacity", "0.9"), e7.setAttribute("stroke-width", "1"), e7.setAttribute("pointer-events", "none"), C2.appendChild(e7), h3.push(e7);
7226
7271
  let t4 = X("text");
7227
- t4.setAttribute("x", p3.toFixed(1)), t4.setAttribute("y", m3.toFixed(1)), t4.setAttribute("text-anchor", "middle"), t4.setAttribute("dominant-baseline", "central"), t4.setAttribute("font-size", "11"), t4.setAttribute("font-weight", "700"), t4.setAttribute("fill", r3), t4.setAttribute("fill-opacity", "1"), t4.setAttribute("pointer-events", "none"), t4.textContent = f3, w2.appendChild(t4), h3.push(t4);
7272
+ t4.setAttribute("x", p3.toFixed(1)), t4.setAttribute("y", m3.toFixed(1)), t4.setAttribute("text-anchor", "middle"), t4.setAttribute("dominant-baseline", "central"), t4.setAttribute("font-size", "11"), t4.setAttribute("font-weight", "700"), t4.setAttribute("fill", r3), t4.setAttribute("fill-opacity", "1"), t4.setAttribute("pointer-events", "none"), t4.textContent = f3, C2.appendChild(t4), h3.push(t4);
7228
7273
  }
7229
7274
  let g3 = X("line");
7230
- g3.setAttribute("x1", a3.toFixed(1)), g3.setAttribute("y1", o3.toFixed(1)), g3.setAttribute("x2", s3.toFixed(1)), g3.setAttribute("y2", c3.toFixed(1)), g3.setAttribute("stroke", "transparent"), g3.setAttribute("stroke-width", "13"), g3.setAttribute("fill", "none"), g3.setAttribute("class", "hit-region aspect-hit"), g3.style.pointerEvents = "all", Uv(g3, "Aspect: ".concat((Te2 = e6.type) == null ? "Aspect" : Te2, " between ").concat(t3.name, " and ").concat(n3.name));
7231
- let v3 = (Ee2 = P_[t3.name.toLowerCase()]) == null ? t3.name : Ee2, ee3 = (De2 = P_[n3.name.toLowerCase()]) == null ? n3.name : De2, b3 = (Oe2 = (ke2 = L_[(Ae2 = (je2 = e6.type) == null ? void 0 : je2.toLowerCase()) == null ? "" : Ae2]) == null ? e6.type : ke2) == null ? "" : Oe2, x3 = (Me2 = nv[(Ne2 = (Pe2 = e6.type) == null ? void 0 : Pe2.toLowerCase()) == null ? "" : Ne2]) == null ? "" : Me2, S3 = "".concat(x3 ? x3 + " \xB7 " : "").concat(v3, " ").concat(b3, " ").concat(ee3, " \xB7 ").concat((Fe2 = (Ie2 = e6.orb) == null ? void 0 : Ie2.toFixed(1)) == null ? "?" : Fe2, "\xB0 orb").concat(e6.applying === true ? " (applying)" : e6.applying === false ? " (separating)" : "");
7275
+ g3.setAttribute("x1", a3.toFixed(1)), g3.setAttribute("y1", o3.toFixed(1)), g3.setAttribute("x2", s3.toFixed(1)), g3.setAttribute("y2", c3.toFixed(1)), g3.setAttribute("stroke", "transparent"), g3.setAttribute("stroke-width", "13"), g3.setAttribute("fill", "none"), g3.setAttribute("class", "hit-region aspect-hit"), g3.style.pointerEvents = "all", fy(g3, "Aspect: ".concat((Te2 = e6.type) == null ? "Aspect" : Te2, " between ").concat(t3.name, " and ").concat(n3.name));
7276
+ let v3 = (Ee2 = rv[t3.name.toLowerCase()]) == null ? t3.name : Ee2, ee3 = (De2 = rv[n3.name.toLowerCase()]) == null ? n3.name : De2, b3 = (Oe2 = (ke2 = ov[(Ae2 = (je2 = e6.type) == null ? void 0 : je2.toLowerCase()) == null ? "" : Ae2]) == null ? e6.type : ke2) == null ? "" : Oe2, x3 = (Me2 = Tv[(Ne2 = (Pe2 = e6.type) == null ? void 0 : Pe2.toLowerCase()) == null ? "" : Ne2]) == null ? "" : Me2, te3 = "".concat(x3 ? x3 + " \xB7 " : "").concat(v3, " ").concat(b3, " ").concat(ee3, " \xB7 ").concat((Fe2 = (Ie2 = e6.orb) == null ? void 0 : Ie2.toFixed(1)) == null ? "?" : Fe2, "\xB0 orb").concat(e6.applying === true ? " (applying)" : e6.applying === false ? " (separating)" : "");
7232
7277
  g3.addEventListener("mouseenter", (t4) => {
7233
7278
  var n4;
7234
- return Z_(t4.clientX, t4.clientY, Z((n4 = e6.type) == null ? "Aspect" : n4), S3, "Click for interpretation");
7279
+ return bv(t4.clientX, t4.clientY, Z((n4 = e6.type) == null ? "Aspect" : n4), te3, "Click for interpretation");
7235
7280
  }), g3.addEventListener("mousemove", (t4) => {
7236
7281
  var n4;
7237
- return Z_(t4.clientX, t4.clientY, Z((n4 = e6.type) == null ? "Aspect" : n4), S3, "Click for interpretation");
7238
- }), g3.addEventListener("mouseleave", Q_), g3.addEventListener("click", (t4) => {
7282
+ return bv(t4.clientX, t4.clientY, Z((n4 = e6.type) == null ? "Aspect" : n4), te3, "Click for interpretation");
7283
+ }), g3.addEventListener("mouseleave", xv), g3.addEventListener("click", (t4) => {
7239
7284
  var n4, r4, a4, o4, s4, c4;
7240
- Q_();
7241
- let l4 = "".concat((n4 = L_[(r4 = (a4 = e6.type) == null ? void 0 : a4.toLowerCase()) == null ? "" : r4]) == null ? "" : n4, " ").concat(Z((o4 = e6.type) == null ? "Aspect" : o4), ": ").concat((s4 = P_[e6.planet1.toLowerCase()]) == null ? e6.planet1 : s4, " ").concat((c4 = P_[e6.planet2.toLowerCase()]) == null ? e6.planet2 : c4);
7242
- gv == null || gv(l4), xv(t4, e6, _2), i2(e6);
7285
+ xv();
7286
+ let l4 = "".concat((n4 = ov[(r4 = (a4 = e6.type) == null ? void 0 : a4.toLowerCase()) == null ? "" : r4]) == null ? "" : n4, " ").concat(Z((o4 = e6.type) == null ? "Aspect" : o4), ": ").concat((s4 = rv[e6.planet1.toLowerCase()]) == null ? e6.planet1 : s4, " ").concat((c4 = rv[e6.planet2.toLowerCase()]) == null ? e6.planet2 : c4);
7287
+ zv == null || zv(l4), Wv(t4, e6, _2), i2(e6);
7243
7288
  });
7244
- let C3 = [e6.planet1.toLowerCase(), e6.planet2.toLowerCase()].sort().join("|"), te3 = ((Le2 = e6.type) == null ? "unknown" : Le2).toLowerCase();
7245
- vv.set(C3, { vis: d3, color: r3, baseOpacity: String(u3), baseWidth: l3 < 2 ? "1.6" : "1.1", aspectType: te3, orb: l3, symbolEls: h3 }), ne2.appendChild(g3);
7289
+ let S3 = [e6.planet1.toLowerCase(), e6.planet2.toLowerCase()].sort().join("|"), ne3 = ((Le2 = e6.type) == null ? "unknown" : Le2).toLowerCase();
7290
+ Vv.set(S3, { vis: d3, color: r3, baseOpacity: String(u3), baseWidth: l3 < 2 ? "1.6" : "1.1", aspectType: ne3, orb: l3, symbolEls: h3 }), re2.appendChild(g3);
7246
7291
  }
7247
- let Re2 = _2.filter((e6) => !U_.has(e6.name.toLowerCase())), k2 = _2.filter((e6) => U_.has(e6.name.toLowerCase())), ze2 = __(Re2.map((e6) => ({ name: e6.name.toLowerCase(), longitude: e6.longitude })), 8), Be2 = __(k2.map((e6) => ({ name: e6.name.toLowerCase(), longitude: e6.longitude })), 6), Ve2 = new Map([...ze2.entries(), ...Be2.entries()]);
7292
+ let Re2 = _2.filter((e6) => !fv.has(e6.name.toLowerCase())), k2 = _2.filter((e6) => fv.has(e6.name.toLowerCase())), ze2 = y_(Re2.map((e6) => ({ name: e6.name.toLowerCase(), longitude: e6.longitude })), 8), Be2 = y_(k2.map((e6) => ({ name: e6.name.toLowerCase(), longitude: e6.longitude })), 6), Ve2 = new Map([...ze2.entries(), ...Be2.entries()]);
7248
7293
  for (let e6 of _2) {
7249
7294
  var He2, Ue2, We2, Ge2;
7250
- let t3 = (He2 = P_[e6.name.toLowerCase()]) == null ? "\u2605" : He2;
7251
- V_(e6.name);
7252
- let r3 = e6.name.toLowerCase(), i3 = U_.has(r3), a3 = i3 ? D_ - 14 : D_, o3 = i3 ? D_ - 28 : D_ - 17, s3 = i3 ? D_ : 204, c3 = i3 ? "14" : "21", l3 = i3 ? "500" : "600", u3 = i3 ? j_ - 2 : j_, d3 = i3 ? "0.65" : "1", f3 = (Ue2 = Ve2.get(r3)) == null ? e6.longitude : Ue2, { x: p3, y: m3 } = Y(f3, a3, y2), h3 = X("g");
7253
- h3.setAttribute("class", "planet-glyph-group".concat(i3 ? " extended-body" : "")), h3.dataset.planet = r3, h3.style.transition = "opacity 200ms ease", h3.style.opacity = d3, te2.appendChild(h3);
7254
- let { x: g3, y: _3 } = Y(e6.longitude, E_ - 5, y2), v3 = X("circle");
7255
- if (v3.setAttribute("cx", g3.toFixed(1)), v3.setAttribute("cy", _3.toFixed(1)), v3.setAttribute("r", i3 ? "1.8" : "2.5"), v3.setAttribute("fill", c_(E2).house), v3.setAttribute("opacity", "0.65"), v3.setAttribute("pointer-events", "none"), h3.appendChild(v3), x_(e6.longitude, f3) > 2) {
7295
+ let t3 = (He2 = rv[e6.name.toLowerCase()]) == null ? "\u2605" : He2;
7296
+ uv(e6.name);
7297
+ let r3 = e6.name.toLowerCase(), i3 = fv.has(r3), a3 = i3 ? X_ - 14 : X_, o3 = i3 ? X_ - 28 : X_ - 17, s3 = i3 ? X_ : 204, c3 = i3 ? "14" : "21", l3 = i3 ? "500" : "600", u3 = i3 ? ev - 2 : ev, d3 = i3 ? "0.65" : "1", f3 = (Ue2 = Ve2.get(r3)) == null ? e6.longitude : Ue2, { x: p3, y: m3 } = Y(f3, a3, y2), h3 = X("g");
7298
+ h3.setAttribute("class", "planet-glyph-group".concat(i3 ? " extended-body" : "")), h3.dataset.planet = r3, h3.style.transition = "opacity 200ms ease", h3.style.opacity = d3, ne2.appendChild(h3);
7299
+ let { x: g3, y: _3 } = Y(e6.longitude, Y_ - 5, y2), v3 = X("circle");
7300
+ if (v3.setAttribute("cx", g3.toFixed(1)), v3.setAttribute("cy", _3.toFixed(1)), v3.setAttribute("r", i3 ? "1.8" : "2.5"), v3.setAttribute("fill", u_(T2).house), v3.setAttribute("opacity", "0.65"), v3.setAttribute("pointer-events", "none"), h3.appendChild(v3), C_(e6.longitude, f3) > 2) {
7256
7301
  let e7 = X("line");
7257
- e7.setAttribute("x1", g3.toFixed(1)), e7.setAttribute("y1", _3.toFixed(1)), e7.setAttribute("x2", p3.toFixed(1)), e7.setAttribute("y2", m3.toFixed(1)), e7.setAttribute("stroke", c_(E2).house), e7.setAttribute("stroke-width", "0.7"), e7.setAttribute("stroke-opacity", "0.35"), e7.setAttribute("stroke-linecap", "round"), e7.setAttribute("pointer-events", "none"), h3.appendChild(e7);
7302
+ e7.setAttribute("x1", g3.toFixed(1)), e7.setAttribute("y1", _3.toFixed(1)), e7.setAttribute("x2", p3.toFixed(1)), e7.setAttribute("y2", m3.toFixed(1)), e7.setAttribute("stroke", u_(T2).house), e7.setAttribute("stroke-width", "0.7"), e7.setAttribute("stroke-opacity", "0.35"), e7.setAttribute("stroke-linecap", "round"), e7.setAttribute("pointer-events", "none"), h3.appendChild(e7);
7258
7303
  }
7259
7304
  let b3 = X("text");
7260
- b3.setAttribute("x", p3.toFixed(1)), b3.setAttribute("y", m3.toFixed(1)), b3.setAttribute("text-anchor", "middle"), b3.setAttribute("dominant-baseline", "central"), b3.setAttribute("font-size", c3), b3.setAttribute("font-weight", l3), b3.setAttribute("pointer-events", "none"), b3.style.fill = c_(E2).foreground, b3.style.fontFamily = a_, b3.textContent = t3, h3.appendChild(b3);
7261
- let x3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), { x: S3, y: C3 } = Y(f3, o3, y2), w3 = X("text");
7262
- if (w3.setAttribute("x", S3.toFixed(1)), w3.setAttribute("y", C3.toFixed(1)), w3.setAttribute("text-anchor", "middle"), w3.setAttribute("dominant-baseline", "central"), w3.setAttribute("font-size", i3 ? "7" : "8.5"), w3.setAttribute("font-weight", "500"), w3.setAttribute("fill", c_(E2).foreground), w3.setAttribute("opacity", "0.8"), w3.setAttribute("pointer-events", "none"), w3.textContent = "".concat(x3, "\xB0"), h3.appendChild(w3), e6.retrograde) {
7305
+ b3.setAttribute("x", p3.toFixed(1)), b3.setAttribute("y", m3.toFixed(1)), b3.setAttribute("text-anchor", "middle"), b3.setAttribute("dominant-baseline", "central"), b3.setAttribute("font-size", c3), b3.setAttribute("font-weight", l3), b3.setAttribute("pointer-events", "none"), b3.style.fill = u_(T2).foreground, b3.style.fontFamily = s_, b3.textContent = t3, h3.appendChild(b3);
7306
+ let x3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), { x: te3, y: S3 } = Y(f3, o3, y2), C3 = X("text");
7307
+ if (C3.setAttribute("x", te3.toFixed(1)), C3.setAttribute("y", S3.toFixed(1)), C3.setAttribute("text-anchor", "middle"), C3.setAttribute("dominant-baseline", "central"), C3.setAttribute("font-size", i3 ? "7" : "8.5"), C3.setAttribute("font-weight", "500"), C3.setAttribute("fill", u_(T2).foreground), C3.setAttribute("opacity", "0.8"), C3.setAttribute("pointer-events", "none"), C3.textContent = "".concat(x3, "\xB0"), h3.appendChild(C3), e6.retrograde) {
7263
7308
  let { x: e7, y: t4 } = Y(f3, s3, y2), n3 = X("text");
7264
7309
  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", i3 ? "6" : "8"), n3.setAttribute("fill", "#e05252"), n3.setAttribute("pointer-events", "none"), n3.textContent = "\u211E", h3.appendChild(n3);
7265
7310
  }
7266
- let T3 = X("circle");
7267
- T3.setAttribute("cx", p3.toFixed(1)), T3.setAttribute("cy", m3.toFixed(1)), T3.setAttribute("r", String(u3)), T3.setAttribute("fill", "transparent"), T3.setAttribute("class", "hit-region planet-hit"), T3.dataset.planet = r3, T3.style.pointerEvents = "all", Uv(T3, "".concat(i3 ? "Extended body" : "Planet", ": ").concat(e6.name));
7268
- let re3 = (We2 = $_[e6.name.toLowerCase()]) == null ? "" : We2, ie3 = e6.house ? (Ge2 = ev[e6.house]) == null ? "" : Ge2 : "", ae3 = "".concat(re3 ? re3 + " \xB7 " : "").concat(G_(e6.longitude)).concat(e6.house ? " \xB7 H".concat(e6.house).concat(ie3 ? " (" + ie3 + ")" : "") : "").concat(e6.retrograde ? " \u211E" : "");
7269
- T3.addEventListener("mouseenter", (n3) => {
7270
- Z_(n3.clientX, n3.clientY, "".concat(t3, " ").concat(Z(e6.name)), ae3, "Click for aspects"), Av(e6.longitude);
7271
- }), T3.addEventListener("mousemove", (n3) => Z_(n3.clientX, n3.clientY, "".concat(t3, " ").concat(Z(e6.name)), ae3, "Click for aspects")), T3.addEventListener("mouseleave", () => {
7272
- Q_(), pv !== e6.name.toLowerCase() && jv();
7273
- }), T3.addEventListener("click", (t4) => {
7311
+ let w3 = X("circle");
7312
+ w3.setAttribute("cx", p3.toFixed(1)), w3.setAttribute("cy", m3.toFixed(1)), w3.setAttribute("r", String(u3)), w3.setAttribute("fill", "transparent"), w3.setAttribute("class", "hit-region planet-hit"), w3.dataset.planet = r3, w3.style.pointerEvents = "all", fy(w3, "".concat(i3 ? "Extended body" : "Planet", ": ").concat(e6.name));
7313
+ let ie3 = (We2 = Sv[e6.name.toLowerCase()]) == null ? "" : We2, E3 = e6.house ? (Ge2 = Cv[e6.house]) == null ? "" : Ge2 : "", ae3 = "".concat(ie3 ? ie3 + " \xB7 " : "").concat(mv(e6.longitude)).concat(e6.house ? " \xB7 H".concat(e6.house).concat(E3 ? " (" + E3 + ")" : "") : "").concat(e6.retrograde ? " \u211E" : "");
7314
+ w3.addEventListener("mouseenter", (n3) => {
7315
+ bv(n3.clientX, n3.clientY, "".concat(t3, " ").concat(Z(e6.name)), ae3, "Click for aspects"), $v(e6.longitude);
7316
+ }), w3.addEventListener("mousemove", (n3) => bv(n3.clientX, n3.clientY, "".concat(t3, " ").concat(Z(e6.name)), ae3, "Click for aspects")), w3.addEventListener("mouseleave", () => {
7317
+ xv(), Iv !== e6.name.toLowerCase() && ey();
7318
+ }), w3.addEventListener("click", (t4) => {
7274
7319
  var r4;
7275
- if (Q_(), pv === e6.name.toLowerCase()) {
7276
- Fv(), Dv(), jv(), gv == null || gv(null);
7320
+ if (xv(), Iv === e6.name.toLowerCase()) {
7321
+ iy(), Xv(), ey(), zv == null || zv(null);
7277
7322
  return;
7278
7323
  }
7279
- pv = e6.name.toLowerCase();
7280
- let i4 = (r4 = P_[e6.name.toLowerCase()]) == null ? "" : r4;
7281
- gv == null || gv("".concat(i4, " ").concat(Z(e6.name), " in ").concat(G_(e6.longitude))), Av(e6.longitude, true), Mv(e6.name), bv(t4, e6, ee2), n2(e6);
7282
- }), ne2.appendChild(T3);
7324
+ Iv = e6.name.toLowerCase();
7325
+ let i4 = (r4 = rv[e6.name.toLowerCase()]) == null ? "" : r4;
7326
+ zv == null || zv("".concat(i4, " ").concat(Z(e6.name), " in ").concat(mv(e6.longitude))), $v(e6.longitude, true), ty(e6.name), Uv(t4, e6, ee2), n2(e6);
7327
+ }), re2.appendChild(w3);
7283
7328
  }
7284
7329
  for (let e6 = 0; e6 < v2.length; e6++) {
7285
7330
  var Ke2, qe2, Je2;
7286
- let t3 = v2[e6], n3 = v2[(e6 + 1) % v2.length], i3 = Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30), a3 = (Ke2 = (qe2 = t3.sign) == null ? I_[i3] : qe2) == null ? "" : Ke2, o3 = (Je2 = ev[t3.number]) == null ? "" : Je2, s3 = "".concat(o3 ? o3 + " \xB7 " : "").concat(G_(t3.cusp_lon), " \xB7 ").concat(a3), { x: c3, y: l3 } = Y(t3.cusp_lon, k_, y2), { x: u3, y: d3 } = Y(t3.cusp_lon, E_, y2), f3 = X("line");
7287
- f3.setAttribute("x1", c3.toFixed(1)), f3.setAttribute("y1", l3.toFixed(1)), f3.setAttribute("x2", u3.toFixed(1)), f3.setAttribute("y2", d3.toFixed(1)), f3.setAttribute("stroke", "transparent"), f3.setAttribute("stroke-width", String(M_)), f3.setAttribute("fill", "none"), f3.setAttribute("class", "hit-region"), f3.style.pointerEvents = "all", Uv(f3, "House ".concat(t3.number, " Cusp")), f3.addEventListener("mouseenter", (e7) => {
7288
- Z_(e7.clientX, e7.clientY, "House ".concat(t3.number), s3, "Click for meaning"), Av(t3.cusp_lon);
7289
- }), f3.addEventListener("mousemove", (e7) => Z_(e7.clientX, e7.clientY, "House ".concat(t3.number), s3, "Click for meaning")), f3.addEventListener("mouseleave", () => {
7290
- Q_(), jv();
7331
+ let t3 = v2[e6], n3 = v2[(e6 + 1) % v2.length], i3 = Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30), a3 = (Ke2 = (qe2 = t3.sign) == null ? av[i3] : qe2) == null ? "" : Ke2, o3 = (Je2 = Cv[t3.number]) == null ? "" : Je2, s3 = "".concat(o3 ? o3 + " \xB7 " : "").concat(mv(t3.cusp_lon), " \xB7 ").concat(a3), { x: c3, y: l3 } = Y(t3.cusp_lon, Q_, y2), { x: u3, y: d3 } = Y(t3.cusp_lon, Y_, y2), f3 = X("line");
7332
+ f3.setAttribute("x1", c3.toFixed(1)), f3.setAttribute("y1", l3.toFixed(1)), f3.setAttribute("x2", u3.toFixed(1)), f3.setAttribute("y2", d3.toFixed(1)), f3.setAttribute("stroke", "transparent"), f3.setAttribute("stroke-width", String(tv)), f3.setAttribute("fill", "none"), f3.setAttribute("class", "hit-region"), f3.style.pointerEvents = "all", fy(f3, "House ".concat(t3.number, " Cusp")), f3.addEventListener("mouseenter", (e7) => {
7333
+ bv(e7.clientX, e7.clientY, "House ".concat(t3.number), s3, "Click for meaning"), $v(t3.cusp_lon);
7334
+ }), f3.addEventListener("mousemove", (e7) => bv(e7.clientX, e7.clientY, "House ".concat(t3.number), s3, "Click for meaning")), f3.addEventListener("mouseleave", () => {
7335
+ xv(), ey();
7291
7336
  }), f3.addEventListener("click", (e7) => {
7292
7337
  var n4, i4;
7293
- Q_();
7294
- let a4 = (n4 = (i4 = t3.sign) == null ? I_[Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30)] : i4) == null ? "" : n4;
7295
- gv == null || gv("House ".concat(t3.number, " \xB7 ").concat(a4)), Sv(e7, t3, _2), r2(t3);
7296
- }), ne2.appendChild(f3);
7297
- let p3 = (n3.cusp_lon - t3.cusp_lon + 360) % 360, { x: m3, y: h3 } = Y(t3.cusp_lon + p3 / 2, O_, y2), g3 = X("circle");
7298
- g3.setAttribute("cx", m3.toFixed(1)), g3.setAttribute("cy", h3.toFixed(1)), g3.setAttribute("r", "14"), g3.setAttribute("fill", "transparent"), g3.setAttribute("class", "hit-region"), g3.style.pointerEvents = "all", Uv(g3, "House ".concat(t3.number, " Area")), g3.addEventListener("mouseenter", (e7) => Z_(e7.clientX, e7.clientY, "House ".concat(t3.number), s3, "Click for meaning")), g3.addEventListener("mousemove", (e7) => Z_(e7.clientX, e7.clientY, "House ".concat(t3.number), s3, "Click for meaning")), g3.addEventListener("mouseleave", () => {
7299
- Q_();
7338
+ xv();
7339
+ let a4 = (n4 = (i4 = t3.sign) == null ? av[Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30)] : i4) == null ? "" : n4;
7340
+ zv == null || zv("House ".concat(t3.number, " \xB7 ").concat(a4)), Gv(e7, t3, _2), r2(t3);
7341
+ }), re2.appendChild(f3);
7342
+ let p3 = (n3.cusp_lon - t3.cusp_lon + 360) % 360, { x: m3, y: h3 } = Y(t3.cusp_lon + p3 / 2, Z_, y2), g3 = X("circle");
7343
+ g3.setAttribute("cx", m3.toFixed(1)), g3.setAttribute("cy", h3.toFixed(1)), g3.setAttribute("r", "14"), g3.setAttribute("fill", "transparent"), g3.setAttribute("class", "hit-region"), g3.style.pointerEvents = "all", fy(g3, "House ".concat(t3.number, " Area")), g3.addEventListener("mouseenter", (e7) => bv(e7.clientX, e7.clientY, "House ".concat(t3.number), s3, "Click for meaning")), g3.addEventListener("mousemove", (e7) => bv(e7.clientX, e7.clientY, "House ".concat(t3.number), s3, "Click for meaning")), g3.addEventListener("mouseleave", () => {
7344
+ xv();
7300
7345
  }), g3.addEventListener("click", (e7) => {
7301
7346
  var n4, i4;
7302
- Q_();
7303
- let a4 = (n4 = (i4 = t3.sign) == null ? I_[Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30)] : i4) == null ? "" : n4;
7304
- gv == null || gv("House ".concat(t3.number, " \xB7 ").concat(a4)), Sv(e7, t3, _2), r2(t3);
7305
- }), ne2.appendChild(g3);
7347
+ xv();
7348
+ let a4 = (n4 = (i4 = t3.sign) == null ? av[Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30)] : i4) == null ? "" : n4;
7349
+ zv == null || zv("House ".concat(t3.number, " \xB7 ").concat(a4)), Gv(e7, t3, _2), r2(t3);
7350
+ }), re2.appendChild(g3);
7306
7351
  }
7307
- mv && document.removeEventListener("click", mv, false), mv = (e6) => {
7352
+ Lv && document.removeEventListener("click", Lv, false), Lv = (e6) => {
7308
7353
  let t3 = e6.target;
7309
- t3 && typeof t3.closest == "function" && !t3.closest(".hit-region") && !t3.closest("#info-panel") && !t3.closest("#patterns-strip") && (Fv(), Dv());
7310
- }, document.addEventListener("click", mv, false);
7354
+ t3 && typeof t3.closest == "function" && !t3.closest(".hit-region") && !t3.closest("#info-panel") && !t3.closest("#patterns-strip") && (iy(), Xv());
7355
+ }, document.addEventListener("click", Lv, false);
7311
7356
  }
7312
- function Uv(e5, t2) {
7357
+ function fy(e5, t2) {
7313
7358
  e5 && (e5.setAttribute("tabindex", "0"), e5.setAttribute("role", "button"), e5.setAttribute("aria-label", t2), e5.addEventListener("keydown", (t3) => {
7314
7359
  let n2 = t3;
7315
7360
  (n2.key === "Enter" || n2.key === " ") && (n2.preventDefault(), e5.dispatchEvent(new MouseEvent("click", { bubbles: true, cancelable: true })));
7316
7361
  }));
7317
7362
  }
7318
- var Wv = [{ label: "Placidus", value: "placidus" }, { label: "Whole Sign", value: "whole_sign" }, { label: "Equal", value: "equal" }, { label: "Koch", value: "koch" }, { label: "Regio.", value: "regiomontanus" }];
7319
- function Gv(e5, t2, n2) {
7363
+ var py = [{ label: "Placidus", value: "placidus" }, { label: "Whole Sign", value: "whole_sign" }, { label: "Equal", value: "equal" }, { label: "Koch", value: "koch" }, { label: "Regio.", value: "regiomontanus" }];
7364
+ function my(e5, t2, n2) {
7320
7365
  e5.innerHTML = "";
7321
7366
  let r2 = document.createElement("span");
7322
7367
  r2.className = "controls-label", r2.textContent = "Houses:", e5.appendChild(r2);
7323
- for (let r3 of Wv) {
7368
+ for (let r3 of py) {
7324
7369
  let i2 = document.createElement("button");
7325
7370
  i2.className = "control-btn" + (r3.value === t2 ? " active" : ""), i2.textContent = r3.label, i2.title = "Switch to ".concat(r3.label, " house system"), i2.setAttribute("data-system", r3.value), i2.addEventListener("click", () => {
7326
7371
  e5.querySelectorAll(".control-btn").forEach((e6) => e6.classList.remove("active")), i2.classList.add("active"), i2.disabled = true, i2.textContent = "".concat(r3.label, " \u2026"), n2(r3.value);
7327
7372
  }), e5.appendChild(i2);
7328
7373
  }
7329
7374
  }
7330
- function Kv(e5, t2) {
7375
+ function hy(e5, t2) {
7331
7376
  e5.querySelectorAll(".control-btn").forEach((e6) => {
7332
7377
  var n2;
7333
7378
  let r2 = e6.getAttribute("data-system");
7334
7379
  e6.disabled = false;
7335
- let i2 = Wv.find((e7) => e7.value === r2);
7380
+ let i2 = py.find((e7) => e7.value === r2);
7336
7381
  e6.textContent = (n2 = i2 == null ? void 0 : i2.label) == null ? r2 : n2, e6.classList.toggle("active", r2 === t2);
7337
7382
  });
7338
7383
  }
7339
- function qv(e5) {
7384
+ function gy(e5) {
7340
7385
  return e5.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
7341
7386
  }
7342
- function Jv(e5) {
7387
+ function _y(e5) {
7343
7388
  return e5.replace(/_/g, " ").replace(/\b\w/g, (e6) => e6.toUpperCase());
7344
7389
  }
7345
- function Yv(e5) {
7346
- let t2 = e5.filter((e6) => e6.items.length > 0).map((e6) => '<div class="legend-group"><span class="legend-group-title">'.concat(qv(e6.title), "</span>") + e6.items.map((e7) => '<span class="legend-item"><span class="legend-glyph">'.concat(qv(e7.glyph), "</span>").concat(qv(e7.label), "</span>")).join("") + "</div>").join("");
7390
+ function vy(e5) {
7391
+ let t2 = e5.filter((e6) => e6.items.length > 0).map((e6) => '<div class="legend-group"><span class="legend-group-title">'.concat(gy(e6.title), "</span>") + e6.items.map((e7) => '<span class="legend-item"><span class="legend-glyph">'.concat(gy(e7.glyph), "</span>").concat(gy(e7.label), "</span>")).join("") + "</div>").join("");
7347
7392
  return t2 ? '<details class="glyph-legend"><summary><span class="legend-spark">\u2726</span> Legend</summary><div class="legend-body">'.concat(t2, "</div></details>") : "";
7348
7393
  }
7349
- var Xv = class e4 {
7394
+ var yy = class e4 {
7350
7395
  constructor(t2) {
7351
7396
  var n2, r2, i2, a2, s2, c2;
7352
7397
  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();
@@ -7526,14 +7571,14 @@ var Xv = class e4 {
7526
7571
  return e5.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
7527
7572
  }
7528
7573
  };
7529
- o(Xv, "comboSeq", 0);
7530
- 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';
7531
- function $v() {
7574
+ o(yy, "comboSeq", 0);
7575
+ var by = { "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." } }, xy = '\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';
7576
+ function Sy() {
7532
7577
  if (document.getElementById("oe-first-run-styles")) return;
7533
7578
  let e5 = document.createElement("style");
7534
- e5.id = "oe-first-run-styles", e5.textContent = Qv, document.head.appendChild(e5);
7579
+ e5.id = "oe-first-run-styles", e5.textContent = xy, document.head.appendChild(e5);
7535
7580
  }
7536
- function ey(e5) {
7581
+ function Cy(e5) {
7537
7582
  let t2 = document.activeElement, n2 = document.createElement("div");
7538
7583
  n2.className = "oe-welcome-backdrop";
7539
7584
  let r2 = document.createElement("div");
@@ -7551,24 +7596,24 @@ function ey(e5) {
7551
7596
  e6.key === "Escape" && (e6.preventDefault(), o2()), e6.key === "Tab" && (e6.preventDefault(), a2.focus());
7552
7597
  }), requestAnimationFrame(() => a2.focus()), n2;
7553
7598
  }
7554
- function ty(e5) {
7555
- $v();
7556
- let t2 = ey(Zv[e5]);
7599
+ function wy(e5) {
7600
+ Sy();
7601
+ let t2 = Cy(by[e5]);
7557
7602
  document.body.appendChild(t2);
7558
7603
  }
7559
- 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";
7560
- function ry() {
7604
+ var Ty = "\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";
7605
+ function Ey() {
7561
7606
  if (document.getElementById("oe-info-button-styles")) return;
7562
7607
  let e5 = document.createElement("style");
7563
- e5.id = "oe-info-button-styles", e5.textContent = ny, document.head.appendChild(e5);
7608
+ e5.id = "oe-info-button-styles", e5.textContent = Ty, document.head.appendChild(e5);
7564
7609
  }
7565
- function iy(e5) {
7610
+ function Dy(e5) {
7566
7611
  if (document.getElementById("oe-info-button")) return;
7567
- ry();
7612
+ Ey();
7568
7613
  let t2 = document.createElement("button");
7569
- 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);
7614
+ 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", () => wy(e5)), document.body.appendChild(t2);
7570
7615
  }
7571
- function ay(e5) {
7616
+ function Oy(e5) {
7572
7617
  var t2;
7573
7618
  if (!e5) return null;
7574
7619
  if (e5.structuredContent != null && typeof e5.structuredContent == "object") return e5.structuredContent;
@@ -7581,10 +7626,10 @@ function ay(e5) {
7581
7626
  }
7582
7627
  return null;
7583
7628
  }
7584
- var oy = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?(?:\.\d+)?$/;
7585
- function sy(e5, t2) {
7629
+ var ky = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?(?:\.\d+)?$/;
7630
+ function Ay(e5, t2) {
7586
7631
  if (!e5) return null;
7587
- let n2 = oy.exec(e5.trim());
7632
+ let n2 = ky.exec(e5.trim());
7588
7633
  if (n2) {
7589
7634
  let [, e6, t3, r3, i2, a2, o2] = n2, s2 = new Date(Date.UTC(+e6, t3 - 1, +r3, +i2, +a2, o2 ? +o2 : 0));
7590
7635
  return isNaN(s2.getTime()) ? null : { date: s2, timeZone: "UTC" };
@@ -7592,36 +7637,49 @@ function sy(e5, t2) {
7592
7637
  let r2 = new Date(e5);
7593
7638
  return isNaN(r2.getTime()) ? null : { date: r2, timeZone: t2 || "UTC" };
7594
7639
  }
7595
- function cy(e5) {
7640
+ function jy(e5) {
7596
7641
  var t2;
7597
7642
  if (!e5) return "";
7598
7643
  let n2 = [], r2 = (t2 = e5.location) == null ? void 0 : t2.trim();
7599
7644
  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) {
7600
- let t3 = /^\d{4}-\d{2}-\d{2}/.test(e5.datetime.trim()) ? sy(e5.datetime, e5.timezone) : null;
7645
+ let t3 = /^\d{4}-\d{2}-\d{2}/.test(e5.datetime.trim()) ? Ay(e5.datetime, e5.timezone) : null;
7601
7646
  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);
7602
7647
  }
7603
7648
  return n2.join(" \xB7 ");
7604
7649
  }
7605
- function ly(e5, t2, n2 = "Chart") {
7606
- let r2 = cy(t2);
7650
+ function My(e5, t2, n2 = "Chart") {
7651
+ let r2 = jy(t2);
7607
7652
  return r2 ? "".concat(n2, ": ").concat(r2, "\n\n").concat(e5) : e5;
7608
7653
  }
7609
- function uy(e5) {
7654
+ function Ny(e5) {
7610
7655
  return e5.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
7611
7656
  }
7612
- function dy(e5) {
7613
- let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e5, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(uy(i2), "</button>") : "";
7614
- if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(uy(n2), "</p>") + a2 + "</div>", t2.removeAttribute("hidden"), r2) {
7657
+ function Py(e5) {
7658
+ let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e5, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(Ny(i2), "</button>") : "";
7659
+ if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(Ny(n2), "</p>") + a2 + "</div>", t2.removeAttribute("hidden"), r2) {
7615
7660
  var o2;
7616
7661
  (o2 = t2.querySelector(".error-retry-btn")) == null || o2.addEventListener("click", r2);
7617
7662
  }
7618
7663
  }
7619
- function fy(e5, t2, n2 = []) {
7620
- var r2, i2;
7664
+ var Fy = ["inline", "fullscreen"];
7665
+ function Iy(e5) {
7666
+ var t2;
7667
+ return (t2 = e5.getHostContext) == null ? void 0 : t2.call(e5);
7668
+ }
7669
+ function Ly(e5) {
7670
+ var t2;
7671
+ let n2 = (t2 = Iy(e5)) == null ? void 0 : t2.availableDisplayModes;
7672
+ return Array.isArray(n2) ? n2 : [];
7673
+ }
7674
+ var Ry = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">\n <polyline points="5,1 1,1 1,5"/>\n <polyline points="11,1 15,1 15,5"/>\n <polyline points="5,15 1,15 1,11"/>\n <polyline points="11,15 15,15 15,11"/>\n </svg>', zy = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">\n <polyline points="1,5 5,5 5,1"/>\n <polyline points="15,5 11,5 11,1"/>\n <polyline points="1,11 5,11 5,15"/>\n <polyline points="15,11 11,11 11,15"/>\n </svg>', By = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round" aria-hidden="true">\n <rect x="1" y="2.5" width="14" height="11" rx="1.5"/>\n <rect x="8" y="8" width="5.5" height="4" rx="0.8" fill="currentColor" stroke="none"/>\n </svg>', Vy = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">\n <rect x="1" y="2.5" width="14" height="11" rx="1.5"/>\n <polyline points="6,6 10,10"/>\n <polyline points="6,9.5 6,6 9.5,6"/>\n </svg>';
7675
+ function Hy(e5, t2, n2 = [], r2 = {}) {
7676
+ var i2;
7621
7677
  if (!t2 || t2.querySelector("#btn-fullscreen")) return;
7622
7678
  let a2 = document.createElement("button");
7623
- a2.id = "btn-fullscreen", a2.className = "pan-btn pan-btn--fullscreen", a2.setAttribute("aria-label", "Toggle fullscreen"), a2.innerHTML = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\n <polyline points="5,1 1,1 1,5"/>\n <polyline points="11,1 15,1 15,5"/>\n <polyline points="5,15 1,15 1,11"/>\n <polyline points="11,15 15,15 15,11"/>\n </svg>';
7624
- let o2 = a2.innerHTML, s2 = ["param-controls", "aspect-filter", "controls-panel", "mode-badge"];
7679
+ a2.id = "btn-fullscreen", a2.type = "button", a2.className = "pan-btn pan-btn--fullscreen", a2.innerHTML = Ry, a2.hidden = true;
7680
+ let o2 = null;
7681
+ r2.pip && (o2 = document.createElement("button"), o2.id = "btn-pip", o2.type = "button", o2.className = "pan-btn pan-btn--pip", o2.innerHTML = By, o2.hidden = true);
7682
+ let s2 = ["param-controls", "aspect-filter", "controls-panel", "mode-badge"];
7625
7683
  function c2() {
7626
7684
  if (document.getElementById("fs-bottom-bar") || !n2.length) return;
7627
7685
  let e6 = document.getElementById("app");
@@ -7654,59 +7712,59 @@ function fy(e5, t2, n2 = []) {
7654
7712
  }
7655
7713
  e6.remove();
7656
7714
  }
7657
- function u2(e6) {
7658
- let t3 = e6 === "fullscreen", n3 = document.body.classList.contains("is-fullscreen");
7659
- document.body.classList.toggle("is-fullscreen", t3), a2.innerHTML = t3 ? '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\n <polyline points="1,5 5,5 5,1"/>\n <polyline points="15,5 11,5 11,1"/>\n <polyline points="1,11 5,11 5,15"/>\n <polyline points="15,11 11,11 11,15"/>\n </svg>' : o2, a2.setAttribute("aria-label", t3 ? "Exit fullscreen (Esc)" : "Toggle fullscreen"), a2.title = t3 ? "Press Esc or click to exit fullscreen" : "Enter fullscreen", t3 && !n3 && (c2(), f2()), !t3 && n3 && l2();
7715
+ let u2 = "inline";
7716
+ function d2(t3) {
7717
+ let n3 = u2 === "fullscreen", r3 = t3 === "fullscreen";
7718
+ u2 = t3, document.body.classList.toggle("is-fullscreen", r3), document.body.classList.toggle("is-pip", t3 === "pip"), document.documentElement.setAttribute("data-display-mode", t3), a2.innerHTML = r3 ? zy : Ry;
7719
+ let i3 = r3 ? "Exit fullscreen" : "Enter fullscreen";
7720
+ if (a2.setAttribute("aria-label", i3), a2.title = r3 ? "Exit fullscreen (Esc)" : i3, o2) {
7721
+ let e6 = t3 === "pip";
7722
+ o2.innerHTML = e6 ? Vy : By;
7723
+ let n4 = e6 ? "Return to the conversation" : "Pop out (picture-in-picture)";
7724
+ o2.setAttribute("aria-label", n4), o2.title = n4;
7725
+ }
7726
+ r3 && !n3 && (c2(), Uy(e5)), !r3 && n3 && l2();
7727
+ }
7728
+ function f2() {
7729
+ var n3, r3;
7730
+ let i3 = Ly(e5);
7731
+ a2.hidden = !i3.includes("fullscreen"), o2 && (o2.hidden = !i3.includes("pip")), (!a2.hidden || o2 && !o2.hidden) && (t2.hidden = false);
7732
+ let s3 = (n3 = (r3 = Iy(e5)) == null ? void 0 : r3.displayMode) == null ? "inline" : n3;
7733
+ s3 !== u2 && d2(s3);
7660
7734
  }
7661
- a2.addEventListener("click", async () => {
7662
- try {
7663
- var t3, n3, r3, i3;
7664
- let a3 = (t3 = e5.getHostContext) == null ? void 0 : t3.call(e5), o3 = (n3 = a3 == null ? void 0 : a3.displayMode) == null ? "inline" : n3, s3 = (r3 = a3 == null ? void 0 : a3.availableDisplayModes) == null ? [] : r3, c3 = o3 === "inline" ? "fullscreen" : "inline";
7665
- if (s3.length > 0 && !s3.includes(c3)) {
7666
- console.warn('[AppChrome] Display mode "'.concat(c3, '" not available. Available: ').concat(s3.join(", ")));
7667
- return;
7668
- }
7669
- let l3 = await e5.requestDisplayMode({ mode: c3 });
7670
- u2((i3 = l3 == null ? void 0 : l3.mode) == null ? "inline" : i3);
7735
+ async function p2(t3) {
7736
+ if (!(t3 !== "inline" && !Ly(e5).includes(t3))) try {
7737
+ var n3;
7738
+ let r3 = await e5.requestDisplayMode({ mode: t3 });
7739
+ d2((n3 = r3 == null ? void 0 : r3.mode) == null ? u2 : n3);
7671
7740
  } catch (e6) {
7672
7741
  console.warn("[AppChrome] requestDisplayMode failed:", e6);
7673
7742
  }
7674
- }), document.addEventListener("keydown", async (t3) => {
7675
- if (t3.key === "Escape" && document.body.classList.contains("is-fullscreen")) {
7676
- t3.preventDefault();
7677
- try {
7678
- var n3;
7679
- let t4 = await e5.requestDisplayMode({ mode: "inline" });
7680
- u2((n3 = t4 == null ? void 0 : t4.mode) == null ? "inline" : n3);
7681
- } catch (e6) {
7682
- console.warn("[AppChrome] Escape fullscreen failed:", e6);
7683
- }
7684
- }
7685
- }), (r2 = e5.addEventListener) == null || r2.call(e5, "hostcontextchanged", (e6) => {
7686
- var t3;
7687
- u2((t3 = e6 == null ? void 0 : e6.displayMode) == null ? "inline" : t3);
7688
- });
7689
- let d2 = (i2 = e5.getHostContext) == null ? void 0 : i2.call(e5);
7690
- d2 != null && d2.displayMode && u2(d2.displayMode), t2.insertBefore(a2, t2.firstChild), t2.removeAttribute("hidden");
7691
- function f2() {
7692
- let e6 = document.getElementById("fs-hint-banner");
7693
- e6 && e6.remove();
7694
- let t3 = document.createElement("div");
7695
- t3.id = "fs-hint-banner", Object.assign(t3.style, { position: "fixed", top: "12px", left: "50%", transform: "translateX(-50%)", background: "oklch(14% 0.012 265 / 0.90)", backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)", border: "1px solid oklch(72% 0.12 80 / 0.3)", borderRadius: "20px", padding: "6px 16px", fontSize: "11px", fontWeight: "600", color: "oklch(80% 0.08 80)", letterSpacing: "0.04em", zIndex: "9999", pointerEvents: "none", opacity: "0", transition: "opacity 300ms ease", whiteSpace: "nowrap" }), t3.textContent = "Esc \u2014 exit fullscreen & return to chat", document.body.appendChild(t3), requestAnimationFrame(() => {
7696
- t3.style.opacity = "1";
7697
- }), setTimeout(() => {
7698
- t3.style.opacity = "0", setTimeout(() => t3.remove(), 350);
7699
- }, 4e3);
7700
7743
  }
7744
+ a2.addEventListener("click", () => {
7745
+ p2(u2 === "fullscreen" ? "inline" : "fullscreen");
7746
+ }), o2 == null || o2.addEventListener("click", () => {
7747
+ p2(u2 === "pip" ? "inline" : "pip");
7748
+ }), document.addEventListener("keydown", (e6) => {
7749
+ e6.key !== "Escape" || u2 !== "fullscreen" || (e6.preventDefault(), p2("inline"));
7750
+ }), (i2 = e5.addEventListener) == null || i2.call(e5, "hostcontextchanged", f2), o2 && t2.insertBefore(o2, t2.firstChild), t2.insertBefore(a2, t2.firstChild), d2("inline"), f2();
7751
+ }
7752
+ function Uy(e5) {
7753
+ var t2, n2;
7754
+ (t2 = document.getElementById("fs-hint-banner")) == null || t2.remove();
7755
+ let r2 = (n2 = Iy(e5)) == null ? void 0 : n2.deviceCapabilities, i2 = !!(r2 != null && r2.touch) && (r2 == null ? void 0 : r2.hover) === false, a2 = document.createElement("div");
7756
+ a2.id = "fs-hint-banner", a2.className = "fs-hint-banner", a2.setAttribute("role", "status"), a2.textContent = i2 ? "Tap the collapse button to return to the chat" : "Esc \u2014 exit fullscreen & return to chat", document.body.appendChild(a2), requestAnimationFrame(() => a2.classList.add("visible")), setTimeout(() => {
7757
+ a2.classList.remove("visible"), setTimeout(() => a2.remove(), 350);
7758
+ }, 4e3);
7701
7759
  }
7702
- function py(e5, t2) {
7760
+ function Wy(e5, t2) {
7703
7761
  e5.ontoolcancelled = (e6) => {
7704
7762
  var n2, r2, i2;
7705
7763
  let a2 = (n2 = e6.reason) == null ? "Tool call was cancelled" : n2;
7706
- 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), my(a2);
7764
+ 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), Gy(a2);
7707
7765
  };
7708
7766
  }
7709
- function my(e5) {
7767
+ function Gy(e5) {
7710
7768
  var t2;
7711
7769
  (t2 = document.getElementById("cancel-toast")) == null || t2.remove();
7712
7770
  let n2 = document.createElement("div");
@@ -7714,61 +7772,75 @@ function my(e5) {
7714
7772
  n2.classList.remove("visible"), setTimeout(() => n2.remove(), 300);
7715
7773
  }, 3e3);
7716
7774
  }
7717
- function hy(e5) {
7775
+ function Ky(e5) {
7718
7776
  var t2;
7719
- function n2(e6) {
7720
- if (!e6) return;
7721
- let t3 = e6.containerDimensions;
7722
- if (!t3) return;
7723
- let n3 = document.documentElement;
7724
- t3.width && n3.style.setProperty("--host-width", "".concat(t3.width, "px")), t3.maxWidth && n3.style.setProperty("--host-max-width", "".concat(t3.maxWidth, "px")), t3.height && n3.style.setProperty("--host-height", "".concat(t3.height, "px")), t3.maxHeight && n3.style.setProperty("--host-max-height", "".concat(t3.maxHeight, "px"));
7725
- }
7726
- n2((t2 = e5.getHostContext) == null ? void 0 : t2.call(e5)), e5.addEventListener("hostcontextchanged", (e6) => {
7727
- n2(e6);
7728
- });
7729
- }
7730
- var gy = document.getElementById("loading-state"), _y = document.getElementById("chart-container"), vy = document.getElementById("chart-info"), yy = document.getElementById("chart-status"), by = document.getElementById("controls-panel"), xy = document.getElementById("patterns-strip"), Sy = document.getElementById("aspect-filter"), Cy = document.getElementById("overview-table"), wy = document.getElementById("param-controls-container"), Ty = new r_({ name: "Chart Wheel Explorer", version: "1.0.0" }), $ = null, Ey = "placidus", Dy = null;
7731
- h_(() => {
7732
- $ && jy($);
7777
+ let n2 = document.documentElement, r2 = (e6, t3) => {
7778
+ typeof t3 == "number" && Number.isFinite(t3) && t3 > 0 ? n2.style.setProperty(e6, "".concat(t3, "px")) : n2.style.removeProperty(e6);
7779
+ }, i2 = (e6, t3) => {
7780
+ t3 === void 0 ? n2.removeAttribute(e6) : n2.setAttribute(e6, t3 ? "true" : "false");
7781
+ };
7782
+ function a2() {
7783
+ var t3, a3, o2;
7784
+ let s2 = Iy(e5);
7785
+ if (!s2) return;
7786
+ let c2 = (t3 = s2.containerDimensions) == null ? {} : t3;
7787
+ r2("--host-width", c2.width), r2("--host-max-width", c2.maxWidth), r2("--host-height", c2.height), r2("--host-max-height", c2.maxHeight);
7788
+ let l2 = (a3 = s2.safeAreaInsets) == null ? {} : a3;
7789
+ for (let e6 of ["top", "right", "bottom", "left"]) {
7790
+ let t4 = l2[e6];
7791
+ n2.style.setProperty("--safe-".concat(e6), typeof t4 == "number" && t4 > 0 ? "".concat(t4, "px") : "0px");
7792
+ }
7793
+ let u2 = l2.bottom;
7794
+ n2.toggleAttribute("data-safe-bottom", typeof u2 == "number" && u2 > 0), typeof s2.platform == "string" && n2.setAttribute("data-platform", s2.platform);
7795
+ let d2 = s2.deviceCapabilities;
7796
+ i2("data-touch", d2 == null ? void 0 : d2.touch), i2("data-hover", d2 == null ? void 0 : d2.hover);
7797
+ let f2 = s2.styles;
7798
+ f2 != null && f2.variables && r_(f2.variables, n2), !(f2 == null || (o2 = f2.css) == null) && o2.fonts && i_(f2.css.fonts);
7799
+ }
7800
+ a2(), (t2 = e5.addEventListener) == null || t2.call(e5, "hostcontextchanged", a2);
7801
+ }
7802
+ var qy = document.getElementById("loading-state"), Jy = document.getElementById("chart-container"), Yy = document.getElementById("chart-info"), Xy = document.getElementById("chart-status"), Zy = document.getElementById("controls-panel"), Qy = document.getElementById("patterns-strip"), $y = document.getElementById("aspect-filter"), eb = document.getElementById("overview-table"), tb = document.getElementById("param-controls-container"), nb = new a_({ name: "Chart Wheel Explorer", version: "1.0.0" }, { availableDisplayModes: Fy }), $ = null, rb = "placidus", ib = null;
7803
+ __(() => {
7804
+ $ && cb($);
7733
7805
  });
7734
- var Oy = false, ky = false;
7735
- function Ay(e5) {
7736
- yy && (e5 ? (yy.textContent = "\xB7 ".concat(e5), yy.setAttribute("data-active", "")) : (yy.textContent = "", yy.removeAttribute("data-active")));
7806
+ var ab = false, ob = false;
7807
+ function sb(e5) {
7808
+ Xy && (e5 ? (Xy.textContent = "\xB7 ".concat(e5), Xy.setAttribute("data-active", "")) : (Xy.textContent = "", Xy.removeAttribute("data-active")));
7737
7809
  }
7738
- Ty.ontoolresult = (e5) => {
7810
+ nb.ontoolresult = (e5) => {
7739
7811
  var t2;
7740
- let n2 = ay(e5);
7741
- if (tb(), !n2 || !n2.planets) {
7742
- console.error("[ChartWheel] \u274C No chart data found in tool result"), nb("Chart data could not be parsed from the server response.", rb);
7812
+ let n2 = Oy(e5);
7813
+ if (Mb(), !n2 || !n2.planets) {
7814
+ console.error("[ChartWheel] \u274C No chart data found in tool result"), Nb("Chart data could not be parsed from the server response.", Pb);
7743
7815
  return;
7744
7816
  }
7745
- if ($ = n2, Ey = (t2 = n2.house_system) == null ? "placidus" : t2, !Dy) {
7817
+ if ($ = n2, rb = (t2 = n2.house_system) == null ? "placidus" : t2, !ib) {
7746
7818
  var r2, i2, a2, o2, s2, c2, l2, u2, d2, f2;
7747
7819
  let e6 = (r2 = n2._birth_params) == null ? {} : r2, t3 = (i2 = (a2 = (o2 = e6.datetime) == null ? n2.datetime : o2) == null ? n2.birth_datetime : a2) == null ? "" : i2, p2 = (s2 = (c2 = e6.location) == null ? n2.location : c2) == null ? "" : s2, m2 = (l2 = (u2 = e6.timezone) == null ? n2.timezone : u2) == null ? "" : l2, h2 = (d2 = e6.latitude) == null ? n2.latitude : d2, g2 = (f2 = e6.longitude) == null ? n2.longitude : f2, _2 = "", v2 = "12:00";
7748
7820
  if (t3 && t3.includes("T")) {
7749
7821
  let e7 = t3.split("T");
7750
7822
  _2 = e7[0], v2 = e7[1].substring(0, 5);
7751
7823
  }
7752
- Dy = new Xv({ app: Ty, container: wy, initialParams: { date: _2, time: v2, locationName: p2, timezone: m2, latitude: typeof h2 == "number" ? h2 : null, longitude: typeof g2 == "number" ? g2 : null }, showStepControls: false, costHint: "~1 credit", onRefresh: async (e7) => {
7753
- Dy == null || Dy.setBusy(true), gy.removeAttribute("hidden"), _y.setAttribute("hidden", "");
7824
+ ib = new yy({ app: nb, container: tb, initialParams: { date: _2, time: v2, locationName: p2, timezone: m2, latitude: typeof h2 == "number" ? h2 : null, longitude: typeof g2 == "number" ? g2 : null }, showStepControls: false, costHint: "~1 credit", onRefresh: async (e7) => {
7825
+ ib == null || ib.setBusy(true), qy.removeAttribute("hidden"), Jy.setAttribute("hidden", "");
7754
7826
  try {
7755
7827
  var t4, n3, r3, i3;
7756
- let a3 = "".concat(e7.date, "T").concat(e7.time, ":00"), o3 = new Promise((e8, t5) => setTimeout(() => t5(Error("Recalculate timed out after 30s")), 3e4)), s3 = ay(await Promise.race([Ty.callServerTool({ name: "chart_wheel_recalculate", arguments: { datetime: "".concat(a3).concat(e7.timezone ? "" : "Z"), latitude: (t4 = e7.latitude) == null ? void 0 : t4, longitude: (n3 = e7.longitude) == null ? void 0 : n3, timezone: (r3 = e7.timezone) == null ? void 0 : r3, location: (i3 = e7.locationName) == null ? void 0 : i3, house_system: Ey || "placidus", chart_type: "natal" } }), o3]));
7757
- s3 ? ($ = s3, s3.house_system && (Ey = s3.house_system), jy(s3)) : $ && (gy.setAttribute("hidden", ""), _y.removeAttribute("hidden"));
7828
+ let a3 = "".concat(e7.date, "T").concat(e7.time, ":00"), o3 = new Promise((e8, t5) => setTimeout(() => t5(Error("Recalculate timed out after 30s")), 3e4)), s3 = Oy(await Promise.race([nb.callServerTool({ name: "chart_wheel_recalculate", arguments: { datetime: "".concat(a3).concat(e7.timezone ? "" : "Z"), latitude: (t4 = e7.latitude) == null ? void 0 : t4, longitude: (n3 = e7.longitude) == null ? void 0 : n3, timezone: (r3 = e7.timezone) == null ? void 0 : r3, location: (i3 = e7.locationName) == null ? void 0 : i3, house_system: rb || "placidus", chart_type: "natal" } }), o3]));
7829
+ s3 ? ($ = s3, s3.house_system && (rb = s3.house_system), cb(s3)) : $ && (qy.setAttribute("hidden", ""), Jy.removeAttribute("hidden"));
7758
7830
  } catch (e8) {
7759
- console.error("[ChartWheel] Recalculate failed or timed out:", e8), $ && (gy.setAttribute("hidden", ""), _y.removeAttribute("hidden"));
7831
+ console.error("[ChartWheel] Recalculate failed or timed out:", e8), $ && (qy.setAttribute("hidden", ""), Jy.removeAttribute("hidden"));
7760
7832
  } finally {
7761
- Dy == null || Dy.setBusy(false);
7833
+ ib == null || ib.setBusy(false);
7762
7834
  }
7763
7835
  } });
7764
7836
  }
7765
- jy(n2);
7837
+ cb(n2);
7766
7838
  };
7767
- function jy(e5) {
7839
+ function cb(e5) {
7768
7840
  var t2, n2, r2, i2, a2, o2, s2;
7769
- Ly = null, gy.setAttribute("hidden", ""), _y.removeAttribute("hidden"), wy.removeAttribute("hidden"), by.removeAttribute("hidden"), Hv(_y, e5, Gy, Ky, qy, Qy, ky ? Jy() : void 0), _v(Ay), Gv(by, Ey, $y), Ny(e5), iy("chart-wheel");
7770
- let c2 = Y_(e5.planets), l2 = (n2 = (r2 = (i2 = ((t2 = e5.houses) == null ? [] : t2)[0]) == null ? void 0 : i2.cusp_lon) == null ? e5.ascendant : r2) == null ? 0 : n2, u2 = (a2 = e5.aspects) == null ? [] : a2;
7771
- c2.length > 0 && Fy(c2, u2), Ry(dv(u2, c2), c2, l2), Uy();
7841
+ mb = null, qy.setAttribute("hidden", ""), Jy.removeAttribute("hidden"), tb.removeAttribute("hidden"), Zy.removeAttribute("hidden"), dy(Jy, e5, Sb, Cb, wb, kb, ob ? Tb() : void 0), Bv(sb), my(Zy, rb, Ab), ub(e5), Dy("chart-wheel");
7842
+ let c2 = vv(e5.planets), l2 = (n2 = (r2 = (i2 = ((t2 = e5.houses) == null ? [] : t2)[0]) == null ? void 0 : i2.cusp_lon) == null ? e5.ascendant : r2) == null ? 0 : n2, u2 = (a2 = e5.aspects) == null ? [] : a2;
7843
+ c2.length > 0 && fb(c2, u2), hb(Pv(u2, c2), c2, l2), bb();
7772
7844
  let d2 = document.getElementById("cw-action-bar");
7773
7845
  if (!d2) {
7774
7846
  d2 = document.createElement("div"), d2.id = "cw-action-bar", d2.className = "hd-action-bar";
@@ -7779,19 +7851,19 @@ function jy(e5) {
7779
7851
  (f2 = document.getElementById("app")) == null || f2.prepend(d2);
7780
7852
  }
7781
7853
  }
7782
- d2.innerHTML = '\n <button class="action-btn action-btn--primary" id="cw-interpret-btn">\u2728 Interpret this chart</button>\n <button class="action-btn" id="cw-questions-btn">\u{1F52E} What should I ask?</button>\n ', (o2 = document.getElementById("cw-interpret-btn")) == null || o2.addEventListener("click", () => void Xy()), (s2 = document.getElementById("cw-questions-btn")) == null || s2.addEventListener("click", () => void Zy());
7854
+ d2.innerHTML = '\n <button class="action-btn action-btn--primary" id="cw-interpret-btn">\u2728 Interpret this chart</button>\n <button class="action-btn" id="cw-questions-btn">\u{1F52E} What should I ask?</button>\n ', (o2 = document.getElementById("cw-interpret-btn")) == null || o2.addEventListener("click", () => void Db()), (s2 = document.getElementById("cw-questions-btn")) == null || s2.addEventListener("click", () => void Ob());
7783
7855
  }
7784
- function My(e5) {
7856
+ function lb(e5) {
7785
7857
  return String(e5).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
7786
7858
  }
7787
- function Ny(e5) {
7859
+ function ub(e5) {
7788
7860
  var t2, n2, r2, i2, a2, o2, s2, c2, l2, u2;
7789
- if (!vy) return;
7861
+ if (!Yy) return;
7790
7862
  let d2 = (t2 = e5._birth_params) == null ? {} : t2, f2 = (n2 = (r2 = (i2 = d2.datetime) == null ? e5.datetime : i2) == null ? e5.birth_datetime : r2) == null ? "" : n2, p2 = (a2 = (o2 = d2.location) == null ? e5.location : o2) == null ? "" : a2, m2 = (s2 = (c2 = d2.timezone) == null ? e5.timezone : c2) == null ? "" : s2, h2 = (l2 = d2.latitude) == null ? e5.latitude : l2, g2 = (u2 = d2.longitude) == null ? e5.longitude : u2;
7791
- Ey.charAt(0).toUpperCase() + Ey.slice(1);
7792
- let _2 = Y_(e5.planets).find((e6) => e6.name.toLowerCase() === "sun"), v2 = _2 != null && _2.house ? _2.house >= 7 ? "\u2609 Day Chart" : "\u263E Night Chart" : "", ee2 = f2;
7863
+ rb.charAt(0).toUpperCase() + rb.slice(1);
7864
+ let _2 = vv(e5.planets).find((e6) => e6.name.toLowerCase() === "sun"), v2 = _2 != null && _2.house ? _2.house >= 7 ? "\u2609 Day Chart" : "\u263E Night Chart" : "", ee2 = f2;
7793
7865
  try {
7794
- let e6 = f2 && f2.includes("T") ? sy(f2, m2) : null;
7866
+ let e6 = f2 && f2.includes("T") ? Ay(f2, m2) : null;
7795
7867
  if (e6) {
7796
7868
  let { date: t3, timeZone: n3 } = e6;
7797
7869
  ee2 = t3.toLocaleDateString("en-US", { weekday: "short", year: "numeric", month: "short", day: "numeric", timeZone: n3 }) + " \xB7 " + t3.toLocaleTimeString("en-US", { hour: "numeric", minute: "2-digit", hour12: true, timeZone: n3 });
@@ -7799,16 +7871,16 @@ function Ny(e5) {
7799
7871
  } catch (e6) {
7800
7872
  }
7801
7873
  let y2 = typeof h2 == "number" && typeof g2 == "number" ? "".concat(Math.abs(h2).toFixed(2), "\xB0").concat(h2 >= 0 ? "N" : "S", ", ").concat(Math.abs(g2).toFixed(2), "\xB0").concat(g2 >= 0 ? "E" : "W") : "", b2 = [];
7802
- if (ee2 && b2.push('<span class="info-chip" title="Birth datetime">\u{1F4C5} '.concat(My(ee2), "</span>")), p2 && b2.push('<span class="info-chip" title="Birth location">\u{1F4CD} '.concat(My(p2), "</span>")), y2 && !p2 && b2.push('<span class="info-chip" title="Coordinates">\u{1F4CD} '.concat(My(y2), "</span>")), m2 && b2.push('<span class="info-chip" title="Timezone">\u{1F550} '.concat(My(m2), "</span>")), v2 && b2.push('<span class="info-chip sect" title="Sect">'.concat(My(v2), "</span>")), b2.length === 0) {
7803
- vy.setAttribute("hidden", "");
7874
+ if (ee2 && b2.push('<span class="info-chip" title="Birth datetime">\u{1F4C5} '.concat(lb(ee2), "</span>")), p2 && b2.push('<span class="info-chip" title="Birth location">\u{1F4CD} '.concat(lb(p2), "</span>")), y2 && !p2 && b2.push('<span class="info-chip" title="Coordinates">\u{1F4CD} '.concat(lb(y2), "</span>")), m2 && b2.push('<span class="info-chip" title="Timezone">\u{1F550} '.concat(lb(m2), "</span>")), v2 && b2.push('<span class="info-chip sect" title="Sect">'.concat(lb(v2), "</span>")), b2.length === 0) {
7875
+ Yy.setAttribute("hidden", "");
7804
7876
  return;
7805
7877
  }
7806
- vy.innerHTML = b2.join(""), vy.removeAttribute("hidden");
7878
+ Yy.innerHTML = b2.join(""), Yy.removeAttribute("hidden");
7807
7879
  }
7808
- var Py = /* @__PURE__ */ new Set(["mean_lilith", "lilith", "true_lilith", "ceres", "juno", "vesta", "pallas", "pholus", "vertex", "part_of_fortune", "part of fortune", "eris", "sedna"]);
7809
- function Fy(e5, t2) {
7810
- if (!Cy || e5.length === 0) return;
7811
- let n2 = ["sun", "moon", "mercury", "venus", "mars", "jupiter", "saturn", "uranus", "neptune", "pluto", "chiron", "north node", "south node", "true node"], r2 = [...e5].sort((e6, t3) => {
7880
+ var db = /* @__PURE__ */ new Set([L_, R_, z_, "ceres", "juno", "vesta", "pallas", "pholus", "vertex", "part_of_fortune", "part of fortune", "eris", "sedna"]);
7881
+ function fb(e5, t2) {
7882
+ if (!eb || e5.length === 0) return;
7883
+ let n2 = ["sun", "moon", "mercury", "venus", "mars", "jupiter", "saturn", "uranus", "neptune", "pluto", "chiron", T_, E_, D_, O_], r2 = [...e5].sort((e6, t3) => {
7812
7884
  let r3 = n2.indexOf(e6.name.toLowerCase()), i3 = n2.indexOf(t3.name.toLowerCase());
7813
7885
  return r3 !== -1 && i3 !== -1 ? r3 - i3 : r3 === -1 ? i3 === -1 ? e6.name.localeCompare(t3.name) : 1 : -1;
7814
7886
  }), i2 = {};
@@ -7818,15 +7890,15 @@ function Fy(e5, t2) {
7818
7890
  }
7819
7891
  let s2 = (e6) => e6.replace(/(^|\s|_)\w/g, (e7) => e7.toUpperCase()).replace(/_/g, " "), c2 = (e6) => ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"][Math.floor((e6 % 360 + 360) % 360 / 30)], l2 = r2.map((e6) => {
7820
7892
  var t3, n3, r3, a3;
7821
- let o3 = e6.name.toLowerCase(), l3 = (t3 = P_[o3]) == null ? "\u2605" : t3, u3 = (n3 = e6.sign) == null ? c2(e6.longitude) : n3, d3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 1 * 60), p3 = Py.has(o3), m2 = e6.retrograde ? '<span class="retro-mark">\u211E</span>' : "", h2 = (r3 = i2[o3]) == null ? 0 : r3;
7893
+ let o3 = e6.name.toLowerCase(), l3 = (t3 = rv[o3]) == null ? "\u2605" : t3, u3 = (n3 = e6.sign) == null ? c2(e6.longitude) : n3, d3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 1 * 60), p3 = db.has(o3), m2 = e6.retrograde ? '<span class="retro-mark">\u211E</span>' : "", h2 = (r3 = i2[o3]) == null ? 0 : r3;
7822
7894
  return '<tr class="'.concat(p3 ? "extended-row" : "", '" data-planet="').concat(o3, '">\n <td><span class="planet-sym">').concat(l3, "</span> ").concat(s2(e6.name)).concat(m2, "</td>\n <td>").concat(d3, "\xB0 ").concat(u3, " ").concat(String(f3).padStart(2, "0"), "\u2032</td>\n <td>H").concat((a3 = e6.house) == null ? "\u2013" : a3, "</td>\n <td>").concat(h2 > 0 ? h2 : "\u2013", "</td>\n </tr>");
7823
7895
  }).join(""), u2 = "| Body | Sign | Degree | House | Retrograde |\n| --- | --- | --- | --- | --- |\n" + r2.map((e6) => {
7824
7896
  var t3;
7825
7897
  let n3 = (t3 = e6.sign) == null ? c2(e6.longitude) : t3, r3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), i3 = Math.floor((e6.longitude % 360 + 360) % 360 % 1 * 60), a3 = e6.house == null ? "\u2013" : "H".concat(e6.house), o3 = e6.retrograde ? "\u211E" : "";
7826
7898
  return "| ".concat(s2(e6.name), " | ").concat(n3, " | ").concat(r3, "\xB0 ").concat(String(i3).padStart(2, "0"), "\u2032 | ").concat(a3, " | ").concat(o3, " |");
7827
7899
  }).join("\n");
7828
- Cy.innerHTML = '\n <div class="overview-header">\n <button class="overview-toggle" aria-expanded="false">\n <span class="overview-chevron">\u25B6</span>\n Planet Positions ('.concat(r2.length, ')\n </button>\n <button class="overview-copy" type="button" title="Copy positions as a Markdown table">Copy</button>\n </div>\n <div class="overview-body">\n <table class="overview-tbl">\n <thead><tr><th>Body</th><th>Position</th><th>House</th><th>Asp</th></tr></thead>\n <tbody>').concat(l2, "</tbody>\n </table>\n </div>\n "), Cy.removeAttribute("hidden");
7829
- let d2 = Cy.querySelector(".overview-copy");
7900
+ eb.innerHTML = '\n <div class="overview-header">\n <button class="overview-toggle" aria-expanded="false">\n <span class="overview-chevron">\u25B6</span>\n Planet Positions ('.concat(r2.length, ')\n </button>\n <button class="overview-copy" type="button" title="Copy positions as a Markdown table">Copy</button>\n </div>\n <div class="overview-body">\n <table class="overview-tbl">\n <thead><tr><th>Body</th><th>Position</th><th>House</th><th>Asp</th></tr></thead>\n <tbody>').concat(l2, "</tbody>\n </table>\n </div>\n "), eb.removeAttribute("hidden");
7901
+ let d2 = eb.querySelector(".overview-copy");
7830
7902
  d2 && d2.addEventListener("click", async (e6) => {
7831
7903
  e6.stopPropagation();
7832
7904
  try {
@@ -7836,14 +7908,14 @@ function Fy(e5, t2) {
7836
7908
  d2.textContent = "Copy", d2.classList.remove("copied");
7837
7909
  }, 1600);
7838
7910
  } catch (e7) {
7839
- Iy("Copy unavailable");
7911
+ pb("Copy unavailable");
7840
7912
  }
7841
7913
  });
7842
- let f2 = Cy.querySelector(".overview-toggle"), p2 = Cy.querySelector(".overview-body");
7914
+ let f2 = eb.querySelector(".overview-toggle"), p2 = eb.querySelector(".overview-body");
7843
7915
  f2 == null || f2.addEventListener("click", () => {
7844
7916
  let e6 = f2.getAttribute("aria-expanded") === "true";
7845
7917
  f2.setAttribute("aria-expanded", e6 ? "false" : "true"), p2.classList.toggle("open", !e6);
7846
- }), Cy.querySelectorAll("tbody tr").forEach((e6) => {
7918
+ }), eb.querySelectorAll("tbody tr").forEach((e6) => {
7847
7919
  var t3;
7848
7920
  let n3 = (t3 = e6.dataset.planet) == null ? "" : t3;
7849
7921
  n3 && (e6.addEventListener("mouseenter", () => {
@@ -7855,7 +7927,7 @@ function Fy(e5, t2) {
7855
7927
  let t4 = document.querySelector("svg");
7856
7928
  t4 && (t4.querySelectorAll(".planet-glyph-group").forEach((e7) => {
7857
7929
  var t5;
7858
- let n4 = Py.has((t5 = e7.dataset.planet) == null ? "" : t5);
7930
+ let n4 = db.has((t5 = e7.dataset.planet) == null ? "" : t5);
7859
7931
  e7.style.opacity = n4 ? "0.65" : "1";
7860
7932
  }), e6.classList.remove("active-row"));
7861
7933
  }), e6.addEventListener("click", () => {
@@ -7866,7 +7938,7 @@ function Fy(e5, t2) {
7866
7938
  }));
7867
7939
  });
7868
7940
  }
7869
- function Iy(e5) {
7941
+ function pb(e5) {
7870
7942
  var t2;
7871
7943
  (t2 = document.getElementById("copy-toast")) == null || t2.remove();
7872
7944
  let n2 = document.createElement("div");
@@ -7874,26 +7946,26 @@ function Iy(e5) {
7874
7946
  n2.classList.remove("visible"), setTimeout(() => n2.remove(), 300);
7875
7947
  }, 2500);
7876
7948
  }
7877
- var Ly = null;
7878
- function Ry(e5, t2, n2) {
7879
- if (!xy) return;
7949
+ var mb = null;
7950
+ function hb(e5, t2, n2) {
7951
+ if (!Qy) return;
7880
7952
  if (e5.length === 0) {
7881
- xy.setAttribute("hidden", ""), xy.innerHTML = "";
7953
+ Qy.setAttribute("hidden", ""), Qy.innerHTML = "";
7882
7954
  return;
7883
7955
  }
7884
7956
  let r2 = { "T-Square": "#e08a52", "Grand Trine": "#52a8e0", "Grand Cross": "#e05252", Stellium: "#9a7fd4", Yod: "#52c07a", Kite: "#c0b052" };
7885
- if (xy.innerHTML = '\n <span class="patterns-label">Patterns:</span>\n '.concat(e5.map((e6, t3) => {
7957
+ if (Qy.innerHTML = '\n <span class="patterns-label">Patterns:</span>\n '.concat(e5.map((e6, t3) => {
7886
7958
  var n3;
7887
7959
  let i2 = (n3 = r2[e6.name]) == null ? "#888" : n3;
7888
7960
  return '\n <button class="pattern-pill"\n data-idx="'.concat(t3, '"\n data-color="').concat(i2, '"\n style="color:').concat(i2, ";border-color:").concat(i2, '"\n title="').concat(e6.description, '">\n ').concat(e6.name, "\n </button>\n ");
7889
- }).join(""), "\n "), xy.removeAttribute("hidden"), !xy.querySelector(".pattern-ask-claude-btn")) {
7961
+ }).join(""), "\n "), Qy.removeAttribute("hidden"), !Qy.querySelector(".pattern-ask-claude-btn")) {
7890
7962
  let t3 = document.createElement("button");
7891
- t3.className = "pattern-ask-claude-btn", t3.textContent = "\u2728 Interpret", t3.style.display = "none", xy.appendChild(t3), t3.addEventListener("click", () => {
7963
+ t3.className = "pattern-ask-claude-btn", t3.textContent = "\u2728 Interpret", t3.style.display = "none", Qy.appendChild(t3), t3.addEventListener("click", () => {
7892
7964
  var n3;
7893
- let r3 = Ly;
7965
+ let r3 = mb;
7894
7966
  if (r3 === null) return;
7895
7967
  let i2 = e5[r3];
7896
- t3.disabled = true, t3.textContent = "\u23F3 Sending\u2026", Qy({ type: "pattern", data: { name: i2.name, planets: i2.planets, description: (n3 = i2.description) == null ? "" : n3 } }).then(() => {
7968
+ t3.disabled = true, t3.textContent = "\u23F3 Sending\u2026", kb({ type: "pattern", data: { name: i2.name, planets: i2.planets, description: (n3 = i2.description) == null ? "" : n3 } }).then(() => {
7897
7969
  t3.textContent = "\u2713 Sent", setTimeout(() => {
7898
7970
  t3.textContent = "\u2728 Interpret", t3.disabled = false;
7899
7971
  }, 2500);
@@ -7902,132 +7974,130 @@ function Ry(e5, t2, n2) {
7902
7974
  });
7903
7975
  });
7904
7976
  }
7905
- xy.querySelectorAll(".pattern-pill").forEach((r3) => {
7977
+ Qy.querySelectorAll(".pattern-pill").forEach((r3) => {
7906
7978
  r3.addEventListener("click", () => {
7907
7979
  var i2;
7908
- let a2 = Number(r3.dataset.idx), o2 = e5[a2], s2 = (i2 = r3.dataset.color) == null ? "#888" : i2, c2 = xy.querySelector(".pattern-ask-claude-btn");
7909
- Ly === a2 ? (Ly = null, Fv(), c2 && (c2.style.display = "none"), xy.querySelectorAll(".pattern-pill").forEach((e6) => {
7980
+ let a2 = Number(r3.dataset.idx), o2 = e5[a2], s2 = (i2 = r3.dataset.color) == null ? "#888" : i2, c2 = Qy.querySelector(".pattern-ask-claude-btn");
7981
+ mb === a2 ? (mb = null, iy(), c2 && (c2.style.display = "none"), Qy.querySelectorAll(".pattern-pill").forEach((e6) => {
7910
7982
  var t3;
7911
7983
  e6.classList.remove("active");
7912
7984
  let n3 = (t3 = e6.dataset.color) == null ? "#888" : t3;
7913
7985
  e6.style.color = n3, e6.style.borderColor = n3, e6.style.background = "transparent";
7914
- })) : (Ly = a2, xy.querySelectorAll(".pattern-pill").forEach((e6) => {
7986
+ })) : (mb = a2, Qy.querySelectorAll(".pattern-pill").forEach((e6) => {
7915
7987
  var t3;
7916
7988
  e6.classList.remove("active");
7917
7989
  let n3 = (t3 = e6.dataset.color) == null ? "#888" : t3;
7918
7990
  e6.style.color = n3, e6.style.borderColor = n3, e6.style.background = "transparent";
7919
- }), r3.classList.add("active"), r3.style.background = s2, r3.style.color = "#fff", r3.style.borderColor = s2, Nv(o2.planets, o2.aspectKeys), t2 && n2 != null && (zv(), Rv(o2, t2, n2)), c2 && (c2.style.display = "", c2.textContent = "\u2728 Interpret", c2.disabled = false));
7991
+ }), r3.classList.add("active"), r3.style.background = s2, r3.style.color = "#fff", r3.style.borderColor = s2, ny(o2.planets, o2.aspectKeys), t2 && n2 != null && (cy(), sy(o2, t2, n2)), c2 && (c2.style.display = "", c2.textContent = "\u2728 Interpret", c2.disabled = false));
7920
7992
  });
7921
7993
  });
7922
7994
  }
7923
- var zy = [{ label: "Tight", maxOrb: 4 }, { label: "Standard", maxOrb: 8 }, { label: "Wide", maxOrb: 12 }], By = true, Vy = 8, Hy = "true";
7924
- function Uy() {
7995
+ var gb = [{ label: "Tight", maxOrb: 4 }, { label: "Standard", maxOrb: 8 }, { label: "Wide", maxOrb: 12 }], _b = true, vb = 8, yb = "true";
7996
+ function bb() {
7925
7997
  var e5;
7926
- if (!Sy) return;
7998
+ if (!$y) return;
7927
7999
  let t2 = (() => {
7928
8000
  let e6 = $ == null ? void 0 : $.planets, t3 = [];
7929
- Array.isArray(e6) ? e6.forEach((e7) => {
7930
- var n4;
7931
- return t3.push(String((n4 = e7 == null ? void 0 : e7.name) == null ? "" : n4).toLowerCase());
7932
- }) : e6 && typeof e6 == "object" && Object.keys(e6).forEach((e7) => t3.push(e7.toLowerCase()));
7933
- let n3 = t3.some((e7) => e7 === "north node" || e7 === "north node (mean)" || e7 === "mean node"), r3 = t3.some((e7) => e7 === "true node" || e7 === "north node (true)");
7934
- return n3 && r3;
8001
+ return Array.isArray(e6) ? e6.forEach((e7) => {
8002
+ var n3;
8003
+ return t3.push(String((n3 = e7 == null ? void 0 : e7.name) == null ? "" : n3).toLowerCase());
8004
+ }) : e6 && typeof e6 == "object" && Object.keys(e6).forEach((e7) => t3.push(e7.toLowerCase())), F_(t3);
7935
8005
  })();
7936
- q_(Hy);
7937
- let n2 = t2 ? '\n <div class="asp-section">\n <span class="asp-section-label">Nodes</span>\n <button class="orb-preset-btn node-btn'.concat(Hy === "mean" ? " active" : "", '" data-node="mean" title="Mean lunar node (averaged orbit)">Mean</button>\n <button class="orb-preset-btn node-btn').concat(Hy === "true" ? " active" : "", '" data-node="true" title="True (osculating) lunar node">True</button>\n </div>') : "";
7938
- By = true, Sy.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="cw-aspect-vis-toggle"\n title="Toggle all natal aspect lines">\n <span class="toggle-icon">\u2295</span> Natal aspects\n </button>\n </div>\n <div class="asp-section">\n <span class="asp-section-label">Orb</span>\n '.concat(zy.map((e6) => '<button class="orb-preset-btn'.concat(e6.maxOrb === Vy ? " active" : "", '" data-orb="').concat(e6.maxOrb, '" title="').concat(e6.label, ' orbs">').concat(e6.label, "</button>")).join(""), "\n </div>").concat(n2, "\n </div>\n ");
7939
- let r2 = Y_($ == null ? void 0 : $.planets), i2 = /* @__PURE__ */ new Set(), a2 = [];
8006
+ gv(yb);
8007
+ let n2 = t2 ? '\n <div class="asp-section">\n <span class="asp-section-label">Nodes</span>\n <button class="orb-preset-btn node-btn'.concat(yb === "mean" ? " active" : "", '" data-node="mean" title="Mean lunar node (averaged orbit)">Mean</button>\n <button class="orb-preset-btn node-btn').concat(yb === "true" ? " active" : "", '" data-node="true" title="True (osculating) lunar node">True</button>\n </div>') : "";
8008
+ _b = true, $y.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="cw-aspect-vis-toggle"\n title="Toggle all natal aspect lines">\n <span class="toggle-icon">\u2295</span> Natal aspects\n </button>\n </div>\n <div class="asp-section">\n <span class="asp-section-label">Orb</span>\n '.concat(gb.map((e6) => '<button class="orb-preset-btn'.concat(e6.maxOrb === vb ? " active" : "", '" data-orb="').concat(e6.maxOrb, '" title="').concat(e6.label, ' orbs">').concat(e6.label, "</button>")).join(""), "\n </div>").concat(n2, "\n </div>\n ");
8009
+ let r2 = vv($ == null ? void 0 : $.planets), i2 = /* @__PURE__ */ new Set(), a2 = [];
7940
8010
  for (let e6 of r2) {
7941
8011
  let t3 = e6.name.toLowerCase();
7942
8012
  if (i2.has(t3)) continue;
7943
8013
  i2.add(t3);
7944
- let n3 = P_[t3];
7945
- n3 && a2.push({ glyph: n3, label: Jv(e6.name) });
8014
+ let n3 = rv[t3];
8015
+ n3 && a2.push({ glyph: n3, label: _y(e6.name) });
7946
8016
  }
7947
8017
  let o2 = [...new Set(((e5 = $ == null ? void 0 : $.aspects) == null ? [] : e5).map((e6) => {
7948
8018
  var t3;
7949
8019
  return ((t3 = e6.type) == null ? "" : t3).toLowerCase();
7950
8020
  }).filter(Boolean))].map((e6) => {
7951
8021
  var t3;
7952
- return { glyph: (t3 = L_[e6]) == null ? "" : t3, label: Jv(e6) };
8022
+ return { glyph: (t3 = ov[e6]) == null ? "" : t3, label: _y(e6) };
7953
8023
  }).filter((e6) => e6.glyph);
7954
- Sy.insertAdjacentHTML("beforeend", Yv([{ title: "Bodies", items: a2 }, { title: "Aspects", items: o2 }])), Sy.removeAttribute("hidden");
8024
+ $y.insertAdjacentHTML("beforeend", vy([{ title: "Bodies", items: a2 }, { title: "Aspects", items: o2 }])), $y.removeAttribute("hidden");
7955
8025
  let s2 = document.getElementById("cw-aspect-vis-toggle");
7956
8026
  s2 == null || s2.addEventListener("click", () => {
7957
- By = !By, Bv(By), s2.classList.toggle("active", By), s2.querySelector(".toggle-icon").textContent = By ? "\u2295" : "\u2296";
7958
- }), Sy.querySelectorAll(".orb-preset-btn:not(.node-btn)").forEach((e6) => {
8027
+ _b = !_b, ly(_b), s2.classList.toggle("active", _b), s2.querySelector(".toggle-icon").textContent = _b ? "\u2295" : "\u2296";
8028
+ }), $y.querySelectorAll(".orb-preset-btn:not(.node-btn)").forEach((e6) => {
7959
8029
  e6.addEventListener("click", () => {
7960
8030
  var t3;
7961
8031
  let n3 = parseFloat((t3 = e6.dataset.orb) == null ? "8" : t3);
7962
- n3 !== Vy && (Vy = n3, Sy.querySelectorAll(".orb-preset-btn:not(.node-btn)").forEach((e7) => e7.classList.toggle("active", e7.dataset.orb === String(n3))), Vv(n3));
8032
+ n3 !== vb && (vb = n3, $y.querySelectorAll(".orb-preset-btn:not(.node-btn)").forEach((e7) => e7.classList.toggle("active", e7.dataset.orb === String(n3))), uy(n3));
7963
8033
  });
7964
- }), Sy.querySelectorAll(".node-btn").forEach((e6) => {
8034
+ }), $y.querySelectorAll(".node-btn").forEach((e6) => {
7965
8035
  e6.addEventListener("click", () => {
7966
8036
  let t3 = e6.dataset.node === "mean" ? "mean" : "true";
7967
- t3 === Hy || !$ || (Hy = t3, q_(t3), jy($));
8037
+ t3 === yb || !$ || (yb = t3, gv(t3), cb($));
7968
8038
  });
7969
8039
  });
7970
8040
  }
7971
- async function Wy(e5, t2) {
7972
- if (Oy) try {
8041
+ async function xb(e5, t2) {
8042
+ if (ab) try {
7973
8043
  let n2 = "[Chart Wheel] Selected ".concat(e5, " \u2014 ").concat(Object.entries(t2).filter(([, e6]) => e6 != null && e6 !== false && e6 !== "").map(([e6, t3]) => "".concat(e6, ": ").concat(t3)).join(", "));
7974
- await Ty.updateModelContext({ content: [{ type: "text", text: n2 }] });
8044
+ await nb.updateModelContext({ content: [{ type: "text", text: n2 }] });
7975
8045
  } catch (e6) {
7976
8046
  console.warn("[ChartWheel] \u26A0\uFE0F updateModelContext failed:", e6);
7977
8047
  }
7978
8048
  }
7979
- async function Gy(e5) {
8049
+ async function Sb(e5) {
7980
8050
  var t2, n2, r2, i2;
7981
- Ly = null, xy == null || xy.querySelectorAll(".pattern-pill").forEach((e6) => {
8051
+ mb = null, Qy == null || Qy.querySelectorAll(".pattern-pill").forEach((e6) => {
7982
8052
  var t3;
7983
8053
  e6.classList.remove("active");
7984
8054
  let n3 = (t3 = e6.dataset.color) == null ? "#888" : t3;
7985
8055
  e6.style.color = n3, e6.style.borderColor = n3, e6.style.background = "transparent";
7986
- }), await Wy("planet", { planet: e5.name, longitude: e5.longitude, sign: (t2 = e5.sign) == null ? null : t2, house: (n2 = e5.house) == null ? null : n2, retrograde: (r2 = e5.retrograde) == null ? false : r2, speed: (i2 = e5.speed) == null ? null : i2 });
8056
+ }), await xb("planet", { planet: e5.name, longitude: e5.longitude, sign: (t2 = e5.sign) == null ? null : t2, house: (n2 = e5.house) == null ? null : n2, retrograde: (r2 = e5.retrograde) == null ? false : r2, speed: (i2 = e5.speed) == null ? null : i2 });
7987
8057
  }
7988
- async function Ky(e5) {
8058
+ async function Cb(e5) {
7989
8059
  var t2, n2;
7990
- await Wy("house", { house_number: e5.number, sign: (t2 = e5.sign) == null ? null : t2, cusp_longitude: e5.cusp_lon, ruler: (n2 = e5.ruler) == null ? null : n2 });
8060
+ await xb("house", { house_number: e5.number, sign: (t2 = e5.sign) == null ? null : t2, cusp_longitude: e5.cusp_lon, ruler: (n2 = e5.ruler) == null ? null : n2 });
7991
8061
  }
7992
- async function qy(e5) {
8062
+ async function wb(e5) {
7993
8063
  var t2, n2, r2, i2;
7994
- await Wy("aspect", { planet1: e5.planet1, planet2: e5.planet2, aspect_type: (t2 = e5.type) == null ? null : t2, orb: (n2 = e5.orb) == null ? null : n2, applying: (r2 = e5.applying) == null ? null : r2, angle: (i2 = e5.angle) == null ? null : i2 });
8064
+ await xb("aspect", { planet1: e5.planet1, planet2: e5.planet2, aspect_type: (t2 = e5.type) == null ? null : t2, orb: (n2 = e5.orb) == null ? null : n2, applying: (r2 = e5.applying) == null ? null : r2, angle: (i2 = e5.angle) == null ? null : i2 });
7995
8065
  }
7996
- function Jy() {
8066
+ function Tb() {
7997
8067
  return async (e5) => {
7998
8068
  try {
7999
8069
  var t2, n2;
8000
- let r2 = await Ty.createSamplingMessage({ messages: [{ role: "user", content: { type: "text", text: "You are interpreting a specific element in a natal chart. Be specific to the chart data \u2014 never generic. 2-3 sentences max.\n\nUser Request: ".concat(e5) } }], systemPrompt: "You are a professional Western astrologer giving a focused natal interpretation. Be specific to the chart data provided \u2014 never generic. Insightful and concise.", maxTokens: 300 });
8070
+ let r2 = await nb.createSamplingMessage({ messages: [{ role: "user", content: { type: "text", text: "You are interpreting a specific element in a natal chart. Be specific to the chart data \u2014 never generic. 2-3 sentences max.\n\nUser Request: ".concat(e5) } }], systemPrompt: "You are a professional Western astrologer giving a focused natal interpretation. Be specific to the chart data provided \u2014 never generic. Insightful and concise.", maxTokens: 300 });
8001
8071
  return (t2 = r2 == null || (n2 = r2.content) == null ? void 0 : n2.text) == null ? null : t2;
8002
8072
  } catch (e6) {
8003
8073
  return console.error("[ChartWheel] Sampling failed:", e6), "Unable to load interpretation right now.";
8004
8074
  }
8005
8075
  };
8006
8076
  }
8007
- async function Yy(e5) {
8077
+ async function Eb(e5) {
8008
8078
  try {
8009
- (await Ty.sendMessage({ role: "user", content: [{ type: "text", text: e5 }] })).isError && console.error("[ChartWheel] Host rejected sendMessage");
8079
+ (await nb.sendMessage({ role: "user", content: [{ type: "text", text: e5 }] })).isError && console.error("[ChartWheel] Host rejected sendMessage");
8010
8080
  } catch (e6) {
8011
8081
  console.error("[ChartWheel] sendMessage failed:", e6);
8012
8082
  }
8013
8083
  }
8014
- async function Xy() {
8084
+ async function Db() {
8015
8085
  var e5, t2, n2, r2;
8016
8086
  if (!$) return;
8017
- let i2 = $, a2 = (e5 = i2._birth_params) == null ? {} : e5, o2 = (t2 = (n2 = a2.name) == null ? a2.location : n2) == null ? "this person" : t2, s2 = Y_(i2.planets), c2 = ((r2 = i2.aspects) == null ? [] : r2).filter((e6) => {
8087
+ let i2 = $, a2 = (e5 = i2._birth_params) == null ? {} : e5, o2 = (t2 = (n2 = a2.name) == null ? a2.location : n2) == null ? "this person" : t2, s2 = vv(i2.planets), c2 = ((r2 = i2.aspects) == null ? [] : r2).filter((e6) => {
8018
8088
  var t3;
8019
8089
  return ["conjunction", "opposition", "trine", "square", "sextile"].includes((t3 = e6.type) == null ? "" : t3);
8020
8090
  }).slice(0, 8).map((e6) => " \u2022 ".concat(e6.planet1, " ").concat(e6.type, " ").concat(e6.planet2, " (").concat(Number(e6.orb).toFixed(1), "\xB0, ").concat(e6.applying ? "applying" : "separating", ")")).join("\n") || " \u2022 No major aspects found";
8021
- await Yy("Please give a complete natal chart interpretation for ".concat(o2, ".\n\nKey planet placements:\n").concat(s2.slice(0, 5).map((e6) => {
8091
+ await Eb("Please give a complete natal chart interpretation for ".concat(o2, ".\n\nKey planet placements:\n").concat(s2.slice(0, 5).map((e6) => {
8022
8092
  var t3;
8023
8093
  return " \u2022 ".concat(e6.name, " in ").concat((t3 = e6.sign) == null ? "?" : t3).concat(e6.house ? ", House ".concat(e6.house) : "").concat(e6.retrograde ? " \u211E" : "");
8024
8094
  }).join("\n"), "\n\nMajor aspects:\n").concat(c2, "\n\nCover: (1) Core identity and soul purpose (Sun, Moon, Ascendant), (2) The chart's dominant element, modality, and overall signature, (3) The most significant aspects and their psychological themes, (4) Key life areas of focus and challenge, (5) A practical synthesis \u2014 who is this person and what is their path?"));
8025
8095
  }
8026
- async function Zy() {
8096
+ async function Ob() {
8027
8097
  var e5, t2, n2, r2;
8028
8098
  if (!$) return;
8029
8099
  let i2 = $, a2 = (e5 = i2._birth_params) == null ? {} : e5;
8030
- await Yy("I'm exploring the natal chart for ".concat((t2 = (n2 = a2.name) == null ? a2.location : n2) == null ? "this chart" : t2, ". Key placements: ").concat(Y_(i2.planets).slice(0, 4).map((e6) => {
8100
+ await Eb("I'm exploring the natal chart for ".concat((t2 = (n2 = a2.name) == null ? a2.location : n2) == null ? "this chart" : t2, ". Key placements: ").concat(vv(i2.planets).slice(0, 4).map((e6) => {
8031
8101
  var t3;
8032
8102
  return "".concat(e6.name, " in ").concat((t3 = e6.sign) == null ? "?" : t3).concat(e6.house ? " H".concat(e6.house) : "");
8033
8103
  }).join(", ") || "unknown placements", ". Major aspects: ").concat(((r2 = i2.aspects) == null ? [] : r2).filter((e6) => {
@@ -8035,7 +8105,7 @@ async function Zy() {
8035
8105
  return ["conjunction", "opposition", "trine", "square", "sextile"].includes((t3 = e6.type) == null ? "" : t3);
8036
8106
  }).slice(0, 5).map((e6) => "".concat(e6.planet1, " ").concat(e6.type, " ").concat(e6.planet2, " (").concat(Number(e6.orb).toFixed(1), "\xB0)")).join(", ") || "none detected", ".\n\nBased on this chart, please suggest 3-4 specific, insightful questions I could ask to understand this person more deeply \u2014 such as how particular placements manifest in real life, the most significant aspect dynamics, or how to integrate the chart's core tensions. Present each as a tappable question I can ask you."));
8037
8107
  }
8038
- async function Qy(e5) {
8108
+ async function kb(e5) {
8039
8109
  let t2 = "";
8040
8110
  if (e5.type === "planet") {
8041
8111
  var n2;
@@ -8064,52 +8134,52 @@ async function Qy(e5) {
8064
8134
  t2 = "Interpret the ".concat(n3.angle, " at ").concat(n3.position, " (").concat(n3.sign, " \xB7 ").concat(n3.element, " \xB7 ").concat(n3.modality, ") in this natal chart. Give a focused interpretation of what this angle represents for the native \u2014 identity, life direction, relationships, or roots depending on which angle \u2014 and how the sign on the angle shapes that expression.");
8065
8135
  }
8066
8136
  if (t2) {
8067
- t2 = ly(t2, $ == null ? void 0 : $._birth_params, "Natal chart");
8137
+ t2 = My(t2, $ == null ? void 0 : $._birth_params, "Natal chart");
8068
8138
  try {
8069
- let e6 = await Ty.sendMessage({ role: "user", content: [{ type: "text", text: t2 }] });
8139
+ let e6 = await nb.sendMessage({ role: "user", content: [{ type: "text", text: t2 }] });
8070
8140
  if (e6.isError) throw console.error("[ChartWheel] \u274C Host rejected sendMessage:", e6), Error("Host rejected message");
8071
8141
  } catch (e6) {
8072
8142
  throw console.error("[ChartWheel] \u274C sendMessage failed:", e6), e6;
8073
8143
  }
8074
8144
  }
8075
8145
  }
8076
- async function $y(e5) {
8146
+ async function Ab(e5) {
8077
8147
  if (!($ != null && $._birth_params)) {
8078
- Kv(by, Ey);
8148
+ hy(Zy, rb);
8079
8149
  return;
8080
8150
  }
8081
8151
  try {
8082
8152
  var t2, n2, r2, i2;
8083
- let a2 = ay(await Ty.callServerTool({ name: "chart_wheel_recalculate", arguments: { datetime: $._birth_params.datetime, timezone: (t2 = $._birth_params.timezone) == null ? void 0 : t2, latitude: (n2 = $._birth_params.latitude) == null ? void 0 : n2, longitude: (r2 = $._birth_params.longitude) == null ? void 0 : r2, location: (i2 = $._birth_params.location) == null ? void 0 : i2, house_system: e5 } }));
8084
- a2 ? ($ = a2, Ey = e5, jy(a2)) : Kv(by, Ey);
8153
+ let a2 = Oy(await nb.callServerTool({ name: "chart_wheel_recalculate", arguments: { datetime: $._birth_params.datetime, timezone: (t2 = $._birth_params.timezone) == null ? void 0 : t2, latitude: (n2 = $._birth_params.latitude) == null ? void 0 : n2, longitude: (r2 = $._birth_params.longitude) == null ? void 0 : r2, location: (i2 = $._birth_params.location) == null ? void 0 : i2, house_system: e5 } }));
8154
+ a2 ? ($ = a2, rb = e5, cb(a2)) : hy(Zy, rb);
8085
8155
  } catch (e6) {
8086
- console.error("[Chart] Recalculate failed:", e6), Kv(by, Ey);
8156
+ console.error("[Chart] Recalculate failed:", e6), hy(Zy, rb);
8087
8157
  }
8088
8158
  }
8089
- var eb;
8090
- function tb() {
8091
- eb && (clearTimeout(eb), eb = void 0);
8159
+ var jb;
8160
+ function Mb() {
8161
+ jb && (clearTimeout(jb), jb = void 0);
8092
8162
  }
8093
- function nb(e5, t2) {
8094
- tb(), gy.setAttribute("hidden", ""), dy({ container: _y, message: e5, onRetry: t2 });
8163
+ function Nb(e5, t2) {
8164
+ Mb(), qy.setAttribute("hidden", ""), Py({ container: Jy, message: e5, onRetry: t2 });
8095
8165
  }
8096
- function rb() {
8097
- tb(), _y.setAttribute("hidden", ""), gy.removeAttribute("hidden"), eb = setTimeout(() => {
8098
- nb("The chart didn't load. Tap to try again.", rb);
8099
- }, 3e4), Ty.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the chart wheel." }] }).catch(() => {
8166
+ function Pb() {
8167
+ Mb(), Jy.setAttribute("hidden", ""), qy.removeAttribute("hidden"), jb = setTimeout(() => {
8168
+ Nb("The chart didn't load. Tap to try again.", Pb);
8169
+ }, 3e4), nb.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the chart wheel." }] }).catch(() => {
8100
8170
  });
8101
8171
  }
8102
- py(Ty, { loadingEl: gy, contentEl: _y, statusFn: Ay, paramControls: () => Dy }), eb = setTimeout(() => {
8103
- nb("Chart data is taking longer than expected.", rb);
8172
+ Wy(nb, { loadingEl: qy, contentEl: Jy, statusFn: sb, paramControls: () => ib }), jb = setTimeout(() => {
8173
+ Nb("Chart data is taking longer than expected.", Pb);
8104
8174
  }, 3e4), (async () => {
8105
8175
  try {
8106
- await Ty.connect();
8107
- let e5 = Ty.getHostCapabilities();
8108
- Oy = !!(e5 != null && e5.modelContext), ky = !!(e5 != null && e5.sampling), fy(Ty, document.getElementById("pan-zoom-controls"), ["aspect-filter", "controls-panel", "param-controls-container", "chart-info", "patterns-strip", "info-panel", "cw-action-bar"]), hy(Ty), g_(Ty, () => {
8109
- $ && jy($);
8110
- }), $ && jy($);
8176
+ await nb.connect();
8177
+ let e5 = nb.getHostCapabilities();
8178
+ ab = !!(e5 != null && e5.modelContext), ob = !!(e5 != null && e5.sampling), Hy(nb, document.getElementById("pan-zoom-controls"), ["aspect-filter", "controls-panel", "param-controls-container", "chart-info", "patterns-strip", "info-panel", "cw-action-bar"]), Ky(nb), v_(nb, () => {
8179
+ $ && cb($);
8180
+ }), $ && cb($);
8111
8181
  } catch (e5) {
8112
- console.error("[ChartWheel] \u274C app.connect() FAILED:", e5), nb("The chart didn't load. Tap to try again.", rb);
8182
+ console.error("[ChartWheel] \u274C app.connect() FAILED:", e5), Nb("The chart didn't load. Tap to try again.", Pb);
8113
8183
  }
8114
8184
  })();
8115
8185
  </script>