@openephemeris/mcp-server 3.21.1 → 3.22.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.
@@ -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:#e9ab2b;--aspect-opposition:#dd4d57;--aspect-trine:#37b880;--aspect-square:#dd4d57;--aspect-sextile:#2f8adc;--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);--aspect-conjunction:color(display-p3 .877131 .680603 .28424);--aspect-opposition:color(display-p3 .803557 .340931 .357065);--aspect-trine:color(display-p3 .376022 .713332 .518194);--aspect-square:color(display-p3 .803557 .340931 .357065);--aspect-sextile:color(display-p3 .290256 .532943 .838196);--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% -.109613 -6.65551);--text:lab(90.6942% -.142396 -2.26941);--text-secondary:lab(51.2352% -.205308 -3.76425);--gold:lab(67.5798% 11.9379 52.333);--gold-dim:lab(44.394% 5.21129 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.8159 68.8514);--planet-moon:lab(74.277% -.405759 -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.8149);--planet-uranus:lab(71.0008% -37.5682 -15.4301);--planet-neptune:lab(55.2086% -4.9496 -50.4575);--planet-pluto:lab(58.8593% 28.4679 -33.3654);--aspect-conjunction:lab(74.5017% 15.8159 68.8514);--aspect-opposition:lab(54.0218% 57.6814 26.7913);--aspect-trine:lab(67.0478% -46.5952 18.3141);--aspect-square:lab(54.0218% 57.6814 26.7913);--aspect-sextile:lab(55.2086% -4.9496 -50.4575);--color-fire:lab(61.5466% 48.3829 50.2676);--color-earth:lab(60.647% -24.5491 38.2386);--color-air:lab(63.473% -27.3149 -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.2719);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.8879% 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% -.240654 -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.3149 -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-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.3713% -.0768304 -7.37782));box-shadow:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong,lab(16.3713% -.0768304 -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.3713% -.0768304 -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}@media (prefers-color-scheme:light){:root{--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{--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{--bg:lab(96.5376% .34076 2.2589);--surface:lab(100% 0 0);--surface-2:lab(94.2232% .459731 3.01526);--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% -.210047 -4.49809);--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.22038 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)}}html,body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background-image:none}.hd-action-bar{background:var(--bg)}.info-chip{background:var(--surface-2);color:var(--text-secondary);border:1px solid var(--border)}.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)}.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)}.tooltip-title{color:var(--text)}.tooltip-detail{color:var(--text-secondary)}.tooltip-hint{color:var(--gold-dim)}.chart-status{background:rgba(247,245,241,.92);background:color(display-p3 .967616 .959866 .945308/.92);background:lab(96.5376% .34076 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)}.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)}.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)}.pan-btn{background:var(--surface)}.pan-btn:hover{background:var(--surface-2)}#fs-bottom-bar{background:#f7f5f1;background:color(display-p3 .967616 .959866 .945308);background:lab(96.5376% .34076 2.2589);border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{background:#f1eeea;background:color(display-p3 .941472 .933762 .919279);background:lab(94.2176% .341028 2.25905)}#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)}#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)}#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:6px}.pan-btn{min-width:40px;min-height:40px}#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{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-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}@media (prefers-color-scheme:light){.param-group input[type=date],.param-group input[type=time],.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% .167578 1.1277)}.loc-suggestions{border-color:var(--border-strong);background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167578 1.1277)}.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)}.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:#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:orange;--aspect-opposition:#f55f7c;--aspect-trine:#ffc94d;--aspect-square:#f55f7c;--aspect-sextile:#118ab2;--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% -.109613 -6.65551);--text:lab(90.6942% -.142396 -2.26941);--text-secondary:lab(51.2352% -.205308 -3.76425);--gold:lab(67.5798% 11.9379 52.333);--gold-dim:lab(44.394% 5.21129 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.8159 68.8514);--planet-moon:lab(74.277% -.405759 -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.8149);--planet-uranus:lab(71.0008% -37.5682 -15.4301);--planet-neptune:lab(55.2086% -4.9496 -50.4575);--planet-pluto:lab(58.8593% 28.4679 -33.3654);--color-fire:lab(61.5466% 48.3829 50.2676);--color-earth:lab(60.647% -24.5491 38.2386);--color-air:lab(63.473% -27.3149 -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.2719);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.8879% 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% -.240654 -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.3149 -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-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.3713% -.0768304 -7.37782));box-shadow:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong,lab(16.3713% -.0768304 -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.3713% -.0768304 -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}@media (prefers-color-scheme:light){:root{--aspect-conjunction:orange;--aspect-opposition:#e23a63;--aspect-trine:#c99418;--aspect-square:#e23a63;--aspect-sextile:#118ab2;--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{--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{--bg:lab(96.5376% .34076 2.2589);--surface:lab(100% 0 0);--surface-2:lab(94.2232% .459731 3.01526);--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% -.210047 -4.49809);--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.22038 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)}}html,body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background-image:none}.hd-action-bar{background:var(--bg)}.info-chip{background:var(--surface-2);color:var(--text-secondary);border:1px solid var(--border)}.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)}.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)}.tooltip-title{color:var(--text)}.tooltip-detail{color:var(--text-secondary)}.tooltip-hint{color:var(--gold-dim)}.chart-status{background:rgba(247,245,241,.92);background:color(display-p3 .967616 .959866 .945308/.92);background:lab(96.5376% .34076 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)}.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)}.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)}.pan-btn{background:var(--surface)}.pan-btn:hover{background:var(--surface-2)}#fs-bottom-bar{background:#f7f5f1;background:color(display-p3 .967616 .959866 .945308);background:lab(96.5376% .34076 2.2589);border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{background:#f1eeea;background:color(display-p3 .941472 .933762 .919279);background:lab(94.2176% .341028 2.25905)}#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)}#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)}#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{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-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}@media (prefers-color-scheme:light){.param-group input[type=date],.param-group input[type=time],.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% .167578 1.1277)}.loc-suggestions{border-color:var(--border-strong);background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167578 1.1277)}.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)}.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}
14
14
  /*$vite$:1*/</style>
15
15
  </head>
16
16
  <body>
@@ -128,7 +128,7 @@ var l = /* @__PURE__ */ Symbol("zod_brand"), u = class extends Error {
128
128
  function p(e4) {
129
129
  return e4 && Object.assign(f, e4), 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: () => te, 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: () => ie, normalizeParams: () => D, nullish: () => C, numKeys: () => ge, objectClone: () => T, 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: () => 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 });
132
132
  function h(e4) {
133
133
  return e4;
134
134
  }
@@ -164,11 +164,11 @@ function S(e4) {
164
164
  function C(e4) {
165
165
  return e4 == null;
166
166
  }
167
- function te(e4) {
167
+ function w(e4) {
168
168
  let t2 = +!!e4.startsWith("^"), n2 = e4.endsWith("$") ? e4.length - 1 : e4.length;
169
169
  return e4.slice(t2, n2);
170
170
  }
171
- function ne(e4, t2) {
171
+ function te(e4, t2) {
172
172
  let n2 = (e4.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 e5 = r2.match(/\d?e-(\d?)/);
@@ -177,16 +177,16 @@ function ne(e4, t2) {
177
177
  let a2 = n2 > i2 ? n2 : i2;
178
178
  return Number.parseInt(e4.toFixed(a2).replace(".", "")) % Number.parseInt(t2.toFixed(a2).replace(".", "")) / 10 ** a2;
179
179
  }
180
- var re = /* @__PURE__ */ Symbol("evaluating");
181
- function w(e4, t2, n2) {
180
+ var ne = /* @__PURE__ */ Symbol("evaluating");
181
+ function T(e4, t2, n2) {
182
182
  let r2;
183
183
  Object.defineProperty(e4, t2, { get() {
184
- if (r2 !== re) return r2 === void 0 && (r2 = re, r2 = n2()), r2;
184
+ if (r2 !== ne) return r2 === void 0 && (r2 = ne, r2 = n2()), r2;
185
185
  }, set(n3) {
186
186
  Object.defineProperty(e4, t2, { value: n3 });
187
187
  }, configurable: true });
188
188
  }
189
- function T(e4) {
189
+ function re(e4) {
190
190
  return Object.create(Object.getPrototypeOf(e4), Object.getOwnPropertyDescriptors(e4));
191
191
  }
192
192
  function E(e4, t2, n2) {
@@ -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 = e5._zod.bag).multipleOf != null || (n2.multipleOf = t2.value);
633
633
  }), e4._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) : ne(n2.value, t2.value) === 0) || n2.issues.push({ origin: typeof n2.value, code: "not_multiple_of", divisor: t2.value, input: n2.value, inst: e4, continue: !t2.abort });
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: e4, continue: !t2.abort });
636
636
  };
637
637
  }), Vn = c("$ZodCheckNumberFormat", (e4, t2) => {
638
638
  var n2;
@@ -889,7 +889,7 @@ var rr = c("$ZodCheckProperty", (e4, t2) => {
889
889
  return t3(o2, i2, a3);
890
890
  };
891
891
  }
892
- w(e4, "~standard", () => ({ validate: (t3) => {
892
+ T(e4, "~standard", () => ({ validate: (t3) => {
893
893
  try {
894
894
  var n3;
895
895
  let r3 = st(e4, t3);
@@ -1155,7 +1155,7 @@ var ti = c("$ZodObject", (e4, t2) => {
1155
1155
  } });
1156
1156
  }
1157
1157
  let r2 = S(() => $r(t2));
1158
- w(e4._zod, "propValues", () => {
1158
+ T(e4._zod, "propValues", () => {
1159
1159
  let e5 = t2.shape, n3 = {};
1160
1160
  for (let t3 in e5) {
1161
1161
  let r3 = e5[t3]._zod;
@@ -1211,12 +1211,12 @@ function ri(e4, 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: e4.map((e5) => e5.issues.map((e6) => Ie(e6, r2, p()))) }), t2);
1212
1212
  }
1213
1213
  var ii = c("$ZodUnion", (e4, t2) => {
1214
- j.init(e4, t2), w(e4._zod, "optin", () => t2.options.some((e5) => e5._zod.optin === "optional") ? "optional" : void 0), w(e4._zod, "optout", () => t2.options.some((e5) => e5._zod.optout === "optional") ? "optional" : void 0), w(e4._zod, "values", () => {
1214
+ j.init(e4, t2), T(e4._zod, "optin", () => t2.options.some((e5) => e5._zod.optin === "optional") ? "optional" : void 0), T(e4._zod, "optout", () => t2.options.some((e5) => e5._zod.optout === "optional") ? "optional" : void 0), T(e4._zod, "values", () => {
1215
1215
  if (t2.options.every((e5) => e5._zod.values)) return new Set(t2.options.flatMap((e5) => Array.from(e5._zod.values)));
1216
- }), w(e4._zod, "pattern", () => {
1216
+ }), T(e4._zod, "pattern", () => {
1217
1217
  if (t2.options.every((e5) => e5._zod.pattern)) {
1218
1218
  let e5 = t2.options.map((e6) => e6._zod.pattern);
1219
- return RegExp("^(".concat(e5.map((e6) => te(e6.source)).join("|"), ")$"));
1219
+ return RegExp("^(".concat(e5.map((e6) => w(e6.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", (e4, t2) => {
1253
1253
  }), si = c("$ZodDiscriminatedUnion", (e4, t2) => {
1254
1254
  t2.inclusive = false, ii.init(e4, t2);
1255
1255
  let n2 = e4._zod.parse;
1256
- w(e4._zod, "propValues", () => {
1256
+ T(e4._zod, "propValues", () => {
1257
1257
  let e5 = {};
1258
1258
  for (let n3 of t2.options) {
1259
1259
  let r3 = n3._zod.propValues;
@@ -1469,9 +1469,9 @@ function Si(e4, t2) {
1469
1469
  return e4.issues.length && t2 === void 0 ? { issues: [], value: void 0 } : e4;
1470
1470
  }
1471
1471
  var Ci = c("$ZodOptional", (e4, t2) => {
1472
- j.init(e4, t2), e4._zod.optin = "optional", e4._zod.optout = "optional", w(e4._zod, "values", () => t2.innerType._zod.values ? /* @__PURE__ */ new Set([...t2.innerType._zod.values, void 0]) : void 0), w(e4._zod, "pattern", () => {
1472
+ j.init(e4, t2), e4._zod.optin = "optional", e4._zod.optout = "optional", T(e4._zod, "values", () => t2.innerType._zod.values ? /* @__PURE__ */ new Set([...t2.innerType._zod.values, void 0]) : void 0), T(e4._zod, "pattern", () => {
1473
1473
  let e5 = t2.innerType._zod.pattern;
1474
- return e5 ? RegExp("^(".concat(te(e5.source), ")?$")) : void 0;
1474
+ return e5 ? RegExp("^(".concat(w(e5.source), ")?$")) : void 0;
1475
1475
  }), e4._zod.parse = (e5, n2) => {
1476
1476
  if (t2.innerType._zod.optin === "optional") {
1477
1477
  let r2 = t2.innerType._zod.run(e5, n2);
@@ -1480,14 +1480,14 @@ var Ci = c("$ZodOptional", (e4, t2) => {
1480
1480
  return e5.value === void 0 ? e5 : t2.innerType._zod.run(e5, n2);
1481
1481
  };
1482
1482
  }), wi = c("$ZodExactOptional", (e4, t2) => {
1483
- Ci.init(e4, t2), w(e4._zod, "values", () => t2.innerType._zod.values), w(e4._zod, "pattern", () => t2.innerType._zod.pattern), e4._zod.parse = (e5, n2) => t2.innerType._zod.run(e5, n2);
1483
+ Ci.init(e4, t2), T(e4._zod, "values", () => t2.innerType._zod.values), T(e4._zod, "pattern", () => t2.innerType._zod.pattern), e4._zod.parse = (e5, n2) => t2.innerType._zod.run(e5, n2);
1484
1484
  }), Ti = c("$ZodNullable", (e4, t2) => {
1485
- j.init(e4, t2), w(e4._zod, "optin", () => t2.innerType._zod.optin), w(e4._zod, "optout", () => t2.innerType._zod.optout), w(e4._zod, "pattern", () => {
1485
+ j.init(e4, t2), T(e4._zod, "optin", () => t2.innerType._zod.optin), T(e4._zod, "optout", () => t2.innerType._zod.optout), T(e4._zod, "pattern", () => {
1486
1486
  let e5 = t2.innerType._zod.pattern;
1487
- return e5 ? RegExp("^(".concat(te(e5.source), "|null)$")) : void 0;
1488
- }), w(e4._zod, "values", () => t2.innerType._zod.values ? /* @__PURE__ */ new Set([...t2.innerType._zod.values, null]) : void 0), e4._zod.parse = (e5, n2) => e5.value === null ? e5 : t2.innerType._zod.run(e5, n2);
1487
+ return e5 ? RegExp("^(".concat(w(e5.source), "|null)$")) : void 0;
1488
+ }), T(e4._zod, "values", () => t2.innerType._zod.values ? /* @__PURE__ */ new Set([...t2.innerType._zod.values, null]) : void 0), e4._zod.parse = (e5, n2) => e5.value === null ? e5 : t2.innerType._zod.run(e5, n2);
1489
1489
  }), Ei = c("$ZodDefault", (e4, t2) => {
1490
- j.init(e4, t2), e4._zod.optin = "optional", w(e4._zod, "values", () => t2.innerType._zod.values), e4._zod.parse = (e5, n2) => {
1490
+ j.init(e4, t2), e4._zod.optin = "optional", T(e4._zod, "values", () => t2.innerType._zod.values), e4._zod.parse = (e5, n2) => {
1491
1491
  if (n2.direction === "backward") return t2.innerType._zod.run(e5, n2);
1492
1492
  if (e5.value === void 0) return e5.value = t2.defaultValue, e5;
1493
1493
  let r2 = t2.innerType._zod.run(e5, n2);
@@ -1498,9 +1498,9 @@ function Di(e4, t2) {
1498
1498
  return e4.value === void 0 && (e4.value = t2.defaultValue), e4;
1499
1499
  }
1500
1500
  var Oi = c("$ZodPrefault", (e4, t2) => {
1501
- j.init(e4, t2), e4._zod.optin = "optional", w(e4._zod, "values", () => t2.innerType._zod.values), e4._zod.parse = (e5, n2) => (n2.direction === "backward" || e5.value === void 0 && (e5.value = t2.defaultValue), t2.innerType._zod.run(e5, n2));
1501
+ j.init(e4, t2), e4._zod.optin = "optional", T(e4._zod, "values", () => t2.innerType._zod.values), e4._zod.parse = (e5, n2) => (n2.direction === "backward" || e5.value === void 0 && (e5.value = t2.defaultValue), t2.innerType._zod.run(e5, n2));
1502
1502
  }), ki = c("$ZodNonOptional", (e4, t2) => {
1503
- j.init(e4, t2), w(e4._zod, "values", () => {
1503
+ j.init(e4, t2), T(e4._zod, "values", () => {
1504
1504
  let e5 = t2.innerType._zod.values;
1505
1505
  return e5 ? new Set([...e5].filter((e6) => e6 !== void 0)) : void 0;
1506
1506
  }), e4._zod.parse = (n2, r2) => {
@@ -1518,7 +1518,7 @@ var ji = c("$ZodSuccess", (e4, t2) => {
1518
1518
  return r2 instanceof Promise ? r2.then((t3) => (e5.value = t3.issues.length === 0, e5)) : (e5.value = r2.issues.length === 0, e5);
1519
1519
  };
1520
1520
  }), Mi = c("$ZodCatch", (e4, t2) => {
1521
- j.init(e4, t2), w(e4._zod, "optin", () => t2.innerType._zod.optin), w(e4._zod, "optout", () => t2.innerType._zod.optout), w(e4._zod, "values", () => t2.innerType._zod.values), e4._zod.parse = (e5, n2) => {
1521
+ j.init(e4, t2), T(e4._zod, "optin", () => t2.innerType._zod.optin), T(e4._zod, "optout", () => t2.innerType._zod.optout), T(e4._zod, "values", () => t2.innerType._zod.values), e4._zod.parse = (e5, n2) => {
1522
1522
  if (n2.direction === "backward") return t2.innerType._zod.run(e5, n2);
1523
1523
  let r2 = t2.innerType._zod.run(e5, n2);
1524
1524
  return r2 instanceof Promise ? r2.then((r3) => (e5.value = r3.value, r3.issues.length && (e5.value = t2.catchValue({ ...e5, error: { issues: r3.issues.map((e6) => Ie(e6, n2, p())) }, input: e5.value }), e5.issues = []), e5)) : (e5.value = r2.value, r2.issues.length && (e5.value = t2.catchValue({ ...e5, error: { issues: r2.issues.map((e6) => Ie(e6, n2, p())) }, input: e5.value }), e5.issues = []), e5);
@@ -1526,7 +1526,7 @@ var ji = c("$ZodSuccess", (e4, t2) => {
1526
1526
  }), Ni = c("$ZodNaN", (e4, t2) => {
1527
1527
  j.init(e4, t2), e4._zod.parse = (t3, n2) => ((typeof t3.value != "number" || !Number.isNaN(t3.value)) && t3.issues.push({ input: t3.value, inst: e4, expected: "nan", code: "invalid_type" }), t3);
1528
1528
  }), Pi = c("$ZodPipe", (e4, t2) => {
1529
- j.init(e4, t2), w(e4._zod, "values", () => t2.in._zod.values), w(e4._zod, "optin", () => t2.in._zod.optin), w(e4._zod, "optout", () => t2.out._zod.optout), w(e4._zod, "propValues", () => t2.in._zod.propValues), e4._zod.parse = (e5, n2) => {
1529
+ j.init(e4, t2), T(e4._zod, "values", () => t2.in._zod.values), T(e4._zod, "optin", () => t2.in._zod.optin), T(e4._zod, "optout", () => t2.out._zod.optout), T(e4._zod, "propValues", () => t2.in._zod.propValues), e4._zod.parse = (e5, n2) => {
1530
1530
  if (n2.direction === "backward") {
1531
1531
  let r3 = t2.out._zod.run(e5, n2);
1532
1532
  return r3 instanceof Promise ? r3.then((e6) => Fi(e6, t2.in, n2)) : Fi(r3, t2.in, n2);
@@ -1539,7 +1539,7 @@ function Fi(e4, t2, n2) {
1539
1539
  return e4.issues.length ? (e4.aborted = true, e4) : t2._zod.run({ value: e4.value, issues: e4.issues }, n2);
1540
1540
  }
1541
1541
  var Ii = c("$ZodCodec", (e4, t2) => {
1542
- j.init(e4, t2), w(e4._zod, "values", () => t2.in._zod.values), w(e4._zod, "optin", () => t2.in._zod.optin), w(e4._zod, "optout", () => t2.out._zod.optout), w(e4._zod, "propValues", () => t2.in._zod.propValues), e4._zod.parse = (e5, n2) => {
1542
+ j.init(e4, t2), T(e4._zod, "values", () => t2.in._zod.values), T(e4._zod, "optin", () => t2.in._zod.optin), T(e4._zod, "optout", () => t2.out._zod.optout), T(e4._zod, "propValues", () => t2.in._zod.propValues), e4._zod.parse = (e5, n2) => {
1543
1543
  if ((n2.direction || "forward") === "forward") {
1544
1544
  let r2 = t2.in._zod.run(e5, n2);
1545
1545
  return r2 instanceof Promise ? r2.then((e6) => Li(e6, t2, n2)) : Li(r2, t2, n2);
@@ -1563,10 +1563,10 @@ function Ri(e4, t2, n2, r2) {
1563
1563
  return e4.issues.length ? (e4.aborted = true, e4) : n2._zod.run({ value: t2, issues: e4.issues }, r2);
1564
1564
  }
1565
1565
  var zi = c("$ZodReadonly", (e4, t2) => {
1566
- j.init(e4, t2), w(e4._zod, "propValues", () => t2.innerType._zod.propValues), w(e4._zod, "values", () => t2.innerType._zod.values), w(e4._zod, "optin", () => {
1566
+ j.init(e4, t2), T(e4._zod, "propValues", () => t2.innerType._zod.propValues), T(e4._zod, "values", () => t2.innerType._zod.values), T(e4._zod, "optin", () => {
1567
1567
  var e5;
1568
1568
  return (e5 = t2.innerType) == null || (e5 = e5._zod) == null ? void 0 : e5.optin;
1569
- }), w(e4._zod, "optout", () => {
1569
+ }), T(e4._zod, "optout", () => {
1570
1570
  var e5;
1571
1571
  return (e5 = t2.innerType) == null || (e5 = e5._zod) == null ? void 0 : e5.optout;
1572
1572
  }), e4._zod.parse = (e5, n2) => {
@@ -1618,16 +1618,16 @@ var Vi = c("$ZodTemplateLiteral", (e4, t2) => {
1618
1618
  }, e4)), Ui = c("$ZodPromise", (e4, t2) => {
1619
1619
  j.init(e4, t2), e4._zod.parse = (e5, n2) => Promise.resolve(e5.value).then((e6) => t2.innerType._zod.run({ value: e6, issues: [] }, n2));
1620
1620
  }), Wi = c("$ZodLazy", (e4, t2) => {
1621
- j.init(e4, t2), w(e4._zod, "innerType", () => t2.getter()), w(e4._zod, "pattern", () => {
1621
+ j.init(e4, t2), T(e4._zod, "innerType", () => t2.getter()), T(e4._zod, "pattern", () => {
1622
1622
  var t3;
1623
1623
  return (t3 = e4._zod.innerType) == null || (t3 = t3._zod) == null ? void 0 : t3.pattern;
1624
- }), w(e4._zod, "propValues", () => {
1624
+ }), T(e4._zod, "propValues", () => {
1625
1625
  var t3;
1626
1626
  return (t3 = e4._zod.innerType) == null || (t3 = t3._zod) == null ? void 0 : t3.propValues;
1627
- }), w(e4._zod, "optin", () => {
1627
+ }), T(e4._zod, "optin", () => {
1628
1628
  var t3, n2;
1629
1629
  return (t3 = (n2 = e4._zod.innerType) == null || (n2 = n2._zod) == null ? void 0 : n2.optin) == null ? void 0 : t3;
1630
- }), w(e4._zod, "optout", () => {
1630
+ }), T(e4._zod, "optout", () => {
1631
1631
  var t3, n2;
1632
1632
  return (t3 = (n2 = e4._zod.innerType) == null || (n2 = n2._zod) == null ? void 0 : n2.optout) == null ? void 0 : t3;
1633
1633
  }), e4._zod.parse = (t3, n2) => e4._zod.innerType._zod.run(t3, n2);
@@ -2449,22 +2449,22 @@ var wa = () => {
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 te2, ne2;
2452
+ var w2, te2;
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((te2 = e5 == null ? void 0 : e5.unit) == null ? "" : te2, " \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8") : "\u05D9\u05D5\u05EA\u05E8 \u05DE-".concat(t3.minimum, " ").concat((ne2 = e5 == null ? void 0 : e5.unit) == null ? "" : ne2)).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((w2 = e5 == null ? void 0 : e5.unit) == null ? "" : w2, " \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8") : "\u05D9\u05D5\u05EA\u05E8 \u05DE-".concat(t3.minimum, " ").concat((te2 = e5 == null ? void 0 : e5.unit) == null ? "" : te2)).trim();
2455
2455
  }
2456
2456
  let r3 = t3.inclusive ? ">=" : ">", s3 = a2((y2 = t3.origin) == null ? "value" : y2);
2457
2457
  return e5 != null && e5.unit ? "".concat(e5.shortLabel, " \u05DE\u05D3\u05D9: ").concat(n4, " ").concat(s3, " ").concat(r3).concat(t3.minimum.toString(), " ").concat(e5.unit) : "".concat((x2 = e5 == null ? void 0 : e5.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 re2, w2;
2460
+ var ne2, T2;
2461
2461
  let e5 = t3;
2462
2462
  if (e5.format === "starts_with") return '\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 "'.concat(e5.prefix, '"');
2463
2463
  if (e5.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(e5.suffix, '"');
2464
2464
  if (e5.format === "includes") return '\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC "'.concat(e5.includes, '"');
2465
2465
  if (e5.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(e5.pattern);
2466
2466
  let n4 = s2[e5.format];
2467
- return "".concat((re2 = n4 == null ? void 0 : n4.label) == null ? e5.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");
2467
+ return "".concat((ne2 = n4 == null ? void 0 : n4.label) == null ? e5.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");
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 T2;
2479
- return "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1".concat(i2((T2 = t3.origin) == null ? "array" : T2));
2478
+ var re2;
2479
+ return "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1".concat(i2((re2 = t3.origin) == null ? "array" : re2));
2480
2480
  default:
2481
2481
  return "\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF";
2482
2482
  }
@@ -5228,7 +5228,7 @@ function tf(e4) {
5228
5228
  return Cf(Object.keys(t2));
5229
5229
  }
5230
5230
  var nf = c("ZodObject", (e4, t2) => {
5231
- ni.init(e4, t2), P.init(e4, t2), e4._zod.processJSONSchema = (t3, n2, r2) => Nl(e4, t3, n2, r2), w(e4, "shape", () => t2.shape), e4.keyof = () => Cf(Object.keys(e4._zod.def.shape)), e4.catchall = (t3) => e4.clone({ ...e4._zod.def, catchall: t3 }), e4.passthrough = () => e4.clone({ ...e4._zod.def, catchall: z() }), e4.loose = () => e4.clone({ ...e4._zod.def, catchall: z() }), e4.strict = () => e4.clone({ ...e4._zod.def, catchall: Yd() }), e4.strip = () => e4.clone({ ...e4._zod.def, catchall: void 0 }), e4.extend = (t3) => Oe(e4, t3), e4.safeExtend = (t3) => ke(e4, t3), e4.merge = (t3) => Ae(e4, t3), e4.pick = (t3) => Ee(e4, t3), e4.omit = (t3) => De(e4, t3), e4.partial = (...t3) => je(Af, e4, t3[0]), e4.required = (...t3) => Me(Bf, e4, t3[0]);
5231
+ ni.init(e4, t2), P.init(e4, t2), e4._zod.processJSONSchema = (t3, n2, r2) => Nl(e4, t3, n2, r2), T(e4, "shape", () => t2.shape), e4.keyof = () => Cf(Object.keys(e4._zod.def.shape)), e4.catchall = (t3) => e4.clone({ ...e4._zod.def, catchall: t3 }), e4.passthrough = () => e4.clone({ ...e4._zod.def, catchall: z() }), e4.loose = () => e4.clone({ ...e4._zod.def, catchall: z() }), e4.strict = () => e4.clone({ ...e4._zod.def, catchall: Yd() }), e4.strip = () => e4.clone({ ...e4._zod.def, catchall: void 0 }), e4.extend = (t3) => Oe(e4, t3), e4.safeExtend = (t3) => ke(e4, t3), e4.merge = (t3) => Ae(e4, t3), e4.pick = (t3) => Ee(e4, t3), e4.omit = (t3) => De(e4, t3), e4.partial = (...t3) => je(Af, e4, t3[0]), e4.required = (...t3) => Me(Bf, e4, t3[0]);
5232
5232
  });
5233
5233
  function V(e4, t2) {
5234
5234
  return new nf({ type: "object", shape: e4 == null ? {} : e4, ...D(t2) });
@@ -6568,63 +6568,112 @@ function i_(e4, t2) {
6568
6568
  var n2, r2, i2, a2, o2, s2;
6569
6569
  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
6570
  c2 && (c2.hidden = false);
6571
- let f2 = (n2 = (r2 = e4.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 = false, v2 = 0, ee2 = 0, y2 = p2, b2 = m2, x2 = h2, S2 = g2, C2 = () => e4.setAttribute("viewBox", "".concat(y2, " ").concat(b2, " ").concat(x2, " ").concat(S2)), te2 = (e5, t3 = 250, n3 = 250) => {
6572
- let r3 = 1e3, i3 = Math.round(x2 * e5 * 10) / 10, a3 = Math.round(S2 * e5 * 10) / 10;
6573
- i3 < 100 && (i3 = 100, a3 = 100, e5 = i3 / x2), i3 > r3 && (i3 = r3, a3 = r3, e5 = i3 / x2), i3 !== x2 && (y2 = Math.round((t3 - (t3 - y2) * e5) * 10) / 10, b2 = Math.round((n3 - (n3 - b2) * e5) * 10) / 10, x2 = i3, S2 = a3, C2());
6571
+ let f2 = (n2 = (r2 = e4.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
+ e4.style.touchAction = "none";
6573
+ let S2 = () => e4.setAttribute("viewBox", "".concat(ee2, " ").concat(y2, " ").concat(b2, " ").concat(x2)), C2 = (e5, t3, n3) => {
6574
+ t3 === void 0 && (t3 = ee2 + b2 / 2), n3 === void 0 && (n3 = y2 + x2 / 2);
6575
+ let r3 = b2 * e5;
6576
+ r3 < _2 && (r3 = _2), r3 > v2 && (r3 = v2), r3 !== b2 && (e5 = r3 / b2, ee2 = t3 - (t3 - ee2) * e5, y2 = n3 - (n3 - y2) * e5, b2 = r3, x2 *= e5, S2());
6574
6577
  };
6575
- l2 == null || l2.addEventListener("click", () => te2(0.8)), u2 == null || u2.addEventListener("click", () => te2(1.25)), d2 == null || d2.addEventListener("click", () => {
6576
- y2 = p2, b2 = m2, x2 = h2, S2 = g2, C2();
6577
- }), e4.addEventListener("wheel", (t3) => {
6578
- t3.preventDefault();
6579
- let n3 = Math.exp((t3.deltaY < 0 ? -1 : 1) * 0.1), r3 = e4.getBoundingClientRect(), i3 = t3.clientX - r3.left, a3 = t3.clientY - r3.top;
6580
- te2(n3, y2 + i3 / r3.width * x2, b2 + a3 / r3.height * S2);
6581
- }, { passive: false }), e4.addEventListener("pointerdown", (t3) => {
6582
- let n3 = t3.target;
6583
- n3.closest && (n3.closest('[class*="-hit"]') || n3.closest('[class*="-activation"]') || n3.closest(".variable-arrow") || n3.closest("button")) || (_2 = true, v2 = t3.clientX, ee2 = t3.clientY, e4.setPointerCapture(t3.pointerId), e4.style.cursor = "grabbing");
6584
- }), e4.addEventListener("pointermove", (t3) => {
6585
- if (!_2) return;
6586
- let n3 = t3.clientX - v2, r3 = t3.clientY - ee2;
6587
- v2 = t3.clientX, ee2 = t3.clientY;
6588
- let i3 = e4.getBoundingClientRect(), a3 = n3 / i3.width * x2, o3 = r3 / i3.height * S2;
6589
- y2 -= a3, b2 -= o3, C2();
6590
- }), e4.addEventListener("pointerup", (t3) => {
6591
- _2 && (_2 = false, e4.releasePointerCapture(t3.pointerId), e4.style.cursor = "default");
6578
+ l2 == null || l2.addEventListener("click", () => C2(0.8)), u2 == null || u2.addEventListener("click", () => C2(1.25)), d2 == null || d2.addEventListener("click", () => {
6579
+ ee2 = p2, y2 = m2, b2 = h2, x2 = g2, S2();
6592
6580
  });
6581
+ let w2 = (t3, n3) => {
6582
+ let r3 = e4.getBoundingClientRect();
6583
+ return { x: ee2 + (t3 - r3.left) / r3.width * b2, y: y2 + (n3 - r3.top) / r3.height * x2 };
6584
+ };
6585
+ e4.addEventListener("wheel", (e5) => {
6586
+ e5.preventDefault();
6587
+ let t3 = Math.exp((e5.deltaY < 0 ? -1 : 1) * 0.1), n3 = w2(e5.clientX, e5.clientY);
6588
+ C2(t3, n3.x, n3.y);
6589
+ }, { passive: false });
6590
+ let te2 = /* @__PURE__ */ new Map(), ne2 = null, T2 = () => {
6591
+ let [e5, t3] = [...te2.values()];
6592
+ return { dist: Math.hypot(e5.x - t3.x, e5.y - t3.y), midX: (e5.x + t3.x) / 2, midY: (e5.y + t3.y) / 2 };
6593
+ }, re2 = (t3, n3) => {
6594
+ let r3 = e4.getBoundingClientRect();
6595
+ ee2 -= t3 / r3.width * b2, y2 -= n3 / r3.height * x2, S2();
6596
+ };
6597
+ e4.addEventListener("pointerdown", (t3) => {
6598
+ 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 || (e4.setPointerCapture(t3.pointerId), e4.style.cursor = "grabbing"), te2.size === 2 && (ne2 = T2());
6600
+ }), e4.addEventListener("pointermove", (e5) => {
6601
+ let t3 = te2.get(e5.pointerId);
6602
+ if (t3) if (te2.set(e5.pointerId, { x: e5.clientX, y: e5.clientY, interactive: t3.interactive }), te2.size >= 2 && ne2) {
6603
+ let e6 = T2();
6604
+ if (ne2.dist > 0 && e6.dist > 0) {
6605
+ let t4 = w2(e6.midX, e6.midY);
6606
+ C2(ne2.dist / e6.dist, t4.x, t4.y);
6607
+ }
6608
+ re2(e6.midX - ne2.midX, e6.midY - ne2.midY), ne2 = e6;
6609
+ } else te2.size === 1 && !t3.interactive && re2(e5.clientX - t3.x, e5.clientY - t3.y);
6610
+ });
6611
+ let E2 = (t3) => {
6612
+ te2.delete(t3.pointerId) && (e4.hasPointerCapture(t3.pointerId) && e4.releasePointerCapture(t3.pointerId), ne2 = te2.size >= 2 ? T2() : null, te2.size === 0 && (e4.style.cursor = "default"));
6613
+ };
6614
+ e4.addEventListener("pointerup", E2), e4.addEventListener("pointercancel", E2);
6615
+ }
6616
+ var a_ = { fire: "#f55f7c", earth: "#24e6a8", air: "#ffc94d", water: "#49b6ea", fireTint: "rgba(245,95,124,0.20)", earthTint: "rgba(36,230,168,0.20)", airTint: "rgba(255,201,77,0.20)", waterTint: "rgba(73,182,234,0.20)", points: "#118ab2", others: "#ffa500", house: "#7a8695", transit: "#c19bf2", ink: "#f7f3f0" }, o_ = { fire: "#e23a63", earth: "#079e78", air: "#c99418", water: "#0f7ea3", fireTint: "rgba(239,71,111,0.12)", earthTint: "rgba(6,214,160,0.13)", airTint: "rgba(255,209,102,0.20)", waterTint: "rgba(17,138,178,0.12)", points: "#118ab2", others: "#ffa500", house: "#6f8496", transit: "#7b3fb5", ink: "#0b1220" };
6617
+ function s_(e4) {
6618
+ return e4 ? a_ : o_;
6619
+ }
6620
+ function c_(e4, t2) {
6621
+ let n2 = s_(t2);
6622
+ return [n2.fire, n2.earth, n2.air, n2.water][(e4 % 12 + 12) % 12 % 4];
6593
6623
  }
6594
- function a_(e4, t2) {
6624
+ function l_(e4, t2) {
6625
+ let n2 = s_(t2);
6626
+ return [n2.fireTint, n2.earthTint, n2.airTint, n2.waterTint][(e4 % 12 + 12) % 12 % 4];
6627
+ }
6628
+ function u_() {
6629
+ let e4 = window.matchMedia("(prefers-color-scheme: dark)").matches;
6630
+ if (!e4) try {
6631
+ let t2 = getComputedStyle(document.body).backgroundColor;
6632
+ if (t2.startsWith("oklch") || t2.startsWith("oklab")) {
6633
+ let n2 = parseFloat(t2.slice(t2.indexOf("(") + 1));
6634
+ Number.isNaN(n2) || (e4 = (n2 > 1 ? n2 / 100 : n2) < 0.45);
6635
+ } else {
6636
+ let n2 = t2.match(/\d+(?:\.\d+)?/g);
6637
+ n2 && n2.length >= 3 && (e4 = (0.299 * n2[0] + 0.587 * n2[1] + 0.114 * n2[2]) / 255 < 0.35);
6638
+ }
6639
+ } catch (e5) {
6640
+ }
6641
+ return e4;
6642
+ }
6643
+ function d_(e4, t2) {
6595
6644
  if (e4.length <= 1) {
6596
6645
  let t3 = /* @__PURE__ */ new Map();
6597
6646
  for (let n3 of e4) t3.set(n3.name, n3.longitude);
6598
6647
  return t3;
6599
6648
  }
6600
6649
  let n2 = [...e4].sort((e5, t3) => e5.longitude - t3.longitude), r2 = [], i2 = [];
6601
- for (let e5 of n2) r2.push(e5.longitude), i2.push(o_(e5.longitude, i2, t2));
6602
- c_(i2, r2, t2);
6650
+ for (let e5 of n2) r2.push(e5.longitude), i2.push(f_(e5.longitude, i2, t2));
6651
+ m_(i2, r2, t2);
6603
6652
  let a2 = /* @__PURE__ */ new Map();
6604
- for (let e5 = 0; e5 < n2.length; e5++) a2.set(n2[e5].name, u_(i2[e5]));
6653
+ for (let e5 = 0; e5 < n2.length; e5++) a2.set(n2[e5].name, g_(i2[e5]));
6605
6654
  return a2;
6606
6655
  }
6607
- function o_(e4, t2, n2) {
6656
+ function f_(e4, t2, n2) {
6608
6657
  if (t2.length === 0) return e4;
6609
6658
  let r2 = Math.max(0.55, n2 / 4), i2 = Math.max(8, Math.min(40, n2 * 5)), a2 = Math.floor(i2 / r2);
6610
- if (s_(e4, t2, n2)) return e4;
6659
+ if (p_(e4, t2, n2)) return e4;
6611
6660
  for (let i3 = 1; i3 <= a2; i3++) {
6612
6661
  let a3 = i3 * r2;
6613
- if (s_(e4 + a3, t2, n2)) return e4 + a3;
6614
- if (s_(e4 - a3, t2, n2)) return e4 - a3;
6662
+ if (p_(e4 + a3, t2, n2)) return e4 + a3;
6663
+ if (p_(e4 - a3, t2, n2)) return e4 - a3;
6615
6664
  }
6616
6665
  return e4;
6617
6666
  }
6618
- function s_(e4, t2, n2) {
6619
- for (let r2 of t2) if (l_(e4, r2) < n2) return false;
6667
+ function p_(e4, t2, n2) {
6668
+ for (let r2 of t2) if (h_(e4, r2) < n2) return false;
6620
6669
  return true;
6621
6670
  }
6622
- function c_(e4, t2, n2) {
6671
+ function m_(e4, t2, n2) {
6623
6672
  let r2 = e4.length;
6624
6673
  if (!(r2 <= 1)) for (let t3 = 0; t3 < 80; t3++) {
6625
6674
  let t4 = true;
6626
6675
  for (let i2 = 0; i2 < r2; i2++) for (let a2 = i2 + 1; a2 < r2; a2++) {
6627
- let r3 = n2 - l_(e4[i2], e4[a2]);
6676
+ let r3 = n2 - h_(e4[i2], e4[a2]);
6628
6677
  if (r3 > 0.01) {
6629
6678
  t4 = false;
6630
6679
  let n3 = r3 * 0.65 / 2, o2 = e4[a2] - e4[i2];
@@ -6636,89 +6685,89 @@ function c_(e4, t2, n2) {
6636
6685
  if (t4) break;
6637
6686
  }
6638
6687
  }
6639
- function l_(e4, t2) {
6688
+ function h_(e4, t2) {
6640
6689
  let n2 = ((t2 - e4) % 360 + 540) % 360 - 180;
6641
6690
  return Math.abs(n2);
6642
6691
  }
6643
- function u_(e4) {
6692
+ function g_(e4) {
6644
6693
  return (e4 % 360 + 360) % 360;
6645
6694
  }
6646
- var d_ = 250, f_ = 250, p_ = 240, m_ = 204, h_ = 190, g_ = 159, __ = 140, v_ = 134, y_ = 15, b_ = 20;
6695
+ var __ = 250, v_ = 250, y_ = 240, b_ = 204, x_ = 190, S_ = 159, C_ = 140, w_ = 134, T_ = 15, E_ = 20;
6647
6696
  function Y(e4, t2, n2) {
6648
6697
  let r2 = -(e4 - n2 + 180) * Math.PI / 180;
6649
- return { x: d_ + t2 * Math.cos(r2), y: f_ + t2 * Math.sin(r2) };
6698
+ return { x: __ + t2 * Math.cos(r2), y: v_ + t2 * Math.sin(r2) };
6650
6699
  }
6651
6700
  function X(e4) {
6652
6701
  return document.createElementNS("http://www.w3.org/2000/svg", e4);
6653
6702
  }
6654
- var x_ = { sun: "\u2609", moon: "\u263D", mercury: "\u263F", venus: "\u2640", mars: "\u2642", jupiter: "\u2643", saturn: "\u2644", uranus: "\u2645", neptune: "\u2646", pluto: "\u2647", "north node": "\u260A", "south node": "\u260B", chiron: "\u26B7", "true node": "\u260A", mean_lilith: "\u26B8", lilith: "\u26B8", true_lilith: "\u26B8", ceres: "\u26B3", juno: "\u26B5", vesta: "\u26B6", pallas: "\u26B4", pholus: "\u2BDB", vertex: "Vx", part_of_fortune: "\u2295", "part of fortune": "\u2295", eris: "\u2BF0", sedna: "\u2BF2" }, S_ = ["\u2648", "\u2649", "\u264A", "\u264B", "\u264C", "\u264D", "\u264E", "\u264F", "\u2650", "\u2651", "\u2652", "\u2653"], C_ = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"], w_ = { conjunction: "\u260C", opposition: "\u260D", trine: "\u25B3", square: "\u25A1", sextile: "\u26B9", quincunx: "\u26BB", semisquare: "\u2220" };
6655
- function T_(e4) {
6703
+ var D_ = { 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" }, O_ = ["\u2648", "\u2649", "\u264A", "\u264B", "\u264C", "\u264D", "\u264E", "\u264F", "\u2650", "\u2651", "\u2652", "\u2653"].map((e4) => e4 + "\uFE0E"), k_ = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"], A_ = { conjunction: "\u260C", opposition: "\u260D", trine: "\u25B3", square: "\u25A1", sextile: "\u26B9", quincunx: "\u26BB", semisquare: "\u2220" };
6704
+ function j_(e4) {
6656
6705
  var t2;
6657
6706
  let n2 = e4.toLowerCase(), r2 = "--aspect-".concat(n2);
6658
6707
  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);
6659
6708
  }
6660
- var E_ = ["#e85c1a", "#3da84a", "#2196d4", "#6b4cc8", "#e85c1a", "#3da84a", "#2196d4", "#6b4cc8", "#e85c1a", "#3da84a", "#2196d4", "#6b4cc8"];
6661
- function D_(e4) {
6709
+ var M_ = u_, N_ = (e4) => c_(e4, M_());
6710
+ function P_(e4) {
6662
6711
  let t2 = "--planet-".concat(e4.toLowerCase().replace(/\s+/g, "-"));
6663
6712
  return getComputedStyle(document.documentElement).getPropertyValue(t2).trim() || "var(--text)";
6664
6713
  }
6665
- var O_ = /* @__PURE__ */ new Set(["sun", "moon", "mercury", "venus", "mars", "jupiter", "saturn", "uranus", "neptune", "pluto", "chiron", "north node", "south node", "true node"]), k_ = /* @__PURE__ */ new Set(["mean_lilith", "lilith", "true_lilith", "ceres", "juno", "vesta", "pallas", "pholus", "vertex", "part_of_fortune", "part of fortune", "eris", "sedna"]), A_ = /* @__PURE__ */ new Set([...O_, ...k_]);
6666
- function j_(e4) {
6714
+ var F_ = /* @__PURE__ */ new Set(["sun", "moon", "mercury", "venus", "mars", "jupiter", "saturn", "uranus", "neptune", "pluto", "chiron", "north node", "south node", "true node"]), I_ = /* @__PURE__ */ new Set(["mean_lilith", "lilith", "true_lilith", "ceres", "juno", "vesta", "pallas", "pholus", "vertex", "part_of_fortune", "part of fortune", "eris", "sedna"]), L_ = /* @__PURE__ */ new Set([...F_, ...I_]);
6715
+ function R_(e4) {
6667
6716
  let t2 = (e4 % 360 + 360) % 360, n2 = Math.floor(t2 / 30), r2 = Math.floor(t2 % 30);
6668
- return "".concat(r2, "\xB0").concat(Math.floor((t2 % 30 - r2) * 60).toString().padStart(2, "0"), "\u2032 ").concat(C_[n2]);
6717
+ return "".concat(r2, "\xB0").concat(Math.floor((t2 % 30 - r2) * 60).toString().padStart(2, "0"), "\u2032 ").concat(k_[n2]);
6669
6718
  }
6670
6719
  function Z(e4) {
6671
6720
  return e4.replace(/\b\w/g, (e5) => e5.toUpperCase());
6672
6721
  }
6673
- var M_ = "true";
6674
- function N_(e4) {
6675
- M_ = e4;
6722
+ var z_ = "true";
6723
+ function B_(e4) {
6724
+ z_ = e4;
6676
6725
  }
6677
- function P_(e4) {
6726
+ function V_(e4) {
6678
6727
  let t2 = e4.some((e5) => e5.name.toLowerCase() === "true node"), n2 = e4.some((e5) => e5.name.toLowerCase() === "north node");
6679
6728
  if (!t2 || !n2) return e4;
6680
- let r2 = M_ === "true" ? "north node" : "true node";
6729
+ let r2 = z_ === "true" ? "north node" : "true node";
6681
6730
  return e4.filter((e5) => e5.name.toLowerCase() !== r2);
6682
6731
  }
6683
- function F_(e4) {
6684
- return Array.isArray(e4) ? P_(e4) : e4 && typeof e4 == "object" ? P_(Object.entries(e4).filter(([e5]) => A_.has(e5.toLowerCase())).map(([e5, t2]) => {
6732
+ function H_(e4) {
6733
+ return Array.isArray(e4) ? V_(e4) : e4 && typeof e4 == "object" ? V_(Object.entries(e4).filter(([e5]) => L_.has(e5.toLowerCase())).map(([e5, t2]) => {
6685
6734
  var n2, r2, i2, a2, o2, s2;
6686
6735
  return { name: e5.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 };
6687
6736
  })) : [];
6688
6737
  }
6689
- var I_ = document.getElementById("tooltip");
6690
- function L_(e4, t2, n2, r2, i2) {
6691
- I_.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 ");
6692
- let a2 = I_.getBoundingClientRect(), o2 = a2.width || 220, s2 = a2.height || 80, c2 = e4 + 14, l2 = t2 + 14;
6693
- c2 + o2 > window.innerWidth - 14 && (c2 = e4 - o2 - 14), l2 + s2 > window.innerHeight - 14 && (l2 = t2 - s2 - 14), I_.style.left = "".concat(Math.max(14, c2), "px"), I_.style.top = "".concat(Math.max(14, l2), "px"), I_.classList.add("visible");
6738
+ var U_ = document.getElementById("tooltip");
6739
+ function W_(e4, t2, n2, r2, i2) {
6740
+ U_.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 ");
6741
+ let a2 = U_.getBoundingClientRect(), o2 = a2.width || 220, s2 = a2.height || 80, c2 = e4 + 14, l2 = t2 + 14;
6742
+ c2 + o2 > window.innerWidth - 14 && (c2 = e4 - o2 - 14), l2 + s2 > window.innerHeight - 14 && (l2 = t2 - s2 - 14), U_.style.left = "".concat(Math.max(14, c2), "px"), U_.style.top = "".concat(Math.max(14, l2), "px"), U_.classList.add("visible");
6694
6743
  }
6695
- function R_() {
6696
- I_.classList.remove("visible");
6744
+ function G_() {
6745
+ U_.classList.remove("visible");
6697
6746
  }
6698
- var z_ = { 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" }, B_ = { 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" }, V_ = { 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" }, H_ = { conjunction: "fusion & amplification", opposition: "polarity & integration", trine: "ease & natural flow", square: "tension & growth", sextile: "opportunity & cooperation", quincunx: "adjustment & recalibration", semisquare: "friction & minor tension" };
6699
- function U_(e4) {
6747
+ var K_ = { 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" }, q_ = { 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" }, J_ = { 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" }, Y_ = { conjunction: "fusion & amplification", opposition: "polarity & integration", trine: "ease & natural flow", square: "tension & growth", sextile: "opportunity & cooperation", quincunx: "adjustment & recalibration", semisquare: "friction & minor tension" };
6748
+ function X_(e4) {
6700
6749
  return Math.floor((e4 % 360 + 360) % 360 / 30);
6701
6750
  }
6702
- var W_ = { sun: [4], moon: [3], mercury: [2, 5], venus: [1, 6], mars: [0, 7], jupiter: [8, 11], saturn: [9, 10] }, G_ = { sun: 0, moon: 1, mercury: 5, venus: 11, mars: 9, jupiter: 3, saturn: 6 };
6703
- function K_(e4, t2) {
6704
- let n2 = e4.toLowerCase(), r2 = U_(t2), i2 = W_[n2];
6751
+ var Z_ = { sun: [4], moon: [3], mercury: [2, 5], venus: [1, 6], mars: [0, 7], jupiter: [8, 11], saturn: [9, 10] }, Q_ = { sun: 0, moon: 1, mercury: 5, venus: 11, mars: 9, jupiter: 3, saturn: 6 };
6752
+ function $_(e4, t2) {
6753
+ let n2 = e4.toLowerCase(), r2 = X_(t2), i2 = Z_[n2];
6705
6754
  if (i2 != null && i2.includes(r2)) return { type: "domicile", label: "Domicile", emoji: "\u2302", cssClass: "dignity-domicile" };
6706
6755
  if (i2 && i2.map((e5) => (e5 + 6) % 12).includes(r2)) return { type: "detriment", label: "Detriment", emoji: "\u2B07", cssClass: "dignity-detriment" };
6707
- let a2 = G_[n2];
6756
+ let a2 = Q_[n2];
6708
6757
  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;
6709
6758
  }
6710
- var q_ = ["fire", "earth", "air", "water", "fire", "earth", "air", "water", "fire", "earth", "air", "water"], J_ = ["cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable"];
6711
- function Y_(e4, t2) {
6759
+ var ev = ["fire", "earth", "air", "water", "fire", "earth", "air", "water", "fire", "earth", "air", "water"], tv = ["cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable"];
6760
+ function nv(e4, t2) {
6712
6761
  return [e4.toLowerCase(), t2.toLowerCase()].sort().join("|");
6713
6762
  }
6714
- function X_(e4, t2) {
6763
+ function rv(e4, t2) {
6715
6764
  return e4.filter((e5) => {
6716
6765
  var n2;
6717
6766
  return ((n2 = e5.type) == null ? "" : n2).toLowerCase() === t2;
6718
6767
  });
6719
6768
  }
6720
- function Z_(e4, t2) {
6721
- let n2 = [], r2 = X_(e4, "square"), i2 = X_(e4, "opposition"), a2 = X_(e4, "trine"), o2 = X_(e4, "sextile"), s2 = X_(e4, "quincunx"), c2 = /* @__PURE__ */ new Set();
6769
+ function iv(e4, t2) {
6770
+ let n2 = [], r2 = rv(e4, "square"), i2 = rv(e4, "opposition"), a2 = rv(e4, "trine"), o2 = rv(e4, "sextile"), s2 = rv(e4, "quincunx"), c2 = /* @__PURE__ */ new Set();
6722
6771
  for (let e5 of i2) {
6723
6772
  let i3 = e5.planet1.toLowerCase(), a3 = e5.planet2.toLowerCase(), o3 = r2.filter((e6) => e6.planet1.toLowerCase() === i3 || e6.planet2.toLowerCase() === i3);
6724
6773
  for (let e6 of o3) {
@@ -6727,8 +6776,8 @@ function Z_(e4, t2) {
6727
6776
  let s3 = [i3, a3, o4].sort().join("|");
6728
6777
  if (!c2.has(s3) && r2.find((e7) => e7.planet1.toLowerCase() === o4 && e7.planet2.toLowerCase() === a3 || e7.planet2.toLowerCase() === o4 && e7.planet1.toLowerCase() === a3)) {
6729
6778
  c2.add(s3);
6730
- let e7 = t2.find((e8) => e8.name.toLowerCase() === o4), r3 = e7 ? Z(J_[U_(e7.longitude)]) : "";
6731
- n2.push({ name: "T-Square", description: "".concat(r3 ? r3 + " \xB7 " : "", "Apex: ").concat(Z(o4)), planets: [.../* @__PURE__ */ new Set([i3, a3, o4])], aspectKeys: [Y_(i3, a3), Y_(i3, o4), Y_(a3, o4)] });
6779
+ let e7 = t2.find((e8) => e8.name.toLowerCase() === o4), r3 = e7 ? Z(tv[X_(e7.longitude)]) : "";
6780
+ n2.push({ name: "T-Square", description: "".concat(r3 ? r3 + " \xB7 " : "", "Apex: ").concat(Z(o4)), planets: [.../* @__PURE__ */ new Set([i3, a3, o4])], aspectKeys: [nv(i3, a3), nv(i3, o4), nv(a3, o4)] });
6732
6781
  break;
6733
6782
  }
6734
6783
  }
@@ -6738,7 +6787,7 @@ function Z_(e4, t2) {
6738
6787
  let r3 = a2[e5], i3 = a2[t3], o3 = [r3.planet1.toLowerCase(), r3.planet2.toLowerCase()], s3 = [i3.planet1.toLowerCase(), i3.planet2.toLowerCase()], c3 = o3.find((e6) => s3.includes(e6));
6739
6788
  if (!c3) continue;
6740
6789
  let u3 = o3.find((e6) => e6 !== c3), d3 = s3.find((e6) => e6 !== c3), f3 = [u3, c3, d3].sort().join("|");
6741
- l2.has(f3) || a2.find((e6) => e6.planet1.toLowerCase() === u3 && e6.planet2.toLowerCase() === d3 || e6.planet2.toLowerCase() === u3 && e6.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: [Y_(u3, c3), Y_(c3, d3), Y_(u3, d3)] }));
6790
+ l2.has(f3) || a2.find((e6) => e6.planet1.toLowerCase() === u3 && e6.planet2.toLowerCase() === d3 || e6.planet2.toLowerCase() === u3 && e6.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: [nv(u3, c3), nv(c3, d3), nv(u3, d3)] }));
6742
6791
  }
6743
6792
  if (i2.length >= 2 && r2.length >= 4) for (let e5 = 0; e5 < i2.length; e5++) for (let a3 = e5 + 1; a3 < i2.length; a3++) {
6744
6793
  let o3 = i2[e5], s3 = i2[a3], [c3, l3] = [o3.planet1.toLowerCase(), o3.planet2.toLowerCase()], [u3, d3] = [s3.planet1.toLowerCase(), s3.planet2.toLowerCase()];
@@ -6749,19 +6798,19 @@ function Z_(e4, t2) {
6749
6798
  var n3, r3;
6750
6799
  return { name: e7, lon: (n3 = (r3 = t2.find((t3) => t3.name.toLowerCase() === e7)) == null ? void 0 : r3.longitude) == null ? 0 : n3 };
6751
6800
  }).sort((e7, t3) => e7.lon - t3.lon).map((e7) => e7.name);
6752
- n2.push({ name: "Grand Cross", description: e6.map(Z).join(" \xB7 "), planets: [c3, l3, u3, d3], aspectKeys: [Y_(c3, l3), Y_(u3, d3), ...f3.map(([e7, t3]) => Y_(e7, t3))] });
6801
+ n2.push({ name: "Grand Cross", description: e6.map(Z).join(" \xB7 "), planets: [c3, l3, u3, d3], aspectKeys: [nv(c3, l3), nv(u3, d3), ...f3.map(([e7, t3]) => nv(e7, t3))] });
6753
6802
  }
6754
6803
  }
6755
6804
  let u2 = /* @__PURE__ */ new Set(["north node", "south node", "true node", "chiron"]), d2 = t2.filter((e5) => !u2.has(e5.name.toLowerCase())).map((e5) => ({ name: e5.name.toLowerCase(), lon: e5.longitude })), f2 = /* @__PURE__ */ new Map();
6756
6805
  for (let { name: e5, lon: t3 } of d2) {
6757
6806
  var p2;
6758
- let n3 = U_(t3), r3 = (p2 = f2.get(n3)) == null ? [] : p2;
6807
+ let n3 = X_(t3), r3 = (p2 = f2.get(n3)) == null ? [] : p2;
6759
6808
  r3.push(e5), f2.set(n3, r3);
6760
6809
  }
6761
6810
  for (let [e5, t3] of f2) if (t3.length >= 3) {
6762
6811
  let r3 = [...t3].sort().join("|"), i3 = [];
6763
- for (let e6 = 0; e6 < t3.length; e6++) for (let n3 = e6 + 1; n3 < t3.length; n3++) i3.push(Y_(t3[e6], t3[n3]));
6764
- n2.push({ name: "Stellium", description: "".concat(C_[e5], ": ").concat(t3.map(Z).join(", ")), planets: t3, aspectKeys: i3, _dedupeKey: r3 });
6812
+ for (let e6 = 0; e6 < t3.length; e6++) for (let n3 = e6 + 1; n3 < t3.length; n3++) i3.push(nv(t3[e6], t3[n3]));
6813
+ n2.push({ name: "Stellium", description: "".concat(k_[e5], ": ").concat(t3.map(Z).join(", ")), planets: t3, aspectKeys: i3, _dedupeKey: r3 });
6765
6814
  }
6766
6815
  let m2 = [...d2].sort((e5, t3) => e5.lon - t3.lon), h2 = [...m2, ...m2.map((e5) => ({ ...e5, lon: e5.lon + 360 }))], g2 = /* @__PURE__ */ new Set();
6767
6816
  for (let e5 = 0; e5 < h2.length - 2; e5++) {
@@ -6774,7 +6823,7 @@ function Z_(e4, t2) {
6774
6823
  if (g2.has(t4)) continue;
6775
6824
  if (g2.add(t4), !n2.some((e7) => e7._dedupeKey === t4)) {
6776
6825
  let t5 = [];
6777
- for (let n3 = 0; n3 < e6.length; n3++) for (let r4 = n3 + 1; r4 < e6.length; r4++) t5.push(Y_(e6[n3], e6[r4]));
6826
+ for (let n3 = 0; n3 < e6.length; n3++) for (let r4 = n3 + 1; r4 < e6.length; r4++) t5.push(nv(e6[n3], e6[r4]));
6778
6827
  n2.push({ name: "Stellium", description: "Tight cluster: ".concat(e6.map(Z).join(", ")), planets: e6, aspectKeys: t5 });
6779
6828
  }
6780
6829
  }
@@ -6784,7 +6833,7 @@ function Z_(e4, t2) {
6784
6833
  let r3 = s2[e5], i3 = s2[t3], a3 = [r3.planet1.toLowerCase(), r3.planet2.toLowerCase()], c3 = [i3.planet1.toLowerCase(), i3.planet2.toLowerCase()], l3 = a3.find((e6) => c3.includes(e6));
6785
6834
  if (!l3) continue;
6786
6835
  let u3 = a3.find((e6) => e6 !== l3), d3 = c3.find((e6) => e6 !== l3), f3 = [l3, u3, d3].sort().join("|");
6787
- _2.has(f3) || o2.find((e6) => e6.planet1.toLowerCase() === u3 && e6.planet2.toLowerCase() === d3 || e6.planet2.toLowerCase() === u3 && e6.planet1.toLowerCase() === d3) && (_2.add(f3), n2.push({ name: "Yod", description: "Apex: ".concat(Z(l3)), planets: [l3, u3, d3], aspectKeys: [Y_(l3, u3), Y_(l3, d3), Y_(u3, d3)] }));
6836
+ _2.has(f3) || o2.find((e6) => e6.planet1.toLowerCase() === u3 && e6.planet2.toLowerCase() === d3 || e6.planet2.toLowerCase() === u3 && e6.planet1.toLowerCase() === d3) && (_2.add(f3), n2.push({ name: "Yod", description: "Apex: ".concat(Z(l3)), planets: [l3, u3, d3], aspectKeys: [nv(l3, u3), nv(l3, d3), nv(u3, d3)] }));
6788
6837
  }
6789
6838
  let v2 = /* @__PURE__ */ new Set(), ee2 = n2.filter((e5) => e5.name === "Grand Trine");
6790
6839
  for (let e5 of ee2) {
@@ -6795,43 +6844,43 @@ function Z_(e4, t2) {
6795
6844
  let p3 = o2.find((e6) => e6.planet1.toLowerCase() === f3 && e6.planet2.toLowerCase() === l3 || e6.planet2.toLowerCase() === f3 && e6.planet1.toLowerCase() === l3), m3 = o2.find((e6) => e6.planet1.toLowerCase() === f3 && e6.planet2.toLowerCase() === u3 || e6.planet2.toLowerCase() === f3 && e6.planet1.toLowerCase() === u3);
6796
6845
  if (!p3 || !m3) continue;
6797
6846
  let h3 = [t3, r3, a3, f3].sort().join("|");
6798
- 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: [...e5.aspectKeys, Y_(f3, c3), Y_(f3, l3), Y_(f3, u3)] }));
6847
+ 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: [...e5.aspectKeys, nv(f3, c3), nv(f3, l3), nv(f3, u3)] }));
6799
6848
  }
6800
6849
  }
6801
6850
  for (let e5 of n2) delete e5._dedupeKey;
6802
6851
  return n2;
6803
6852
  }
6804
- var Q_ = null, $_ = null, Q = null, ev = null, tv = null, nv = null;
6805
- function rv(e4) {
6806
- nv = e4;
6853
+ var av = null, ov = null, Q = null, sv = null, cv = null, lv = null;
6854
+ function uv(e4) {
6855
+ lv = e4;
6807
6856
  }
6808
- var iv = /* @__PURE__ */ new Map();
6809
- function av() {
6857
+ var dv = /* @__PURE__ */ new Map();
6858
+ function fv() {
6810
6859
  var e4;
6811
- if (Q_) return Q_;
6860
+ if (av) return av;
6812
6861
  let t2 = document.getElementById("info-panel");
6813
- if (t2) return Q_ = t2, Q_;
6814
- Q_ = document.createElement("div"), Q_.id = "info-panel", Q_.className = "info-panel";
6862
+ if (t2) return av = t2, av;
6863
+ av = document.createElement("div"), av.id = "info-panel", av.className = "info-panel";
6815
6864
  let n2 = document.getElementById("chart-container");
6816
- return n2 != null && n2.parentElement ? n2.parentElement.insertBefore(Q_, n2.nextSibling) : (e4 = document.getElementById("app")) == null || e4.appendChild(Q_), Q_;
6865
+ return n2 != null && n2.parentElement ? n2.parentElement.insertBefore(av, n2.nextSibling) : (e4 = document.getElementById("app")) == null || e4.appendChild(av), av;
6817
6866
  }
6818
- function ov(e4, t2, n2) {
6867
+ function pv(e4, t2, n2) {
6819
6868
  var r2, i2, a2, o2;
6820
- let s2 = av(), c2 = (r2 = x_[t2.name.toLowerCase()]) == null ? "\u2605" : r2, l2 = (i2 = S_[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "" : i2, u2 = K_(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((e5) => e5.planet1.toLowerCase() === t2.name.toLowerCase() || e5.planet2.toLowerCase() === t2.name.toLowerCase()).sort((e5, t3) => {
6869
+ let s2 = fv(), c2 = (r2 = D_[t2.name.toLowerCase()]) == null ? "\u2605" : r2, l2 = (i2 = O_[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "" : i2, u2 = $_(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((e5) => e5.planet1.toLowerCase() === t2.name.toLowerCase() || e5.planet2.toLowerCase() === t2.name.toLowerCase()).sort((e5, t3) => {
6821
6870
  var n3, r3;
6822
6871
  return ((n3 = e5.orb) == null ? 99 : n3) - ((r3 = t3.orb) == null ? 99 : r3);
6823
6872
  }), p2 = f2.length ? f2.map((e5) => {
6824
6873
  var n3, r3, i3, a3, o3, s3, c3;
6825
- let l3 = e5.planet1.toLowerCase() === t2.name.toLowerCase() ? e5.planet2 : e5.planet1, u3 = (n3 = x_[l3.toLowerCase()]) == null ? l3 : n3, d3 = (r3 = (i3 = w_[(a3 = (o3 = e5.type) == null ? void 0 : o3.toLowerCase()) == null ? "" : a3]) == null ? e5.type : i3) == null ? "\u2014" : r3, f3 = (s3 = T_((c3 = e5.type) == null ? "" : c3)) == null ? "#888" : s3, p3 = e5.orb == null ? "" : "".concat(e5.orb.toFixed(1), "\xB0"), m3 = e5.applying === true ? "\u2197" : e5.applying === false ? "\u2198" : "\xB7";
6874
+ let l3 = e5.planet1.toLowerCase() === t2.name.toLowerCase() ? e5.planet2 : e5.planet1, u3 = (n3 = D_[l3.toLowerCase()]) == null ? l3 : n3, d3 = (r3 = (i3 = A_[(a3 = (o3 = e5.type) == null ? void 0 : o3.toLowerCase()) == null ? "" : a3]) == null ? e5.type : i3) == null ? "\u2014" : r3, f3 = (s3 = j_((c3 = e5.type) == null ? "" : c3)) == null ? "#888" : s3, p3 = e5.orb == null ? "" : "".concat(e5.orb.toFixed(1), "\xB0"), m3 = e5.applying === true ? "\u2197" : e5.applying === false ? "\u2198" : "\xB7";
6826
6875
  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>");
6827
- }).join("") : '<div class="no-aspects">No listed aspects</div>', m2 = tv ? '<button class="ask-claude-btn" id="ask-claude-btn">Ask Claude \u2014 Interpret</button>' : '<div class="info-hint">Click an aspect line for full interpretation</div>';
6828
- 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(j_(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", () => {
6829
- pv(), xv();
6876
+ }).join("") : '<div class="no-aspects">No listed aspects</div>', m2 = cv ? '<button class="ask-claude-btn" id="ask-claude-btn">Ask Claude \u2014 Interpret</button>' : '<div class="info-hint">Click an aspect line for full interpretation</div>';
6877
+ 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(R_(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", () => {
6878
+ bv(), Ov();
6830
6879
  }), (o2 = document.getElementById("ask-claude-btn")) == null || o2.addEventListener("click", () => {
6831
6880
  var e5, n3, r3, i3, a3;
6832
- if (!tv) return;
6881
+ if (!cv) return;
6833
6882
  let o3 = document.getElementById("ask-claude-btn");
6834
- !o3 || o3.disabled || (o3.disabled = true, o3.textContent = "Sending\u2026", o3.classList.remove("sent", "error"), o3.classList.add("sending"), tv({ type: "planet", data: { name: t2.name, longitude: t2.longitude, sign: (e5 = t2.sign) == null ? j_(t2.longitude) : e5, 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((e6) => ({ other: e6.planet1.toLowerCase() === t2.name.toLowerCase() ? e6.planet2 : e6.planet1, type: e6.type, orb: e6.orb, applying: e6.applying })) } }).then(() => {
6883
+ !o3 || o3.disabled || (o3.disabled = true, o3.textContent = "Sending\u2026", o3.classList.remove("sent", "error"), o3.classList.add("sending"), cv({ type: "planet", data: { name: t2.name, longitude: t2.longitude, sign: (e5 = t2.sign) == null ? R_(t2.longitude) : e5, 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((e6) => ({ other: e6.planet1.toLowerCase() === t2.name.toLowerCase() ? e6.planet2 : e6.planet1, type: e6.type, orb: e6.orb, applying: e6.applying })) } }).then(() => {
6835
6884
  o3.textContent = "\u2713 Sent to Claude", o3.classList.remove("sending"), o3.classList.add("sent"), setTimeout(() => {
6836
6885
  o3.textContent = "\u2728 Ask Claude to interpret", o3.classList.remove("sent"), o3.disabled = false;
6837
6886
  }, 2500);
@@ -6840,16 +6889,16 @@ function ov(e4, t2, n2) {
6840
6889
  }));
6841
6890
  });
6842
6891
  }
6843
- function sv(e4, t2, n2) {
6892
+ function mv(e4, t2, n2) {
6844
6893
  var r2, i2, a2, o2, s2, c2, l2, u2, d2, f2;
6845
- let p2 = av(), m2 = n2.find((e5) => e5.name.toLowerCase() === t2.planet1.toLowerCase()), h2 = n2.find((e5) => e5.name.toLowerCase() === t2.planet2.toLowerCase()), g2 = (r2 = x_[t2.planet1.toLowerCase()]) == null ? t2.planet1 : r2, _2 = (i2 = x_[t2.planet2.toLowerCase()]) == null ? t2.planet2 : i2, v2 = (a2 = w_[(o2 = (s2 = t2.type) == null ? void 0 : s2.toLowerCase()) == null ? "" : o2]) == null ? "" : a2, ee2 = T_((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(j_(m2.longitude)).concat(m2.house ? " \xB7 H".concat(m2.house) : "") : "", S2 = h2 ? "".concat(j_(h2.longitude)).concat(h2.house ? " \xB7 H".concat(h2.house) : "") : "", C2 = tv ? '<button class="ask-claude-btn" id="ask-claude-btn">Ask Claude \u2014 Interpret</button>' : "";
6894
+ let p2 = fv(), m2 = n2.find((e5) => e5.name.toLowerCase() === t2.planet1.toLowerCase()), h2 = n2.find((e5) => e5.name.toLowerCase() === t2.planet2.toLowerCase()), g2 = (r2 = D_[t2.planet1.toLowerCase()]) == null ? t2.planet1 : r2, _2 = (i2 = D_[t2.planet2.toLowerCase()]) == null ? t2.planet2 : i2, v2 = (a2 = A_[(o2 = (s2 = t2.type) == null ? void 0 : s2.toLowerCase()) == null ? "" : o2]) == null ? "" : a2, ee2 = j_((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(R_(m2.longitude)).concat(m2.house ? " \xB7 H".concat(m2.house) : "") : "", S2 = h2 ? "".concat(R_(h2.longitude)).concat(h2.house ? " \xB7 H".concat(h2.house) : "") : "", C2 = cv ? '<button class="ask-claude-btn" id="ask-claude-btn">Ask Claude \u2014 Interpret</button>' : "";
6846
6895
  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", () => {
6847
- pv(), xv();
6896
+ bv(), Ov();
6848
6897
  }), (f2 = document.getElementById("ask-claude-btn")) == null || f2.addEventListener("click", () => {
6849
6898
  var e5, n3, r3, i3, a3, o3, s3, c3;
6850
- if (!tv) return;
6899
+ if (!cv) return;
6851
6900
  let l3 = document.getElementById("ask-claude-btn");
6852
- !l3 || l3.disabled || (l3.disabled = true, l3.textContent = "Sending\u2026", l3.classList.add("sending"), tv({ type: "aspect", data: { planet1: t2.planet1, planet2: t2.planet2, aspect_type: (e5 = t2.type) == null ? null : e5, 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(() => {
6901
+ !l3 || l3.disabled || (l3.disabled = true, l3.textContent = "Sending\u2026", l3.classList.add("sending"), cv({ type: "aspect", data: { planet1: t2.planet1, planet2: t2.planet2, aspect_type: (e5 = t2.type) == null ? null : e5, 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(() => {
6853
6902
  l3.textContent = "Sent", l3.classList.remove("sending"), l3.classList.add("sent"), setTimeout(() => {
6854
6903
  l3.textContent = "Ask Claude \u2014 Interpret", l3.classList.remove("sent"), l3.disabled = false;
6855
6904
  }, 2500);
@@ -6858,22 +6907,22 @@ function sv(e4, t2, n2) {
6858
6907
  }));
6859
6908
  });
6860
6909
  }
6861
- function cv(e4, t2, n2) {
6910
+ function hv(e4, t2, n2) {
6862
6911
  var r2, i2, a2, o2, s2;
6863
- let c2 = av(), l2 = Math.floor((t2.cusp_lon % 360 + 360) % 360 / 30), u2 = (r2 = S_[l2]) == null ? "" : r2, d2 = (i2 = (a2 = t2.sign) == null ? C_[l2] : a2) == null ? "" : i2, f2 = n2.filter((e5) => e5.house === t2.number), p2 = f2.length ? f2.map((e5) => {
6912
+ let c2 = fv(), l2 = Math.floor((t2.cusp_lon % 360 + 360) % 360 / 30), u2 = (r2 = O_[l2]) == null ? "" : r2, d2 = (i2 = (a2 = t2.sign) == null ? k_[l2] : a2) == null ? "" : i2, f2 = n2.filter((e5) => e5.house === t2.number), p2 = f2.length ? f2.map((e5) => {
6864
6913
  var t3;
6865
- let n3 = (t3 = x_[e5.name.toLowerCase()]) == null ? e5.name : t3, r3 = j_(e5.longitude), i3 = e5.retrograde ? " <span class='retro'>\u211E</span>" : "";
6914
+ let n3 = (t3 = D_[e5.name.toLowerCase()]) == null ? e5.name : t3, r3 = R_(e5.longitude), i3 = e5.retrograde ? " <span class='retro'>\u211E</span>" : "";
6866
6915
  return '<div class="aspect-row">\n <span class="aspect-sym">'.concat(n3, '</span>\n <span class="aspect-other">').concat(Z(e5.name)).concat(i3, '</span>\n <span class="aspect-meta">').concat(r3, "</span>\n </div>");
6867
- }).join("") : '<div class="no-aspects">No planets in this house</div>', m2 = tv ? '<button class="ask-claude-btn" id="ask-claude-btn">Ask Claude \u2014 Interpret</button>' : "";
6916
+ }).join("") : '<div class="no-aspects">No planets in this house</div>', m2 = cv ? '<button class="ask-claude-btn" id="ask-claude-btn">Ask Claude \u2014 Interpret</button>' : "";
6868
6917
  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", () => {
6869
- pv(), xv();
6918
+ bv(), Ov();
6870
6919
  }), (s2 = document.getElementById("ask-claude-btn")) == null || s2.addEventListener("click", () => {
6871
6920
  var e5;
6872
- if (!tv) return;
6921
+ if (!cv) return;
6873
6922
  let n3 = document.getElementById("ask-claude-btn");
6874
- !n3 || n3.disabled || (n3.disabled = true, n3.textContent = "Sending\u2026", n3.classList.add("sending"), tv({ type: "house", data: { house_number: t2.number, sign: d2, cusp_longitude: t2.cusp_lon, ruler: (e5 = t2.ruler) == null ? null : e5, planets_in_house: f2.map((e6) => {
6923
+ !n3 || n3.disabled || (n3.disabled = true, n3.textContent = "Sending\u2026", n3.classList.add("sending"), cv({ type: "house", data: { house_number: t2.number, sign: d2, cusp_longitude: t2.cusp_lon, ruler: (e5 = t2.ruler) == null ? null : e5, planets_in_house: f2.map((e6) => {
6875
6924
  var t3, n4;
6876
- return { name: e6.name, sign: (t3 = e6.sign) == null ? j_(e6.longitude) : t3, retrograde: (n4 = e6.retrograde) == null ? false : n4 };
6925
+ return { name: e6.name, sign: (t3 = e6.sign) == null ? R_(e6.longitude) : t3, retrograde: (n4 = e6.retrograde) == null ? false : n4 };
6877
6926
  }) } }).then(() => {
6878
6927
  n3.textContent = "Sent", n3.classList.remove("sending"), n3.classList.add("sent"), setTimeout(() => {
6879
6928
  n3.textContent = "Ask Claude \u2014 Interpret", n3.classList.remove("sent"), n3.disabled = false;
@@ -6883,22 +6932,22 @@ function cv(e4, t2, n2) {
6883
6932
  }));
6884
6933
  });
6885
6934
  }
6886
- var lv = { Aries: "Mars", Taurus: "Venus", Gemini: "Mercury", Cancer: "Moon", Leo: "Sun", Virgo: "Mercury", Libra: "Venus", Scorpio: "Mars", Sagittarius: "Jupiter", Capricorn: "Saturn", Aquarius: "Saturn", Pisces: "Jupiter" };
6887
- function uv(e4, t2, n2) {
6935
+ var gv = { Aries: "Mars", Taurus: "Venus", Gemini: "Mercury", Cancer: "Moon", Leo: "Sun", Virgo: "Mercury", Libra: "Venus", Scorpio: "Mars", Sagittarius: "Jupiter", Capricorn: "Saturn", Aquarius: "Saturn", Pisces: "Jupiter" };
6936
+ function _v(e4, t2, n2) {
6888
6937
  var r2, i2, a2, o2, s2;
6889
- let c2 = av(), l2 = C_[t2], u2 = S_[t2], d2 = Z(q_[t2]), f2 = Z(J_[t2]), p2 = (r2 = lv[l2]) == null ? "" : r2, m2 = (i2 = x_[p2.toLowerCase()]) == null ? "" : i2, h2 = n2.filter((e5) => Math.floor((e5.longitude % 360 + 360) % 360 / 30) === t2), g2 = h2.length ? h2.map((e5) => {
6938
+ let c2 = fv(), l2 = k_[t2], u2 = O_[t2], d2 = Z(ev[t2]), f2 = Z(tv[t2]), p2 = (r2 = gv[l2]) == null ? "" : r2, m2 = (i2 = D_[p2.toLowerCase()]) == null ? "" : i2, h2 = n2.filter((e5) => Math.floor((e5.longitude % 360 + 360) % 360 / 30) === t2), g2 = h2.length ? h2.map((e5) => {
6890
6939
  var t3;
6891
- let n3 = (t3 = x_[e5.name.toLowerCase()]) == null ? e5.name : t3, r3 = Math.floor((e5.longitude % 360 + 360) % 360 % 30), i3 = Math.floor((e5.longitude % 30 - r3) * 60), a3 = e5.retrograde ? " <span class='retro'>\u211E</span>" : "", o3 = K_(e5.name, e5.longitude), s3 = o3 ? ' <span class="dignity-badge '.concat(o3.cssClass, '">').concat(o3.emoji, " ").concat(o3.label, "</span>") : "";
6940
+ let n3 = (t3 = D_[e5.name.toLowerCase()]) == null ? e5.name : t3, r3 = Math.floor((e5.longitude % 360 + 360) % 360 % 30), i3 = Math.floor((e5.longitude % 30 - r3) * 60), a3 = e5.retrograde ? " <span class='retro'>\u211E</span>" : "", o3 = $_(e5.name, e5.longitude), s3 = o3 ? ' <span class="dignity-badge '.concat(o3.cssClass, '">').concat(o3.emoji, " ").concat(o3.label, "</span>") : "";
6892
6941
  return '<div class="aspect-row">\n <span class="aspect-sym">'.concat(n3, '</span>\n <span class="aspect-other">').concat(Z(e5.name)).concat(a3).concat(s3, '</span>\n <span class="aspect-meta">').concat(r3, "\xB0").concat(i3.toString().padStart(2, "0"), "\u2032</span>\n </div>");
6893
- }).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 = tv ? '<button class="ask-claude-btn" id="sign-ask-claude-btn">Ask Claude \u2014 Interpret '.concat(l2, "</button>") : "";
6894
- c2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(E_[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", () => {
6895
- pv(), xv();
6942
+ }).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 = cv ? '<button class="ask-claude-btn" id="sign-ask-claude-btn">Ask Claude \u2014 Interpret '.concat(l2, "</button>") : "";
6943
+ c2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(N_(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", () => {
6944
+ bv(), Ov();
6896
6945
  }), (s2 = document.getElementById("sign-ask-claude-btn")) == null || s2.addEventListener("click", () => {
6897
- if (!tv) return;
6946
+ if (!cv) return;
6898
6947
  let e5 = document.getElementById("sign-ask-claude-btn");
6899
- !e5 || e5.disabled || (e5.disabled = true, e5.textContent = "Sending\u2026", e5.classList.add("sending"), tv({ type: "sign", data: { sign: l2, element: d2, modality: f2, ruler: p2 || null, planets_in_sign: h2.map((e6) => {
6948
+ !e5 || e5.disabled || (e5.disabled = true, e5.textContent = "Sending\u2026", e5.classList.add("sending"), cv({ type: "sign", data: { sign: l2, element: d2, modality: f2, ruler: p2 || null, planets_in_sign: h2.map((e6) => {
6900
6949
  var t3, n3;
6901
- return { name: e6.name, longitude: e6.longitude, position: j_(e6.longitude), retrograde: (t3 = e6.retrograde) == null ? false : t3, house: (n3 = e6.house) == null ? null : n3 };
6950
+ return { name: e6.name, longitude: e6.longitude, position: R_(e6.longitude), retrograde: (t3 = e6.retrograde) == null ? false : t3, house: (n3 = e6.house) == null ? null : n3 };
6902
6951
  }) } }).then(() => {
6903
6952
  e5.textContent = "Sent", e5.classList.remove("sending"), e5.classList.add("sent"), setTimeout(() => {
6904
6953
  e5.textContent = "Ask Claude \u2014 Interpret ".concat(l2), e5.classList.remove("sent"), e5.disabled = false;
@@ -6908,17 +6957,17 @@ function uv(e4, t2, n2) {
6908
6957
  }));
6909
6958
  });
6910
6959
  }
6911
- var dv = { 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"] } };
6912
- function fv(e4, t2, n2) {
6960
+ var vv = { 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"] } };
6961
+ function yv(e4, t2, n2) {
6913
6962
  var r2, i2;
6914
- let a2 = av(), o2 = dv[t2];
6963
+ let a2 = fv(), o2 = vv[t2];
6915
6964
  if (!o2) return;
6916
- let s2 = j_(n2), c2 = Math.floor((n2 % 360 + 360) % 360 / 30), l2 = Z(q_[c2]), u2 = Z(J_[c2]), d2 = S_[c2], f2 = E_[c2];
6965
+ let s2 = R_(n2), c2 = Math.floor((n2 % 360 + 360) % 360 / 30), l2 = Z(ev[c2]), u2 = Z(tv[c2]), d2 = O_[c2], f2 = N_(c2);
6917
6966
  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((e5) => '<div class="aspect-row"><span class="aspect-other">'.concat(e5, "</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 Ask Claude \u2014 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", () => {
6918
- pv(), xv();
6967
+ bv(), Ov();
6919
6968
  }), (i2 = document.getElementById("angle-ask-claude-btn")) == null || i2.addEventListener("click", (e5) => {
6920
6969
  let t3 = e5.currentTarget;
6921
- t3.textContent = "Sending\u2026", t3.disabled = true, tv == null || tv({ type: "angle_interpretation", data: { angle: o2.title, longitude: n2, sign: C_[c2], position: s2, element: l2, modality: u2 } }).then(() => {
6970
+ t3.textContent = "Sending\u2026", t3.disabled = true, cv == null || cv({ type: "angle_interpretation", data: { angle: o2.title, longitude: n2, sign: k_[c2], position: s2, element: l2, modality: u2 } }).then(() => {
6922
6971
  t3.textContent = "Sent", setTimeout(() => {
6923
6972
  t3.textContent = "Ask Claude \u2014 Interpret ".concat(o2.title), t3.disabled = false;
6924
6973
  }, 2500);
@@ -6927,27 +6976,31 @@ function fv(e4, t2, n2) {
6927
6976
  });
6928
6977
  });
6929
6978
  }
6930
- function pv() {
6931
- Q_ == null || Q_.classList.remove("visible"), $_ = null, _v(), nv == null || nv(null);
6979
+ function bv() {
6980
+ av == null || av.classList.remove("visible"), ov = null, wv(), lv == null || lv(null);
6932
6981
  }
6933
- var mv = null, hv = 0;
6934
- function gv(e4, t2 = false) {
6935
- let n2 = mv;
6982
+ var xv = null, Sv = 0;
6983
+ function Cv(e4, t2 = false) {
6984
+ let n2 = xv;
6936
6985
  if (!n2) return;
6937
- let r2 = hv, i2 = Y(e4, p_, r2), a2 = Y(e4, 198, r2);
6986
+ let r2 = Sv, i2 = Y(e4, y_, r2), a2 = Y(e4, 198, r2);
6938
6987
  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";
6939
6988
  }
6940
- function _v() {
6941
- mv && (mv.style.opacity = "0");
6989
+ function wv() {
6990
+ xv && (xv.style.opacity = "0");
6942
6991
  }
6943
- function vv(e4) {
6992
+ function Tv(e4) {
6944
6993
  let t2 = e4.toLowerCase(), n2 = /* @__PURE__ */ new Set();
6945
- iv.forEach(({ vis: e5, color: r2 }, i2) => {
6946
- let a2 = i2.split("|");
6947
- if (a2.includes(t2)) {
6948
- e5.style.stroke = r2, e5.style.strokeOpacity = "0.95", e5.style.strokeWidth = "2", e5.setAttribute("filter", "url(#aspect-glow)");
6949
- for (let e6 of a2) e6 !== t2 && n2.add(e6);
6950
- } else e5.style.strokeOpacity = "0.05", e5.style.strokeWidth = "0.7", e5.removeAttribute("filter");
6994
+ dv.forEach(({ vis: e5, color: r2, symbolEls: i2 }, a2) => {
6995
+ let o2 = a2.split("|");
6996
+ if (o2.includes(t2)) {
6997
+ e5.style.stroke = r2, e5.style.strokeOpacity = "0.95", e5.style.strokeWidth = "2", e5.setAttribute("filter", "url(#aspect-glow)"), i2.forEach((e6) => {
6998
+ e6.style.opacity = "1";
6999
+ });
7000
+ for (let e6 of o2) e6 !== t2 && n2.add(e6);
7001
+ } else e5.style.strokeOpacity = "0.05", e5.style.strokeWidth = "0.7", e5.removeAttribute("filter"), i2.forEach((e6) => {
7002
+ e6.style.opacity = "0.12";
7003
+ });
6951
7004
  }), Q == null || Q.querySelectorAll(".planet-glyph-group").forEach((e5) => {
6952
7005
  var r2;
6953
7006
  let i2 = (r2 = e5.dataset.planet) == null ? "" : r2;
@@ -6958,10 +7011,14 @@ function vv(e4) {
6958
7011
  e5.classList.toggle("dim", i2 !== t2 && !n2.has(i2));
6959
7012
  });
6960
7013
  }
6961
- function yv(e4, t2) {
7014
+ function Ev(e4, t2) {
6962
7015
  let n2 = new Set(e4.map((e5) => e5.toLowerCase())), r2 = new Set(t2);
6963
- iv.forEach(({ vis: e5, color: t3 }, n3) => {
6964
- r2.has(n3) ? (e5.style.stroke = t3, e5.style.strokeOpacity = "0.95", e5.style.strokeWidth = "2", e5.setAttribute("filter", "url(#aspect-glow)")) : (e5.style.strokeOpacity = "0.05", e5.style.strokeWidth = "0.7", e5.removeAttribute("filter"));
7016
+ dv.forEach(({ vis: e5, color: t3, symbolEls: n3 }, i2) => {
7017
+ r2.has(i2) ? (e5.style.stroke = t3, e5.style.strokeOpacity = "0.95", e5.style.strokeWidth = "2", e5.setAttribute("filter", "url(#aspect-glow)"), n3.forEach((e6) => {
7018
+ e6.style.opacity = "1";
7019
+ })) : (e5.style.strokeOpacity = "0.05", e5.style.strokeWidth = "0.7", e5.removeAttribute("filter"), n3.forEach((e6) => {
7020
+ e6.style.opacity = "0.12";
7021
+ }));
6965
7022
  }), Q == null || Q.querySelectorAll(".planet-glyph-group").forEach((e5) => {
6966
7023
  var t3;
6967
7024
  e5.style.opacity = n2.has((t3 = e5.dataset.planet) == null ? "" : t3) ? "" : "0.15";
@@ -6970,22 +7027,26 @@ function yv(e4, t2) {
6970
7027
  return e5.classList.toggle("dim", !n2.has((t3 = e5.dataset.planet) == null ? "" : t3));
6971
7028
  });
6972
7029
  }
6973
- function bv() {
6974
- iv.forEach(({ vis: e4 }) => {
6975
- e4.style.strokeOpacity = "0.05", e4.style.strokeWidth = "0.7", e4.removeAttribute("filter");
7030
+ function Dv() {
7031
+ dv.forEach(({ vis: e4, symbolEls: t2 }) => {
7032
+ e4.style.strokeOpacity = "0.05", e4.style.strokeWidth = "0.7", e4.removeAttribute("filter"), t2.forEach((e5) => {
7033
+ e5.style.opacity = "0.12";
7034
+ });
6976
7035
  }), Q == null || Q.querySelectorAll(".planet-glyph-group").forEach((e4) => {
6977
7036
  e4.style.opacity = "0.35";
6978
7037
  }), Q == null || Q.querySelectorAll(".planet-hit").forEach((e4) => e4.classList.add("dim"));
6979
7038
  }
6980
- function xv() {
6981
- iv.forEach(({ vis: e4, color: t2, baseOpacity: n2, baseWidth: r2 }) => {
6982
- e4.style.stroke = t2, e4.style.strokeOpacity = n2, e4.style.strokeWidth = r2, e4.removeAttribute("filter");
7039
+ function Ov() {
7040
+ dv.forEach(({ vis: e4, color: t2, baseOpacity: n2, baseWidth: r2, symbolEls: i2 }) => {
7041
+ e4.style.stroke = t2, e4.style.strokeOpacity = n2, e4.style.strokeWidth = r2, e4.removeAttribute("filter"), i2.forEach((e5) => {
7042
+ e5.style.opacity = "";
7043
+ });
6983
7044
  }), Q == null || Q.querySelectorAll(".planet-glyph-group").forEach((e4) => {
6984
7045
  e4.style.opacity = "";
6985
- }), Q == null || Q.querySelectorAll(".planet-hit").forEach((e4) => e4.classList.remove("dim")), Tv();
7046
+ }), Q == null || Q.querySelectorAll(".planet-hit").forEach((e4) => e4.classList.remove("dim")), Mv();
6986
7047
  }
6987
- var Sv = { "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)" }, Cv = { "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)" };
6988
- function wv(e4, t2, n2) {
7048
+ var kv = { "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)" }, Av = { "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)" };
7049
+ function jv(e4, t2, n2) {
6989
7050
  var r2, i2;
6990
7051
  if (!Q) return null;
6991
7052
  let a2 = /* @__PURE__ */ new Map();
@@ -6993,44 +7054,48 @@ function wv(e4, t2, n2) {
6993
7054
  let o2 = [];
6994
7055
  for (let t3 of e4.planets) {
6995
7056
  let e5 = a2.get(t3.toLowerCase());
6996
- e5 != null && o2.push(Y(e5, v_, n2));
7057
+ e5 != null && o2.push(Y(e5, w_, n2));
6997
7058
  }
6998
7059
  if (o2.length < 2) return null;
6999
- let s2 = (r2 = Sv[e4.name]) == null ? "rgba(128,128,128,0.12)" : r2, c2 = (i2 = Cv[e4.name]) == null ? "rgba(128,128,128,0.60)" : i2, l2;
7060
+ let s2 = (r2 = kv[e4.name]) == null ? "rgba(128,128,128,0.12)" : r2, c2 = (i2 = Av[e4.name]) == null ? "rgba(128,128,128,0.60)" : i2, l2;
7000
7061
  if (o2.length === 2) {
7001
7062
  let e5 = X("line");
7002
7063
  e5.setAttribute("x1", o2[0].x.toFixed(1)), e5.setAttribute("y1", o2[0].y.toFixed(1)), e5.setAttribute("x2", o2[1].x.toFixed(1)), e5.setAttribute("y2", o2[1].y.toFixed(1)), e5.setAttribute("stroke", c2), e5.setAttribute("stroke-width", "2"), e5.setAttribute("fill", "none"), l2 = e5;
7003
7064
  } else {
7004
- let e5 = [...o2].sort((e6, t4) => Math.atan2(e6.y - f_, e6.x - d_) - Math.atan2(t4.y - f_, t4.x - d_)).map((e6) => "".concat(e6.x.toFixed(1), ",").concat(e6.y.toFixed(1))).join(" "), t3 = X("polygon");
7065
+ let e5 = [...o2].sort((e6, t4) => Math.atan2(e6.y - v_, e6.x - __) - Math.atan2(t4.y - v_, t4.x - __)).map((e6) => "".concat(e6.x.toFixed(1), ",").concat(e6.y.toFixed(1))).join(" "), t3 = X("polygon");
7005
7066
  t3.setAttribute("points", e5), t3.setAttribute("fill", s2), t3.setAttribute("stroke", c2), t3.setAttribute("stroke-width", "1.5"), t3.setAttribute("stroke-linejoin", "round"), l2 = t3;
7006
7067
  }
7007
7068
  l2.setAttribute("pointer-events", "none"), l2.setAttribute("class", "pattern-overlay");
7008
7069
  let u2 = Q.querySelector(".aspect-hit");
7009
7070
  return u2 ? Q.insertBefore(l2, u2) : Q.appendChild(l2), l2;
7010
7071
  }
7011
- function Tv() {
7072
+ function Mv() {
7012
7073
  Q == null || Q.querySelectorAll(".pattern-overlay").forEach((e4) => e4.remove());
7013
7074
  }
7014
- function Ev(e4) {
7015
- iv.forEach(({ vis: t2, color: n2, baseOpacity: r2, baseWidth: i2 }) => {
7016
- e4 ? (t2.style.stroke = n2, t2.style.strokeOpacity = r2, t2.style.strokeWidth = i2) : t2.style.strokeOpacity = "0";
7075
+ function Nv(e4) {
7076
+ dv.forEach(({ vis: t2, color: n2, baseOpacity: r2, baseWidth: i2, symbolEls: a2 }) => {
7077
+ e4 ? (t2.style.stroke = n2, t2.style.strokeOpacity = r2, t2.style.strokeWidth = i2) : t2.style.strokeOpacity = "0", a2.forEach((t3) => {
7078
+ t3.style.display = e4 ? "" : "none";
7079
+ });
7017
7080
  }), document.querySelectorAll(".aspect-hit").forEach((t2) => {
7018
7081
  t2.style.pointerEvents = e4 ? "all" : "none";
7019
7082
  });
7020
7083
  }
7021
- function Dv(e4) {
7022
- iv.forEach(({ vis: t2, color: n2, baseOpacity: r2, baseWidth: i2, orb: a2 }) => {
7023
- a2 <= e4 ? (t2.style.stroke = n2, t2.style.strokeOpacity = r2, t2.style.strokeWidth = i2, t2.style.display = "") : t2.style.display = "none";
7084
+ function Pv(e4) {
7085
+ dv.forEach(({ vis: t2, color: n2, baseOpacity: r2, baseWidth: i2, orb: a2, symbolEls: o2 }) => {
7086
+ a2 <= e4 ? (t2.style.stroke = n2, t2.style.strokeOpacity = r2, t2.style.strokeWidth = i2, t2.style.display = "") : t2.style.display = "none", o2.forEach((t3) => {
7087
+ t3.style.display = a2 <= e4 ? "" : "none";
7088
+ });
7024
7089
  }), document.querySelectorAll(".aspect-hit").forEach((e5) => {
7025
7090
  e5.style.display = "";
7026
7091
  });
7027
7092
  }
7028
- function Ov(e4, t2, n2, r2, i2, a2, o2) {
7093
+ function Fv(e4, t2, n2, r2, i2, a2, o2) {
7029
7094
  var s2, c2, l2, u2, d2, f2, p2, m2, h2;
7030
- tv = a2 == null ? null : a2;
7095
+ cv = a2 == null ? null : a2;
7031
7096
  let g2 = e4.querySelector("#pan-zoom-controls");
7032
- e4.innerHTML = "", g2 && e4.appendChild(g2), iv.clear(), $_ = null, pv();
7033
- let _2 = F_(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");
7097
+ e4.innerHTML = "", g2 && e4.appendChild(g2), dv.clear(), ov = null, bv();
7098
+ let _2 = H_(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");
7034
7099
  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", e4.appendChild(b2), Q = b2;
7035
7100
  {
7036
7101
  let e5 = X("defs");
@@ -7043,207 +7108,212 @@ function Ov(e4, t2, n2, r2, i2, a2, o2) {
7043
7108
  S2.setAttribute("class", "chart-layer"), S2.style.setProperty("--layer-index", "2"), b2.appendChild(S2);
7044
7109
  let C2 = X("g");
7045
7110
  C2.setAttribute("class", "chart-layer"), C2.style.setProperty("--layer-index", "3"), b2.appendChild(C2);
7111
+ let w2 = X("g");
7112
+ w2.setAttribute("class", "chart-layer"), w2.style.setProperty("--layer-index", "4"), b2.appendChild(w2);
7046
7113
  let te2 = X("g");
7047
- te2.setAttribute("class", "chart-layer"), te2.style.setProperty("--layer-index", "4"), b2.appendChild(te2);
7114
+ te2.setAttribute("class", "chart-layer"), te2.style.setProperty("--layer-index", "5"), b2.appendChild(te2);
7048
7115
  let ne2 = X("g");
7049
- ne2.setAttribute("class", "chart-layer"), ne2.style.setProperty("--layer-index", "5"), b2.appendChild(ne2);
7050
- let re2 = X("g");
7051
- b2.appendChild(re2), hv = y2;
7052
- let w2 = X("line");
7053
- 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", S2.appendChild(w2), mv = w2;
7054
- let T2 = X("circle");
7055
- T2.setAttribute("cx", "250"), T2.setAttribute("cy", "250"), T2.setAttribute("r", "244"), T2.style.fill = "var(--bg, #faf9f5)", T2.setAttribute("stroke", "#d4cec8"), T2.setAttribute("stroke-width", "0.5"), T2.setAttribute("pointer-events", "none"), x2.appendChild(T2);
7056
- let E2 = window.matchMedia("(prefers-color-scheme: dark)").matches;
7057
- if (!E2) try {
7058
- let e5 = getComputedStyle(document.body).backgroundColor.match(/\d+/g);
7059
- e5 && e5.length >= 3 && (E2 = (0.299 * e5[0] + 0.587 * e5[1] + 0.114 * e5[2]) / 255 < 0.35);
7060
- } catch (e5) {
7061
- }
7062
- let ie2 = X("circle");
7063
- ie2.setAttribute("cx", "250"), ie2.setAttribute("cy", "250"), ie2.setAttribute("r", String(p_)), ie2.setAttribute("fill", E2 ? "#141720" : "#f2ede6"), ie2.setAttribute("stroke", E2 ? "#252a38" : "#c0b8a8"), ie2.setAttribute("stroke-width", "0.5"), ie2.setAttribute("pointer-events", "none"), S2.appendChild(ie2);
7116
+ b2.appendChild(ne2), Sv = y2;
7117
+ let T2 = X("line");
7118
+ 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), xv = T2;
7119
+ let re2 = X("circle");
7120
+ re2.setAttribute("cx", "250"), re2.setAttribute("cy", "250"), re2.setAttribute("r", "244"), re2.style.fill = "var(--bg, #faf9f5)", re2.setAttribute("stroke", "#d4cec8"), re2.setAttribute("stroke-width", "0.5"), re2.setAttribute("pointer-events", "none"), x2.appendChild(re2);
7121
+ let E2 = M_(), ie2 = X("circle");
7122
+ ie2.setAttribute("cx", "250"), ie2.setAttribute("cy", "250"), ie2.setAttribute("r", String(y_)), ie2.setAttribute("fill", E2 ? "#141720" : "#f2ede6"), ie2.setAttribute("stroke", E2 ? "#252a38" : "#c0b8a8"), ie2.setAttribute("stroke-width", "0.5"), ie2.setAttribute("pointer-events", "none"), S2.appendChild(ie2);
7064
7123
  let ae2 = X("circle");
7065
- ae2.setAttribute("cx", "250"), ae2.setAttribute("cy", "250"), ae2.setAttribute("r", String(m_)), ae2.style.fill = "var(--bg, #faf9f5)", ae2.setAttribute("stroke", E2 ? "#2d3548" : "#c0b8a8"), ae2.setAttribute("stroke-width", "0.5"), ae2.setAttribute("pointer-events", "none"), S2.appendChild(ae2);
7066
- let oe2 = E2 ? ["rgba(200, 80, 60, 0.18)", "rgba(100,160, 70, 0.18)", "rgba(210,190, 60, 0.18)", "rgba( 70,120,200, 0.18)", "rgba(200, 80, 60, 0.18)", "rgba(100,160, 70, 0.18)", "rgba(210,190, 60, 0.18)", "rgba( 70,120,200, 0.18)", "rgba(200, 80, 60, 0.18)", "rgba(100,160, 70, 0.18)", "rgba(210,190, 60, 0.18)", "rgba( 70,120,200, 0.18)"] : ["rgba(210, 90, 60, 0.12)", "rgba( 90,150, 60, 0.12)", "rgba(200,180, 40, 0.12)", "rgba( 60,110,190, 0.12)", "rgba(210, 90, 60, 0.12)", "rgba( 90,150, 60, 0.12)", "rgba(200,180, 40, 0.12)", "rgba( 60,110,190, 0.12)", "rgba(210, 90, 60, 0.12)", "rgba( 90,150, 60, 0.12)", "rgba(200,180, 40, 0.12)", "rgba( 60,110,190, 0.12)"], se2 = E2 ? "rgba(180,170,160,0.28)" : "rgba(100,90,80,0.22)", ce2 = E2 ? "rgba(180,170,160,0.50)" : "rgba(100,90,80,0.40)";
7124
+ ae2.setAttribute("cx", "250"), ae2.setAttribute("cy", "250"), ae2.setAttribute("r", String(b_)), ae2.style.fill = "var(--bg, #faf9f5)", ae2.setAttribute("stroke", E2 ? "#2d3548" : "#c0b8a8"), ae2.setAttribute("stroke-width", "0.5"), ae2.setAttribute("pointer-events", "none"), S2.appendChild(ae2);
7125
+ let oe2 = Array.from({ length: 12 }, (e5, t3) => l_(t3, E2)), se2 = E2 ? "rgba(180,170,160,0.28)" : "rgba(100,90,80,0.22)", ce2 = E2 ? "rgba(180,170,160,0.50)" : "rgba(100,90,80,0.40)";
7067
7126
  for (let e5 = 0; e5 < 12; e5++) {
7068
- let t3 = e5 * 30, n3 = (e5 + 1) * 30, r3 = Y(t3, p_, y2), i3 = Y(n3, p_, y2), a3 = Y(t3, m_, y2), o3 = Y(n3, m_, y2), s3 = X("path");
7069
- s3.setAttribute("d", ["M ".concat(r3.x.toFixed(1), " ").concat(r3.y.toFixed(1)), "A ".concat(p_, " ").concat(p_, " 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(m_, " ").concat(m_, " 0 0 1 ").concat(a3.x.toFixed(1), " ").concat(a3.y.toFixed(1)), "Z"].join(" ")), s3.setAttribute("fill", oe2[e5]), s3.setAttribute("pointer-events", "none"), b2.appendChild(s3);
7070
- let { x: c3, y: l3 } = Y(t3, m_, y2), { x: u3, y: d3 } = Y(t3, p_, y2), f3 = X("line");
7127
+ let t3 = e5 * 30, n3 = (e5 + 1) * 30, r3 = Y(t3, y_, y2), i3 = Y(n3, y_, y2), a3 = Y(t3, b_, y2), o3 = Y(n3, b_, y2), s3 = X("path");
7128
+ s3.setAttribute("d", ["M ".concat(r3.x.toFixed(1), " ").concat(r3.y.toFixed(1)), "A ".concat(y_, " ").concat(y_, " 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(b_, " ").concat(b_, " 0 0 1 ").concat(a3.x.toFixed(1), " ").concat(a3.y.toFixed(1)), "Z"].join(" ")), s3.setAttribute("fill", oe2[e5]), s3.setAttribute("pointer-events", "none"), b2.appendChild(s3);
7129
+ let { x: c3, y: l3 } = Y(t3, b_, y2), { x: u3, y: d3 } = Y(t3, y_, y2), f3 = X("line");
7071
7130
  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", E2 ? "#2d3548" : "#c0b8a8"), f3.setAttribute("stroke-width", "0.5"), f3.setAttribute("pointer-events", "none"), S2.appendChild(f3);
7072
7131
  let { x: p3, y: m3 } = Y(t3 + 15, 444 / 2, y2), h3 = X("text");
7073
- 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", E_[e5]), h3.setAttribute("pointer-events", "none"), h3.style.fontFamily = "serif", h3.textContent = S_[e5], S2.appendChild(h3);
7132
+ 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", c_(e5, E2)), h3.setAttribute("pointer-events", "none"), h3.style.fontFamily = "serif", h3.textContent = O_[e5], S2.appendChild(h3);
7074
7133
  for (let e6 = 1; e6 < 30; e6++) {
7075
- let n4 = t3 + e6, r4 = e6 % 5 == 0, i4 = r4 ? p_ - 7 : p_ - 3, { x: a4, y: o4 } = Y(n4, p_, y2), { x: s4, y: c4 } = Y(n4, i4, y2), l4 = X("line");
7134
+ let n4 = t3 + e6, r4 = e6 % 5 == 0, i4 = r4 ? y_ - 7 : y_ - 3, { x: a4, y: o4 } = Y(n4, y_, y2), { x: s4, y: c4 } = Y(n4, i4, y2), l4 = X("line");
7076
7135
  l4.setAttribute("x1", a4.toFixed(1)), l4.setAttribute("y1", o4.toFixed(1)), l4.setAttribute("x2", s4.toFixed(1)), l4.setAttribute("y2", c4.toFixed(1)), l4.setAttribute("stroke", r4 ? ce2 : se2), l4.setAttribute("stroke-width", r4 ? "0.8" : "0.5"), l4.setAttribute("pointer-events", "none"), S2.appendChild(l4);
7077
7136
  }
7078
7137
  }
7079
7138
  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" };
7080
7139
  for (let e5 = 0; e5 < 12; e5++) {
7081
7140
  var ue2, de2;
7082
- let t3 = e5 * 30, n3 = (e5 + 1) * 30, r3 = Y(t3, p_, y2), i3 = Y(n3, p_, y2), a3 = Y(t3, m_, y2), o3 = Y(n3, m_, y2), s3 = X("path");
7083
- s3.setAttribute("d", ["M ".concat(r3.x.toFixed(1), " ").concat(r3.y.toFixed(1)), "A ".concat(p_, " ").concat(p_, " 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(m_, " ").concat(m_, " 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", kv(s3, "".concat(C_[e5], " \u2014 click for sign info"));
7084
- let c3 = Z(q_[e5]), l3 = Z(J_[e5]), u3 = (ue2 = le2[C_[e5]]) == null ? "" : ue2, d3 = (de2 = V_[C_[e5]]) == null ? "" : de2, f3 = "".concat(d3 ? d3 + " \xB7 " : "").concat(c3, " \xB7 ").concat(l3).concat(u3 ? " \xB7 Ruled by ".concat(u3) : "");
7085
- s3.addEventListener("mouseenter", (t4) => L_(t4.clientX, t4.clientY, "".concat(S_[e5], " ").concat(C_[e5]), f3, "Click for sign detail")), s3.addEventListener("mousemove", (t4) => L_(t4.clientX, t4.clientY, "".concat(S_[e5], " ").concat(C_[e5]), f3, "Click for sign detail")), s3.addEventListener("mouseleave", R_), s3.addEventListener("click", (t4) => {
7086
- R_(), nv == null || nv("".concat(S_[e5], " ").concat(C_[e5])), uv(t4, e5, _2);
7087
- }), re2.appendChild(s3);
7141
+ let t3 = e5 * 30, n3 = (e5 + 1) * 30, r3 = Y(t3, y_, y2), i3 = Y(n3, y_, y2), a3 = Y(t3, b_, y2), o3 = Y(n3, b_, y2), s3 = X("path");
7142
+ s3.setAttribute("d", ["M ".concat(r3.x.toFixed(1), " ").concat(r3.y.toFixed(1)), "A ".concat(y_, " ").concat(y_, " 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(b_, " ").concat(b_, " 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", Iv(s3, "".concat(k_[e5], " \u2014 click for sign info"));
7143
+ let c3 = Z(ev[e5]), l3 = Z(tv[e5]), u3 = (ue2 = le2[k_[e5]]) == null ? "" : ue2, d3 = (de2 = J_[k_[e5]]) == null ? "" : de2, f3 = "".concat(d3 ? d3 + " \xB7 " : "").concat(c3, " \xB7 ").concat(l3).concat(u3 ? " \xB7 Ruled by ".concat(u3) : "");
7144
+ s3.addEventListener("mouseenter", (t4) => W_(t4.clientX, t4.clientY, "".concat(O_[e5], " ").concat(k_[e5]), f3, "Click for sign detail")), s3.addEventListener("mousemove", (t4) => W_(t4.clientX, t4.clientY, "".concat(O_[e5], " ").concat(k_[e5]), f3, "Click for sign detail")), s3.addEventListener("mouseleave", G_), s3.addEventListener("click", (t4) => {
7145
+ G_(), lv == null || lv("".concat(O_[e5], " ").concat(k_[e5])), _v(t4, e5, _2);
7146
+ }), ne2.appendChild(s3);
7088
7147
  }
7089
7148
  let fe2 = X("circle");
7090
- if (fe2.setAttribute("cx", "250"), fe2.setAttribute("cy", "250"), fe2.setAttribute("r", String(__)), fe2.style.fill = "var(--bg, #faf9f5)", fe2.setAttribute("stroke", E2 ? "#2d3548" : "#c0b8a8"), fe2.setAttribute("stroke-width", "0.5"), fe2.setAttribute("pointer-events", "none"), C2.appendChild(fe2), v2.length > 0) for (let e5 = 0; e5 < v2.length; e5++) {
7091
- let t3 = v2[e5], n3 = v2[(e5 + 1) % v2.length], r3 = [1, 4, 7, 10].includes(t3.number), { x: i3, y: a3 } = Y(t3.cusp_lon, __, y2), { x: o3, y: s3 } = Y(t3.cusp_lon, m_, y2), c3 = X("line");
7149
+ if (fe2.setAttribute("cx", "250"), fe2.setAttribute("cy", "250"), fe2.setAttribute("r", String(C_)), fe2.style.fill = "var(--bg, #faf9f5)", fe2.setAttribute("stroke", E2 ? "#2d3548" : "#c0b8a8"), fe2.setAttribute("stroke-width", "0.5"), fe2.setAttribute("pointer-events", "none"), C2.appendChild(fe2), v2.length > 0) for (let e5 = 0; e5 < v2.length; e5++) {
7150
+ let t3 = v2[e5], n3 = v2[(e5 + 1) % v2.length], r3 = [1, 4, 7, 10].includes(t3.number), { x: i3, y: a3 } = Y(t3.cusp_lon, C_, y2), { x: o3, y: s3 } = Y(t3.cusp_lon, b_, y2), c3 = X("line");
7092
7151
  c3.setAttribute("x1", i3.toFixed(1)), c3.setAttribute("y1", a3.toFixed(1)), c3.setAttribute("x2", o3.toFixed(1)), c3.setAttribute("y2", s3.toFixed(1)), c3.setAttribute("stroke", r3 ? "#7060b8" : E2 ? "#3a3450" : "#a89898"), c3.setAttribute("stroke-width", r3 ? "1.5" : "0.7"), c3.setAttribute("pointer-events", "none"), C2.appendChild(c3);
7093
- let l3 = (n3.cusp_lon - t3.cusp_lon + 360) % 360, { x: u3, y: d3 } = Y(t3.cusp_lon + l3 / 2, g_, y2), f3 = X("text");
7152
+ let l3 = (n3.cusp_lon - t3.cusp_lon + 360) % 360, { x: u3, y: d3 } = Y(t3.cusp_lon + l3 / 2, S_, y2), f3 = X("text");
7094
7153
  f3.setAttribute("x", u3.toFixed(1)), f3.setAttribute("y", d3.toFixed(1)), f3.setAttribute("text-anchor", "middle"), f3.setAttribute("dominant-baseline", "central"), f3.setAttribute("font-size", "9"), f3.setAttribute("fill", r3 ? "#7060b8" : "#90808a"), f3.setAttribute("pointer-events", "none"), f3.textContent = String(t3.number), C2.appendChild(f3);
7095
7154
  }
7096
7155
  let pe2 = v2.find((e5) => e5.number === 1), me2 = v2.find((e5) => e5.number === 4), he2 = v2.find((e5) => e5.number === 7), ge2 = v2.find((e5) => e5.number === 10), _e2 = [{ lon: (f2 = pe2 == null ? void 0 : pe2.cusp_lon) == null ? y2 : f2, label: "ASC" }, { lon: (p2 = he2 == null ? void 0 : he2.cusp_lon) == null ? (y2 + 180) % 360 : p2, label: "DSC" }, { lon: (m2 = ge2 == null ? void 0 : ge2.cusp_lon) == null ? (y2 + 270) % 360 : m2, label: "MC" }, { lon: (h2 = me2 == null ? void 0 : me2.cusp_lon) == null ? (y2 + 90) % 360 : h2, label: "IC" }];
7097
7156
  for (let e5 of _e2) {
7098
7157
  var ve2, ye2;
7099
- let t3 = dv[e5.label], { x: n3, y: r3 } = Y(e5.lon, 256, y2), i3 = X("text");
7158
+ let t3 = vv[e5.label], { x: n3, y: r3 } = Y(e5.lon, 256, y2);
7159
+ n3 = Math.min(Math.max(n3, 14), 486), r3 = Math.min(Math.max(r3, 10), 490);
7160
+ let i3 = X("text");
7100
7161
  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", "#7060b8"), i3.setAttribute("pointer-events", "none"), i3.setAttribute("class", "angle-label angle-".concat(e5.label.toLowerCase())), i3.style.transition = "opacity 150ms ease", i3.textContent = e5.label, C2.appendChild(i3);
7101
7162
  let a3 = X("circle");
7102
- 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", kv(a3, "".concat((ve2 = t3 == null ? void 0 : t3.title) == null ? e5.label : ve2, " \u2014 click for interpretation"));
7103
- let o3 = (ye2 = t3 == null ? void 0 : t3.keyword) == null ? "" : ye2, s3 = j_(e5.lon), c3 = "".concat(o3 ? o3 + " \xB7 " : "").concat(s3);
7163
+ 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", Iv(a3, "".concat((ve2 = t3 == null ? void 0 : t3.title) == null ? e5.label : ve2, " \u2014 click for interpretation"));
7164
+ let o3 = (ye2 = t3 == null ? void 0 : t3.keyword) == null ? "" : ye2, s3 = R_(e5.lon), c3 = "".concat(o3 ? o3 + " \xB7 " : "").concat(s3);
7104
7165
  a3.addEventListener("mouseenter", (n4) => {
7105
7166
  var r4;
7106
- L_(n4.clientX, n4.clientY, "".concat(e5.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4), c3, "Click for interpretation"), gv(e5.lon), i3.style.opacity = "0.6";
7167
+ W_(n4.clientX, n4.clientY, "".concat(e5.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4), c3, "Click for interpretation"), Cv(e5.lon), i3.style.opacity = "0.6";
7107
7168
  }), a3.addEventListener("mouseleave", () => {
7108
- R_(), _v(), i3.style.opacity = "";
7169
+ G_(), wv(), i3.style.opacity = "";
7109
7170
  }), a3.addEventListener("click", (n4) => {
7110
7171
  var r4;
7111
- R_(), gv(e5.lon, true), bv(), nv == null || nv("".concat(e5.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4, " \xB7 ").concat(s3)), fv(n4, e5.label, e5.lon);
7112
- }), re2.appendChild(a3);
7172
+ G_(), Cv(e5.lon, true), Dv(), lv == null || lv("".concat(e5.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4, " \xB7 ").concat(s3)), yv(n4, e5.label, e5.lon);
7173
+ }), ne2.appendChild(a3);
7113
7174
  }
7114
7175
  {
7115
7176
  let e5 = X("g");
7116
7177
  e5.setAttribute("pointer-events", "none");
7117
- let t3 = d_ - 50, n3 = f_ - 50;
7178
+ let t3 = __ - 50, n3 = v_ - 50;
7118
7179
  e5.setAttribute("transform", "translate(".concat(t3, ",").concat(n3, ") scale(").concat(0.5813953488372093.toFixed(4), ") translate(-69,-110)")), e5.setAttribute("opacity", E2 ? "0.08" : "0.05");
7119
7180
  let r3 = X("path");
7120
7181
  r3.setAttribute("fill", E2 ? "#F0DFC3" : "#6366f1"), 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"), e5.appendChild(r3), x2.appendChild(e5);
7121
7182
  }
7122
7183
  for (let e5 of ee2) {
7123
- var be2, xe2, D2, Se2, O2, Ce2, we2, Te2, Ee2, De2, Oe2, ke2, Ae2, je2, Me2, Ne2;
7184
+ var be2, xe2, D2, Se2, O2, Ce2, we2, Te2, Ee2, De2, Oe2, ke2, Ae2, je2, Me2, Ne2, Pe2, Fe2, Ie2;
7124
7185
  let t3 = _2.find((t4) => t4.name.toLowerCase() === e5.planet1.toLowerCase()), n3 = _2.find((t4) => t4.name.toLowerCase() === e5.planet2.toLowerCase());
7125
7186
  if (!t3 || !n3) continue;
7126
- let r3 = (be2 = T_((xe2 = e5.type) == null ? "" : xe2)) == null ? "#aaa" : be2, { x: a3, y: o3 } = Y(t3.longitude, v_, y2), { x: s3, y: c3 } = Y(n3.longitude, v_, y2), l3 = Math.min((D2 = e5.orb) == null ? 10 : D2, 10), u3 = 0.55 - l3 / 10 * 0.38, d3 = X("line");
7127
- 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.2" : "0.8", te2.appendChild(d3);
7128
- let f3 = X("line");
7129
- f3.setAttribute("x1", a3.toFixed(1)), f3.setAttribute("y1", o3.toFixed(1)), f3.setAttribute("x2", s3.toFixed(1)), f3.setAttribute("y2", c3.toFixed(1)), f3.setAttribute("stroke", "transparent"), f3.setAttribute("stroke-width", "13"), f3.setAttribute("fill", "none"), f3.setAttribute("class", "hit-region aspect-hit"), f3.style.pointerEvents = "all", kv(f3, "Aspect: ".concat((Se2 = e5.type) == null ? "Aspect" : Se2, " between ").concat(t3.name, " and ").concat(n3.name));
7130
- let p3 = (O2 = x_[t3.name.toLowerCase()]) == null ? t3.name : O2, m3 = (Ce2 = x_[n3.name.toLowerCase()]) == null ? n3.name : Ce2, h3 = (we2 = (Te2 = w_[(Ee2 = (De2 = e5.type) == null ? void 0 : De2.toLowerCase()) == null ? "" : Ee2]) == null ? e5.type : Te2) == null ? "" : we2, g3 = (Oe2 = H_[(ke2 = (Ae2 = e5.type) == null ? void 0 : Ae2.toLowerCase()) == null ? "" : ke2]) == null ? "" : Oe2, v3 = "".concat(g3 ? g3 + " \xB7 " : "").concat(p3, " ").concat(h3, " ").concat(m3, " \xB7 ").concat((je2 = (Me2 = e5.orb) == null ? void 0 : Me2.toFixed(1)) == null ? "?" : je2, "\xB0 orb").concat(e5.applying === true ? " (applying)" : e5.applying === false ? " (separating)" : "");
7131
- f3.addEventListener("mouseenter", (t4) => {
7187
+ let r3 = (be2 = j_((xe2 = e5.type) == null ? "" : xe2)) == null ? "#aaa" : be2, { x: a3, y: o3 } = Y(t3.longitude, w_, y2), { x: s3, y: c3 } = Y(n3.longitude, w_, y2), l3 = Math.min((D2 = e5.orb) == null ? 10 : D2, 10), u3 = 0.55 - l3 / 10 * 0.38, d3 = X("line");
7188
+ 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.2" : "0.8", w2.appendChild(d3);
7189
+ let f3 = (Se2 = A_[(O2 = (Ce2 = e5.type) == null ? void 0 : Ce2.toLowerCase()) == null ? "" : O2]) == null ? "" : Se2, p3 = a3 + (s3 - a3) * 0.35, m3 = o3 + (c3 - o3) * 0.35, h3 = [];
7190
+ if (f3 && Math.hypot(s3 - a3, c3 - o3) > 36) {
7191
+ let e6 = X("circle");
7192
+ e6.setAttribute("cx", p3.toFixed(1)), e6.setAttribute("cy", m3.toFixed(1)), e6.setAttribute("r", "7"), e6.setAttribute("fill", "var(--bg, #0a0a10)"), e6.setAttribute("stroke", r3), e6.setAttribute("stroke-opacity", "0.30"), e6.setAttribute("stroke-width", "0.6"), e6.setAttribute("pointer-events", "none"), w2.appendChild(e6), h3.push(e6);
7193
+ let t4 = X("text");
7194
+ 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", "8.5"), t4.setAttribute("fill", r3), t4.setAttribute("fill-opacity", String(Math.min(u3 + 0.35, 1))), t4.setAttribute("pointer-events", "none"), t4.textContent = f3, w2.appendChild(t4), h3.push(t4);
7195
+ }
7196
+ let g3 = X("line");
7197
+ 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", Iv(g3, "Aspect: ".concat((we2 = e5.type) == null ? "Aspect" : we2, " between ").concat(t3.name, " and ").concat(n3.name));
7198
+ let v3 = (Te2 = D_[t3.name.toLowerCase()]) == null ? t3.name : Te2, ee3 = (Ee2 = D_[n3.name.toLowerCase()]) == null ? n3.name : Ee2, b3 = (De2 = (Oe2 = A_[(ke2 = (Ae2 = e5.type) == null ? void 0 : Ae2.toLowerCase()) == null ? "" : ke2]) == null ? e5.type : Oe2) == null ? "" : De2, x3 = (je2 = Y_[(Me2 = (Ne2 = e5.type) == null ? void 0 : Ne2.toLowerCase()) == null ? "" : Me2]) == null ? "" : je2, S3 = "".concat(x3 ? x3 + " \xB7 " : "").concat(v3, " ").concat(b3, " ").concat(ee3, " \xB7 ").concat((Pe2 = (Fe2 = e5.orb) == null ? void 0 : Fe2.toFixed(1)) == null ? "?" : Pe2, "\xB0 orb").concat(e5.applying === true ? " (applying)" : e5.applying === false ? " (separating)" : "");
7199
+ g3.addEventListener("mouseenter", (t4) => {
7132
7200
  var n4;
7133
- return L_(t4.clientX, t4.clientY, Z((n4 = e5.type) == null ? "Aspect" : n4), v3, "Click for interpretation");
7134
- }), f3.addEventListener("mousemove", (t4) => {
7201
+ return W_(t4.clientX, t4.clientY, Z((n4 = e5.type) == null ? "Aspect" : n4), S3, "Click for interpretation");
7202
+ }), g3.addEventListener("mousemove", (t4) => {
7135
7203
  var n4;
7136
- return L_(t4.clientX, t4.clientY, Z((n4 = e5.type) == null ? "Aspect" : n4), v3, "Click for interpretation");
7137
- }), f3.addEventListener("mouseleave", R_), f3.addEventListener("click", (t4) => {
7204
+ return W_(t4.clientX, t4.clientY, Z((n4 = e5.type) == null ? "Aspect" : n4), S3, "Click for interpretation");
7205
+ }), g3.addEventListener("mouseleave", G_), g3.addEventListener("click", (t4) => {
7138
7206
  var n4, r4, a4, o4, s4, c4;
7139
- R_();
7140
- let l4 = "".concat((n4 = w_[(r4 = (a4 = e5.type) == null ? void 0 : a4.toLowerCase()) == null ? "" : r4]) == null ? "" : n4, " ").concat(Z((o4 = e5.type) == null ? "Aspect" : o4), ": ").concat((s4 = x_[e5.planet1.toLowerCase()]) == null ? e5.planet1 : s4, " ").concat((c4 = x_[e5.planet2.toLowerCase()]) == null ? e5.planet2 : c4);
7141
- nv == null || nv(l4), sv(t4, e5, _2), i2(e5);
7207
+ G_();
7208
+ let l4 = "".concat((n4 = A_[(r4 = (a4 = e5.type) == null ? void 0 : a4.toLowerCase()) == null ? "" : r4]) == null ? "" : n4, " ").concat(Z((o4 = e5.type) == null ? "Aspect" : o4), ": ").concat((s4 = D_[e5.planet1.toLowerCase()]) == null ? e5.planet1 : s4, " ").concat((c4 = D_[e5.planet2.toLowerCase()]) == null ? e5.planet2 : c4);
7209
+ lv == null || lv(l4), mv(t4, e5, _2), i2(e5);
7142
7210
  });
7143
- let ee3 = [e5.planet1.toLowerCase(), e5.planet2.toLowerCase()].sort().join("|"), b3 = ((Ne2 = e5.type) == null ? "unknown" : Ne2).toLowerCase();
7144
- iv.set(ee3, { vis: d3, color: r3, baseOpacity: String(u3), baseWidth: l3 < 2 ? "1.2" : "0.8", aspectType: b3, orb: l3 }), re2.appendChild(f3);
7211
+ let C3 = [e5.planet1.toLowerCase(), e5.planet2.toLowerCase()].sort().join("|"), te3 = ((Ie2 = e5.type) == null ? "unknown" : Ie2).toLowerCase();
7212
+ dv.set(C3, { vis: d3, color: r3, baseOpacity: String(u3), baseWidth: l3 < 2 ? "1.2" : "0.8", aspectType: te3, orb: l3, symbolEls: h3 }), ne2.appendChild(g3);
7145
7213
  }
7146
- let Pe2 = _2.filter((e5) => !k_.has(e5.name.toLowerCase())), Fe2 = _2.filter((e5) => k_.has(e5.name.toLowerCase())), Ie2 = a_(Pe2.map((e5) => ({ name: e5.name.toLowerCase(), longitude: e5.longitude })), 8), Le2 = a_(Fe2.map((e5) => ({ name: e5.name.toLowerCase(), longitude: e5.longitude })), 6), Re2 = new Map([...Ie2.entries(), ...Le2.entries()]);
7214
+ let Le2 = _2.filter((e5) => !I_.has(e5.name.toLowerCase())), Re2 = _2.filter((e5) => I_.has(e5.name.toLowerCase())), k2 = d_(Le2.map((e5) => ({ name: e5.name.toLowerCase(), longitude: e5.longitude })), 8), ze2 = d_(Re2.map((e5) => ({ name: e5.name.toLowerCase(), longitude: e5.longitude })), 6), Be2 = new Map([...k2.entries(), ...ze2.entries()]);
7147
7215
  for (let e5 of _2) {
7148
- var k2, ze2, Be2, Ve2;
7149
- let t3 = (k2 = x_[e5.name.toLowerCase()]) == null ? "\u2605" : k2, r3 = D_(e5.name), i3 = e5.name.toLowerCase(), a3 = k_.has(i3), o3 = a3 ? h_ - 14 : h_, s3 = a3 ? h_ - 28 : h_ - 17, c3 = a3 ? h_ : 204, l3 = a3 ? "13" : "18", u3 = a3 ? "500" : "600", d3 = a3 ? y_ - 2 : y_, f3 = a3 ? "0.65" : "1", p3 = (ze2 = Re2.get(i3)) == null ? e5.longitude : ze2, { x: m3, y: h3 } = Y(p3, o3, y2), g3 = X("g");
7150
- g3.setAttribute("class", "planet-glyph-group".concat(a3 ? " extended-body" : "")), g3.dataset.planet = i3, g3.style.transition = "opacity 200ms ease", g3.style.opacity = f3, ne2.appendChild(g3);
7151
- let { x: _3, y: v3 } = Y(e5.longitude, m_ - 5, y2), b3 = X("circle");
7152
- if (b3.setAttribute("cx", _3.toFixed(1)), b3.setAttribute("cy", v3.toFixed(1)), b3.setAttribute("r", a3 ? "1.8" : "2.5"), b3.setAttribute("fill", r3), b3.setAttribute("opacity", "0.65"), b3.setAttribute("pointer-events", "none"), g3.appendChild(b3), l_(e5.longitude, p3) > 2) {
7216
+ var Ve2, He2, Ue2, We2;
7217
+ let t3 = (Ve2 = D_[e5.name.toLowerCase()]) == null ? "\u2605" : Ve2;
7218
+ P_(e5.name);
7219
+ let r3 = e5.name.toLowerCase(), i3 = I_.has(r3), a3 = i3 ? x_ - 14 : x_, o3 = i3 ? x_ - 28 : x_ - 17, s3 = i3 ? x_ : 204, c3 = i3 ? "13" : "18", l3 = i3 ? "500" : "600", u3 = i3 ? T_ - 2 : T_, d3 = i3 ? "0.65" : "1", f3 = (He2 = Be2.get(r3)) == null ? e5.longitude : He2, { x: p3, y: m3 } = Y(f3, a3, y2), h3 = X("g");
7220
+ 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);
7221
+ let { x: g3, y: _3 } = Y(e5.longitude, b_ - 5, y2), v3 = X("circle");
7222
+ if (v3.setAttribute("cx", g3.toFixed(1)), v3.setAttribute("cy", _3.toFixed(1)), v3.setAttribute("r", i3 ? "1.8" : "2.5"), v3.setAttribute("fill", s_(E2).house), v3.setAttribute("opacity", "0.65"), v3.setAttribute("pointer-events", "none"), h3.appendChild(v3), h_(e5.longitude, f3) > 2) {
7153
7223
  let e6 = X("line");
7154
- e6.setAttribute("x1", _3.toFixed(1)), e6.setAttribute("y1", v3.toFixed(1)), e6.setAttribute("x2", m3.toFixed(1)), e6.setAttribute("y2", h3.toFixed(1)), e6.setAttribute("stroke", r3), e6.setAttribute("stroke-width", "0.7"), e6.setAttribute("stroke-opacity", "0.35"), e6.setAttribute("stroke-linecap", "round"), e6.setAttribute("pointer-events", "none"), g3.appendChild(e6);
7224
+ e6.setAttribute("x1", g3.toFixed(1)), e6.setAttribute("y1", _3.toFixed(1)), e6.setAttribute("x2", p3.toFixed(1)), e6.setAttribute("y2", m3.toFixed(1)), e6.setAttribute("stroke", s_(E2).house), e6.setAttribute("stroke-width", "0.7"), e6.setAttribute("stroke-opacity", "0.35"), e6.setAttribute("stroke-linecap", "round"), e6.setAttribute("pointer-events", "none"), h3.appendChild(e6);
7155
7225
  }
7156
- let x3 = X("text");
7157
- x3.setAttribute("x", m3.toFixed(1)), x3.setAttribute("y", h3.toFixed(1)), x3.setAttribute("text-anchor", "middle"), x3.setAttribute("dominant-baseline", "central"), x3.setAttribute("font-size", l3), x3.setAttribute("font-weight", u3), x3.setAttribute("pointer-events", "none"), x3.style.fill = r3, x3.style.fontFamily = "serif", x3.textContent = t3, g3.appendChild(x3);
7158
- let S3 = Math.floor((e5.longitude % 360 + 360) % 360 % 30), { x: C3, y: te3 } = Y(p3, s3, y2), w3 = X("text");
7159
- if (w3.setAttribute("x", C3.toFixed(1)), w3.setAttribute("y", te3.toFixed(1)), w3.setAttribute("text-anchor", "middle"), w3.setAttribute("dominant-baseline", "central"), w3.setAttribute("font-size", a3 ? "7" : "8.5"), w3.setAttribute("font-weight", "500"), w3.setAttribute("fill", "#9080a0"), w3.setAttribute("pointer-events", "none"), w3.textContent = "".concat(S3, "\xB0"), g3.appendChild(w3), e5.retrograde) {
7160
- let { x: e6, y: t4 } = Y(p3, c3, y2), n3 = X("text");
7161
- n3.setAttribute("x", e6.toFixed(1)), n3.setAttribute("y", t4.toFixed(1)), n3.setAttribute("text-anchor", "middle"), n3.setAttribute("dominant-baseline", "central"), n3.setAttribute("font-size", a3 ? "6" : "8"), n3.setAttribute("fill", "#e05252"), n3.setAttribute("pointer-events", "none"), n3.textContent = "\u211E", g3.appendChild(n3);
7226
+ let b3 = X("text");
7227
+ 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 = s_(E2).ink, b3.style.fontFamily = "serif", b3.textContent = t3, h3.appendChild(b3);
7228
+ let x3 = Math.floor((e5.longitude % 360 + 360) % 360 % 30), { x: S3, y: C3 } = Y(f3, o3, y2), w3 = X("text");
7229
+ 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", "#9080a0"), w3.setAttribute("pointer-events", "none"), w3.textContent = "".concat(x3, "\xB0"), h3.appendChild(w3), e5.retrograde) {
7230
+ let { x: e6, y: t4 } = Y(f3, s3, y2), n3 = X("text");
7231
+ n3.setAttribute("x", e6.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);
7162
7232
  }
7163
7233
  let T3 = X("circle");
7164
- T3.setAttribute("cx", m3.toFixed(1)), T3.setAttribute("cy", h3.toFixed(1)), T3.setAttribute("r", String(d3)), T3.setAttribute("fill", "transparent"), T3.setAttribute("class", "hit-region planet-hit"), T3.dataset.planet = i3, T3.style.pointerEvents = "all", kv(T3, "".concat(a3 ? "Extended body" : "Planet", ": ").concat(e5.name));
7165
- let E3 = (Be2 = z_[e5.name.toLowerCase()]) == null ? "" : Be2, ie3 = e5.house ? (Ve2 = B_[e5.house]) == null ? "" : Ve2 : "", ae3 = "".concat(E3 ? E3 + " \xB7 " : "").concat(j_(e5.longitude)).concat(e5.house ? " \xB7 H".concat(e5.house).concat(ie3 ? " (" + ie3 + ")" : "") : "").concat(e5.retrograde ? " \u211E" : "");
7234
+ 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", Iv(T3, "".concat(i3 ? "Extended body" : "Planet", ": ").concat(e5.name));
7235
+ let re3 = (Ue2 = K_[e5.name.toLowerCase()]) == null ? "" : Ue2, ie3 = e5.house ? (We2 = q_[e5.house]) == null ? "" : We2 : "", ae3 = "".concat(re3 ? re3 + " \xB7 " : "").concat(R_(e5.longitude)).concat(e5.house ? " \xB7 H".concat(e5.house).concat(ie3 ? " (" + ie3 + ")" : "") : "").concat(e5.retrograde ? " \u211E" : "");
7166
7236
  T3.addEventListener("mouseenter", (n3) => {
7167
- L_(n3.clientX, n3.clientY, "".concat(t3, " ").concat(Z(e5.name)), ae3, "Click for aspects"), gv(e5.longitude);
7168
- }), T3.addEventListener("mousemove", (n3) => L_(n3.clientX, n3.clientY, "".concat(t3, " ").concat(Z(e5.name)), ae3, "Click for aspects")), T3.addEventListener("mouseleave", () => {
7169
- R_(), $_ !== e5.name.toLowerCase() && _v();
7237
+ W_(n3.clientX, n3.clientY, "".concat(t3, " ").concat(Z(e5.name)), ae3, "Click for aspects"), Cv(e5.longitude);
7238
+ }), T3.addEventListener("mousemove", (n3) => W_(n3.clientX, n3.clientY, "".concat(t3, " ").concat(Z(e5.name)), ae3, "Click for aspects")), T3.addEventListener("mouseleave", () => {
7239
+ G_(), ov !== e5.name.toLowerCase() && wv();
7170
7240
  }), T3.addEventListener("click", (t4) => {
7171
7241
  var r4;
7172
- if (R_(), $_ === e5.name.toLowerCase()) {
7173
- xv(), pv(), _v(), nv == null || nv(null);
7242
+ if (G_(), ov === e5.name.toLowerCase()) {
7243
+ Ov(), bv(), wv(), lv == null || lv(null);
7174
7244
  return;
7175
7245
  }
7176
- $_ = e5.name.toLowerCase();
7177
- let i4 = (r4 = x_[e5.name.toLowerCase()]) == null ? "" : r4;
7178
- nv == null || nv("".concat(i4, " ").concat(Z(e5.name), " in ").concat(j_(e5.longitude))), gv(e5.longitude, true), vv(e5.name), ov(t4, e5, ee2), n2(e5);
7179
- }), re2.appendChild(T3);
7246
+ ov = e5.name.toLowerCase();
7247
+ let i4 = (r4 = D_[e5.name.toLowerCase()]) == null ? "" : r4;
7248
+ lv == null || lv("".concat(i4, " ").concat(Z(e5.name), " in ").concat(R_(e5.longitude))), Cv(e5.longitude, true), Tv(e5.name), pv(t4, e5, ee2), n2(e5);
7249
+ }), ne2.appendChild(T3);
7180
7250
  }
7181
7251
  for (let e5 = 0; e5 < v2.length; e5++) {
7182
- var He2, Ue2, We2;
7183
- let t3 = v2[e5], n3 = v2[(e5 + 1) % v2.length], i3 = Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30), a3 = (He2 = (Ue2 = t3.sign) == null ? C_[i3] : Ue2) == null ? "" : He2, o3 = (We2 = B_[t3.number]) == null ? "" : We2, s3 = "".concat(o3 ? o3 + " \xB7 " : "").concat(j_(t3.cusp_lon), " \xB7 ").concat(a3), { x: c3, y: l3 } = Y(t3.cusp_lon, __, y2), { x: u3, y: d3 } = Y(t3.cusp_lon, m_, y2), f3 = X("line");
7184
- 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(b_)), f3.setAttribute("fill", "none"), f3.setAttribute("class", "hit-region"), f3.style.pointerEvents = "all", kv(f3, "House ".concat(t3.number, " Cusp")), f3.addEventListener("mouseenter", (e6) => {
7185
- L_(e6.clientX, e6.clientY, "House ".concat(t3.number), s3, "Click for meaning"), gv(t3.cusp_lon);
7186
- }), f3.addEventListener("mousemove", (e6) => L_(e6.clientX, e6.clientY, "House ".concat(t3.number), s3, "Click for meaning")), f3.addEventListener("mouseleave", () => {
7187
- R_(), _v();
7252
+ var Ge2, Ke2, qe2;
7253
+ let t3 = v2[e5], n3 = v2[(e5 + 1) % v2.length], i3 = Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30), a3 = (Ge2 = (Ke2 = t3.sign) == null ? k_[i3] : Ke2) == null ? "" : Ge2, o3 = (qe2 = q_[t3.number]) == null ? "" : qe2, s3 = "".concat(o3 ? o3 + " \xB7 " : "").concat(R_(t3.cusp_lon), " \xB7 ").concat(a3), { x: c3, y: l3 } = Y(t3.cusp_lon, C_, y2), { x: u3, y: d3 } = Y(t3.cusp_lon, b_, y2), f3 = X("line");
7254
+ 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(E_)), f3.setAttribute("fill", "none"), f3.setAttribute("class", "hit-region"), f3.style.pointerEvents = "all", Iv(f3, "House ".concat(t3.number, " Cusp")), f3.addEventListener("mouseenter", (e6) => {
7255
+ W_(e6.clientX, e6.clientY, "House ".concat(t3.number), s3, "Click for meaning"), Cv(t3.cusp_lon);
7256
+ }), f3.addEventListener("mousemove", (e6) => W_(e6.clientX, e6.clientY, "House ".concat(t3.number), s3, "Click for meaning")), f3.addEventListener("mouseleave", () => {
7257
+ G_(), wv();
7188
7258
  }), f3.addEventListener("click", (e6) => {
7189
7259
  var n4, i4;
7190
- R_();
7191
- let a4 = (n4 = (i4 = t3.sign) == null ? C_[Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30)] : i4) == null ? "" : n4;
7192
- nv == null || nv("House ".concat(t3.number, " \xB7 ").concat(a4)), cv(e6, t3, _2), r2(t3);
7193
- }), re2.appendChild(f3);
7194
- let p3 = (n3.cusp_lon - t3.cusp_lon + 360) % 360, { x: m3, y: h3 } = Y(t3.cusp_lon + p3 / 2, g_, y2), g3 = X("circle");
7195
- 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", kv(g3, "House ".concat(t3.number, " Area")), g3.addEventListener("mouseenter", (e6) => L_(e6.clientX, e6.clientY, "House ".concat(t3.number), s3, "Click for meaning")), g3.addEventListener("mousemove", (e6) => L_(e6.clientX, e6.clientY, "House ".concat(t3.number), s3, "Click for meaning")), g3.addEventListener("mouseleave", () => {
7196
- R_();
7260
+ G_();
7261
+ let a4 = (n4 = (i4 = t3.sign) == null ? k_[Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30)] : i4) == null ? "" : n4;
7262
+ lv == null || lv("House ".concat(t3.number, " \xB7 ").concat(a4)), hv(e6, t3, _2), r2(t3);
7263
+ }), ne2.appendChild(f3);
7264
+ let p3 = (n3.cusp_lon - t3.cusp_lon + 360) % 360, { x: m3, y: h3 } = Y(t3.cusp_lon + p3 / 2, S_, y2), g3 = X("circle");
7265
+ 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", Iv(g3, "House ".concat(t3.number, " Area")), g3.addEventListener("mouseenter", (e6) => W_(e6.clientX, e6.clientY, "House ".concat(t3.number), s3, "Click for meaning")), g3.addEventListener("mousemove", (e6) => W_(e6.clientX, e6.clientY, "House ".concat(t3.number), s3, "Click for meaning")), g3.addEventListener("mouseleave", () => {
7266
+ G_();
7197
7267
  }), g3.addEventListener("click", (e6) => {
7198
7268
  var n4, i4;
7199
- R_();
7200
- let a4 = (n4 = (i4 = t3.sign) == null ? C_[Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30)] : i4) == null ? "" : n4;
7201
- nv == null || nv("House ".concat(t3.number, " \xB7 ").concat(a4)), cv(e6, t3, _2), r2(t3);
7202
- }), re2.appendChild(g3);
7269
+ G_();
7270
+ let a4 = (n4 = (i4 = t3.sign) == null ? k_[Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30)] : i4) == null ? "" : n4;
7271
+ lv == null || lv("House ".concat(t3.number, " \xB7 ").concat(a4)), hv(e6, t3, _2), r2(t3);
7272
+ }), ne2.appendChild(g3);
7203
7273
  }
7204
- ev && document.removeEventListener("click", ev, false), ev = (e5) => {
7274
+ sv && document.removeEventListener("click", sv, false), sv = (e5) => {
7205
7275
  let t3 = e5.target;
7206
- t3 && typeof t3.closest == "function" && !t3.closest(".hit-region") && !t3.closest("#info-panel") && !t3.closest("#patterns-strip") && (xv(), pv());
7207
- }, document.addEventListener("click", ev, false);
7276
+ t3 && typeof t3.closest == "function" && !t3.closest(".hit-region") && !t3.closest("#info-panel") && !t3.closest("#patterns-strip") && (Ov(), bv());
7277
+ }, document.addEventListener("click", sv, false);
7208
7278
  }
7209
- function kv(e4, t2) {
7279
+ function Iv(e4, t2) {
7210
7280
  e4 && (e4.setAttribute("tabindex", "0"), e4.setAttribute("role", "button"), e4.setAttribute("aria-label", t2), e4.addEventListener("keydown", (t3) => {
7211
7281
  let n2 = t3;
7212
7282
  (n2.key === "Enter" || n2.key === " ") && (n2.preventDefault(), e4.dispatchEvent(new MouseEvent("click", { bubbles: true, cancelable: true })));
7213
7283
  }));
7214
7284
  }
7215
- var Av = [{ label: "Placidus", value: "placidus" }, { label: "Whole Sign", value: "whole_sign" }, { label: "Equal", value: "equal" }, { label: "Koch", value: "koch" }, { label: "Regio.", value: "regiomontanus" }];
7216
- function jv(e4, t2, n2) {
7285
+ var Lv = [{ label: "Placidus", value: "placidus" }, { label: "Whole Sign", value: "whole_sign" }, { label: "Equal", value: "equal" }, { label: "Koch", value: "koch" }, { label: "Regio.", value: "regiomontanus" }];
7286
+ function Rv(e4, t2, n2) {
7217
7287
  e4.innerHTML = "";
7218
7288
  let r2 = document.createElement("span");
7219
7289
  r2.className = "controls-label", r2.textContent = "Houses:", e4.appendChild(r2);
7220
- for (let r3 of Av) {
7290
+ for (let r3 of Lv) {
7221
7291
  let i2 = document.createElement("button");
7222
7292
  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", () => {
7223
7293
  e4.querySelectorAll(".control-btn").forEach((e5) => e5.classList.remove("active")), i2.classList.add("active"), i2.disabled = true, i2.textContent = "".concat(r3.label, " \u2026"), n2(r3.value);
7224
7294
  }), e4.appendChild(i2);
7225
7295
  }
7226
7296
  }
7227
- function Mv(e4, t2) {
7297
+ function zv(e4, t2) {
7228
7298
  e4.querySelectorAll(".control-btn").forEach((e5) => {
7229
7299
  var n2;
7230
7300
  let r2 = e5.getAttribute("data-system");
7231
7301
  e5.disabled = false;
7232
- let i2 = Av.find((e6) => e6.value === r2);
7302
+ let i2 = Lv.find((e6) => e6.value === r2);
7233
7303
  e5.textContent = (n2 = i2 == null ? void 0 : i2.label) == null ? r2 : n2, e5.classList.toggle("active", r2 === t2);
7234
7304
  });
7235
7305
  }
7236
- function Nv(e4) {
7306
+ function Bv(e4) {
7237
7307
  return e4.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
7238
7308
  }
7239
- function Pv(e4) {
7309
+ function Vv(e4) {
7240
7310
  return e4.replace(/_/g, " ").replace(/\b\w/g, (e5) => e5.toUpperCase());
7241
7311
  }
7242
- function Fv(e4) {
7243
- let t2 = e4.filter((e5) => e5.items.length > 0).map((e5) => '<div class="legend-group"><span class="legend-group-title">'.concat(Nv(e5.title), "</span>") + e5.items.map((e6) => '<span class="legend-item"><span class="legend-glyph">'.concat(Nv(e6.glyph), "</span>").concat(Nv(e6.label), "</span>")).join("") + "</div>").join("");
7312
+ function Hv(e4) {
7313
+ let t2 = e4.filter((e5) => e5.items.length > 0).map((e5) => '<div class="legend-group"><span class="legend-group-title">'.concat(Bv(e5.title), "</span>") + e5.items.map((e6) => '<span class="legend-item"><span class="legend-glyph">'.concat(Bv(e6.glyph), "</span>").concat(Bv(e6.label), "</span>")).join("") + "</div>").join("");
7244
7314
  return t2 ? '<details class="glyph-legend"><summary><span class="legend-spark">\u2726</span> Legend</summary><div class="legend-body">'.concat(t2, "</div></details>") : "";
7245
7315
  }
7246
- var Iv = class {
7316
+ var Uv = class {
7247
7317
  constructor(e4) {
7248
7318
  var t2, n2, r2, i2, a2, s2;
7249
7319
  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, "searchTimeout", null), o(this, "searchVersion", 0), o(this, "isSearching", false), this.config = e4, this.params = { date: ((t2 = e4.initialParams) == null ? void 0 : t2.date) || this.getTodayDate(), time: ((n2 = e4.initialParams) == null ? void 0 : n2.time) || "12:00", latitude: ((r2 = e4.initialParams) == null ? void 0 : r2.latitude) || null, longitude: ((i2 = e4.initialParams) == null ? void 0 : i2.longitude) || null, timezone: ((a2 = e4.initialParams) == null ? void 0 : a2.timezone) || null, locationName: ((s2 = e4.initialParams) == null ? void 0 : s2.locationName) || null }, this.render();
@@ -7366,20 +7436,20 @@ var Iv = class {
7366
7436
  escHtml(e4) {
7367
7437
  return e4.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
7368
7438
  }
7369
- }, Lv = /* @__PURE__ */ new Set();
7370
- function Rv(e4) {
7371
- return Lv.has(e4);
7439
+ }, Wv = /* @__PURE__ */ new Set();
7440
+ function Gv(e4) {
7441
+ return Wv.has(e4);
7372
7442
  }
7373
- function zv(e4) {
7374
- Lv.add(e4);
7443
+ function Kv(e4) {
7444
+ Wv.add(e4);
7375
7445
  }
7376
- var Bv = { "chart-wheel": { stripIcon: "\u2726", stripTitle: "Welcome to your 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: "Your birth chart is now rendered \u2014 an exact celestial snapshot of the sky at your moment of birth." }, "bi-wheel": { stripIcon: "\u2295", stripTitle: "Welcome to 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 now layered \u2014 the inner wheel is your natal chart; the outer ring shows the second chart (transits or another person's planets)." }, bodygraph: { stripIcon: "\u25C8", stripTitle: "Welcome to your 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: "Your bodygraph is now rendered \u2014 a living map of the energy centres, channels, and gates that define your design." } }, Vv = '\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 background: 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';
7377
- function Hv() {
7446
+ var qv = { "chart-wheel": { stripIcon: "\u2726", stripTitle: "Welcome to your 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: "Your birth chart is now rendered \u2014 an exact celestial snapshot of the sky at your moment of birth." }, "bi-wheel": { stripIcon: "\u2295", stripTitle: "Welcome to 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 now layered \u2014 the inner wheel is your natal chart; the outer ring shows the second chart (transits or another person's planets)." }, bodygraph: { stripIcon: "\u25C8", stripTitle: "Welcome to your 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: "Your bodygraph is now rendered \u2014 a living map of the energy centres, channels, and gates that define your design." } }, Jv = '\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 background: 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';
7447
+ function Yv() {
7378
7448
  if (document.getElementById("oe-first-run-styles")) return;
7379
7449
  let e4 = document.createElement("style");
7380
- e4.id = "oe-first-run-styles", e4.textContent = Vv, document.head.appendChild(e4);
7450
+ e4.id = "oe-first-run-styles", e4.textContent = Jv, document.head.appendChild(e4);
7381
7451
  }
7382
- function Uv(e4, t2) {
7452
+ function Xv(e4, t2) {
7383
7453
  let n2 = document.activeElement, r2 = document.createElement("div");
7384
7454
  r2.className = "oe-welcome-backdrop";
7385
7455
  let i2 = document.createElement("div");
@@ -7389,7 +7459,7 @@ function Uv(e4, t2) {
7389
7459
  let o2 = i2.querySelector(".oe-welcome-button"), s2 = () => {
7390
7460
  r2.classList.add("is-dismissing"), r2.addEventListener("animationend", () => {
7391
7461
  r2.remove(), n2 == null || n2.focus();
7392
- }, { once: true }), zv(t2);
7462
+ }, { once: true }), Kv(t2);
7393
7463
  };
7394
7464
  return o2.addEventListener("click", s2), r2.addEventListener("click", (e5) => {
7395
7465
  e5.target === r2 && s2();
@@ -7397,14 +7467,14 @@ function Uv(e4, t2) {
7397
7467
  e5.key === "Escape" && (e5.preventDefault(), s2()), e5.key === "Tab" && (e5.preventDefault(), o2.focus());
7398
7468
  }), requestAnimationFrame(() => o2.focus()), r2;
7399
7469
  }
7400
- function Wv(e4, t2) {
7401
- if (Rv(e4)) return;
7402
- let n2 = Bv[e4];
7403
- Hv();
7404
- let r2 = Uv(n2, e4);
7470
+ function Zv(e4, t2) {
7471
+ if (Gv(e4)) return;
7472
+ let n2 = qv[e4];
7473
+ Yv();
7474
+ let r2 = Xv(n2, e4);
7405
7475
  document.body.appendChild(r2);
7406
7476
  }
7407
- function Gv(e4) {
7477
+ function Qv(e4) {
7408
7478
  var t2;
7409
7479
  if (!e4) return null;
7410
7480
  if (e4.structuredContent != null && typeof e4.structuredContent == "object") return e4.structuredContent;
@@ -7417,17 +7487,17 @@ function Gv(e4) {
7417
7487
  }
7418
7488
  return null;
7419
7489
  }
7420
- function Kv(e4) {
7490
+ function $v(e4) {
7421
7491
  return e4.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
7422
7492
  }
7423
- function qv(e4) {
7424
- let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e4, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(Kv(i2), "</button>") : "";
7425
- if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(Kv(n2), "</p>") + a2 + "</div>", t2.removeAttribute("hidden"), r2) {
7493
+ function ey(e4) {
7494
+ let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e4, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat($v(i2), "</button>") : "";
7495
+ if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat($v(n2), "</p>") + a2 + "</div>", t2.removeAttribute("hidden"), r2) {
7426
7496
  var o2;
7427
7497
  (o2 = t2.querySelector(".error-retry-btn")) == null || o2.addEventListener("click", r2);
7428
7498
  }
7429
7499
  }
7430
- function Jv(e4, t2, n2 = []) {
7500
+ function ty(e4, t2, n2 = []) {
7431
7501
  var r2, i2;
7432
7502
  if (!t2 || t2.querySelector("#btn-fullscreen")) return;
7433
7503
  let a2 = document.createElement("button");
@@ -7510,14 +7580,14 @@ function Jv(e4, t2, n2 = []) {
7510
7580
  }, 4e3);
7511
7581
  }
7512
7582
  }
7513
- function Yv(e4, t2) {
7583
+ function ny(e4, t2) {
7514
7584
  e4.ontoolcancelled = (e5) => {
7515
7585
  var n2, r2, i2;
7516
7586
  let a2 = (n2 = e5.reason) == null ? "Tool call was cancelled" : n2;
7517
- 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.setBusy(false), Xv(a2);
7587
+ 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.setBusy(false), ry(a2);
7518
7588
  };
7519
7589
  }
7520
- function Xv(e4) {
7590
+ function ry(e4) {
7521
7591
  var t2;
7522
7592
  (t2 = document.getElementById("cancel-toast")) == null || t2.remove();
7523
7593
  let n2 = document.createElement("div");
@@ -7525,7 +7595,7 @@ function Xv(e4) {
7525
7595
  n2.classList.remove("visible"), setTimeout(() => n2.remove(), 300);
7526
7596
  }, 3e3);
7527
7597
  }
7528
- function Zv(e4) {
7598
+ function iy(e4) {
7529
7599
  var t2;
7530
7600
  function n2(e5) {
7531
7601
  if (!e5) return;
@@ -7538,44 +7608,44 @@ function Zv(e4) {
7538
7608
  n2(e5);
7539
7609
  });
7540
7610
  }
7541
- var Qv = document.getElementById("loading-state"), $v = document.getElementById("chart-container"), ey = document.getElementById("chart-info"), ty = document.getElementById("chart-status"), ny = document.getElementById("controls-panel"), ry = document.getElementById("patterns-strip"), iy = document.getElementById("aspect-filter"), ay = document.getElementById("overview-table"), oy = document.getElementById("param-controls-container"), sy = new r_({ name: "Chart Wheel Explorer", version: "1.0.0" }), $ = null, cy = "placidus", ly = null, uy = false, dy = false;
7542
- function fy(e4) {
7543
- ty && (e4 ? (ty.textContent = "\xB7 ".concat(e4), ty.setAttribute("data-active", "")) : (ty.textContent = "", ty.removeAttribute("data-active")));
7611
+ var ay = document.getElementById("loading-state"), oy = document.getElementById("chart-container"), sy = document.getElementById("chart-info"), cy = document.getElementById("chart-status"), ly = document.getElementById("controls-panel"), uy = document.getElementById("patterns-strip"), dy = document.getElementById("aspect-filter"), fy = document.getElementById("overview-table"), py = document.getElementById("param-controls-container"), my = new r_({ name: "Chart Wheel Explorer", version: "1.0.0" }), $ = null, hy = "placidus", gy = null, _y = false, vy = false;
7612
+ function yy(e4) {
7613
+ cy && (e4 ? (cy.textContent = "\xB7 ".concat(e4), cy.setAttribute("data-active", "")) : (cy.textContent = "", cy.removeAttribute("data-active")));
7544
7614
  }
7545
- sy.ontoolresult = (e4) => {
7615
+ my.ontoolresult = (e4) => {
7546
7616
  var t2;
7547
- let n2 = Gv(e4);
7548
- if (Fy(), !n2 || !n2.planets) {
7549
- console.error("[ChartWheel] \u274C No chart data found in tool result"), Iy("Chart data could not be parsed from the server response.", Ly);
7617
+ let n2 = Qv(e4);
7618
+ if (Hy(), !n2 || !n2.planets) {
7619
+ console.error("[ChartWheel] \u274C No chart data found in tool result"), Uy("Chart data could not be parsed from the server response.", Wy);
7550
7620
  return;
7551
7621
  }
7552
- if ($ = n2, cy = (t2 = n2.house_system) == null ? "placidus" : t2, !ly) {
7622
+ if ($ = n2, hy = (t2 = n2.house_system) == null ? "placidus" : t2, !gy) {
7553
7623
  var r2, i2, a2, o2, s2, c2, l2, u2, d2, f2;
7554
7624
  let e5 = (r2 = n2._birth_params) == null ? {} : r2, t3 = (i2 = (a2 = (o2 = e5.datetime) == null ? n2.datetime : o2) == null ? n2.birth_datetime : a2) == null ? "" : i2, p2 = (s2 = (c2 = e5.location) == null ? n2.location : c2) == null ? "" : s2, m2 = (l2 = (u2 = e5.timezone) == null ? n2.timezone : u2) == null ? "" : l2, h2 = (d2 = e5.latitude) == null ? n2.latitude : d2, g2 = (f2 = e5.longitude) == null ? n2.longitude : f2, _2 = "", v2 = "12:00";
7555
7625
  if (t3 && t3.includes("T")) {
7556
7626
  let e6 = t3.split("T");
7557
7627
  _2 = e6[0], v2 = e6[1].substring(0, 5);
7558
7628
  }
7559
- ly = new Iv({ app: sy, container: oy, initialParams: { date: _2, time: v2, locationName: p2, timezone: m2, latitude: typeof h2 == "number" ? h2 : null, longitude: typeof g2 == "number" ? g2 : null }, showStepControls: false, onRefresh: async (e6) => {
7560
- ly == null || ly.setBusy(true), Qv.removeAttribute("hidden"), $v.setAttribute("hidden", "");
7629
+ gy = new Uv({ app: my, container: py, initialParams: { date: _2, time: v2, locationName: p2, timezone: m2, latitude: typeof h2 == "number" ? h2 : null, longitude: typeof g2 == "number" ? g2 : null }, showStepControls: false, onRefresh: async (e6) => {
7630
+ gy == null || gy.setBusy(true), ay.removeAttribute("hidden"), oy.setAttribute("hidden", "");
7561
7631
  try {
7562
7632
  var t4, n3, r3, i3;
7563
- let a3 = "".concat(e6.date, "T").concat(e6.time, ":00"), o3 = new Promise((e7, t5) => setTimeout(() => t5(Error("Recalculate timed out after 30s")), 3e4)), s3 = Gv(await Promise.race([sy.callServerTool({ name: "chart_wheel_recalculate", arguments: { datetime: "".concat(a3).concat(e6.timezone ? "" : "Z"), latitude: (t4 = e6.latitude) == null ? void 0 : t4, longitude: (n3 = e6.longitude) == null ? void 0 : n3, timezone: (r3 = e6.timezone) == null ? void 0 : r3, location: (i3 = e6.locationName) == null ? void 0 : i3, house_system: cy || "placidus", chart_type: "natal" } }), o3]));
7564
- s3 ? ($ = s3, s3.house_system && (cy = s3.house_system), py(s3)) : $ && (Qv.setAttribute("hidden", ""), $v.removeAttribute("hidden"));
7633
+ let a3 = "".concat(e6.date, "T").concat(e6.time, ":00"), o3 = new Promise((e7, t5) => setTimeout(() => t5(Error("Recalculate timed out after 30s")), 3e4)), s3 = Qv(await Promise.race([my.callServerTool({ name: "chart_wheel_recalculate", arguments: { datetime: "".concat(a3).concat(e6.timezone ? "" : "Z"), latitude: (t4 = e6.latitude) == null ? void 0 : t4, longitude: (n3 = e6.longitude) == null ? void 0 : n3, timezone: (r3 = e6.timezone) == null ? void 0 : r3, location: (i3 = e6.locationName) == null ? void 0 : i3, house_system: hy || "placidus", chart_type: "natal" } }), o3]));
7634
+ s3 ? ($ = s3, s3.house_system && (hy = s3.house_system), by(s3)) : $ && (ay.setAttribute("hidden", ""), oy.removeAttribute("hidden"));
7565
7635
  } catch (e7) {
7566
- console.error("[ChartWheel] Recalculate failed or timed out:", e7), $ && (Qv.setAttribute("hidden", ""), $v.removeAttribute("hidden"));
7636
+ console.error("[ChartWheel] Recalculate failed or timed out:", e7), $ && (ay.setAttribute("hidden", ""), oy.removeAttribute("hidden"));
7567
7637
  } finally {
7568
- ly == null || ly.setBusy(false);
7638
+ gy == null || gy.setBusy(false);
7569
7639
  }
7570
7640
  } });
7571
7641
  }
7572
- py(n2);
7642
+ by(n2);
7573
7643
  };
7574
- function py(e4) {
7644
+ function by(e4) {
7575
7645
  var t2, n2, r2, i2, a2, o2, s2;
7576
- _y = null, Qv.setAttribute("hidden", ""), $v.removeAttribute("hidden"), oy.removeAttribute("hidden"), ny.removeAttribute("hidden"), Ov($v, e4, Ty, Ey, Dy, My, dy ? Oy() : void 0), rv(fy), jv(ny, cy, Ny), my(e4), Wv("chart-wheel", $v);
7577
- let c2 = F_(e4.planets), l2 = (n2 = (r2 = (i2 = ((t2 = e4.houses) == null ? [] : t2)[0]) == null ? void 0 : i2.cusp_lon) == null ? e4.ascendant : r2) == null ? 0 : n2, u2 = (a2 = e4.aspects) == null ? [] : a2;
7578
- c2.length > 0 && gy(c2, u2), vy(Z_(u2, c2), c2, l2), Cy();
7646
+ wy = null, ay.setAttribute("hidden", ""), oy.removeAttribute("hidden"), py.removeAttribute("hidden"), ly.removeAttribute("hidden"), Fv(oy, e4, My, Ny, Py, zy, vy ? Fy() : void 0), uv(yy), Rv(ly, hy, By), xy(e4), Zv("chart-wheel", oy);
7647
+ let c2 = H_(e4.planets), l2 = (n2 = (r2 = (i2 = ((t2 = e4.houses) == null ? [] : t2)[0]) == null ? void 0 : i2.cusp_lon) == null ? e4.ascendant : r2) == null ? 0 : n2, u2 = (a2 = e4.aspects) == null ? [] : a2;
7648
+ c2.length > 0 && Cy(c2, u2), Ty(iv(u2, c2), c2, l2), Ay();
7579
7649
  let d2 = document.getElementById("cw-action-bar");
7580
7650
  if (!d2) {
7581
7651
  d2 = document.createElement("div"), d2.id = "cw-action-bar", d2.className = "hd-action-bar";
@@ -7586,14 +7656,14 @@ function py(e4) {
7586
7656
  (f2 = document.getElementById("app")) == null || f2.prepend(d2);
7587
7657
  }
7588
7658
  }
7589
- 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 Ay()), (s2 = document.getElementById("cw-questions-btn")) == null || s2.addEventListener("click", () => void jy());
7659
+ 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 Ly()), (s2 = document.getElementById("cw-questions-btn")) == null || s2.addEventListener("click", () => void Ry());
7590
7660
  }
7591
- function my(e4) {
7661
+ function xy(e4) {
7592
7662
  var t2, n2, r2, i2, a2, o2, s2, c2, l2, u2;
7593
- if (!ey) return;
7663
+ if (!sy) return;
7594
7664
  let d2 = (t2 = e4._birth_params) == null ? {} : t2, f2 = (n2 = (r2 = (i2 = d2.datetime) == null ? e4.datetime : i2) == null ? e4.birth_datetime : r2) == null ? "" : n2, p2 = (a2 = (o2 = d2.location) == null ? e4.location : o2) == null ? "" : a2, m2 = (s2 = (c2 = d2.timezone) == null ? e4.timezone : c2) == null ? "" : s2, h2 = (l2 = d2.latitude) == null ? e4.latitude : l2, g2 = (u2 = d2.longitude) == null ? e4.longitude : u2;
7595
- cy.charAt(0).toUpperCase() + cy.slice(1);
7596
- let _2 = F_(e4.planets).find((e5) => e5.name.toLowerCase() === "sun"), v2 = _2 != null && _2.house ? _2.house >= 7 ? "\u2609 Day Chart" : "\u263E Night Chart" : "", ee2 = f2;
7665
+ hy.charAt(0).toUpperCase() + hy.slice(1);
7666
+ let _2 = H_(e4.planets).find((e5) => e5.name.toLowerCase() === "sun"), v2 = _2 != null && _2.house ? _2.house >= 7 ? "\u2609 Day Chart" : "\u263E Night Chart" : "", ee2 = f2;
7597
7667
  try {
7598
7668
  if (f2 && f2.includes("T")) {
7599
7669
  let e5 = new Date(f2), t3 = m2 ? { timeZone: m2 } : {};
@@ -7603,14 +7673,14 @@ function my(e4) {
7603
7673
  }
7604
7674
  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 = [];
7605
7675
  if (ee2 && b2.push('<span class="info-chip" title="Birth datetime">\u{1F4C5} '.concat(ee2, "</span>")), p2 && b2.push('<span class="info-chip" title="Birth location">\u{1F4CD} '.concat(p2, "</span>")), y2 && !p2 && b2.push('<span class="info-chip" title="Coordinates">\u{1F4CD} '.concat(y2, "</span>")), m2 && b2.push('<span class="info-chip" title="Timezone">\u{1F550} '.concat(m2, "</span>")), v2 && b2.push('<span class="info-chip sect" title="Sect">'.concat(v2, "</span>")), b2.length === 0) {
7606
- ey.setAttribute("hidden", "");
7676
+ sy.setAttribute("hidden", "");
7607
7677
  return;
7608
7678
  }
7609
- ey.innerHTML = b2.join(""), ey.removeAttribute("hidden");
7679
+ sy.innerHTML = b2.join(""), sy.removeAttribute("hidden");
7610
7680
  }
7611
- var hy = /* @__PURE__ */ new Set(["mean_lilith", "lilith", "true_lilith", "ceres", "juno", "vesta", "pallas", "pholus", "vertex", "part_of_fortune", "part of fortune", "eris", "sedna"]);
7612
- function gy(e4, t2) {
7613
- if (!ay || e4.length === 0) return;
7681
+ var Sy = /* @__PURE__ */ new Set(["mean_lilith", "lilith", "true_lilith", "ceres", "juno", "vesta", "pallas", "pholus", "vertex", "part_of_fortune", "part of fortune", "eris", "sedna"]);
7682
+ function Cy(e4, t2) {
7683
+ if (!fy || e4.length === 0) return;
7614
7684
  let n2 = ["sun", "moon", "mercury", "venus", "mars", "jupiter", "saturn", "uranus", "neptune", "pluto", "chiron", "north node", "south node", "true node"], r2 = [...e4].sort((e5, t3) => {
7615
7685
  let r3 = n2.indexOf(e5.name.toLowerCase()), i3 = n2.indexOf(t3.name.toLowerCase());
7616
7686
  return r3 !== -1 && i3 !== -1 ? r3 - i3 : r3 === -1 ? i3 === -1 ? e5.name.localeCompare(t3.name) : 1 : -1;
@@ -7621,15 +7691,15 @@ function gy(e4, t2) {
7621
7691
  }
7622
7692
  let s2 = (e5) => e5.replace(/(^|\s|_)\w/g, (e6) => e6.toUpperCase()).replace(/_/g, " "), c2 = (e5) => ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"][Math.floor((e5 % 360 + 360) % 360 / 30)], l2 = r2.map((e5) => {
7623
7693
  var t3, n3, r3, a3;
7624
- let o3 = e5.name.toLowerCase(), l3 = (t3 = x_[o3]) == null ? "\u2605" : t3, u3 = (n3 = e5.sign) == null ? c2(e5.longitude) : n3, d3 = Math.floor((e5.longitude % 360 + 360) % 360 % 30), f2 = Math.floor((e5.longitude % 360 + 360) % 360 % 1 * 60), p2 = hy.has(o3), m2 = e5.retrograde ? '<span class="retro-mark">\u211E</span>' : "", h2 = (r3 = i2[o3]) == null ? 0 : r3;
7694
+ let o3 = e5.name.toLowerCase(), l3 = (t3 = D_[o3]) == null ? "\u2605" : t3, u3 = (n3 = e5.sign) == null ? c2(e5.longitude) : n3, d3 = Math.floor((e5.longitude % 360 + 360) % 360 % 30), f2 = Math.floor((e5.longitude % 360 + 360) % 360 % 1 * 60), p2 = Sy.has(o3), m2 = e5.retrograde ? '<span class="retro-mark">\u211E</span>' : "", h2 = (r3 = i2[o3]) == null ? 0 : r3;
7625
7695
  return '<tr class="'.concat(p2 ? "extended-row" : "", '" data-planet="').concat(o3, '">\n <td><span class="planet-sym">').concat(l3, "</span> ").concat(s2(e5.name)).concat(m2, "</td>\n <td>").concat(d3, "\xB0 ").concat(u3, " ").concat(String(f2).padStart(2, "0"), "\u2032</td>\n <td>H").concat((a3 = e5.house) == null ? "\u2013" : a3, "</td>\n <td>").concat(h2 > 0 ? h2 : "\u2013", "</td>\n </tr>");
7626
7696
  }).join("");
7627
- ay.innerHTML = '\n <button class="overview-toggle" aria-expanded="false">\n <span class="overview-chevron">\u25B6</span>\n Planet Positions ('.concat(r2.length, ')\n </button>\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 "), ay.removeAttribute("hidden");
7628
- let u2 = ay.querySelector(".overview-toggle"), d2 = ay.querySelector(".overview-body");
7697
+ fy.innerHTML = '\n <button class="overview-toggle" aria-expanded="false">\n <span class="overview-chevron">\u25B6</span>\n Planet Positions ('.concat(r2.length, ')\n </button>\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 "), fy.removeAttribute("hidden");
7698
+ let u2 = fy.querySelector(".overview-toggle"), d2 = fy.querySelector(".overview-body");
7629
7699
  u2 == null || u2.addEventListener("click", () => {
7630
7700
  let e5 = u2.getAttribute("aria-expanded") === "true";
7631
7701
  u2.setAttribute("aria-expanded", e5 ? "false" : "true"), d2.classList.toggle("open", !e5);
7632
- }), ay.querySelectorAll("tbody tr").forEach((e5) => {
7702
+ }), fy.querySelectorAll("tbody tr").forEach((e5) => {
7633
7703
  var t3;
7634
7704
  let n3 = (t3 = e5.dataset.planet) == null ? "" : t3;
7635
7705
  n3 && (e5.addEventListener("mouseenter", () => {
@@ -7641,7 +7711,7 @@ function gy(e4, t2) {
7641
7711
  let t4 = document.querySelector("svg");
7642
7712
  t4 && (t4.querySelectorAll(".planet-glyph-group").forEach((e6) => {
7643
7713
  var t5;
7644
- let n4 = hy.has((t5 = e6.dataset.planet) == null ? "" : t5);
7714
+ let n4 = Sy.has((t5 = e6.dataset.planet) == null ? "" : t5);
7645
7715
  e6.style.opacity = n4 ? "0.65" : "1";
7646
7716
  }), e5.classList.remove("active-row"));
7647
7717
  }), e5.addEventListener("click", () => {
@@ -7652,26 +7722,26 @@ function gy(e4, t2) {
7652
7722
  }));
7653
7723
  });
7654
7724
  }
7655
- var _y = null;
7656
- function vy(e4, t2, n2) {
7657
- if (!ry) return;
7725
+ var wy = null;
7726
+ function Ty(e4, t2, n2) {
7727
+ if (!uy) return;
7658
7728
  if (e4.length === 0) {
7659
- ry.setAttribute("hidden", ""), ry.innerHTML = "";
7729
+ uy.setAttribute("hidden", ""), uy.innerHTML = "";
7660
7730
  return;
7661
7731
  }
7662
7732
  let r2 = { "T-Square": "#e08a52", "Grand Trine": "#52a8e0", "Grand Cross": "#e05252", Stellium: "#9a7fd4", Yod: "#52c07a", Kite: "#c0b052" };
7663
- if (ry.innerHTML = '\n <span class="patterns-label">Patterns:</span>\n '.concat(e4.map((e5, t3) => {
7733
+ if (uy.innerHTML = '\n <span class="patterns-label">Patterns:</span>\n '.concat(e4.map((e5, t3) => {
7664
7734
  var n3;
7665
7735
  let i2 = (n3 = r2[e5.name]) == null ? "#888" : n3;
7666
7736
  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(e5.description, '">\n ').concat(e5.name, "\n </button>\n ");
7667
- }).join(""), "\n "), ry.removeAttribute("hidden"), !ry.querySelector(".pattern-ask-claude-btn")) {
7737
+ }).join(""), "\n "), uy.removeAttribute("hidden"), !uy.querySelector(".pattern-ask-claude-btn")) {
7668
7738
  let t3 = document.createElement("button");
7669
- t3.className = "pattern-ask-claude-btn", t3.textContent = "\u2728 Ask Claude", t3.style.display = "none", ry.appendChild(t3), t3.addEventListener("click", () => {
7739
+ t3.className = "pattern-ask-claude-btn", t3.textContent = "\u2728 Ask Claude", t3.style.display = "none", uy.appendChild(t3), t3.addEventListener("click", () => {
7670
7740
  var n3;
7671
- let r3 = _y;
7741
+ let r3 = wy;
7672
7742
  if (r3 === null) return;
7673
7743
  let i2 = e4[r3];
7674
- t3.disabled = true, t3.textContent = "\u23F3 Sending\u2026", My({ type: "pattern", data: { name: i2.name, planets: i2.planets, description: (n3 = i2.description) == null ? "" : n3 } }).then(() => {
7744
+ t3.disabled = true, t3.textContent = "\u23F3 Sending\u2026", zy({ type: "pattern", data: { name: i2.name, planets: i2.planets, description: (n3 = i2.description) == null ? "" : n3 } }).then(() => {
7675
7745
  t3.textContent = "\u2713 Sent", setTimeout(() => {
7676
7746
  t3.textContent = "\u2728 Ask Claude", t3.disabled = false;
7677
7747
  }, 2500);
@@ -7680,28 +7750,28 @@ function vy(e4, t2, n2) {
7680
7750
  });
7681
7751
  });
7682
7752
  }
7683
- ry.querySelectorAll(".pattern-pill").forEach((r3) => {
7753
+ uy.querySelectorAll(".pattern-pill").forEach((r3) => {
7684
7754
  r3.addEventListener("click", () => {
7685
7755
  var i2;
7686
- let a2 = Number(r3.dataset.idx), o2 = e4[a2], s2 = (i2 = r3.dataset.color) == null ? "#888" : i2, c2 = ry.querySelector(".pattern-ask-claude-btn");
7687
- _y === a2 ? (_y = null, xv(), c2 && (c2.style.display = "none"), ry.querySelectorAll(".pattern-pill").forEach((e5) => {
7756
+ let a2 = Number(r3.dataset.idx), o2 = e4[a2], s2 = (i2 = r3.dataset.color) == null ? "#888" : i2, c2 = uy.querySelector(".pattern-ask-claude-btn");
7757
+ wy === a2 ? (wy = null, Ov(), c2 && (c2.style.display = "none"), uy.querySelectorAll(".pattern-pill").forEach((e5) => {
7688
7758
  var t3;
7689
7759
  e5.classList.remove("active");
7690
7760
  let n3 = (t3 = e5.dataset.color) == null ? "#888" : t3;
7691
7761
  e5.style.color = n3, e5.style.borderColor = n3, e5.style.background = "transparent";
7692
- })) : (_y = a2, ry.querySelectorAll(".pattern-pill").forEach((e5) => {
7762
+ })) : (wy = a2, uy.querySelectorAll(".pattern-pill").forEach((e5) => {
7693
7763
  var t3;
7694
7764
  e5.classList.remove("active");
7695
7765
  let n3 = (t3 = e5.dataset.color) == null ? "#888" : t3;
7696
7766
  e5.style.color = n3, e5.style.borderColor = n3, e5.style.background = "transparent";
7697
- }), r3.classList.add("active"), r3.style.background = s2, r3.style.color = "#fff", r3.style.borderColor = s2, yv(o2.planets, o2.aspectKeys), t2 && n2 != null && (Tv(), wv(o2, t2, n2)), c2 && (c2.style.display = "", c2.textContent = "\u2728 Ask Claude", c2.disabled = false));
7767
+ }), r3.classList.add("active"), r3.style.background = s2, r3.style.color = "#fff", r3.style.borderColor = s2, Ev(o2.planets, o2.aspectKeys), t2 && n2 != null && (Mv(), jv(o2, t2, n2)), c2 && (c2.style.display = "", c2.textContent = "\u2728 Ask Claude", c2.disabled = false));
7698
7768
  });
7699
7769
  });
7700
7770
  }
7701
- var yy = [{ label: "Tight", maxOrb: 4 }, { label: "Standard", maxOrb: 8 }, { label: "Wide", maxOrb: 12 }], by = true, xy = 8, Sy = "true";
7702
- function Cy() {
7771
+ var Ey = [{ label: "Tight", maxOrb: 4 }, { label: "Standard", maxOrb: 8 }, { label: "Wide", maxOrb: 12 }], Dy = true, Oy = 8, ky = "true";
7772
+ function Ay() {
7703
7773
  var e4;
7704
- if (!iy) return;
7774
+ if (!dy) return;
7705
7775
  let t2 = (() => {
7706
7776
  let e5 = $ == null ? void 0 : $.planets, t3 = [];
7707
7777
  Array.isArray(e5) ? e5.forEach((e6) => {
@@ -7711,101 +7781,101 @@ function Cy() {
7711
7781
  let n3 = t3.some((e6) => e6 === "north node" || e6 === "north node (mean)" || e6 === "mean node"), r3 = t3.some((e6) => e6 === "true node" || e6 === "north node (true)");
7712
7782
  return n3 && r3;
7713
7783
  })();
7714
- N_(Sy);
7715
- 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(Sy === "mean" ? " active" : "", '" data-node="mean" title="Mean lunar node (averaged orbit)">Mean</button>\n <button class="orb-preset-btn node-btn').concat(Sy === "true" ? " active" : "", '" data-node="true" title="True (osculating) lunar node">True</button>\n </div>') : "";
7716
- by = true, iy.innerHTML = '\n <div class="asp-panel">\n <div class="asp-section">\n <span class="asp-section-label">Aspects</span>\n <button class="aspect-toggle-btn active" id="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(yy.map((e5) => '<button class="orb-preset-btn'.concat(e5.maxOrb === xy ? " active" : "", '" data-orb="').concat(e5.maxOrb, '" title="').concat(e5.label, ' orbs">').concat(e5.label, "</button>")).join(""), "\n </div>").concat(n2, "\n </div>\n ");
7717
- let r2 = F_($ == null ? void 0 : $.planets), i2 = /* @__PURE__ */ new Set(), a2 = [];
7784
+ B_(ky);
7785
+ 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(ky === "mean" ? " active" : "", '" data-node="mean" title="Mean lunar node (averaged orbit)">Mean</button>\n <button class="orb-preset-btn node-btn').concat(ky === "true" ? " active" : "", '" data-node="true" title="True (osculating) lunar node">True</button>\n </div>') : "";
7786
+ Dy = true, dy.innerHTML = '\n <div class="asp-panel">\n <div class="asp-section">\n <span class="asp-section-label">Aspects</span>\n <button class="aspect-toggle-btn active" id="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(Ey.map((e5) => '<button class="orb-preset-btn'.concat(e5.maxOrb === Oy ? " active" : "", '" data-orb="').concat(e5.maxOrb, '" title="').concat(e5.label, ' orbs">').concat(e5.label, "</button>")).join(""), "\n </div>").concat(n2, "\n </div>\n ");
7787
+ let r2 = H_($ == null ? void 0 : $.planets), i2 = /* @__PURE__ */ new Set(), a2 = [];
7718
7788
  for (let e5 of r2) {
7719
7789
  let t3 = e5.name.toLowerCase();
7720
7790
  if (i2.has(t3)) continue;
7721
7791
  i2.add(t3);
7722
- let n3 = x_[t3];
7723
- n3 && a2.push({ glyph: n3, label: Pv(e5.name) });
7792
+ let n3 = D_[t3];
7793
+ n3 && a2.push({ glyph: n3, label: Vv(e5.name) });
7724
7794
  }
7725
7795
  let o2 = [...new Set(((e4 = $ == null ? void 0 : $.aspects) == null ? [] : e4).map((e5) => {
7726
7796
  var t3;
7727
7797
  return ((t3 = e5.type) == null ? "" : t3).toLowerCase();
7728
7798
  }).filter(Boolean))].map((e5) => {
7729
7799
  var t3;
7730
- return { glyph: (t3 = w_[e5]) == null ? "" : t3, label: Pv(e5) };
7800
+ return { glyph: (t3 = A_[e5]) == null ? "" : t3, label: Vv(e5) };
7731
7801
  }).filter((e5) => e5.glyph);
7732
- iy.insertAdjacentHTML("beforeend", Fv([{ title: "Bodies", items: a2 }, { title: "Aspects", items: o2 }])), iy.removeAttribute("hidden");
7802
+ dy.insertAdjacentHTML("beforeend", Hv([{ title: "Bodies", items: a2 }, { title: "Aspects", items: o2 }])), dy.removeAttribute("hidden");
7733
7803
  let s2 = document.getElementById("cw-aspect-vis-toggle");
7734
7804
  s2 == null || s2.addEventListener("click", () => {
7735
- by = !by, Ev(by), s2.classList.toggle("active", by), s2.querySelector(".toggle-icon").textContent = by ? "\u2295" : "\u2296";
7736
- }), iy.querySelectorAll(".orb-preset-btn:not(.node-btn)").forEach((e5) => {
7805
+ Dy = !Dy, Nv(Dy), s2.classList.toggle("active", Dy), s2.querySelector(".toggle-icon").textContent = Dy ? "\u2295" : "\u2296";
7806
+ }), dy.querySelectorAll(".orb-preset-btn:not(.node-btn)").forEach((e5) => {
7737
7807
  e5.addEventListener("click", () => {
7738
7808
  var t3;
7739
7809
  let n3 = parseFloat((t3 = e5.dataset.orb) == null ? "8" : t3);
7740
- n3 !== xy && (xy = n3, iy.querySelectorAll(".orb-preset-btn:not(.node-btn)").forEach((e6) => e6.classList.toggle("active", e6.dataset.orb === String(n3))), Dv(n3));
7810
+ n3 !== Oy && (Oy = n3, dy.querySelectorAll(".orb-preset-btn:not(.node-btn)").forEach((e6) => e6.classList.toggle("active", e6.dataset.orb === String(n3))), Pv(n3));
7741
7811
  });
7742
- }), iy.querySelectorAll(".node-btn").forEach((e5) => {
7812
+ }), dy.querySelectorAll(".node-btn").forEach((e5) => {
7743
7813
  e5.addEventListener("click", () => {
7744
7814
  let t3 = e5.dataset.node === "mean" ? "mean" : "true";
7745
- t3 === Sy || !$ || (Sy = t3, N_(t3), py($));
7815
+ t3 === ky || !$ || (ky = t3, B_(t3), by($));
7746
7816
  });
7747
7817
  });
7748
7818
  }
7749
- async function wy(e4, t2) {
7750
- if (uy) try {
7819
+ async function jy(e4, t2) {
7820
+ if (_y) try {
7751
7821
  let n2 = "[Chart Wheel] Selected ".concat(e4, " \u2014 ").concat(Object.entries(t2).filter(([, e5]) => e5 != null && e5 !== false && e5 !== "").map(([e5, t3]) => "".concat(e5, ": ").concat(t3)).join(", "));
7752
- await sy.updateModelContext({ content: [{ type: "text", text: n2 }] });
7822
+ await my.updateModelContext({ content: [{ type: "text", text: n2 }] });
7753
7823
  } catch (e5) {
7754
7824
  console.warn("[ChartWheel] \u26A0\uFE0F updateModelContext failed:", e5);
7755
7825
  }
7756
7826
  }
7757
- async function Ty(e4) {
7827
+ async function My(e4) {
7758
7828
  var t2, n2, r2, i2;
7759
- _y = null, ry == null || ry.querySelectorAll(".pattern-pill").forEach((e5) => {
7829
+ wy = null, uy == null || uy.querySelectorAll(".pattern-pill").forEach((e5) => {
7760
7830
  var t3;
7761
7831
  e5.classList.remove("active");
7762
7832
  let n3 = (t3 = e5.dataset.color) == null ? "#888" : t3;
7763
7833
  e5.style.color = n3, e5.style.borderColor = n3, e5.style.background = "transparent";
7764
- }), await wy("planet", { planet: e4.name, longitude: e4.longitude, sign: (t2 = e4.sign) == null ? null : t2, house: (n2 = e4.house) == null ? null : n2, retrograde: (r2 = e4.retrograde) == null ? false : r2, speed: (i2 = e4.speed) == null ? null : i2 });
7834
+ }), await jy("planet", { planet: e4.name, longitude: e4.longitude, sign: (t2 = e4.sign) == null ? null : t2, house: (n2 = e4.house) == null ? null : n2, retrograde: (r2 = e4.retrograde) == null ? false : r2, speed: (i2 = e4.speed) == null ? null : i2 });
7765
7835
  }
7766
- async function Ey(e4) {
7836
+ async function Ny(e4) {
7767
7837
  var t2, n2;
7768
- await wy("house", { house_number: e4.number, sign: (t2 = e4.sign) == null ? null : t2, cusp_longitude: e4.cusp_lon, ruler: (n2 = e4.ruler) == null ? null : n2 });
7838
+ await jy("house", { house_number: e4.number, sign: (t2 = e4.sign) == null ? null : t2, cusp_longitude: e4.cusp_lon, ruler: (n2 = e4.ruler) == null ? null : n2 });
7769
7839
  }
7770
- async function Dy(e4) {
7840
+ async function Py(e4) {
7771
7841
  var t2, n2, r2, i2;
7772
- await wy("aspect", { planet1: e4.planet1, planet2: e4.planet2, aspect_type: (t2 = e4.type) == null ? null : t2, orb: (n2 = e4.orb) == null ? null : n2, applying: (r2 = e4.applying) == null ? null : r2, angle: (i2 = e4.angle) == null ? null : i2 });
7842
+ await jy("aspect", { planet1: e4.planet1, planet2: e4.planet2, aspect_type: (t2 = e4.type) == null ? null : t2, orb: (n2 = e4.orb) == null ? null : n2, applying: (r2 = e4.applying) == null ? null : r2, angle: (i2 = e4.angle) == null ? null : i2 });
7773
7843
  }
7774
- function Oy() {
7844
+ function Fy() {
7775
7845
  return async (e4) => {
7776
7846
  try {
7777
7847
  var t2, n2;
7778
- let r2 = await sy.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(e4) } }], 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 });
7848
+ let r2 = await my.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(e4) } }], 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 });
7779
7849
  return (t2 = r2 == null || (n2 = r2.content) == null ? void 0 : n2.text) == null ? null : t2;
7780
7850
  } catch (e5) {
7781
7851
  return console.error("[ChartWheel] Sampling failed:", e5), "Unable to load interpretation right now.";
7782
7852
  }
7783
7853
  };
7784
7854
  }
7785
- async function ky(e4) {
7855
+ async function Iy(e4) {
7786
7856
  try {
7787
- (await sy.sendMessage({ role: "user", content: [{ type: "text", text: e4 }] })).isError && console.error("[ChartWheel] Host rejected sendMessage");
7857
+ (await my.sendMessage({ role: "user", content: [{ type: "text", text: e4 }] })).isError && console.error("[ChartWheel] Host rejected sendMessage");
7788
7858
  } catch (e5) {
7789
7859
  console.error("[ChartWheel] sendMessage failed:", e5);
7790
7860
  }
7791
7861
  }
7792
- async function Ay() {
7862
+ async function Ly() {
7793
7863
  var e4, t2, n2, r2;
7794
7864
  if (!$) return;
7795
- let i2 = $, a2 = (e4 = i2._birth_params) == null ? {} : e4, o2 = (t2 = (n2 = a2.name) == null ? a2.location : n2) == null ? "this person" : t2, s2 = F_(i2.planets), c2 = ((r2 = i2.aspects) == null ? [] : r2).filter((e5) => {
7865
+ let i2 = $, a2 = (e4 = i2._birth_params) == null ? {} : e4, o2 = (t2 = (n2 = a2.name) == null ? a2.location : n2) == null ? "this person" : t2, s2 = H_(i2.planets), c2 = ((r2 = i2.aspects) == null ? [] : r2).filter((e5) => {
7796
7866
  var t3;
7797
7867
  return ["conjunction", "opposition", "trine", "square", "sextile"].includes((t3 = e5.type) == null ? "" : t3);
7798
7868
  }).slice(0, 8).map((e5) => " \u2022 ".concat(e5.planet1, " ").concat(e5.type, " ").concat(e5.planet2, " (").concat(Number(e5.orb).toFixed(1), "\xB0, ").concat(e5.applying ? "applying" : "separating", ")")).join("\n") || " \u2022 No major aspects found";
7799
- await ky("Please give a complete natal chart interpretation for ".concat(o2, ".\n\nKey planet placements:\n").concat(s2.slice(0, 5).map((e5) => {
7869
+ await Iy("Please give a complete natal chart interpretation for ".concat(o2, ".\n\nKey planet placements:\n").concat(s2.slice(0, 5).map((e5) => {
7800
7870
  var t3;
7801
7871
  return " \u2022 ".concat(e5.name, " in ").concat((t3 = e5.sign) == null ? "?" : t3).concat(e5.house ? ", House ".concat(e5.house) : "").concat(e5.retrograde ? " \u211E" : "");
7802
7872
  }).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?"));
7803
7873
  }
7804
- async function jy() {
7874
+ async function Ry() {
7805
7875
  var e4, t2, n2, r2;
7806
7876
  if (!$) return;
7807
7877
  let i2 = $, a2 = (e4 = i2._birth_params) == null ? {} : e4;
7808
- await ky("I'm exploring the natal chart for ".concat((t2 = (n2 = a2.name) == null ? a2.location : n2) == null ? "this chart" : t2, ". Key placements: ").concat(F_(i2.planets).slice(0, 4).map((e5) => {
7878
+ await Iy("I'm exploring the natal chart for ".concat((t2 = (n2 = a2.name) == null ? a2.location : n2) == null ? "this chart" : t2, ". Key placements: ").concat(H_(i2.planets).slice(0, 4).map((e5) => {
7809
7879
  var t3;
7810
7880
  return "".concat(e5.name, " in ").concat((t3 = e5.sign) == null ? "?" : t3).concat(e5.house ? " H".concat(e5.house) : "");
7811
7881
  }).join(", ") || "unknown placements", ". Major aspects: ").concat(((r2 = i2.aspects) == null ? [] : r2).filter((e5) => {
@@ -7813,7 +7883,7 @@ async function jy() {
7813
7883
  return ["conjunction", "opposition", "trine", "square", "sextile"].includes((t3 = e5.type) == null ? "" : t3);
7814
7884
  }).slice(0, 5).map((e5) => "".concat(e5.planet1, " ").concat(e5.type, " ").concat(e5.planet2, " (").concat(Number(e5.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."));
7815
7885
  }
7816
- async function My(e4) {
7886
+ async function zy(e4) {
7817
7887
  let t2 = "";
7818
7888
  if (e4.type === "planet") {
7819
7889
  var n2;
@@ -7842,47 +7912,47 @@ async function My(e4) {
7842
7912
  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.");
7843
7913
  }
7844
7914
  if (t2) try {
7845
- let e5 = await sy.sendMessage({ role: "user", content: [{ type: "text", text: t2 }] });
7915
+ let e5 = await my.sendMessage({ role: "user", content: [{ type: "text", text: t2 }] });
7846
7916
  if (e5.isError) throw console.error("[ChartWheel] \u274C Host rejected sendMessage:", e5), Error("Host rejected message");
7847
7917
  } catch (e5) {
7848
7918
  throw console.error("[ChartWheel] \u274C sendMessage failed:", e5), e5;
7849
7919
  }
7850
7920
  }
7851
- async function Ny(e4) {
7921
+ async function By(e4) {
7852
7922
  if (!($ != null && $._birth_params)) {
7853
- Mv(ny, cy);
7923
+ zv(ly, hy);
7854
7924
  return;
7855
7925
  }
7856
7926
  try {
7857
7927
  var t2, n2, r2, i2;
7858
- let a2 = Gv(await sy.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: e4 } }));
7859
- a2 ? ($ = a2, cy = e4, py(a2)) : Mv(ny, cy);
7928
+ let a2 = Qv(await my.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: e4 } }));
7929
+ a2 ? ($ = a2, hy = e4, by(a2)) : zv(ly, hy);
7860
7930
  } catch (e5) {
7861
- console.error("[Chart] Recalculate failed:", e5), Mv(ny, cy);
7931
+ console.error("[Chart] Recalculate failed:", e5), zv(ly, hy);
7862
7932
  }
7863
7933
  }
7864
- var Py;
7865
- function Fy() {
7866
- Py && (clearTimeout(Py), Py = void 0);
7934
+ var Vy;
7935
+ function Hy() {
7936
+ Vy && (clearTimeout(Vy), Vy = void 0);
7867
7937
  }
7868
- function Iy(e4, t2) {
7869
- Fy(), Qv.setAttribute("hidden", ""), qv({ container: $v, message: e4, onRetry: t2 });
7938
+ function Uy(e4, t2) {
7939
+ Hy(), ay.setAttribute("hidden", ""), ey({ container: oy, message: e4, onRetry: t2 });
7870
7940
  }
7871
- function Ly() {
7872
- Fy(), $v.setAttribute("hidden", ""), Qv.removeAttribute("hidden"), Py = setTimeout(() => {
7873
- Iy("The chart didn't load. Tap to try again.", Ly);
7874
- }, 3e4), sy.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the chart wheel." }] }).catch(() => {
7941
+ function Wy() {
7942
+ Hy(), oy.setAttribute("hidden", ""), ay.removeAttribute("hidden"), Vy = setTimeout(() => {
7943
+ Uy("The chart didn't load. Tap to try again.", Wy);
7944
+ }, 3e4), my.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the chart wheel." }] }).catch(() => {
7875
7945
  });
7876
7946
  }
7877
- Yv(sy, { loadingEl: Qv, contentEl: $v, statusFn: fy, paramControls: ly }), Py = setTimeout(() => {
7878
- Iy("Chart data is taking longer than expected.", Ly);
7947
+ ny(my, { loadingEl: ay, contentEl: oy, statusFn: yy, paramControls: gy }), Vy = setTimeout(() => {
7948
+ Uy("Chart data is taking longer than expected.", Wy);
7879
7949
  }, 3e4), (async () => {
7880
7950
  try {
7881
- await sy.connect();
7882
- let e4 = sy.getHostCapabilities();
7883
- uy = !!(e4 != null && e4.modelContext), dy = !!(e4 != null && e4.sampling), Jv(sy, document.getElementById("pan-zoom-controls"), ["aspect-filter", "controls-panel", "param-controls-container", "chart-info", "patterns-strip", "info-panel", "cw-action-bar"]), Zv(sy), $ && py($);
7951
+ await my.connect();
7952
+ let e4 = my.getHostCapabilities();
7953
+ _y = !!(e4 != null && e4.modelContext), vy = !!(e4 != null && e4.sampling), ty(my, document.getElementById("pan-zoom-controls"), ["aspect-filter", "controls-panel", "param-controls-container", "chart-info", "patterns-strip", "info-panel", "cw-action-bar"]), iy(my), $ && by($);
7884
7954
  } catch (e4) {
7885
- console.error("[ChartWheel] \u274C app.connect() FAILED:", e4), Iy("The chart didn't load. Tap to try again.", Ly);
7955
+ console.error("[ChartWheel] \u274C app.connect() FAILED:", e4), Uy("The chart didn't load. Tap to try again.", Wy);
7886
7956
  }
7887
7957
  })();
7888
7958
  </script>