@openephemeris/mcp-server 4.17.0 → 4.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +52 -0
- package/README.md +10 -10
- package/dist/backend/client.d.ts +57 -1
- package/dist/backend/client.js +125 -15
- package/dist/index.js +8 -110
- package/dist/prompts.js +26 -24
- package/dist/server-sse.d.ts +18 -0
- package/dist/server-sse.js +48 -120
- package/dist/tools/apps/_render-token.d.ts +34 -0
- package/dist/tools/apps/_render-token.js +50 -0
- package/dist/tools/apps/bazi-app.d.ts +1 -1
- package/dist/tools/apps/bazi-app.js +39 -14
- package/dist/tools/apps/bi-wheel-app.d.ts +10 -3
- package/dist/tools/apps/bi-wheel-app.js +79 -119
- package/dist/tools/apps/bodygraph-app.d.ts +7 -4
- package/dist/tools/apps/bodygraph-app.js +101 -46
- package/dist/tools/apps/chart-wheel-app.d.ts +1 -1
- package/dist/tools/apps/chart-wheel-app.js +59 -18
- package/dist/tools/apps/location-tools.js +10 -3
- package/dist/tools/apps/moon-phase-app.d.ts +1 -1
- package/dist/tools/apps/moon-phase-app.js +13 -4
- package/dist/tools/apps/transit-timeline-app.d.ts +1 -1
- package/dist/tools/apps/transit-timeline-app.js +6 -6
- package/dist/tools/apps/ui-resource.d.ts +43 -0
- package/dist/tools/apps/ui-resource.js +66 -0
- package/dist/tools/apps/ui-resources.d.ts +22 -0
- package/dist/tools/apps/ui-resources.js +105 -0
- package/dist/tools/apps/vedic-chart-app.d.ts +1 -1
- package/dist/tools/apps/vedic-chart-app.js +13 -3
- package/dist/tools/datetime-historical.js +7 -2
- package/dist/tools/datetime.js +2 -1
- package/dist/tools/dev.js +7 -6
- package/dist/tools/specialized/electional.js +4 -3
- package/dist/tools/specialized/ephemeris_extended.js +19 -4
- package/dist/tools/specialized/hd_group.js +2 -2
- package/dist/tools/specialized/moon.d.ts +1 -1
- package/dist/tools/specialized/moon.js +51 -43
- package/dist/tools/specialized/progressed.js +2 -25
- package/dist/tools/specialized/transits.js +5 -5
- package/dist/ui/bazi.html +1199 -1161
- package/dist/ui/bi-wheel.html +573 -504
- package/dist/ui/bodygraph.html +437 -337
- package/dist/ui/chart-wheel.html +654 -584
- package/dist/ui/moon-phase.html +190 -155
- package/dist/ui/transit-timeline.html +865 -830
- package/dist/ui/vedic-chart.html +971 -934
- package/package.json +2 -1
package/dist/ui/bi-wheel.html
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
|
-
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; font-src data:; connect-src 'none'" />
|
|
4
|
+
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; font-src data: https:; connect-src 'none'" />
|
|
5
5
|
<meta charset="UTF-8" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<meta name="color-scheme" content="dark light" />
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<title>Bi-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);--inner-glyph:#a494f6;--inner-tick:#7a6cbc;--inner-ring:#090810;--inner-stroke:#24222d;--outer-glyph:#e6ac3d;--outer-tick:#ac7d1b;--outer-ring:#070503;--outer-stroke:#342d20;--xasp-conjunction:#bcb1ff;--xasp-opposition:#ff6e75;--xasp-trine:#43d5dc;--xasp-square:#ff8d65;--xasp-sextile:#56d298}@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);--inner-glyph:color(display-p3 .63252 .582093 .937636);--inner-tick:color(display-p3 .469481 .426877 .716469);--inner-ring:color(display-p3 .0342889 .0311906 .0606274);--inner-stroke:color(display-p3 .139053 .135371 .174039);--outer-glyph:color(display-p3 .866978 .684443 .324483);--outer-tick:color(display-p3 .645333 .49681 .196492);--outer-ring:color(display-p3 .0275363 .0215619 .01263);--outer-stroke:color(display-p3 .20063 .175863 .129743);--xasp-conjunction:color(display-p3 .730448 .687159 1.02381);--xasp-opposition:color(display-p3 .953229 .451236 .461586);--xasp-trine:color(display-p3 .442105 .822774 .854824);--xasp-square:color(display-p3 .972792 .553829 .385666);--xasp-sextile:color(display-p3 .475575 .814902 .613781)}}@supports (color:lab(0% 0 0)){:root{--bg:lab(.455387% .00626594 -.517511);--surface:lab(1.54195% -.000223517 -1.4246);--surface-2:lab(3.66055% -.0193194 -3.00652);--border:lab(7.15581% -.0557452 -5.11242);--border-strong:lab(16.3845% -.109598 -6.65552);--text:lab(90.6942% -.142366 -2.26941);--text-secondary:lab(51.2352% -.205308 -3.76425);--gold:lab(67.5798% 11.9379 52.333);--gold-dim:lab(44.394% 5.21132 24.4453);--gold-glow:lab(67.5798% 11.9379 52.333/.2);--gold-subtle:lab(67.5798% 11.9379 52.333/.1);--on-gold:lab(2.4863% .883393 2.81807);--success:lab(61.2436% -46.7762 18.3644);--error:lab(45.8893% 57.7361 27.393);--shadow:0 4px 20px lab(0% 0 0/.45);--shadow-md:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong);--inner-glyph:lab(65.7597% 22.6847 -47.4334);--inner-tick:lab(49.7428% 19.7831 -40.5854);--inner-ring:lab(2.38607% 1.22919 -3.41513);--inner-stroke:lab(13.9501% 2.71787 -6.94334);--outer-glyph:lab(74.5248% 14.3487 62.5064);--outer-tick:lab(55.9353% 12.6865 55.2442);--outer-ring:lab(1.56667% .268132 1.12634);--outer-stroke:lab(18.8428% 1.96195 9.88836);--xasp-conjunction:lab(75.2424% 20.1278 -44.273);--xasp-opposition:lab(65.5258% 60.8412 27.879);--xasp-trine:lab(77.9637% -37.6085 -15.4651);--xasp-square:lab(70.8541% 47.9866 48.6079);--xasp-sextile:lab(76.3335% -46.3634 18.2498)}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}[hidden]{display:none!important}html,body{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;height:100%}body{background:var(--bg);color:var(--text);-webkit-user-select:none;-moz-user-select:none;user-select:none;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.030'/%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 p{letter-spacing:.06em;text-transform:uppercase;font-size:11px}.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}}#chart-container{aspect-ratio:1;justify-content:center;align-items:center;width:100%;max-height:520px;padding:8px;transition:opacity .28s;display:flex;position:relative;overflow:hidden}#chart-container svg{width:100%;height:100%;transition:opacity .22s,filter .22s;display:block}#chart-container.refreshing svg{opacity:.35;filter:blur(1.5px)saturate(.4);pointer-events:none}#chart-container.refreshing:after{content:"";border:1.5px solid var(--gold);opacity:0;pointer-events:none;border-radius:50%;animation:1.2s cubic-bezier(.4,0,.6,1) infinite refresh-ring;position:absolute;top:8px;bottom:8px;left:8px;right:8px}@keyframes refresh-ring{0%{opacity:0;transform:scale(.96)}40%{opacity:.45;transform:scale(1)}to{opacity:0;transform:scale(1.04)}}@keyframes chart-fade-in{0%{opacity:0;transform:scale(.985)}to{opacity:1;transform:scale(1)}}#chart-container.chart-rendered svg{animation:.32s cubic-bezier(.16,1,.3,1) both chart-fade-in}#mode-badge{border-top:1px solid var(--border);background:var(--surface);flex-shrink:0;justify-content:center;align-items:center;gap:10px;padding:6px 14px;font-size:11px;display:flex}.mode-badge-inner{color:var(--inner-glyph);letter-spacing:.02em;align-items:center;gap:5px;font-weight:600;display:inline-flex}.mode-badge-outer{color:var(--outer-glyph);letter-spacing:.02em;align-items:center;gap:5px;font-weight:600;display:inline-flex}.mode-badge-sep{color:var(--text-secondary);font-weight:400}.mode-badge-dot-inner{background:var(--inner-tick);border-radius:50%;flex-shrink:0;width:8px;height:8px}.mode-badge-dot-outer{background:var(--outer-tick);border-radius:50%;flex-shrink:0;width:8px;height:8px}.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:.45}.hit-region.planet-hit{rx:12px;ry:12px}.hit-region.planet-hit:not(.dim):hover{filter:drop-shadow(0 0 5px 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:20px}.info-drawer{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius);width:100%;box-shadow:var(--shadow-md);opacity:0;pointer-events:none;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}.info-drawer:before{content:"";background:var(--border-strong);border-radius:2px;flex-shrink:0;width:36px;height:4px;margin:0 auto 10px;display:block}.info-drawer.open{opacity:1;pointer-events:all;scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex-shrink:0;max-height:min(40vh,360px);padding:14px 16px 12px;overflow-y:auto}.info-header{align-items:flex-start;gap:10px;margin-bottom:12px;display:flex}.info-glyph{text-align:center;flex-shrink:0;width:32px;font-size:26px;line-height:1}.info-title{color:var(--text);flex:1;font-size:13px;font-weight:700}.info-subtitle{color:var(--text-secondary);margin-top:2px;font-family:JetBrains Mono,monospace;font-size:11px;font-weight:400}.wheel-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}.wheel-badge.inner{color:var(--inner-glyph);background:rgba(164,148,246,.12);background:color(display-p3 .63252 .582093 .937636/.12);background:lab(65.7597% 22.6847 -47.4334/.12);border:1px solid rgba(164,148,246,.3);border:1px solid color(display-p3 .63252 .582093 .937636/.3);border:1px solid lab(65.7597% 22.6847 -47.4334/.3)}.wheel-badge.outer{color:var(--outer-glyph);background:rgba(230,172,61,.12);background:color(display-p3 .866978 .684443 .324483/.12);background:lab(74.5248% 14.3487 62.5064/.12);border:1px solid rgba(230,172,61,.3);border:1px solid color(display-p3 .866978 .684443 .324483/.3);border:1px solid lab(74.5248% 14.3487 62.5064/.3)}.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:130px;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}.tooltip{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;-webkit-backdrop-filter:blur(14px)saturate(1.6);backdrop-filter:blur(14px)saturate(1.6);border-radius:var(--radius,10px);pointer-events:none;z-index:1000;opacity:0;background:rgba(12,12,22,.94);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}.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-state .error-msg{color:var(--text-secondary);text-align:center;max-width:280px;font-size:13px;line-height:1.5}#chart-hint{text-align:center;color:var(--text-secondary);letter-spacing:.04em;flex-shrink:0;padding:4px 12px 6px;font-size:10px}.chart-status{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:var(--radius-pill);color:var(--gold);z-index:900;opacity:0;pointer-events:none;letter-spacing:.04em;background:rgba(7,9,14,.92);background:color(display-p3 .0286832 .0352525 .0537785/.92);background:lab(2.44746% .00379235 -2.33402/.92);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);max-height:0;padding:5px 16px;font-size:11px;font-weight:600;transition:max-height .24s cubic-bezier(.16,1,.3,1),opacity .24s,transform .24s cubic-bezier(.16,1,.3,1);position:fixed;top:10px;left:50%;overflow:hidden;transform:translate(-50%)translateY(-10px);box-shadow:0 4px 20px rgba(0,0,0,.5),0 0 0 1px rgba(204,156,66,.1);box-shadow:0 4px 20px color(display-p3 0 0 0/.5),0 0 0 1px color(display-p3 .76996 .617341 .321369/.1);box-shadow:0 4px 20px lab(0% 0 0/.5),0 0 0 1px lab(67.5798% 11.9379 52.333/.1)}.chart-status.visible{opacity:1;max-height:44px;transform:translate(-50%)translateY(0)}.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:.45;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)}.hd-action-bar{flex-wrap:wrap;flex-shrink:0;gap:8px;padding:10px 16px 6px;display:flex}.action-btn{color:var(--gold);letter-spacing:.02em;cursor:pointer;white-space:nowrap;background:rgba(212,175,55,.08);border:1px solid rgba(212,175,55,.3);border-radius:8px;align-items:center;gap:6px;padding:7px 16px;font-size:12px;font-weight:600;transition:background .2s,border-color .2s,transform .1s;display:inline-flex}.action-btn:hover{background:rgba(212,175,55,.15);border-color:rgba(212,175,55,.5);transform:translateY(-1px)}.action-btn:active{background:rgba(212,175,55,.2);transform:translateY(0)}.action-btn--primary{color:var(--gold);background:linear-gradient(135deg,rgba(212,175,55,.2),rgba(180,140,30,.25));border-color:rgba(212,175,55,.5)}.action-btn--primary:hover{background:linear-gradient(135deg,rgba(212,175,55,.3),rgba(180,140,30,.35));border-color:rgba(212,175,55,.7)}.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:36px;height:36px;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:36px;height:36px}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{min-height:0;aspect-ratio:unset;flex:1;justify-content:center;align-items:center;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 #bi-info-drawer{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=right] .info-drawer--fs{min-height:0;box-shadow:none;scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;background:0 0;border:none;border-radius:0;flex:1;padding:0;overflow-y:auto;opacity:1!important;pointer-events:all!important;max-height:none!important}#fs-bottom-bar [data-column=right] .info-drawer--fs:before{display:none}#fs-bottom-bar [data-column]>*+*{border-top:1px solid var(--border);margin-top:4px;padding-top:8px}#fs-bottom-bar .bi-action-bar,#fs-bottom-bar .cw-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-muted,#aaa);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)}.dignity-badge{letter-spacing:.03em;border-radius:4px;padding:1px 6px;font-size:10px;font-weight:600;display:inline-block}.dignity-domicile{color:#cc9c42;color:color(display-p3 .76996 .617341 .321369);color:lab(67.5798% 11.9379 52.333);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,.3);border:1px solid color(display-p3 .76996 .617341 .321369/.3);border:1px solid lab(67.5798% 11.9379 52.333/.3)}.dignity-exaltation{color:#1da871;color:color(display-p3 .313719 .651039 .459895);color:lab(61.2436% -46.7762 18.3644);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,.3);border:1px solid color(display-p3 .313719 .651039 .459895/.3);border:1px solid lab(61.2436% -46.7762 18.3644/.3)}.dignity-detriment,.dignity-fall{color:#c53443;color:color(display-p3 .710345 .252818 .279408);color:lab(45.8893% 57.7361 27.393);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,.25);border:1px solid color(display-p3 .710345 .252818 .279408/.25);border:1px solid lab(45.8893% 57.7361 27.393/.25)}.mode-badge-name{cursor:pointer;font-family:inherit;font-size:inherit;letter-spacing:.02em;background:0 0;border:none;border-radius:4px;align-items:center;gap:5px;padding:2px 6px;font-weight:600;transition:background .15s,color .15s;display:inline-flex}.mode-badge-name.inner-name{color:var(--inner-glyph)}.mode-badge-name.outer-name{color:var(--outer-glyph)}.mode-badge-name:hover{background:rgba(255,255,255,.06);background:color(display-p3 1 1 1/.06);background:lab(100% 0 0/.06)}.mode-badge-name.focused{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)}.mode-badge-swap{cursor:pointer;color:var(--text-secondary);background:0 0;border:none;align-items:center;padding:2px 4px;font-size:13px;line-height:1;transition:color .15s,transform .15s;display:inline-flex}.mode-badge-swap:hover{color:var(--gold);transform:scaleX(-1)}.mode-badge-date{color:var(--text-secondary);letter-spacing:.02em;font-size:10px;font-weight:400}#chart-container[data-focus=inner] .outer-planet-group,#chart-container[data-focus=outer] .inner-planet-group{opacity:.25;transition:opacity .25s}#aspect-filter{padding:0}.asp-panel{flex-wrap:wrap;align-items:center;gap:4px 12px;padding:4px 12px;display:flex}.aspect-toggle-btn,.orb-preset-btn{padding:2px 8px!important;font-size:10px!important}.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)}.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}.orb-preset-btn.active{background:var(--surface-2);border-color:var(--gold);color:var(--gold)}.aspect-toggle-btn .toggle-icon{font-size:13px;line-height:1}.chart-provenance{border-bottom:1px solid var(--border);background:var(--surface);flex-flow:wrap;flex-shrink:0;justify-content:center;align-items:baseline;gap:2px 10px;padding:5px 12px;font-size:10px;animation:.2s both prov-in;display:flex}.chart-provenance>*{align-items:baseline;gap:6px;display:inline-flex}@keyframes prov-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.prov-name{color:var(--text);letter-spacing:.01em;align-items:center;gap:7px;font-size:11px;font-weight:600;display:flex}.prov-mode-tag{letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary);background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-pill);padding:1px 6px;font-size:9px;font-weight:500}.prov-trio{color:var(--text);align-items:center;gap:6px;font-size:11px;display:flex}.prov-planet{font-variant-numeric:tabular-nums;letter-spacing:.01em}.prov-sep{color:var(--border-strong);font-size:12px}.prov-meta{color:var(--text-secondary);letter-spacing:.02em;font-size:10px}.prov-tz{opacity:.7;font-size:9px}.error-state{flex-direction:column;justify-content:center;align-items:center;gap:12px;height:100%;min-height:200px;padding:24px;display:flex}.error-icon{opacity:.7;font-size:28px}.error-msg{color:var(--text-secondary);text-align:center;max-width:260px;font-size:12px;line-height:1.5}.error-retry-btn{border-radius:var(--radius-pill);border:1px solid var(--border-strong);background:var(--surface-2);color:var(--text);font:inherit;cursor:pointer;letter-spacing:.02em;margin-top:4px;padding:7px 20px;font-size:11px;font-weight:500;transition:all .18s}.error-retry-btn:hover{background:var(--gold-subtle);border-color:var(--gold-dim);color:var(--gold)}.chart-layer{opacity:1;transform-origin:310px 310px;animation:.5s cubic-bezier(.16,1,.3,1) both svgLayerAssemble;animation-delay:calc(var(--layer-index,0) * 80ms);transform:scale(1)}@keyframes svgLayerAssemble{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.floating-action-btn:after{content:"";background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);width:50%;height:100%;animation:3s 2s infinite shimmer;position:absolute;top:0;left:-100%;transform:skew(-20deg)}@keyframes shimmer{0%{left:-100%}20%{left:200%}to{left:200%}}@keyframes slideUpFadeIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes slideUpFadeInPanel{0%{opacity:0;transform:translateY(12px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.patterns-strip{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;align-items:center;gap:4px;padding:4px 12px;font-size:10px;animation:.22s cubic-bezier(.16,1,.3,1) both slideUpFadeInPanel;display:flex}.pattern-pill{padding:2px 8px!important;font-size:10px!important}.patterns-label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);white-space:nowrap;margin-right:2px;font-size:10px;font-weight:700}.pattern-pill{border-radius:var(--radius-pill);cursor:pointer;letter-spacing:.01em;border:1.5px solid;align-items:center;gap:4px;padding:3px 10px;font-size:11px;font-weight:600;transition:background .15s,opacity .15s,transform .12s;display:inline-flex}.pattern-pill:hover{opacity:.85;transform:scale(1.03)}.pattern-pill.active{box-shadow:0 0 0 2px}.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}.tally-panel{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;align-items:center;gap:6px 14px;padding:5px 12px 6px;font-size:11px;animation:.22s cubic-bezier(.16,1,.3,1) both slideUpFadeInPanel;display:flex}.tally-section{flex-direction:column;gap:4px;display:flex}.tally-row{align-items:flex-start;gap:10px;display:flex}.tally-row.modality{gap:12px}.tally-item{border-radius:var(--radius-pill);cursor:pointer;white-space:nowrap;border:1.5px solid transparent;align-items:center;gap:4px;padding:2px 8px;font-size:12px;font-weight:700;transition:background .14s,border-color .14s,transform .12s;display:inline-flex}.tally-item:hover{transform:scale(1.06)}.tally-item.active{border-color:currentColor;box-shadow:0 0 0 2px}.tally-item.fire{color:#ff744f;color:color(display-p3 .936486 .485321 .346768);color:lab(66.005% 52.9628 47.7034);background:rgba(255,116,79,.1);background:color(display-p3 .936486 .485321 .346768/.1);background:lab(66.005% 52.9628 47.7034/.1)}.tally-item.earth{color:#68a244;color:color(display-p3 .458546 .627532 .315071);color:lab(60.9267% -32.2405 41.5215);background:rgba(104,162,68,.1);background:color(display-p3 .458546 .627532 .315071/.1);background:lab(60.9267% -32.2405 41.5215/.1)}.tally-item.air{color:#2fb5d8;color:color(display-p3 .359655 .701622 .832954);color:lab(68.1219% -27.5397 -28.3166);background:rgba(47,181,216,.1);background:color(display-p3 .359655 .701622 .832954/.1);background:lab(68.1219% -27.5397 -28.3166/.1)}.tally-item.water{color:#7792ee;color:color(display-p3 .487398 .569622 .908946);color:lab(61.5869% 9.51824 -50.2978);background:rgba(119,146,238,.1);background:color(display-p3 .487398 .569622 .908946/.1);background:lab(61.5869% 9.51824 -50.2978/.1)}.tally-item.cardinal{color:#cc9c42;color:color(display-p3 .76996 .617341 .321369);color:lab(67.5798% 11.9379 52.333);background:rgba(204,156,66,.08);background:color(display-p3 .76996 .617341 .321369/.08);background:lab(67.5798% 11.9379 52.333/.08)}.tally-item.fixed{color:#a486d7;color:color(display-p3 .623892 .531312 .823026);color:lab(61.2732% 24.0176 -37.6492);background:rgba(164,134,215,.08);background:color(display-p3 .623892 .531312 .823026/.08);background:lab(61.2732% 24.0176 -37.6492/.08)}.tally-item.mutable{color:#24a592;color:color(display-p3 .315103 .636668 .572864);color:lab(60.7802% -38.5122 -.286269);background:rgba(36,165,146,.08);background:color(display-p3 .315103 .636668 .572864/.08);background:lab(60.7802% -38.5122 -.286269/.08)}.tally-planets{flex-wrap:wrap;gap:2px 4px;padding:0 4px;display:flex}.tally-planet-chip{cursor:pointer;opacity:.75;font-size:13px;line-height:1;transition:opacity .12s,transform .12s}.tally-planet-chip:hover{opacity:1;transform:scale(1.15)}.tally-bar-row{padding:0 2px}.tally-bar{background:var(--surface-2);border-radius:2px;width:80px;height:4px;display:flex;overflow:hidden}.tally-bar-fill{height:100%;transition:width .3s cubic-bezier(.16,1,.3,1)}.tally-bar-fill.fire{background:#ff744f;background:color(display-p3 .936486 .485321 .346768);background:lab(66.005% 52.9628 47.7034)}.tally-bar-fill.earth{background:#68a244;background:color(display-p3 .458546 .627532 .315071);background:lab(60.9267% -32.2405 41.5215)}.tally-bar-fill.air{background:#2fb5d8;background:color(display-p3 .359655 .701622 .832954);background:lab(68.1219% -27.5397 -28.3166)}.tally-bar-fill.water{background:#7792ee;background:color(display-p3 .487398 .569622 .908946);background:lab(61.5869% 9.51824 -50.2978)}.tally-divider{background:var(--border-strong);flex-shrink:0;align-self:center;width:1px;height:28px}.dignity-panel{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;align-items:center;gap:6px;padding:5px 12px 6px;font-size:11px;animation:.22s cubic-bezier(.16,1,.3,1) both slideUpFadeInPanel;display:flex}.dignity-chip{border-radius:var(--radius-pill);cursor:pointer;white-space:nowrap;border:1.5px solid transparent;align-items:center;gap:3px;padding:2px 8px 2px 6px;font-size:12px;font-weight:600;transition:border-color .14s,box-shadow .14s,transform .12s;display:inline-flex}.dignity-chip:hover{transform:scale(1.06)}.dignity-chip.active{border-color:currentColor;box-shadow:0 0 0 2px}.dignity-wheel-badge{opacity:.7;margin-left:1px;font-size:8px}.dignity-wheel-badge.inner{color:var(--inner-glyph)}.dignity-wheel-badge.outer{color:var(--outer-glyph)}:root[data-theme=light]{--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);--inner-ring:#e7e7ee;--inner-stroke:#978ed2;--inner-glyph:#422b83;--inner-tick:#5e4f9c;--outer-ring:#f6f1e9;--outer-stroke:#ae7c00;--outer-glyph:#704a00;--outer-tick:#8a6000;--xasp-conjunction:#4f3a92;--xasp-opposition:#9d0026;--xasp-trine:#005b60;--xasp-square:#982f00;--xasp-sextile:#005833}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light]{--bg:color(display-p3 .967616 .959866 .945308);--surface:color(display-p3 1 1 1);--surface-2:color(display-p3 .943798 .93351 .914195);--border:color(display-p3 .855616 .842987 .819292);--border-strong:color(display-p3 .73602 .716348 .67952);--text:color(display-p3 .0633107 .0687189 .081922);--text-secondary:color(display-p3 .313002 .323251 .348016);--gold:color(display-p3 .49809 .342102 -.0880434);--gold-dim:color(display-p3 .414099 .299019 .034461);--gold-glow:color(display-p3 .49809 .342102 -.0880434/.25);--gold-subtle:color(display-p3 .49809 .342102 -.0880434/.1);--on-gold:color(display-p3 .983924 .957955 .909341);--success:color(display-p3 -.0793084 .456092 .255685);--error:color(display-p3 .642198 .101724 .18242);--shadow:0 4px 20px color(display-p3 0 0 0/.1);--shadow-md:0 8px 32px color(display-p3 0 0 0/.14), 0 0 0 1px var(--border-strong);--inner-ring:color(display-p3 .907095 .905197 .931783);--inner-stroke:color(display-p3 .58664 .556304 .804254);--inner-glyph:color(display-p3 .245423 .171497 .493494);--inner-tick:color(display-p3 .358729 .312313 .591881);--outer-ring:color(display-p3 .961514 .946019 .916957);--outer-stroke:color(display-p3 .654857 .492962 .151277);--outer-glyph:color(display-p3 .448097 .281046 -.133276);--outer-tick:color(display-p3 .524671 .380491 .0387678);--xasp-conjunction:color(display-p3 .295896 .228956 .554264);--xasp-opposition:color(display-p3 .566502 .0969703 .161549);--xasp-trine:color(display-p3 -.136655 .362311 .395877);--xasp-square:color(display-p3 .576596 .182695 -.0331795);--xasp-sextile:color(display-p3 -.0802406 .354845 .187391)}}@supports (color:lab(0% 0 0)){:root[data-theme=light]{--bg:lab(96.5376% .34079 2.2589);--surface:lab(100% 0 0);--surface-2:lab(94.2232% .459701 3.01524);--border:lab(86.1085% .583261 3.77473);--border-strong:lab(74.5232% .975847 6.06879);--text:lab(5.23809% -.0738502 -2.43738);--text-secondary:lab(34.9842% -.210062 -4.49808);--gold:lab(40.7346% 15.7445 75.3139);--gold-dim:lab(35.0077% 11.3181 50.9422);--gold-glow:lab(40.7346% 15.7445 75.3139/.25);--gold-subtle:lab(40.7346% 15.7445 75.3139/.1);--on-gold:lab(96.574% 1.22041 7.58642);--success:lab(41.7514% -55.3249 21.5039);--error:lab(37.5238% 64.2774 32.6097);--shadow:0 4px 20px lab(0% 0 0/.1);--shadow-md:0 8px 32px lab(0% 0 0/.14), 0 0 0 1px var(--border-strong);--inner-ring:lab(91.7856% 1.21665 -3.5493);--inner-stroke:lab(61.7097% 15.1373 -34.1532);--inner-glyph:lab(24.6169% 28.6686 -46.7313);--inner-tick:lab(38.0413% 20.9664 -40.377);--outer-ring:lab(95.394% .703841 4.5323);--outer-stroke:lab(55.9083% 14.2142 62.5614);--outer-glyph:lab(34.836% 18.3832 78.9849);--outer-tick:lab(44.2758% 13.6718 62.9124);--xasp-conjunction:lab(30.5613% 27.1755 -46.8105);--xasp-opposition:lab(33.102% 57.8409 29.1456);--xasp-trine:lab(33.8513% -37.0741 -15.1222);--xasp-square:lab(35.9066% 49.947 64.0775);--xasp-sextile:lab(32.2083% -48.6822 18.8909)}}:root[data-theme=light],:root[data-theme=light] body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background-image:none}:root[data-theme=light] .tooltip{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--text);border-color:var(--border-strong);background:rgba(255,255,255,.96);background:color(display-p3 1 1 1/.96);background:lab(100% 0 0/.96);box-shadow:0 8px 32px rgba(0,0,0,.18),inset 0 .5px rgba(255,255,255,.6);box-shadow:0 8px 32px color(display-p3 0 0 0/.18),inset 0 .5px color(display-p3 1 1 1/.6);box-shadow:0 8px 32px lab(0% 0 0/.18),inset 0 .5px lab(100% 0 0/.6)}:root[data-theme=light] .tooltip-title{color:var(--text)}:root[data-theme=light] .tooltip-detail{color:var(--text-secondary)}:root[data-theme=light] .tooltip-hint{color:var(--gold-dim)}:root[data-theme=light] .chart-status{color:var(--gold);background:rgba(247,245,241,.92);background:color(display-p3 .967616 .959866 .945308/.92);background:lab(96.5376% .34079 2.2589/.92);border-color:rgba(141,95,0,.35);border-color:color(display-p3 .542549 .371783 -.107551/.35);border-color:lab(44.1995% 17.0662 84.3373/.35)}:root[data-theme=light] .chart-provenance{background:var(--surface)}:root[data-theme=light] .hit-region:hover{fill:rgba(141,95,0,.1);fill:color(display-p3 .542549 .371783 -.107551/.1);fill:lab(44.1995% 17.0662 84.3373/.1);stroke:var(--gold-dim)}:root[data-theme=light] .pan-btn{background:var(--surface)}:root[data-theme=light] .pan-btn:hover{background:var(--surface-2)}:root[data-theme=light] #fs-bottom-bar{background:#f7f5f1;background:color(display-p3 .967616 .959866 .945308);background:lab(96.5376% .34079 2.2589);border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] #fs-bottom-bar [data-column=left],:root[data-theme=light] #fs-bottom-bar [data-column=right]{background:#f1eeea;background:color(display-p3 .941472 .933762 .919279);background:lab(94.2176% .341028 2.25905)}:root[data-theme=light] #fs-bottom-bar [data-column=left]{border-right-color:#caced4;border-right-color:color(display-p3 .796183 .806346 .830691);border-right-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] #fs-bottom-bar [data-column=right]{border-left-color:#caced4;border-left-color:color(display-p3 .796183 .806346 .830691);border-left-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] #fs-bottom-bar [data-column]>*+*{border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] .cancel-toast{background:var(--surface);border-color:var(--border-strong);color:var(--text-secondary)}@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}.controls,.control-row,#date-controls{flex-wrap:wrap;gap:8px}}.param-controls{background:var(--surface);border-top:1px solid var(--border);flex-shrink:0;padding:6px 12px}.param-controls-grid{flex-wrap:wrap;align-items:center;gap:6px 10px;display:flex}.param-group{flex-direction:row;align-items:center;gap:6px;display:flex}.param-group label{text-transform:uppercase;color:var(--text-secondary);letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:700}.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);color-scheme:inherit;border-radius:var(--radius-sm);width:120px;height:24px;padding:3px 6px;font-family:inherit;font-size:11px}@media (prefers-reduced-motion:no-preference){.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{transition:border-color .15s}}.param-group input:focus{border-color:var(--gold-dim);outline:none}.loc-searching{border-color:var(--gold-dim)!important}@media (prefers-reduced-motion:no-preference){.loc-searching{animation:1s ease-in-out infinite alternate loc-pulse}}@keyframes loc-pulse{0%{border-color:var(--gold-dim)}to{border-color:rgba(204,156,66,.55);border-color:color(display-p3 .76996 .617341 .321369/.55);border-color:lab(67.5798% 11.9379 52.333/.55)}}.param-group-loc{flex:1;position:relative}.param-group-loc input{width:100%}.loc-suggestions{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius-sm);z-index:100;max-height:200px;margin-top:4px;position:absolute;top:100%;left:0;right:0;overflow-y:auto;box-shadow:0 4px 12px rgba(0,0,0,.35);box-shadow:0 4px 12px color(display-p3 0 0 0/.35);box-shadow:0 4px 12px lab(0% 0 0/.35)}.loc-item{color:var(--text);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid var(--border);padding:8px 10px;font-size:12px;overflow:hidden}.loc-item:last-child{border-bottom:none}@media (prefers-reduced-motion:no-preference){.loc-item{transition:background .1s,color .1s}}.loc-item:hover,.loc-item--active{background:var(--gold-subtle);color:var(--gold)}.loc-status{color:var(--text-secondary);letter-spacing:.01em;padding:8px 10px;font-size:11px;font-style:italic}.loc-status-error{color:#d76a5a;color:color(display-p3 .788241 .439621 .373983);color:lab(58.1265% 42.6447 29.9439);font-style:normal;font-weight:600}.param-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.param-cost-hint{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;font-size:10px}.param-btn-icon{border:1px solid var(--border-strong);color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;background:0 0;justify-content:center;align-items:center;width:24px;height:24px;display:flex}@media (prefers-reduced-motion:no-preference){.param-btn-icon{transition:background .15s,border-color .15s,color .15s}}.param-btn-icon:hover{background:var(--surface-2);color:var(--text);border-color:var(--gold-dim)}.param-btn-primary{color:var(--gold);border-radius:var(--radius-sm);cursor:pointer;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);height:24px;padding:3px 10px;font-family:inherit;font-size:10px;font-weight:600}@media (prefers-reduced-motion:no-preference){.param-btn-primary{transition:background .15s,border-color .15s}}.param-btn-primary:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65)}.param-btn-primary:disabled{opacity:.5;cursor:not-allowed}.param-extra-toggle{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;cursor:pointer;align-items:center;gap:5px;font-size:10px;display:flex}.param-extra-toggle input[type=checkbox]{width:13px;height:13px;accent-color:var(--gold,oklch(72% .12 80));cursor:pointer}.param-extra-toggle input[type=checkbox]:disabled{cursor:not-allowed}.param-extra-toggle input[type=checkbox]:disabled~span{opacity:.5}:root[data-theme=light] .param-group input[type=date],:root[data-theme=light] .param-group input[type=time],:root[data-theme=light] .param-group input[type=text]{border-color:var(--border-strong);color:var(--text);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167638 1.12768)}:root[data-theme=light] .loc-suggestions{border-color:var(--border-strong);background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167638 1.12768)}:root[data-theme=light] .param-btn-primary{background:rgba(160,112,0,.12);background:color(display-p3 .615135 .441554 -.0204711/.12);background:lab(51.2092% 16.2654 78.3504/.12);border-color:rgba(160,112,0,.4);border-color:color(display-p3 .615135 .441554 -.0204711/.4);border-color:lab(51.2092% 16.2654 78.3504/.4)}:root[data-theme=light] .param-btn-primary:hover:not(:disabled){background:rgba(160,112,0,.22);background:color(display-p3 .615135 .441554 -.0204711/.22);background:lab(51.2092% 16.2654 78.3504/.22);border-color:rgba(160,112,0,.65);border-color:color(display-p3 .615135 .441554 -.0204711/.65);border-color:lab(51.2092% 16.2654 78.3504/.65)}.param-summary-bar{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:2px 0;margin-bottom:4px;padding:3px 4px 5px;font-size:10px;line-height:1.3;display:flex}.param-summary-bar[hidden]{display:none}.summary-name{color:var(--gold,#d6a54d);letter-spacing:.01em;padding-right:2px;font-size:12px;font-weight:700}@supports (color:color(display-p3 0 0 0)){.summary-name{color:var(--gold,color(display-p3 .808073 .654274 .358094))}}@supports (color:lab(0% 0 0)){.summary-name{color:var(--gold,lab(71.071% 11.7474 51.7651))}}.summary-datetime{font-variant-numeric:tabular-nums;color:var(--text-secondary);align-items:baseline;gap:4px;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-size:11px;display:inline-flex}.summary-time-sep{color:var(--border-strong);opacity:.7;font-family:inherit;font-size:9px}.summary-loc{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:200px;padding-left:2px;font-size:11px;font-style:italic;overflow:hidden}.summary-sep{background:var(--border-strong);opacity:.5;vertical-align:middle;flex-shrink:0;width:1px;height:11px;margin:0 7px;display:inline-block}
|
|
13
|
+
<style>:root{--bg:#010102;--surface:#030408;--surface-2:#080b11;--border:#13161d;--border-strong:#242933;--text:#e2e4e9;--text-secondary:#a1a5ab;--muted:#84868b;--gold:#cc9c42;--gold-dim:#7b6540;--gold-glow:rgba(204,156,66,.2);--gold-subtle:rgba(204,156,66,.1);--success:#1da871;--error:#c53443;--radius:10px;--radius-sm:6px;--radius-pill:99px;--oe-shadow-md:0 8px 40px rgba(0,0,0,.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px rgba(204,156,66,.15), 0 0 0 1px rgba(204,156,66,.2);--font-ui:var(--font-sans,system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif);--font-code:var(--font-mono,ui-monospace, "SFMono-Regular", "Cascadia Mono", Menlo, Consolas, monospace);--oe-page-bg:var(--color-background-primary,var(--bg));--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@supports (color:color(display-p3 0 0 0)){:root{--bg:color(display-p3 .00306656 .00431968 .00888397);--surface:color(display-p3 .013072 .016989 .0298495);--surface-2:color(display-p3 .0345774 .0431759 .0653236);--border:color(display-p3 .0763929 .0859556 .109705);--border-strong:color(display-p3 .144788 .159634 .196542);--text:color(display-p3 .889546 .895785 .910689);--text-secondary:color(display-p3 .635245 .644982 .668335);--muted:color(display-p3 .518127 .525635 .543633);--gold:color(display-p3 .76996 .617341 .321369);--gold-dim:color(display-p3 .469305 .400291 .270966);--gold-glow:color(display-p3 .76996 .617341 .321369/.2);--gold-subtle:color(display-p3 .76996 .617341 .321369/.1);--success:color(display-p3 .313719 .651039 .459895);--error:color(display-p3 .710345 .252818 .279408);--oe-shadow-md:0 8px 40px color(display-p3 0 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px color(display-p3 .76996 .617341 .321369/.15), 0 0 0 1px color(display-p3 .76996 .617341 .321369/.2)}}@supports (color:lab(0% 0 0)){:root{--bg:lab(.302122% .0219196 -.522962);--surface:lab(1.18159% .0276566 -1.4848);--surface-2:lab(3.00584% .0228807 -3.15676);--border:lab(7.15581% -.0557452 -5.11242);--border-strong:lab(16.3712% -.0768155 -7.37782);--text:lab(90.6942% -.142366 -2.26941);--text-secondary:lab(67.4758% -.215352 -3.76978);--muted:lab(55.8848% -.174642 -3.01716);--gold:lab(67.5798% 11.9379 52.333);--gold-dim:lab(44.394% 5.21132 24.4453);--gold-glow:lab(67.5798% 11.9379 52.333/.2);--gold-subtle:lab(67.5798% 11.9379 52.333/.1);--success:lab(61.2436% -46.7762 18.3644);--error:lab(45.8893% 57.7361 27.393);--oe-shadow-md:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px lab(67.5798% 11.9379 52.333/.15), 0 0 0 1px lab(67.5798% 11.9379 52.333/.2)}}:root[data-theme=light]{--bg:#f4f5f8;--surface:#fbfcfe;--surface-2:#eceef3;--border:#d5d7dd;--border-strong:#babec6;--text:#181b1f;--text-secondary:#4a4d54;--muted:#606369;--gold:#8a6000;--gold-dim:#967c4f;--gold-glow:rgba(141,95,0,.25);--gold-subtle:rgba(141,95,0,.07);--success:#007145;--error:#b1002b;--oe-shadow-md:0 4px 24px rgba(0,0,0,.12), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 16px rgba(141,95,0,.18), 0 0 0 1px rgba(141,95,0,.22);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light]{--bg:color(display-p3 .956515 .960735 .970805);--surface:color(display-p3 .98376 .986943 .994535);--surface-2:color(display-p3 .928401 .934691 .949715);--border:color(display-p3 .836244 .844458 .864107);--border-strong:color(display-p3 .731542 .743532 .772301);--text:color(display-p3 .096883 .103987 .12134);--text-secondary:color(display-p3 .291758 .301882 .326359);--muted:color(display-p3 .379924 .388781 .410092);--gold:color(display-p3 .524671 .380491 .0387678);--gold-dim:color(display-p3 .572756 .489268 .332751);--gold-glow:color(display-p3 .542549 .371783 -.107551/.25);--gold-subtle:color(display-p3 .542549 .371783 -.107551/.07);--success:color(display-p3 -.0793084 .456092 .255685);--error:color(display-p3 .642198 .101724 .18242);--oe-shadow-md:0 4px 24px color(display-p3 0 0 0/.12), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 16px color(display-p3 .542549 .371783 -.107551/.18), 0 0 0 1px color(display-p3 .542549 .371783 -.107551/.22)}}@supports (color:lab(0% 0 0)){:root[data-theme=light]{--bg:lab(96.503% -.0977516 -1.51461);--surface:lab(98.8273% -.0742674 -1.13657);--surface-2:lab(94.1743% -.142753 -2.26963);--border:lab(86.0453% -.183702 -3.02233);--border-strong:lab(76.7468% -.254452 -4.52154);--text:lab(9.4703% -.119448 -3.722);--text-secondary:lab(32.6639% -.205323 -4.4957);--muted:lab(41.9548% -.197023 -3.7598);--gold:lab(44.2758% 13.6718 62.9124);--gold-dim:lab(53.685% 6.10271 28.558);--gold-glow:lab(44.1995% 17.0662 84.3373/.25);--gold-subtle:lab(44.1995% 17.0662 84.3373/.07);--success:lab(41.7514% -55.3249 21.5039);--error:lab(37.5238% 64.2774 32.6097);--oe-shadow-md:0 4px 24px lab(0% 0 0/.12), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 16px lab(44.1995% 17.0662 84.3373/.18), 0 0 0 1px lab(44.1995% 17.0662 84.3373/.22)}}:root{--safe-top:0px;--safe-right:0px;--safe-bottom:0px;--safe-left:0px;--oe-host-h:var(--host-height,var(--host-max-height,640px));--oe-chart-max:clamp(260px, calc(var(--oe-host-h) * .72), 560px);--oe-chart-max-lg:clamp(280px, calc(var(--oe-host-h) * .8), 720px);--oe-drawer-max:clamp(160px, calc(var(--oe-host-h) * .4), 360px);--oe-scroll-max:clamp(240px, calc(var(--oe-host-h) * .7), 560px)}html,body{font-family:var(--font-ui)}body{background-color:var(--oe-page-bg)}.oe-pannable{touch-action:pan-y}body.is-fullscreen .oe-pannable{touch-action:none}.pan-zoom-controls [hidden],.pan-btn[hidden]{display:none!important}.fs-hint-banner{top:calc(12px + var(--safe-top));z-index:9999;border-radius:var(--radius-pill);border:1px solid color-mix(in oklab, var(--gold) 35%, transparent);background:color-mix(in oklab, var(--surface-2) 92%, transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);max-width:calc(100% - 32px);color:var(--text);font:600 11px/1.4 var(--font-ui);letter-spacing:.04em;white-space:nowrap;text-overflow:ellipsis;pointer-events:none;opacity:0;padding:6px 16px;transition:opacity .3s;position:fixed;left:50%;overflow:hidden;transform:translate(-50%)}.fs-hint-banner.visible{opacity:1}@media (prefers-reduced-motion:reduce){.fs-hint-banner{transition:none}}body.is-fullscreen{height:100vh;height:100dvh;overflow:hidden}body.is-fullscreen #app{width:100%;max-width:none;height:100%;min-height:0;padding:var(--safe-top) var(--safe-right) var(--safe-bottom) var(--safe-left);flex-direction:column;gap:0;margin:0;display:flex;overflow:hidden}body.is-fullscreen #app:has(>#fs-bottom-bar){padding-bottom:0}body.is-fullscreen #app .oe-stage{aspect-ratio:auto;width:100%;max-width:none;height:auto;min-height:0;max-height:none;box-shadow:none;background:0 0;border:0;border-radius:0;flex:auto;justify-content:center;align-items:center;margin:0;padding:16px 24px 8px;display:flex;overflow:hidden}body.is-fullscreen #app .oe-stage>svg{width:auto;max-width:100%;height:100%;max-height:100%}body.is-fullscreen #app .oe-stage--doc{width:100%;max-width:880px;padding:20px 24px calc(16px + var(--safe-bottom));flex-direction:column;justify-content:flex-start;align-items:stretch;margin:0 auto;display:flex;overflow-y:auto}body.is-fullscreen #app #loading-state{flex:1;height:auto;min-height:0}body.is-fullscreen #app .pan-zoom-controls{top:calc(54px + var(--safe-top));right:calc(12px + var(--safe-right));bottom:auto}body .oe-info-button{top:calc(12px + var(--safe-top));right:calc(12px + var(--safe-right))}#app #fs-bottom-bar{height:clamp(170px, calc(var(--oe-host-h) * .3), 280px);padding-bottom:var(--safe-bottom);border-top:1px solid var(--border);background:var(--surface);flex-shrink:0;grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(200px,260px) minmax(0,1fr) minmax(200px,260px);display:grid}:root[data-safe-bottom] #app #fs-bottom-bar{height:calc(clamp(170px, calc(var(--oe-host-h) * .3), 280px) + var(--safe-bottom));grid-template-columns:minmax(0,1fr) minmax(0,1fr)}:root[data-safe-bottom] #fs-bottom-bar [data-column=center]{display:none}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex-direction:column;gap:4px;min-height:0;padding:10px 14px 12px;display:flex;overflow-x:hidden;overflow-y:auto}#fs-bottom-bar [data-column=left]{border-right:1px solid var(--border)}#fs-bottom-bar [data-column=right]{border-left:1px solid var(--border)}#fs-bottom-bar [data-column=center]{pointer-events:none}#fs-bottom-bar [data-column]>*+*{border-top:1px solid var(--border);margin-top:4px;padding-top:8px}#fs-bottom-bar [class$=-action-bar],#fs-bottom-bar [class*=-action-bar\ ]{flex-direction:column;padding:8px 0 0}#fs-bottom-bar .action-btn{justify-content:center;width:100%}@media (max-width:640px){#app #fs-bottom-bar,:root[data-safe-bottom] #app #fs-bottom-bar{height:auto;max-height:42%;display:block;overflow-y:auto}#fs-bottom-bar [data-column=center]{display:none}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{border:0;min-height:auto;overflow:visible}#fs-bottom-bar [data-column=right]{border-top:1px solid var(--border)}body.is-fullscreen #app .oe-stage{padding:8px}}body.is-pip{overflow:hidden}body.is-pip #app{gap:6px;padding:6px 8px}body.is-pip .oe-pip-hide,body.is-pip #param-controls-container,body.is-pip #chart-status,body.is-pip .oe-info-button{display:none!important}body.is-pip #app .pan-zoom-controls{top:6px;right:6px}:root{--on-gold:#0d0802;--shadow:0 4px 20px rgba(0,0,0,.45);--inner-glyph:#a494f6;--inner-tick:#7a6cbc;--inner-ring:#090810;--inner-stroke:#24222d;--outer-glyph:#e6ac3d;--outer-tick:#ac7d1b;--outer-ring:#070503;--outer-stroke:#342d20;--xasp-conjunction:#bcb1ff;--xasp-opposition:#ff6e75;--xasp-trine:#43d5dc;--xasp-square:#ff8d65;--xasp-sextile:#56d298}@supports (color:color(display-p3 0 0 0)){:root{--on-gold:color(display-p3 .0492866 .0328715 .0111297);--shadow:0 4px 20px color(display-p3 0 0 0/.45);--inner-glyph:color(display-p3 .63252 .582093 .937636);--inner-tick:color(display-p3 .469481 .426877 .716469);--inner-ring:color(display-p3 .0342889 .0311906 .0606274);--inner-stroke:color(display-p3 .139053 .135371 .174039);--outer-glyph:color(display-p3 .866978 .684443 .324483);--outer-tick:color(display-p3 .645333 .49681 .196492);--outer-ring:color(display-p3 .0275363 .0215619 .01263);--outer-stroke:color(display-p3 .20063 .175863 .129743);--xasp-conjunction:color(display-p3 .730448 .687159 1.02381);--xasp-opposition:color(display-p3 .953229 .451236 .461586);--xasp-trine:color(display-p3 .442105 .822774 .854824);--xasp-square:color(display-p3 .972792 .553829 .385666);--xasp-sextile:color(display-p3 .475575 .814902 .613781)}}@supports (color:lab(0% 0 0)){:root{--on-gold:lab(2.4863% .883393 2.81807);--shadow:0 4px 20px lab(0% 0 0/.45);--inner-glyph:lab(65.7597% 22.6847 -47.4334);--inner-tick:lab(49.7428% 19.7831 -40.5854);--inner-ring:lab(2.38607% 1.22919 -3.41513);--inner-stroke:lab(13.9501% 2.71787 -6.94334);--outer-glyph:lab(74.5248% 14.3487 62.5064);--outer-tick:lab(55.9353% 12.6865 55.2442);--outer-ring:lab(1.56667% .268132 1.12634);--outer-stroke:lab(18.8428% 1.96195 9.88836);--xasp-conjunction:lab(75.2424% 20.1278 -44.273);--xasp-opposition:lab(65.5258% 60.8412 27.879);--xasp-trine:lab(77.9637% -37.6085 -15.4651);--xasp-square:lab(70.8541% 47.9866 48.6079);--xasp-sextile:lab(76.3335% -46.3634 18.2498)}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}[hidden]{display:none!important}html,body{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;height:100%}body{background:var(--oe-page-bg);color:var(--text);font-family:var(--font-ui);-webkit-user-select:none;-moz-user-select:none;user-select:none;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 p{letter-spacing:.06em;text-transform:uppercase;font-size:11px}.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}}#chart-container{width:min(100%, var(--oe-chart-max));aspect-ratio:1;justify-content:center;align-items:center;margin-left:auto;margin-right:auto;padding:8px;transition:opacity .28s;display:flex;position:relative;overflow:hidden}#chart-container svg{width:100%;height:100%;transition:opacity .22s,filter .22s;display:block;overflow:hidden}#chart-container.refreshing svg{opacity:.35;filter:blur(1.5px)saturate(.4);pointer-events:none}#chart-container.refreshing:after{content:"";border:1.5px solid var(--gold);opacity:0;pointer-events:none;border-radius:50%;animation:1.2s cubic-bezier(.4,0,.6,1) infinite refresh-ring;position:absolute;top:8px;bottom:8px;left:8px;right:8px}@keyframes refresh-ring{0%{opacity:0;transform:scale(.96)}40%{opacity:.45;transform:scale(1)}to{opacity:0;transform:scale(1.04)}}@keyframes chart-fade-in{0%{opacity:0;transform:scale(.985)}to{opacity:1;transform:scale(1)}}#chart-container.chart-rendered svg{animation:.32s cubic-bezier(.16,1,.3,1) both chart-fade-in}#mode-badge{border-top:1px solid var(--border);background:var(--surface);flex-shrink:0;justify-content:center;align-items:center;gap:10px;padding:6px 14px;font-size:11px;display:flex}.mode-badge-inner{color:var(--inner-glyph);letter-spacing:.02em;align-items:center;gap:5px;font-weight:600;display:inline-flex}.mode-badge-outer{color:var(--outer-glyph);letter-spacing:.02em;align-items:center;gap:5px;font-weight:600;display:inline-flex}.mode-badge-sep{color:var(--text-secondary);font-weight:400}.mode-badge-dot-inner{background:var(--inner-tick);border-radius:50%;flex-shrink:0;width:8px;height:8px}.mode-badge-dot-outer{background:var(--outer-tick);border-radius:50%;flex-shrink:0;width:8px;height:8px}.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:.45}.hit-region.planet-hit{rx:12px;ry:12px}.hit-region.planet-hit:not(.dim):hover{filter:drop-shadow(0 0 5px 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:20px}.info-drawer{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius);width:100%;box-shadow:var(--oe-shadow-md);opacity:0;pointer-events:none;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}.info-drawer:before{content:"";background:var(--border-strong);border-radius:2px;flex-shrink:0;width:36px;height:4px;margin:0 auto 10px;display:block}.info-drawer.open{max-height:var(--oe-drawer-max);opacity:1;pointer-events:all;scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex-shrink:0;padding:14px 16px 12px;overflow-y:auto}.info-header{align-items:flex-start;gap:10px;margin-bottom:12px;display:flex}.info-glyph{text-align:center;flex-shrink:0;width:32px;font-size:26px;line-height:1}.info-title{color:var(--text);flex:1;font-size:13px;font-weight:700}.info-subtitle{color:var(--text-secondary);font-size:11px;font-weight:400;font-family:var(--font-code);margin-top:2px}.wheel-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}.wheel-badge.inner{color:var(--inner-glyph);background:rgba(164,148,246,.12);background:color(display-p3 .63252 .582093 .937636/.12);background:lab(65.7597% 22.6847 -47.4334/.12);border:1px solid rgba(164,148,246,.3);border:1px solid color(display-p3 .63252 .582093 .937636/.3);border:1px solid lab(65.7597% 22.6847 -47.4334/.3)}.wheel-badge.outer{color:var(--outer-glyph);background:rgba(230,172,61,.12);background:color(display-p3 .866978 .684443 .324483/.12);background:lab(74.5248% 14.3487 62.5064/.12);border:1px solid rgba(230,172,61,.3);border:1px solid color(display-p3 .866978 .684443 .324483/.3);border:1px solid lab(74.5248% 14.3487 62.5064/.3)}.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:130px;display:flex;overflow-y:auto}.aspects-list::-webkit-scrollbar{width:3px}.aspects-list::-webkit-scrollbar-track{background:0 0}.aspects-list::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:3px}.aspect-row{align-items:center;gap:7px;padding:3px 0;font-size:12px;display:flex}.aspect-dot{border-radius:50%;flex-shrink:0;width:7px;height:7px}.aspect-sym{text-align:center;flex-shrink:0;width:16px;font-size:14px}.aspect-other{color:var(--text);flex:1}.aspect-meta{color:var(--text-secondary);white-space:nowrap;font-size:11px;font-family:var(--font-code)}.no-aspects{color:var(--text-secondary);padding:4px 0;font-size:11px;font-style:italic}.info-hint{color:var(--gold-dim);letter-spacing:.03em;text-align:center;margin-top:10px;font-size:10px}.tooltip{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;-webkit-backdrop-filter:blur(14px)saturate(1.6);backdrop-filter:blur(14px)saturate(1.6);border-radius:var(--radius,10px);pointer-events:none;z-index:1000;opacity:0;background:rgba(12,12,22,.94);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}.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-state .error-msg{color:var(--text-secondary);text-align:center;max-width:280px;font-size:13px;line-height:1.5}#chart-hint{text-align:center;color:var(--text-secondary);letter-spacing:.04em;flex-shrink:0;padding:4px 12px 6px;font-size:10px}.chart-status{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:var(--radius-pill);color:var(--gold);z-index:900;opacity:0;pointer-events:none;letter-spacing:.04em;background:rgba(7,9,14,.92);background:color(display-p3 .0286832 .0352525 .0537785/.92);background:lab(2.44746% .00379235 -2.33402/.92);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);max-height:0;padding:5px 16px;font-size:11px;font-weight:600;transition:max-height .24s cubic-bezier(.16,1,.3,1),opacity .24s,transform .24s cubic-bezier(.16,1,.3,1);position:fixed;top:10px;left:50%;overflow:hidden;transform:translate(-50%)translateY(-10px);box-shadow:0 4px 20px rgba(0,0,0,.5),0 0 0 1px rgba(204,156,66,.1);box-shadow:0 4px 20px color(display-p3 0 0 0/.5),0 0 0 1px color(display-p3 .76996 .617341 .321369/.1);box-shadow:0 4px 20px lab(0% 0 0/.5),0 0 0 1px lab(67.5798% 11.9379 52.333/.1)}.chart-status.visible{opacity:1;max-height:44px;transform:translate(-50%)translateY(0)}.ask-claude-btn{border-radius:var(--radius-sm);width:100%;color:var(--gold);font-family:var(--font-ui);letter-spacing:.04em;cursor:pointer;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);justify-content:center;align-items:center;gap:6px;margin-top:12px;padding:9px 16px;font-size:12px;font-weight:600;transition:background .16s,border-color .16s,box-shadow .16s;display:flex}.ask-claude-btn:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65);box-shadow:0 0 0 3px rgba(204,156,66,.12);box-shadow:0 0 0 3px color(display-p3 .76996 .617341 .321369/.12);box-shadow:0 0 0 3px lab(67.5798% 11.9379 52.333/.12)}.ask-claude-btn:disabled{opacity:.45;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)}.hd-action-bar{flex-wrap:wrap;flex-shrink:0;gap:8px;padding:10px 16px 6px;display:flex}.action-btn{color:var(--gold);letter-spacing:.02em;cursor:pointer;white-space:nowrap;background:rgba(212,175,55,.08);border:1px solid rgba(212,175,55,.3);border-radius:8px;align-items:center;gap:6px;padding:7px 16px;font-size:12px;font-weight:600;transition:background .2s,border-color .2s,transform .1s;display:inline-flex}.action-btn:hover{background:rgba(212,175,55,.15);border-color:rgba(212,175,55,.5);transform:translateY(-1px)}.action-btn:active{background:rgba(212,175,55,.2);transform:translateY(0)}.action-btn--primary{color:var(--gold);background:linear-gradient(135deg,rgba(212,175,55,.2),rgba(180,140,30,.25));border-color:rgba(212,175,55,.5)}.action-btn--primary:hover{background:linear-gradient(135deg,rgba(212,175,55,.3),rgba(180,140,30,.35));border-color:rgba(212,175,55,.7)}.pan-zoom-controls{z-index:800;flex-direction:column;gap:6px;display:flex;position:absolute;bottom:12px;right:12px}.pan-zoom-controls[hidden]{display:none!important}@media (min-width:680px){body:not(.is-fullscreen):not(.is-pip) #chart-container{overflow:visible}body:not(.is-fullscreen):not(.is-pip) #chart-container>.pan-zoom-controls{right:-60px}}.pan-btn{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);border-radius:var(--radius-sm);cursor:pointer;width:36px;height:36px;box-shadow:var(--oe-shadow-md);justify-content:center;align-items:center;font-family:inherit;font-size:18px;transition:all .15s;display:flex}.pan-btn.reset{width:auto;padding:0 10px;font-size:11px;font-weight:500}.pan-btn:hover{background:var(--surface);border-color:var(--gold-dim);color:var(--gold)}.pan-btn:active{transform:scale(.95)}.pan-btn--fullscreen{width:36px;height:36px}body.is-fullscreen #bi-info-drawer{display:none}#fs-bottom-bar [data-column=right] .info-drawer--fs{min-height:0;box-shadow:none;scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;background:0 0;border:none;border-radius:0;flex:1;padding:0;overflow-y:auto;opacity:1!important;pointer-events:all!important;max-height:none!important}#fs-bottom-bar [data-column=right] .info-drawer--fs:before{display:none}.cancel-toast{background:var(--surface-2,#1e1e2e);border:1px solid var(--border-strong,#444);color:var(--text-muted,#aaa);border-radius:var(--radius-sm,6px);opacity:0;z-index:9999;pointer-events:none;box-shadow:var(--oe-shadow-md,0 4px 12px rgba(0,0,0,.3));padding:8px 16px;font-family:inherit;font-size:12px;transition:opacity .3s,transform .3s;position:fixed;bottom:20px;left:50%;transform:translate(-50%)translateY(20px)}.cancel-toast.visible{opacity:1;transform:translate(-50%)translateY(0)}.dignity-badge{letter-spacing:.03em;border-radius:4px;padding:1px 6px;font-size:10px;font-weight:600;display:inline-block}.dignity-domicile{color:#cc9c42;color:color(display-p3 .76996 .617341 .321369);color:lab(67.5798% 11.9379 52.333);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,.3);border:1px solid color(display-p3 .76996 .617341 .321369/.3);border:1px solid lab(67.5798% 11.9379 52.333/.3)}.dignity-exaltation{color:#1da871;color:color(display-p3 .313719 .651039 .459895);color:lab(61.2436% -46.7762 18.3644);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,.3);border:1px solid color(display-p3 .313719 .651039 .459895/.3);border:1px solid lab(61.2436% -46.7762 18.3644/.3)}.dignity-detriment,.dignity-fall{color:#c53443;color:color(display-p3 .710345 .252818 .279408);color:lab(45.8893% 57.7361 27.393);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,.25);border:1px solid color(display-p3 .710345 .252818 .279408/.25);border:1px solid lab(45.8893% 57.7361 27.393/.25)}.mode-badge-name{cursor:pointer;font-family:inherit;font-size:inherit;letter-spacing:.02em;background:0 0;border:none;border-radius:4px;align-items:center;gap:5px;padding:2px 6px;font-weight:600;transition:background .15s,color .15s;display:inline-flex}.mode-badge-name.inner-name{color:var(--inner-glyph)}.mode-badge-name.outer-name{color:var(--outer-glyph)}.mode-badge-name:hover{background:rgba(255,255,255,.06);background:color(display-p3 1 1 1/.06);background:lab(100% 0 0/.06)}.mode-badge-name.focused{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)}.mode-badge-swap{cursor:pointer;color:var(--text-secondary);background:0 0;border:none;align-items:center;padding:2px 4px;font-size:13px;line-height:1;transition:color .15s,transform .15s;display:inline-flex}.mode-badge-swap:hover{color:var(--gold);transform:scaleX(-1)}.mode-badge-date{color:var(--text-secondary);letter-spacing:.02em;font-size:10px;font-weight:400}#chart-container[data-focus=inner] .outer-planet-group,#chart-container[data-focus=outer] .inner-planet-group{opacity:.25;transition:opacity .25s}#aspect-filter{padding:0}.asp-panel{flex-wrap:wrap;align-items:center;gap:4px 12px;padding:4px 12px;display:flex}.aspect-toggle-btn,.orb-preset-btn{padding:2px 8px!important;font-size:10px!important}.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)}.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}.orb-preset-btn.active{background:var(--surface-2);border-color:var(--gold);color:var(--gold)}.aspect-toggle-btn .toggle-icon{font-size:13px;line-height:1}.chart-provenance{border-bottom:1px solid var(--border);background:var(--surface);flex-flow:wrap;flex-shrink:0;justify-content:center;align-items:baseline;gap:2px 10px;padding:5px 12px;font-size:10px;animation:.2s both prov-in;display:flex}.chart-provenance>*{align-items:baseline;gap:6px;display:inline-flex}@keyframes prov-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.prov-name{color:var(--text);letter-spacing:.01em;align-items:center;gap:7px;font-size:11px;font-weight:600;display:flex}.prov-mode-tag{letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary);background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-pill);padding:1px 6px;font-size:9px;font-weight:500}.prov-trio{color:var(--text);align-items:center;gap:6px;font-size:11px;display:flex}.prov-planet{font-variant-numeric:tabular-nums;letter-spacing:.01em}.prov-sep{color:var(--border-strong);font-size:12px}.prov-meta{color:var(--text-secondary);letter-spacing:.02em;font-size:10px}.prov-tz{opacity:.7;font-size:9px}.error-state{flex-direction:column;justify-content:center;align-items:center;gap:12px;height:100%;min-height:200px;padding:24px;display:flex}.error-icon{opacity:.7;font-size:28px}.error-msg{color:var(--text-secondary);text-align:center;max-width:260px;font-size:12px;line-height:1.5}.error-retry-btn{border-radius:var(--radius-pill);border:1px solid var(--border-strong);background:var(--surface-2);color:var(--text);font:inherit;cursor:pointer;letter-spacing:.02em;margin-top:4px;padding:7px 20px;font-size:11px;font-weight:500;transition:all .18s}.error-retry-btn:hover{background:var(--gold-subtle);border-color:var(--gold-dim);color:var(--gold)}.chart-layer{opacity:1;transform-origin:310px 310px;animation:.5s cubic-bezier(.16,1,.3,1) both svgLayerAssemble;animation-delay:calc(var(--layer-index,0) * 80ms);transform:scale(1)}@keyframes svgLayerAssemble{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.floating-action-btn:after{content:"";background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);width:50%;height:100%;animation:3s 2s infinite shimmer;position:absolute;top:0;left:-100%;transform:skew(-20deg)}@keyframes shimmer{0%{left:-100%}20%{left:200%}to{left:200%}}@keyframes slideUpFadeIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes slideUpFadeInPanel{0%{opacity:0;transform:translateY(12px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.patterns-strip{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;align-items:center;gap:4px;padding:4px 12px;font-size:10px;animation:.22s cubic-bezier(.16,1,.3,1) both slideUpFadeInPanel;display:flex}.pattern-pill{padding:2px 8px!important;font-size:10px!important}.patterns-label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);white-space:nowrap;margin-right:2px;font-size:10px;font-weight:700}.pattern-pill{border-radius:var(--radius-pill);cursor:pointer;letter-spacing:.01em;border:1.5px solid;align-items:center;gap:4px;padding:3px 10px;font-size:11px;font-weight:600;transition:background .15s,opacity .15s,transform .12s;display:inline-flex}.pattern-pill:hover{opacity:.85;transform:scale(1.03)}.pattern-pill.active{box-shadow:0 0 0 2px}.pattern-ask-claude-btn{border-radius:var(--radius-pill);color:var(--gold);font-family:var(--font-ui);letter-spacing:.04em;cursor:pointer;background:rgba(204,156,66,.1);background:color(display-p3 .76996 .617341 .321369/.1);background:lab(67.5798% 11.9379 52.333/.1);border:1px solid rgba(204,156,66,.35);border:1px solid color(display-p3 .76996 .617341 .321369/.35);border:1px solid lab(67.5798% 11.9379 52.333/.35);flex-shrink:0;margin-left:6px;padding:3px 10px;font-size:10px;font-weight:600;transition:background .15s,border-color .15s,box-shadow .15s}.pattern-ask-claude-btn:hover{background:rgba(204,156,66,.18);background:color(display-p3 .76996 .617341 .321369/.18);background:lab(67.5798% 11.9379 52.333/.18);border-color:rgba(204,156,66,.6);border-color:color(display-p3 .76996 .617341 .321369/.6);border-color:lab(67.5798% 11.9379 52.333/.6);box-shadow:0 0 0 2px rgba(204,156,66,.1);box-shadow:0 0 0 2px color(display-p3 .76996 .617341 .321369/.1);box-shadow:0 0 0 2px lab(67.5798% 11.9379 52.333/.1)}.pattern-ask-claude-btn:disabled{opacity:.45;cursor:default}.tally-panel{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;align-items:center;gap:6px 14px;padding:5px 12px 6px;font-size:11px;animation:.22s cubic-bezier(.16,1,.3,1) both slideUpFadeInPanel;display:flex}.tally-section{flex-direction:column;gap:4px;display:flex}.tally-row{align-items:flex-start;gap:10px;display:flex}.tally-row.modality{gap:12px}.tally-item{border-radius:var(--radius-pill);cursor:pointer;white-space:nowrap;border:1.5px solid transparent;align-items:center;gap:4px;padding:2px 8px;font-size:12px;font-weight:700;transition:background .14s,border-color .14s,transform .12s;display:inline-flex}.tally-item:hover{transform:scale(1.06)}.tally-item.active{border-color:currentColor;box-shadow:0 0 0 2px}.tally-item.fire{color:#ff744f;color:color(display-p3 .936486 .485321 .346768);color:lab(66.005% 52.9628 47.7034);background:rgba(255,116,79,.1);background:color(display-p3 .936486 .485321 .346768/.1);background:lab(66.005% 52.9628 47.7034/.1)}.tally-item.earth{color:#68a244;color:color(display-p3 .458546 .627532 .315071);color:lab(60.9267% -32.2405 41.5215);background:rgba(104,162,68,.1);background:color(display-p3 .458546 .627532 .315071/.1);background:lab(60.9267% -32.2405 41.5215/.1)}.tally-item.air{color:#2fb5d8;color:color(display-p3 .359655 .701622 .832954);color:lab(68.1219% -27.5397 -28.3166);background:rgba(47,181,216,.1);background:color(display-p3 .359655 .701622 .832954/.1);background:lab(68.1219% -27.5397 -28.3166/.1)}.tally-item.water{color:#7792ee;color:color(display-p3 .487398 .569622 .908946);color:lab(61.5869% 9.51824 -50.2978);background:rgba(119,146,238,.1);background:color(display-p3 .487398 .569622 .908946/.1);background:lab(61.5869% 9.51824 -50.2978/.1)}.tally-item.cardinal{color:#cc9c42;color:color(display-p3 .76996 .617341 .321369);color:lab(67.5798% 11.9379 52.333);background:rgba(204,156,66,.08);background:color(display-p3 .76996 .617341 .321369/.08);background:lab(67.5798% 11.9379 52.333/.08)}.tally-item.fixed{color:#a486d7;color:color(display-p3 .623892 .531312 .823026);color:lab(61.2732% 24.0176 -37.6492);background:rgba(164,134,215,.08);background:color(display-p3 .623892 .531312 .823026/.08);background:lab(61.2732% 24.0176 -37.6492/.08)}.tally-item.mutable{color:#24a592;color:color(display-p3 .315103 .636668 .572864);color:lab(60.7802% -38.5122 -.286269);background:rgba(36,165,146,.08);background:color(display-p3 .315103 .636668 .572864/.08);background:lab(60.7802% -38.5122 -.286269/.08)}.tally-planets{flex-wrap:wrap;gap:2px 4px;padding:0 4px;display:flex}.tally-planet-chip{cursor:pointer;opacity:.75;font-size:13px;line-height:1;transition:opacity .12s,transform .12s}.tally-planet-chip:hover{opacity:1;transform:scale(1.15)}.tally-bar-row{padding:0 2px}.tally-bar{background:var(--surface-2);border-radius:2px;width:80px;height:4px;display:flex;overflow:hidden}.tally-bar-fill{height:100%;transition:width .3s cubic-bezier(.16,1,.3,1)}.tally-bar-fill.fire{background:#ff744f;background:color(display-p3 .936486 .485321 .346768);background:lab(66.005% 52.9628 47.7034)}.tally-bar-fill.earth{background:#68a244;background:color(display-p3 .458546 .627532 .315071);background:lab(60.9267% -32.2405 41.5215)}.tally-bar-fill.air{background:#2fb5d8;background:color(display-p3 .359655 .701622 .832954);background:lab(68.1219% -27.5397 -28.3166)}.tally-bar-fill.water{background:#7792ee;background:color(display-p3 .487398 .569622 .908946);background:lab(61.5869% 9.51824 -50.2978)}.tally-divider{background:var(--border-strong);flex-shrink:0;align-self:center;width:1px;height:28px}.dignity-panel{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;align-items:center;gap:6px;padding:5px 12px 6px;font-size:11px;animation:.22s cubic-bezier(.16,1,.3,1) both slideUpFadeInPanel;display:flex}.dignity-chip{border-radius:var(--radius-pill);cursor:pointer;white-space:nowrap;border:1.5px solid transparent;align-items:center;gap:3px;padding:2px 8px 2px 6px;font-size:12px;font-weight:600;transition:border-color .14s,box-shadow .14s,transform .12s;display:inline-flex}.dignity-chip:hover{transform:scale(1.06)}.dignity-chip.active{border-color:currentColor;box-shadow:0 0 0 2px}.dignity-wheel-badge{opacity:.7;margin-left:1px;font-size:8px}.dignity-wheel-badge.inner{color:var(--inner-glyph)}.dignity-wheel-badge.outer{color:var(--outer-glyph)}:root[data-theme=light]{--bg:#f7f5f1;--surface:#fff;--surface-2:#f1eee9;--border:#dbd7d0;--border-strong:#bdb6ac;--text:#101215;--text-secondary:#4f5359;--gold:#825700;--gold-dim:#6d4b00;--gold-glow:rgba(130,87,0,.25);--gold-subtle:rgba(130,87,0,.1);--on-gold:#fcf4e6;--success:#007145;--error:#b1002b;--shadow:0 4px 20px rgba(0,0,0,.1);--oe-shadow-md:0 8px 32px rgba(0,0,0,.14), 0 0 0 1px var(--border-strong);--inner-ring:#e7e7ee;--inner-stroke:#978ed2;--inner-glyph:#422b83;--inner-tick:#5e4f9c;--outer-ring:#f6f1e9;--outer-stroke:#ae7c00;--outer-glyph:#704a00;--outer-tick:#8a6000;--xasp-conjunction:#4f3a92;--xasp-opposition:#9d0026;--xasp-trine:#005b60;--xasp-square:#982f00;--xasp-sextile:#005833}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light]{--bg:color(display-p3 .967616 .959866 .945308);--surface:color(display-p3 1 1 1);--surface-2:color(display-p3 .943798 .93351 .914195);--border:color(display-p3 .855616 .842987 .819292);--border-strong:color(display-p3 .73602 .716348 .67952);--text:color(display-p3 .0633107 .0687189 .081922);--text-secondary:color(display-p3 .313002 .323251 .348016);--gold:color(display-p3 .49809 .342102 -.0880434);--gold-dim:color(display-p3 .414099 .299019 .034461);--gold-glow:color(display-p3 .49809 .342102 -.0880434/.25);--gold-subtle:color(display-p3 .49809 .342102 -.0880434/.1);--on-gold:color(display-p3 .983924 .957955 .909341);--success:color(display-p3 -.0793084 .456092 .255685);--error:color(display-p3 .642198 .101724 .18242);--shadow:0 4px 20px color(display-p3 0 0 0/.1);--oe-shadow-md:0 8px 32px color(display-p3 0 0 0/.14), 0 0 0 1px var(--border-strong);--inner-ring:color(display-p3 .907095 .905197 .931783);--inner-stroke:color(display-p3 .58664 .556304 .804254);--inner-glyph:color(display-p3 .245423 .171497 .493494);--inner-tick:color(display-p3 .358729 .312313 .591881);--outer-ring:color(display-p3 .961514 .946019 .916957);--outer-stroke:color(display-p3 .654857 .492962 .151277);--outer-glyph:color(display-p3 .448097 .281046 -.133276);--outer-tick:color(display-p3 .524671 .380491 .0387678);--xasp-conjunction:color(display-p3 .295896 .228956 .554264);--xasp-opposition:color(display-p3 .566502 .0969703 .161549);--xasp-trine:color(display-p3 -.136655 .362311 .395877);--xasp-square:color(display-p3 .576596 .182695 -.0331795);--xasp-sextile:color(display-p3 -.0802406 .354845 .187391)}}@supports (color:lab(0% 0 0)){:root[data-theme=light]{--bg:lab(96.5376% .34079 2.2589);--surface:lab(100% 0 0);--surface-2:lab(94.2232% .459701 3.01524);--border:lab(86.1085% .583261 3.77473);--border-strong:lab(74.5232% .975847 6.06879);--text:lab(5.23809% -.0738502 -2.43738);--text-secondary:lab(34.9842% -.210062 -4.49808);--gold:lab(40.7346% 15.7445 75.3139);--gold-dim:lab(35.0077% 11.3181 50.9422);--gold-glow:lab(40.7346% 15.7445 75.3139/.25);--gold-subtle:lab(40.7346% 15.7445 75.3139/.1);--on-gold:lab(96.574% 1.22041 7.58642);--success:lab(41.7514% -55.3249 21.5039);--error:lab(37.5238% 64.2774 32.6097);--shadow:0 4px 20px lab(0% 0 0/.1);--oe-shadow-md:0 8px 32px lab(0% 0 0/.14), 0 0 0 1px var(--border-strong);--inner-ring:lab(91.7856% 1.21665 -3.5493);--inner-stroke:lab(61.7097% 15.1373 -34.1532);--inner-glyph:lab(24.6169% 28.6686 -46.7313);--inner-tick:lab(38.0413% 20.9664 -40.377);--outer-ring:lab(95.394% .703841 4.5323);--outer-stroke:lab(55.9083% 14.2142 62.5614);--outer-glyph:lab(34.836% 18.3832 78.9849);--outer-tick:lab(44.2758% 13.6718 62.9124);--xasp-conjunction:lab(30.5613% 27.1755 -46.8105);--xasp-opposition:lab(33.102% 57.8409 29.1456);--xasp-trine:lab(33.8513% -37.0741 -15.1222);--xasp-square:lab(35.9066% 49.947 64.0775);--xasp-sextile:lab(32.2083% -48.6822 18.8909)}}:root[data-theme=light],:root[data-theme=light] body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background-image:none}:root[data-theme=light] .tooltip{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--text);border-color:var(--border-strong);background:rgba(255,255,255,.96);background:color(display-p3 1 1 1/.96);background:lab(100% 0 0/.96);box-shadow:0 8px 32px rgba(0,0,0,.18),inset 0 .5px rgba(255,255,255,.6);box-shadow:0 8px 32px color(display-p3 0 0 0/.18),inset 0 .5px color(display-p3 1 1 1/.6);box-shadow:0 8px 32px lab(0% 0 0/.18),inset 0 .5px lab(100% 0 0/.6)}:root[data-theme=light] .tooltip-title{color:var(--text)}:root[data-theme=light] .tooltip-detail{color:var(--text-secondary)}:root[data-theme=light] .tooltip-hint{color:var(--gold-dim)}:root[data-theme=light] .chart-status{color:var(--gold);background:rgba(247,245,241,.92);background:color(display-p3 .967616 .959866 .945308/.92);background:lab(96.5376% .34079 2.2589/.92);border-color:rgba(141,95,0,.35);border-color:color(display-p3 .542549 .371783 -.107551/.35);border-color:lab(44.1995% 17.0662 84.3373/.35)}:root[data-theme=light] .chart-provenance{background:var(--surface)}:root[data-theme=light] .hit-region:hover{fill:rgba(141,95,0,.1);fill:color(display-p3 .542549 .371783 -.107551/.1);fill:lab(44.1995% 17.0662 84.3373/.1);stroke:var(--gold-dim)}:root[data-theme=light] .pan-btn{background:var(--surface)}:root[data-theme=light] .pan-btn:hover{background:var(--surface-2)}:root[data-theme=light] .cancel-toast{background:var(--surface);border-color:var(--border-strong);color:var(--text-secondary)}@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}.controls,.control-row,#date-controls{flex-wrap:wrap;gap:8px}}.param-controls{background:var(--surface);border-top:1px solid var(--border);flex-shrink:0;padding:6px 12px}.param-controls-grid{flex-wrap:wrap;align-items:center;gap:6px 10px;display:flex}.param-group{flex-direction:row;align-items:center;gap:6px;display:flex}.param-group label{text-transform:uppercase;color:var(--text-secondary);letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:700}.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);color-scheme:inherit;border-radius:var(--radius-sm);width:120px;height:24px;padding:3px 6px;font-family:inherit;font-size:11px}@media (prefers-reduced-motion:no-preference){.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{transition:border-color .15s}}.param-group input:focus{border-color:var(--gold-dim);outline:none}.loc-searching{border-color:var(--gold-dim)!important}@media (prefers-reduced-motion:no-preference){.loc-searching{animation:1s ease-in-out infinite alternate loc-pulse}}@keyframes loc-pulse{0%{border-color:var(--gold-dim)}to{border-color:rgba(204,156,66,.55);border-color:color(display-p3 .76996 .617341 .321369/.55);border-color:lab(67.5798% 11.9379 52.333/.55)}}.param-group-loc{flex:1;position:relative}.param-group-loc input{width:100%}.loc-suggestions{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius-sm);z-index:100;max-height:200px;margin-top:4px;position:absolute;top:100%;left:0;right:0;overflow-y:auto;box-shadow:0 4px 12px rgba(0,0,0,.35);box-shadow:0 4px 12px color(display-p3 0 0 0/.35);box-shadow:0 4px 12px lab(0% 0 0/.35)}.loc-item{color:var(--text);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid var(--border);padding:8px 10px;font-size:12px;overflow:hidden}.loc-item:last-child{border-bottom:none}@media (prefers-reduced-motion:no-preference){.loc-item{transition:background .1s,color .1s}}.loc-item:hover,.loc-item--active{background:var(--gold-subtle);color:var(--gold)}.loc-status{color:var(--text-secondary);letter-spacing:.01em;padding:8px 10px;font-size:11px;font-style:italic}.loc-status-error{color:#d76a5a;color:color(display-p3 .788241 .439621 .373983);color:lab(58.1265% 42.6447 29.9439);font-style:normal;font-weight:600}.param-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.param-cost-hint{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;font-size:10px}.param-btn-icon{border:1px solid var(--border-strong);color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;background:0 0;justify-content:center;align-items:center;width:24px;height:24px;display:flex}@media (prefers-reduced-motion:no-preference){.param-btn-icon{transition:background .15s,border-color .15s,color .15s}}.param-btn-icon:hover{background:var(--surface-2);color:var(--text);border-color:var(--gold-dim)}.param-btn-primary{color:var(--gold);border-radius:var(--radius-sm);cursor:pointer;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);height:24px;padding:3px 10px;font-family:inherit;font-size:10px;font-weight:600}@media (prefers-reduced-motion:no-preference){.param-btn-primary{transition:background .15s,border-color .15s}}.param-btn-primary:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65)}.param-btn-primary:disabled{opacity:.5;cursor:not-allowed}.param-extra-toggle{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;cursor:pointer;align-items:center;gap:5px;font-size:10px;display:flex}.param-extra-toggle input[type=checkbox]{width:13px;height:13px;accent-color:var(--gold,oklch(72% .12 80));cursor:pointer}.param-extra-toggle input[type=checkbox]:disabled{cursor:not-allowed}.param-extra-toggle input[type=checkbox]:disabled~span{opacity:.5}:root[data-theme=light] .param-group input[type=date],:root[data-theme=light] .param-group input[type=time],:root[data-theme=light] .param-group input[type=text]{border-color:var(--border-strong);color:var(--text);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167638 1.12768)}:root[data-theme=light] .loc-suggestions{border-color:var(--border-strong);background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167638 1.12768)}:root[data-theme=light] .param-btn-primary{background:rgba(160,112,0,.12);background:color(display-p3 .615135 .441554 -.0204711/.12);background:lab(51.2092% 16.2654 78.3504/.12);border-color:rgba(160,112,0,.4);border-color:color(display-p3 .615135 .441554 -.0204711/.4);border-color:lab(51.2092% 16.2654 78.3504/.4)}:root[data-theme=light] .param-btn-primary:hover:not(:disabled){background:rgba(160,112,0,.22);background:color(display-p3 .615135 .441554 -.0204711/.22);background:lab(51.2092% 16.2654 78.3504/.22);border-color:rgba(160,112,0,.65);border-color:color(display-p3 .615135 .441554 -.0204711/.65);border-color:lab(51.2092% 16.2654 78.3504/.65)}.param-summary-bar{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:2px 0;margin-bottom:4px;padding:3px 4px 5px;font-size:10px;line-height:1.3;display:flex}.param-summary-bar[hidden]{display:none}.summary-name{color:var(--gold,#d6a54d);letter-spacing:.01em;padding-right:2px;font-size:12px;font-weight:700}@supports (color:color(display-p3 0 0 0)){.summary-name{color:var(--gold,color(display-p3 .808073 .654274 .358094))}}@supports (color:lab(0% 0 0)){.summary-name{color:var(--gold,lab(71.071% 11.7474 51.7651))}}.summary-datetime{font-family:var(--font-code,ui-monospace, "Cascadia Mono", Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--text-secondary);align-items:baseline;gap:4px;font-size:11px;display:inline-flex}.summary-time-sep{color:var(--border-strong);opacity:.7;font-family:inherit;font-size:9px}.summary-loc{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:200px;padding-left:2px;font-size:11px;font-style:italic;overflow:hidden}.summary-sep{background:var(--border-strong);opacity:.5;vertical-align:middle;flex-shrink:0;width:1px;height:11px;margin:0 7px;display:inline-block}
|
|
14
14
|
/*$vite$:1*/</style>
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
<p>Aligning two skies…</p>
|
|
21
21
|
</div>
|
|
22
22
|
<div id="chart-status" class="chart-status" aria-live="polite"></div>
|
|
23
|
-
<div id="chart-container" hidden>
|
|
23
|
+
<div id="chart-container" class="oe-stage" hidden>
|
|
24
24
|
<div id="pan-zoom-controls" class="pan-zoom-controls" hidden>
|
|
25
25
|
<button id="btn-zoom-in" class="pan-btn" aria-label="Zoom in">+</button>
|
|
26
26
|
<button id="btn-zoom-out" class="pan-btn" aria-label="Zoom out">-</button>
|
|
@@ -6329,7 +6329,15 @@ async function n_(e5, t2, n2 = "") {
|
|
|
6329
6329
|
}
|
|
6330
6330
|
return r2.value;
|
|
6331
6331
|
}
|
|
6332
|
-
|
|
6332
|
+
function r_(e5, t2 = document.documentElement) {
|
|
6333
|
+
for (let [n2, r2] of Object.entries(e5)) r2 !== void 0 && t2.style.setProperty(n2, r2);
|
|
6334
|
+
}
|
|
6335
|
+
function i_(e5) {
|
|
6336
|
+
if (document.getElementById("__mcp-host-fonts")) return;
|
|
6337
|
+
let t2 = document.createElement("style");
|
|
6338
|
+
t2.id = "__mcp-host-fonts", t2.textContent = e5, document.head.appendChild(t2);
|
|
6339
|
+
}
|
|
6340
|
+
var a_ = class e3 extends Og {
|
|
6333
6341
|
_assertInitialized(e5) {
|
|
6334
6342
|
var t2;
|
|
6335
6343
|
if (this._initializedSent) return;
|
|
@@ -6561,66 +6569,68 @@ var r_ = class e3 extends Og {
|
|
|
6561
6569
|
}
|
|
6562
6570
|
}
|
|
6563
6571
|
};
|
|
6564
|
-
o(
|
|
6565
|
-
function
|
|
6572
|
+
o(a_, "ONE_SHOT_EVENTS", /* @__PURE__ */ new Set(["toolinput", "toolinputpartial", "toolresult", "toolcancelled"]));
|
|
6573
|
+
function o_(e5, t2) {
|
|
6566
6574
|
var n2, r2, i2, a2, o2, s2;
|
|
6567
6575
|
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");
|
|
6568
6576
|
c2 && (c2.hidden = false);
|
|
6569
6577
|
let f2 = (n2 = (r2 = e5.getAttribute("viewBox")) == null ? void 0 : r2.split(/[\s,]+/).map(Number)) == null ? [0, 0, 500, 500] : n2, p2 = (i2 = f2[0]) == null ? 0 : i2, m2 = (a2 = f2[1]) == null ? 0 : a2, h2 = (o2 = f2[2]) == null ? 500 : o2, g2 = (s2 = f2[3]) == null ? 500 : s2, _2 = h2 / 5, v2 = h2 * 2, y2 = p2, b2 = m2, x2 = h2, S2 = g2;
|
|
6570
|
-
e5.
|
|
6571
|
-
let ee2 = () => e5.setAttribute("viewBox", "".concat(y2, " ").concat(b2, " ").concat(x2, " ").concat(S2)),
|
|
6578
|
+
e5.classList.add("oe-pannable");
|
|
6579
|
+
let ee2 = () => document.body.classList.contains("is-fullscreen"), C2 = () => e5.setAttribute("viewBox", "".concat(y2, " ").concat(b2, " ").concat(x2, " ").concat(S2)), te2 = (e6, t3, n3) => {
|
|
6572
6580
|
t3 === void 0 && (t3 = y2 + x2 / 2), n3 === void 0 && (n3 = b2 + S2 / 2);
|
|
6573
6581
|
let r3 = x2 * e6;
|
|
6574
|
-
r3 < _2 && (r3 = _2), r3 > v2 && (r3 = v2), r3 !== x2 && (e6 = r3 / x2, y2 = t3 - (t3 - y2) * e6, b2 = n3 - (n3 - b2) * e6, x2 = r3, S2 *= e6,
|
|
6582
|
+
r3 < _2 && (r3 = _2), r3 > v2 && (r3 = v2), r3 !== x2 && (e6 = r3 / x2, y2 = t3 - (t3 - y2) * e6, b2 = n3 - (n3 - b2) * e6, x2 = r3, S2 *= e6, C2());
|
|
6575
6583
|
};
|
|
6576
|
-
l2 == null || l2.addEventListener("click", () =>
|
|
6577
|
-
y2 = p2, b2 = m2, x2 = h2, S2 = g2,
|
|
6584
|
+
l2 == null || l2.addEventListener("click", () => te2(0.8)), u2 == null || u2.addEventListener("click", () => te2(1.25)), d2 == null || d2.addEventListener("click", () => {
|
|
6585
|
+
y2 = p2, b2 = m2, x2 = h2, S2 = g2, C2();
|
|
6578
6586
|
});
|
|
6579
|
-
let
|
|
6587
|
+
let w2 = (t3, n3) => {
|
|
6580
6588
|
let r3 = e5.getBoundingClientRect();
|
|
6581
6589
|
return { x: y2 + (t3 - r3.left) / r3.width * x2, y: b2 + (n3 - r3.top) / r3.height * S2 };
|
|
6582
6590
|
};
|
|
6583
6591
|
e5.addEventListener("wheel", (e6) => {
|
|
6592
|
+
if (!ee2() && !e6.ctrlKey && !e6.metaKey) return;
|
|
6584
6593
|
e6.preventDefault();
|
|
6585
|
-
let t3 = Math.exp((e6.deltaY < 0 ? -1 : 1) * 0.1), n3 =
|
|
6586
|
-
|
|
6594
|
+
let t3 = Math.exp((e6.deltaY < 0 ? -1 : 1) * 0.1), n3 = w2(e6.clientX, e6.clientY);
|
|
6595
|
+
te2(t3, n3.x, n3.y);
|
|
6587
6596
|
}, { passive: false });
|
|
6588
|
-
let
|
|
6589
|
-
let [e6, t3] = [...
|
|
6597
|
+
let T2 = /* @__PURE__ */ new Map(), E2 = null, ne2 = () => {
|
|
6598
|
+
let [e6, t3] = [...T2.values()];
|
|
6590
6599
|
return { dist: Math.hypot(e6.x - t3.x, e6.y - t3.y), midX: (e6.x + t3.x) / 2, midY: (e6.y + t3.y) / 2 };
|
|
6591
|
-
},
|
|
6600
|
+
}, re2 = (t3, n3) => {
|
|
6592
6601
|
let r3 = e5.getBoundingClientRect();
|
|
6593
|
-
y2 -= t3 / r3.width * x2, b2 -= n3 / r3.height * S2,
|
|
6602
|
+
y2 -= t3 / r3.width * x2, b2 -= n3 / r3.height * S2, C2();
|
|
6594
6603
|
};
|
|
6595
6604
|
e5.addEventListener("pointerdown", (t3) => {
|
|
6605
|
+
if (t3.pointerType === "touch" && !ee2()) return;
|
|
6596
6606
|
let n3 = t3.target, r3 = !!(n3.closest && (n3.closest('[class*="-hit"]') || n3.closest('[class*="-activation"]') || n3.closest(".variable-arrow") || n3.closest("button")));
|
|
6597
|
-
|
|
6607
|
+
T2.set(t3.pointerId, { x: t3.clientX, y: t3.clientY, interactive: r3 }), r3 || (e5.setPointerCapture(t3.pointerId), e5.style.cursor = "grabbing"), T2.size === 2 && (E2 = ne2());
|
|
6598
6608
|
}), e5.addEventListener("pointermove", (e6) => {
|
|
6599
|
-
let t3 =
|
|
6600
|
-
if (t3) if (
|
|
6601
|
-
let e7 =
|
|
6602
|
-
if (
|
|
6603
|
-
let t4 =
|
|
6604
|
-
|
|
6605
|
-
}
|
|
6606
|
-
|
|
6607
|
-
} else
|
|
6609
|
+
let t3 = T2.get(e6.pointerId);
|
|
6610
|
+
if (t3) if (T2.set(e6.pointerId, { x: e6.clientX, y: e6.clientY, interactive: t3.interactive }), T2.size >= 2 && E2) {
|
|
6611
|
+
let e7 = ne2();
|
|
6612
|
+
if (E2.dist > 0 && e7.dist > 0) {
|
|
6613
|
+
let t4 = w2(e7.midX, e7.midY);
|
|
6614
|
+
te2(E2.dist / e7.dist, t4.x, t4.y);
|
|
6615
|
+
}
|
|
6616
|
+
re2(e7.midX - E2.midX, e7.midY - E2.midY), E2 = e7;
|
|
6617
|
+
} else T2.size === 1 && !t3.interactive && re2(e6.clientX - t3.x, e6.clientY - t3.y);
|
|
6608
6618
|
});
|
|
6609
|
-
let
|
|
6610
|
-
|
|
6619
|
+
let D2 = (t3) => {
|
|
6620
|
+
T2.delete(t3.pointerId) && (e5.hasPointerCapture(t3.pointerId) && e5.releasePointerCapture(t3.pointerId), E2 = T2.size >= 2 ? ne2() : null, T2.size === 0 && (e5.style.cursor = "default"));
|
|
6611
6621
|
};
|
|
6612
|
-
e5.addEventListener("pointerup",
|
|
6622
|
+
e5.addEventListener("pointerup", D2), e5.addEventListener("pointercancel", D2);
|
|
6613
6623
|
}
|
|
6614
|
-
var
|
|
6615
|
-
function
|
|
6616
|
-
return e5 ?
|
|
6624
|
+
var s_ = '"Segoe UI Symbol", "Noto Sans Symbols", "Noto Sans Symbols2", "Apple Symbols", "DejaVu Sans", serif', c_ = { background: "#1b1b1d", foreground: "#f7f3f0", dim: "#6f7580", fire: "#d9506f", earth: "#22a67a", air: "#dcb238", water: "#3f93c2", points: "#2f89ab", others: "#d69a3a", house: "#7a8695", transit: "#c19bf2", fireTint: "rgba(217,80,111,0.20)", earthTint: "rgba(34,166,122,0.20)", airTint: "rgba(220,178,56,0.20)", waterTint: "rgba(63,147,194,0.20)", zodiacFillOpacity: 0.34, houseFillOpacity: 0.1, houseStrokeOpacity: 0.45 }, l_ = { background: "#fffdf1", foreground: "#0b1220", dim: "#6b5c4a", fire: "#c9456f", earth: "#1f9968", air: "#c9a23c", water: "#1f7fa3", points: "#1f6f96", others: "#c9903f", house: "#6f8496", transit: "#7b3fb5", fireTint: "rgba(201,69,111,0.34)", earthTint: "rgba(31,153,104,0.34)", airTint: "rgba(201,162,60,0.38)", waterTint: "rgba(31,127,163,0.34)", zodiacFillOpacity: 0.48, houseFillOpacity: 0.2, houseStrokeOpacity: 0.95 };
|
|
6625
|
+
function u_(e5) {
|
|
6626
|
+
return e5 ? c_ : l_;
|
|
6617
6627
|
}
|
|
6618
|
-
function
|
|
6619
|
-
let n2 =
|
|
6628
|
+
function d_(e5, t2) {
|
|
6629
|
+
let n2 = u_(t2);
|
|
6620
6630
|
return [n2.fire, n2.earth, n2.air, n2.water][(e5 % 12 + 12) % 12 % 4];
|
|
6621
6631
|
}
|
|
6622
|
-
function
|
|
6623
|
-
let n2 =
|
|
6632
|
+
function f_(e5, t2) {
|
|
6633
|
+
let n2 = u_(t2);
|
|
6624
6634
|
switch (e5.toLowerCase()) {
|
|
6625
6635
|
case "conjunction":
|
|
6626
6636
|
return n2.others;
|
|
@@ -6635,72 +6645,72 @@ function u_(e5, t2) {
|
|
|
6635
6645
|
return n2.house;
|
|
6636
6646
|
}
|
|
6637
6647
|
}
|
|
6638
|
-
function
|
|
6639
|
-
let t2 =
|
|
6648
|
+
function p_(e5) {
|
|
6649
|
+
let t2 = u_(e5);
|
|
6640
6650
|
return { ring: { stroke: t2.dim, opacity: 0.85 }, cuspIntermediate: { stroke: t2.dim, opacity: 0.85 }, cuspAngular: { stroke: t2.foreground, opacity: 0.75 }, tickMajor: { stroke: t2.foreground, opacity: 0.73 }, tickMinor: { stroke: t2.foreground, opacity: 0.48 }, cuspDash: (e6) => "".concat((e6 * 1.5).toFixed(2), " ").concat((e6 * 3).toFixed(2)), center: e5 ? t2.background : "#efeae1" };
|
|
6641
6651
|
}
|
|
6642
|
-
var
|
|
6643
|
-
function
|
|
6644
|
-
return
|
|
6652
|
+
var m_;
|
|
6653
|
+
function h_() {
|
|
6654
|
+
return m_ ? m_ === "dark" : window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
6645
6655
|
}
|
|
6646
|
-
function
|
|
6656
|
+
function g_(e5 = h_()) {
|
|
6647
6657
|
let t2 = e5 ? "dark" : "light";
|
|
6648
6658
|
return document.documentElement.setAttribute("data-theme", t2), t2;
|
|
6649
6659
|
}
|
|
6650
|
-
function
|
|
6651
|
-
|
|
6660
|
+
function __(e5) {
|
|
6661
|
+
g_();
|
|
6652
6662
|
try {
|
|
6653
6663
|
window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (t2) => {
|
|
6654
|
-
|
|
6664
|
+
m_ || e5 == null || e5(g_(t2.matches));
|
|
6655
6665
|
});
|
|
6656
6666
|
} catch (e6) {
|
|
6657
6667
|
}
|
|
6658
6668
|
}
|
|
6659
|
-
function
|
|
6669
|
+
function v_(e5, t2) {
|
|
6660
6670
|
var n2, r2;
|
|
6661
6671
|
let i2 = (e6) => {
|
|
6662
6672
|
let n3 = e6 == null ? void 0 : e6.theme;
|
|
6663
6673
|
if (n3 !== "light" && n3 !== "dark") return;
|
|
6664
|
-
|
|
6665
|
-
let r3 = document.documentElement.getAttribute("data-theme"), i3 =
|
|
6674
|
+
m_ = n3;
|
|
6675
|
+
let r3 = document.documentElement.getAttribute("data-theme"), i3 = g_(n3 === "dark");
|
|
6666
6676
|
i3 !== r3 && (t2 == null || t2(i3));
|
|
6667
6677
|
};
|
|
6668
6678
|
(n2 = e5.addEventListener) == null || n2.call(e5, "hostcontextchanged", i2), i2((r2 = e5.getHostContext) == null ? void 0 : r2.call(e5));
|
|
6669
6679
|
}
|
|
6670
|
-
function
|
|
6680
|
+
function y_(e5, t2) {
|
|
6671
6681
|
if (e5.length <= 1) {
|
|
6672
6682
|
let t3 = /* @__PURE__ */ new Map();
|
|
6673
6683
|
for (let n3 of e5) t3.set(n3.name, n3.longitude);
|
|
6674
6684
|
return t3;
|
|
6675
6685
|
}
|
|
6676
6686
|
let n2 = [...e5].sort((e6, t3) => e6.longitude - t3.longitude), r2 = [], i2 = [];
|
|
6677
|
-
for (let e6 of n2) r2.push(e6.longitude), i2.push(
|
|
6678
|
-
|
|
6687
|
+
for (let e6 of n2) r2.push(e6.longitude), i2.push(b_(e6.longitude, i2, t2));
|
|
6688
|
+
S_(i2, r2, t2);
|
|
6679
6689
|
let a2 = /* @__PURE__ */ new Map();
|
|
6680
|
-
for (let e6 = 0; e6 < n2.length; e6++) a2.set(n2[e6].name,
|
|
6690
|
+
for (let e6 = 0; e6 < n2.length; e6++) a2.set(n2[e6].name, w_(i2[e6]));
|
|
6681
6691
|
return a2;
|
|
6682
6692
|
}
|
|
6683
|
-
function
|
|
6693
|
+
function b_(e5, t2, n2) {
|
|
6684
6694
|
if (t2.length === 0) return e5;
|
|
6685
6695
|
let r2 = Math.max(0.55, n2 / 4), i2 = Math.max(8, Math.min(40, n2 * 5)), a2 = Math.floor(i2 / r2);
|
|
6686
|
-
if (
|
|
6696
|
+
if (x_(e5, t2, n2)) return e5;
|
|
6687
6697
|
for (let i3 = 1; i3 <= a2; i3++) {
|
|
6688
6698
|
let a3 = i3 * r2;
|
|
6689
|
-
if (
|
|
6690
|
-
if (
|
|
6699
|
+
if (x_(e5 + a3, t2, n2)) return e5 + a3;
|
|
6700
|
+
if (x_(e5 - a3, t2, n2)) return e5 - a3;
|
|
6691
6701
|
}
|
|
6692
6702
|
return e5;
|
|
6693
6703
|
}
|
|
6694
|
-
function
|
|
6695
|
-
for (let r2 of t2) if (
|
|
6704
|
+
function x_(e5, t2, n2) {
|
|
6705
|
+
for (let r2 of t2) if (C_(e5, r2) < n2) return false;
|
|
6696
6706
|
return true;
|
|
6697
6707
|
}
|
|
6698
|
-
function
|
|
6708
|
+
function S_(e5, t2, n2) {
|
|
6699
6709
|
let r2 = e5.length;
|
|
6700
6710
|
if (!(r2 <= 1)) for (let t3 = 0; t3 < 80; t3++) {
|
|
6701
6711
|
let t4 = true;
|
|
6702
6712
|
for (let i2 = 0; i2 < r2; i2++) for (let a2 = i2 + 1; a2 < r2; a2++) {
|
|
6703
|
-
let r3 = n2 -
|
|
6713
|
+
let r3 = n2 - C_(e5[i2], e5[a2]);
|
|
6704
6714
|
if (r3 > 0.01) {
|
|
6705
6715
|
t4 = false;
|
|
6706
6716
|
let n3 = r3 * 0.65 / 2, o2 = e5[a2] - e5[i2];
|
|
@@ -6712,49 +6722,81 @@ function b_(e5, t2, n2) {
|
|
|
6712
6722
|
if (t4) break;
|
|
6713
6723
|
}
|
|
6714
6724
|
}
|
|
6715
|
-
function
|
|
6725
|
+
function C_(e5, t2) {
|
|
6716
6726
|
let n2 = ((t2 - e5) % 360 + 540) % 360 - 180;
|
|
6717
6727
|
return Math.abs(n2);
|
|
6718
6728
|
}
|
|
6719
|
-
function
|
|
6729
|
+
function w_(e5) {
|
|
6720
6730
|
return (e5 % 360 + 360) % 360;
|
|
6721
6731
|
}
|
|
6722
|
-
var
|
|
6732
|
+
var T_ = "north node (mean)", E_ = "north node (true)", D_ = "south node (mean)", O_ = "south node (true)", k_ = [T_, E_, D_, O_], A_ = { [T_]: T_, north_node_mean: T_, "north node": T_, north_node: T_, "mean node": T_, mean_node: T_, [E_]: E_, north_node_true: E_, "true node": E_, true_node: E_, [D_]: D_, south_node_mean: D_, "south node": D_, south_node: D_, [O_]: O_, south_node_true: O_, "true south node": O_, true_south_node: O_ };
|
|
6733
|
+
function j_(e5) {
|
|
6734
|
+
var t2;
|
|
6735
|
+
return (t2 = A_[e5.trim().toLowerCase()]) == null ? null : t2;
|
|
6736
|
+
}
|
|
6737
|
+
var M_ = { [T_]: "\u260A\uFE0E", [E_]: "\u260A\uFE0E", [D_]: "\u260B\uFE0E", [O_]: "\u260B\uFE0E" }, N_ = { [T_]: "soul direction", [E_]: "soul direction", [D_]: "past-life gifts", [O_]: "past-life gifts" };
|
|
6738
|
+
function P_(e5) {
|
|
6739
|
+
let t2 = /* @__PURE__ */ new Set();
|
|
6740
|
+
for (let n2 of e5) {
|
|
6741
|
+
let e6 = j_(n2);
|
|
6742
|
+
e6 && t2.add(e6);
|
|
6743
|
+
}
|
|
6744
|
+
return t2.has("north node (mean)") && t2.has("north node (true)") || t2.has("south node (mean)") && t2.has("south node (true)");
|
|
6745
|
+
}
|
|
6746
|
+
function F_(e5, t2) {
|
|
6747
|
+
let n2 = new Set(e5.map((e6) => j_(e6.name)).filter(Boolean)), r2 = /* @__PURE__ */ new Set(), i2 = [[T_, E_], [D_, O_]];
|
|
6748
|
+
for (let [e6, a2] of i2) n2.has(e6) && n2.has(a2) && r2.add(t2 === "true" ? e6 : a2);
|
|
6749
|
+
return r2.size === 0 ? e5 : e5.filter((e6) => {
|
|
6750
|
+
var t3;
|
|
6751
|
+
return !r2.has((t3 = j_(e6.name)) == null ? "" : t3);
|
|
6752
|
+
});
|
|
6753
|
+
}
|
|
6754
|
+
var I_ = "lilith (mean)", L_ = "lilith (true)", R_ = "lilith (interpolated)", z_ = [I_, L_, R_], B_ = { [I_]: I_, lilith: I_, mean_lilith: I_, lilith_mean: I_, "mean apogee": I_, "black moon lilith": I_, [L_]: L_, lilith_true: L_, true_lilith: L_, "osculating apogee": L_, [R_]: R_, lilith_interpolated: R_, lilith_natural: R_, "interpolated apogee": R_ };
|
|
6755
|
+
function V_(e5) {
|
|
6756
|
+
var t2;
|
|
6757
|
+
return (t2 = B_[e5.trim().toLowerCase()]) == null ? null : t2;
|
|
6758
|
+
}
|
|
6759
|
+
var H_ = { [I_]: "\u26B8\uFE0E", [L_]: "\u26B8\uFE0E", [R_]: "\u26B8\uFE0E" }, U_ = { [I_]: "primal feminine & shadow", [L_]: "primal feminine & shadow", [R_]: "primal feminine & shadow" };
|
|
6760
|
+
function W_(e5) {
|
|
6761
|
+
var t2, n2;
|
|
6762
|
+
return (t2 = (n2 = j_(e5)) == null ? V_(e5) : n2) == null ? e5 : t2;
|
|
6763
|
+
}
|
|
6764
|
+
var G_ = 310, K_ = 310, q_ = 240, J_ = 204, Y_ = 190, X_ = 152, Z_ = 118, Q_ = 112, $_ = 290, ev = 246, tv = 264, nv = 16;
|
|
6723
6765
|
function Y(e5, t2, n2) {
|
|
6724
6766
|
let r2 = -(e5 - n2 + 180) * Math.PI / 180;
|
|
6725
|
-
return { x:
|
|
6767
|
+
return { x: G_ + t2 * Math.cos(r2), y: K_ + t2 * Math.sin(r2) };
|
|
6726
6768
|
}
|
|
6727
6769
|
function X(e5) {
|
|
6728
6770
|
return document.createElementNS("http://www.w3.org/2000/svg", e5);
|
|
6729
6771
|
}
|
|
6730
|
-
var
|
|
6731
|
-
function
|
|
6772
|
+
var rv = { sun: "\u2609\uFE0E", moon: "\u263D\uFE0E", mercury: "\u263F\uFE0E", venus: "\u2640\uFE0E", mars: "\u2642\uFE0E", jupiter: "\u2643\uFE0E", saturn: "\u2644\uFE0E", uranus: "\u2645\uFE0E", neptune: "\u2646\uFE0E", pluto: "\u2647\uFE0E", "north node": "\u260A\uFE0E", "south node": "\u260B\uFE0E", chiron: "\u26B7\uFE0E", "true node": "\u260A\uFE0E", north_node: "\u260A\uFE0E", south_node: "\u260B\uFE0E", true_node: "\u260A\uFE0E", ...M_, ...H_, asc: "AC", mc: "MC" }, iv = ["\u2648", "\u2649", "\u264A", "\u264B", "\u264C", "\u264D", "\u264E", "\u264F", "\u2650", "\u2651", "\u2652", "\u2653"].map((e5) => e5 + "\uFE0E"), av = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"], ov = { conjunction: "\u260C", opposition: "\u260D", trine: "\u25B3", square: "\u25A1", sextile: "\u26B9" };
|
|
6773
|
+
function sv(e5) {
|
|
6732
6774
|
let t2 = e5.toLowerCase();
|
|
6733
|
-
return getComputedStyle(document.documentElement).getPropertyValue("--xasp-".concat(t2)).trim() ||
|
|
6775
|
+
return getComputedStyle(document.documentElement).getPropertyValue("--xasp-".concat(t2)).trim() || f_(t2, pv());
|
|
6734
6776
|
}
|
|
6735
|
-
function
|
|
6777
|
+
function cv(e5) {
|
|
6736
6778
|
return e5 <= 1 ? { dash: "", width: "1.8", opacity: "0.95" } : e5 <= 3 ? { dash: "5,4", width: "1.4", opacity: "0.75" } : { dash: "3,5", width: "1.0", opacity: "0.50" };
|
|
6737
6779
|
}
|
|
6738
|
-
var
|
|
6739
|
-
function
|
|
6740
|
-
let n2 =
|
|
6780
|
+
var lv = { sun: { domicile: [4], exaltation: [0], detriment: [10], fall: [6] }, moon: { domicile: [3], exaltation: [1], detriment: [9], fall: [7] }, mercury: { domicile: [2, 5], exaltation: [5], detriment: [8, 11], fall: [11] }, venus: { domicile: [1, 6], exaltation: [11], detriment: [7, 0], fall: [5] }, mars: { domicile: [0, 7], exaltation: [9], detriment: [6, 1], fall: [3] }, jupiter: { domicile: [8, 11], exaltation: [3], detriment: [2, 5], fall: [9] }, saturn: { domicile: [9, 10], exaltation: [6], detriment: [3, 4], fall: [0] } };
|
|
6781
|
+
function uv(e5, t2) {
|
|
6782
|
+
let n2 = lv[e5.toLowerCase()];
|
|
6741
6783
|
if (!n2) return null;
|
|
6742
6784
|
let r2 = Math.floor((t2 % 360 + 360) % 360 / 30);
|
|
6743
6785
|
return n2.domicile.includes(r2) ? { label: "Domicile", emoji: "\u{1F3DB}", cssClass: "dignity-domicile", positive: true } : n2.exaltation.includes(r2) ? { label: "Exaltation", emoji: "\u2B06", cssClass: "dignity-exaltation", positive: true } : n2.detriment.includes(r2) ? { label: "Detriment", emoji: "\u2B07", cssClass: "dignity-detriment", positive: false } : n2.fall.includes(r2) ? { label: "Fall", emoji: "\u{1F53B}", cssClass: "dignity-fall", positive: false } : null;
|
|
6744
6786
|
}
|
|
6745
|
-
var
|
|
6746
|
-
function
|
|
6787
|
+
var dv = ["fire", "earth", "air", "water", "fire", "earth", "air", "water", "fire", "earth", "air", "water"], fv = ["cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable"], pv = h_, mv = (e5) => d_(e5, pv());
|
|
6788
|
+
function hv(e5, t2, n2, r2, i2) {
|
|
6747
6789
|
let a2 = +(((t2 - e5) % 360 + 360) % 360 > 180), o2 = Y(e5, n2, i2), s2 = Y(e5, r2, i2), c2 = Y(t2, r2, i2), l2 = Y(t2, n2, i2);
|
|
6748
6790
|
return ["M ".concat(o2.x.toFixed(2), " ").concat(o2.y.toFixed(2)), "L ".concat(s2.x.toFixed(2), " ").concat(s2.y.toFixed(2)), "A ".concat(r2, " ").concat(r2, " 0 ").concat(a2, " 0 ").concat(c2.x.toFixed(2), " ").concat(c2.y.toFixed(2)), "L ".concat(l2.x.toFixed(2), " ").concat(l2.y.toFixed(2)), "A ".concat(n2, " ").concat(n2, " 0 ").concat(a2, " 1 ").concat(o2.x.toFixed(2), " ").concat(o2.y.toFixed(2)), "Z"].join(" ");
|
|
6749
6791
|
}
|
|
6750
|
-
function
|
|
6792
|
+
function gv(e5, t2, n2, r2, i2, a2, o2) {
|
|
6751
6793
|
let s2 = n2 * 30, c2 = s2 + 30, l2 = Y(s2, r2, t2), u2 = Y(s2, i2, t2), d2 = Y(c2, i2, t2), f2 = Y(c2, r2, t2), p2 = ["M ".concat(l2.x.toFixed(2), " ").concat(l2.y.toFixed(2)), "L ".concat(u2.x.toFixed(2), " ").concat(u2.y.toFixed(2)), "A ".concat(i2, " ").concat(i2, " 0 0 0 ").concat(d2.x.toFixed(2), " ").concat(d2.y.toFixed(2)), "L ".concat(f2.x.toFixed(2), " ").concat(f2.y.toFixed(2)), "A ".concat(r2, " ").concat(r2, " 0 0 1 ").concat(l2.x.toFixed(2), " ").concat(l2.y.toFixed(2)), "Z"].join(" "), m2 = X("path");
|
|
6752
6794
|
m2.setAttribute("d", p2), m2.setAttribute("fill", a2), m2.setAttribute("fill-opacity", String(o2)), m2.setAttribute("pointer-events", "none"), e5.appendChild(m2);
|
|
6753
6795
|
}
|
|
6754
|
-
var
|
|
6755
|
-
function
|
|
6796
|
+
var _v = /* @__PURE__ */ new Set(["sun", "moon", "mercury", "venus", "mars", "jupiter", "saturn", "uranus", "neptune", "pluto", "chiron", "north node", "south node", "true node", "north_node", "south_node", "true_node", "asc", "mc", ...k_, ...z_]);
|
|
6797
|
+
function vv(e5) {
|
|
6756
6798
|
let t2 = (e5 % 360 + 360) % 360, n2 = Math.floor(t2 / 30), r2 = Math.floor(t2 % 30);
|
|
6757
|
-
return "".concat(r2, "\xB0").concat(Math.floor((t2 % 30 - r2) * 60).toString().padStart(2, "0"), "\u2032 ").concat(
|
|
6799
|
+
return "".concat(r2, "\xB0").concat(Math.floor((t2 % 30 - r2) * 60).toString().padStart(2, "0"), "\u2032 ").concat(av[n2]);
|
|
6758
6800
|
}
|
|
6759
6801
|
function Z(e5) {
|
|
6760
6802
|
return e5.replace(/\b\w/g, (e6) => e6.toUpperCase());
|
|
@@ -6762,29 +6804,29 @@ function Z(e5) {
|
|
|
6762
6804
|
function Q(e5) {
|
|
6763
6805
|
return String(e5).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
6764
6806
|
}
|
|
6765
|
-
var
|
|
6766
|
-
function
|
|
6767
|
-
|
|
6807
|
+
var yv = "true";
|
|
6808
|
+
function bv(e5) {
|
|
6809
|
+
yv = e5;
|
|
6768
6810
|
}
|
|
6769
|
-
function
|
|
6770
|
-
|
|
6771
|
-
|
|
6772
|
-
|
|
6773
|
-
|
|
6811
|
+
function xv(e5) {
|
|
6812
|
+
return F_(e5.map((e6) => {
|
|
6813
|
+
let t2 = W_(e6.name);
|
|
6814
|
+
return t2 === e6.name ? e6 : { ...e6, name: t2 };
|
|
6815
|
+
}), yv);
|
|
6774
6816
|
}
|
|
6775
|
-
function
|
|
6776
|
-
return Array.isArray(e5) ?
|
|
6817
|
+
function Sv(e5) {
|
|
6818
|
+
return Array.isArray(e5) ? xv(e5.filter((e6) => e6 && typeof e6.longitude == "number" && isFinite(e6.longitude))) : e5 && typeof e5 == "object" ? xv(Object.entries(e5).filter(([e6]) => _v.has(e6.toLowerCase())).map(([e6, t2]) => {
|
|
6777
6819
|
var n2, r2, i2, a2, o2, s2;
|
|
6778
6820
|
return { name: e6.toLowerCase(), longitude: (n2 = (r2 = t2.longitude) == null ? t2.lon : r2) == null ? 0 : n2, speed: (i2 = t2.longitude_speed) == null ? t2.speed : i2, retrograde: !!((a2 = t2.is_retrograde) == null ? t2.retrograde : a2), sign: (o2 = t2.sign_name) == null ? t2.sign : o2, house: (s2 = t2.house_number) == null ? t2.house : s2 };
|
|
6779
6821
|
})) : [];
|
|
6780
6822
|
}
|
|
6781
|
-
var
|
|
6782
|
-
function
|
|
6823
|
+
var Cv = [{ type: "conjunction", angle: 0, orb: 8 }, { type: "opposition", angle: 180, orb: 8 }, { type: "trine", angle: 120, orb: 6 }, { type: "square", angle: 90, orb: 5 }, { type: "sextile", angle: 60, orb: 4 }];
|
|
6824
|
+
function wv(e5, t2, n2 = 1) {
|
|
6783
6825
|
let r2 = [];
|
|
6784
6826
|
for (let o2 of e5) for (let e6 of t2) {
|
|
6785
6827
|
let t3 = Math.abs(o2.longitude - e6.longitude) % 360;
|
|
6786
6828
|
t3 > 180 && (t3 = 360 - t3);
|
|
6787
|
-
for (let s2 of
|
|
6829
|
+
for (let s2 of Cv) {
|
|
6788
6830
|
let c2 = s2.orb * n2, l2 = Math.abs(t3 - s2.angle);
|
|
6789
6831
|
if (l2 <= c2) {
|
|
6790
6832
|
var i2, a2;
|
|
@@ -6796,39 +6838,39 @@ function nv(e5, t2, n2 = 1) {
|
|
|
6796
6838
|
}
|
|
6797
6839
|
return r2.sort((e6, t3) => e6.orb - t3.orb).slice(0, 40);
|
|
6798
6840
|
}
|
|
6799
|
-
var
|
|
6800
|
-
function
|
|
6801
|
-
|
|
6841
|
+
var Tv = null;
|
|
6842
|
+
function Ev(e5) {
|
|
6843
|
+
Tv = e5;
|
|
6802
6844
|
}
|
|
6803
|
-
var
|
|
6804
|
-
function
|
|
6805
|
-
return
|
|
6845
|
+
var Dv = null, Ov = null;
|
|
6846
|
+
function kv() {
|
|
6847
|
+
return Ov || (Ov = document.getElementById("tooltip")), Ov;
|
|
6806
6848
|
}
|
|
6807
|
-
function
|
|
6808
|
-
let a2 =
|
|
6849
|
+
function Av(e5, t2, n2, r2, i2) {
|
|
6850
|
+
let a2 = kv();
|
|
6809
6851
|
a2.innerHTML = '\n <div class="tooltip-title">'.concat(n2, '</div>\n <div class="tooltip-detail">').concat(r2, "</div>\n ").concat(i2 ? '<div class="tooltip-hint">'.concat(i2, "</div>") : "", "\n ");
|
|
6810
6852
|
let o2 = a2.getBoundingClientRect(), s2 = o2.width || 240, c2 = o2.height || 80, l2 = e5 + 14, u2 = t2 + 10;
|
|
6811
6853
|
l2 + s2 > window.innerWidth && (l2 = e5 - s2 - 8), u2 + c2 > window.innerHeight && (u2 = t2 - c2 - 8), a2.style.left = "".concat(l2, "px"), a2.style.top = "".concat(u2, "px"), a2.classList.add("visible");
|
|
6812
6854
|
}
|
|
6813
|
-
function
|
|
6814
|
-
|
|
6855
|
+
function jv() {
|
|
6856
|
+
kv().classList.remove("visible");
|
|
6815
6857
|
}
|
|
6816
|
-
var
|
|
6817
|
-
function
|
|
6858
|
+
var Mv = { 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", ...N_, ...U_ }, Nv = { conjunction: "fusion & amplification", opposition: "polarity & integration", trine: "ease & natural flow", square: "tension & growth", sextile: "opportunity & cooperation", quincunx: "adjustment & recalibration", semisquare: "friction & minor tension" }, Pv = null, Fv = null, Iv = /* @__PURE__ */ new Map();
|
|
6859
|
+
function Lv(e5) {
|
|
6818
6860
|
return "".concat(e5.planet1, "|inner|").concat(e5.planet2, "|outer|").concat(e5.type);
|
|
6819
6861
|
}
|
|
6820
|
-
var
|
|
6821
|
-
function
|
|
6862
|
+
var Rv = { ASC: { title: "Ascendant", symbol: "AC", keyword: "self & first impressions", meaning: "The Ascendant is the mask you wear before the world \u2014 your embodied presence, physical appearance, and instinctive approach to new situations.", themes: ["identity", "appearance", "beginnings", "vitality", "self-projection"] }, DSC: { title: "Descendant", symbol: "DC", keyword: "partnership & mirrors", meaning: "The Descendant describes what you seek in others and the qualities you project onto relationships \u2014 the face you recognise in those you're drawn to.", themes: ["partnership", "marriage", "open enemies", "projection", "attraction"] }, MC: { title: "Midheaven", symbol: "MC", keyword: "vocation & public legacy", meaning: "The Midheaven marks the chart's highest point and governs reputation, career, and the long arc of your public life.", themes: ["career", "ambition", "reputation", "authority", "life direction"] }, IC: { title: "Imum Coeli", symbol: "IC", keyword: "roots & inner foundation", meaning: "The IC anchors the chart at its lowest point \u2014 home, ancestry, psychological foundations, and the private self that sustains the public Midheaven.", themes: ["home", "family", "ancestry", "inner life", "psychological roots"] } };
|
|
6863
|
+
function zv(e5, t2, n2, r2, i2) {
|
|
6822
6864
|
var a2, o2;
|
|
6823
|
-
let s2 =
|
|
6865
|
+
let s2 = Wv(), c2 = Rv[t2];
|
|
6824
6866
|
if (!c2) return;
|
|
6825
|
-
let l2 =
|
|
6867
|
+
let l2 = vv(n2), u2 = Math.floor((n2 % 360 + 360) % 360 / 30), d2 = dv[u2], f2 = fv[u2], p2 = iv[u2], m2 = mv(u2), h2 = i2 ? "".concat(i2, " \xB7 Natal") : "Inner \xB7 Natal", g2 = Dv ? '<button class="ask-claude-btn" id="bi-ask-claude-angle-btn">\u2728 Interpret this</button>' : "";
|
|
6826
6868
|
s2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:#7060b8;font-family:system-ui;font-weight:700;font-size:14px">'.concat(Q(c2.symbol), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:6px;flex-wrap:wrap;">\n <strong>').concat(Q(c2.title), '</strong>\n <span class="wheel-badge inner">').concat(Q(h2), '</span>\n </div>\n <div class="info-subtitle">').concat(Q(p2), " ").concat(Q(l2), '</div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div style="font-size:11px;color:var(--text-secondary,#888);margin:6px 0 4px">\n <span style="color:').concat(m2, ';margin-right:4px">').concat(Q(p2), "</span>\n <em>").concat(Q(d2), " \xB7 ").concat(Q(f2), '</em>\n </div>\n <div style="font-size:12px;line-height:1.55;margin-bottom:8px">').concat(Q(c2.meaning), '</div>\n <div class="aspects-title">').concat(Q(c2.keyword), '</div>\n <div class="aspects-list">\n ').concat(c2.themes.map((e6) => '<div class="aspect-row"><span class="aspect-other">'.concat(Q(e6), "</span></div>")).join(""), "\n </div>\n ").concat(g2, "\n "), s2.classList.add("open"), s2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (a2 = document.getElementById("bi-info-close-btn")) == null || a2.addEventListener("click", () => {
|
|
6827
|
-
|
|
6869
|
+
Gv(), Qv();
|
|
6828
6870
|
}), (o2 = document.getElementById("bi-ask-claude-angle-btn")) == null || o2.addEventListener("click", () => {
|
|
6829
|
-
if (!
|
|
6871
|
+
if (!Dv) return;
|
|
6830
6872
|
let e6 = document.getElementById("bi-ask-claude-angle-btn");
|
|
6831
|
-
!e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"),
|
|
6873
|
+
!e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"), Dv({ type: "angle_interpretation", data: { angle: c2.title, longitude: n2, sign: av[u2], position: l2, element: d2, modality: f2, mode: r2 } }).then(() => {
|
|
6832
6874
|
e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
|
|
6833
6875
|
e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
|
|
6834
6876
|
}, 2500);
|
|
@@ -6837,32 +6879,32 @@ function _v(e5, t2, n2, r2, i2) {
|
|
|
6837
6879
|
}));
|
|
6838
6880
|
});
|
|
6839
6881
|
}
|
|
6840
|
-
var
|
|
6841
|
-
function
|
|
6882
|
+
var Bv = { 1: "Identity & self", 2: "Resources & values", 3: "Mind & local", 4: "Roots & home", 5: "Creativity & play", 6: "Work & wellbeing", 7: "Partnership", 8: "Depth & shared", 9: "Meaning & travel", 10: "Vocation & visibility", 11: "Community & vision", 12: "Inner life" };
|
|
6883
|
+
function Vv(e5, t2, n2) {
|
|
6842
6884
|
let r2 = (n2 - t2 + 360) % 360;
|
|
6843
6885
|
return e5.filter((e6) => {
|
|
6844
6886
|
let n3 = (e6.longitude - t2 + 360) % 360;
|
|
6845
6887
|
return n3 >= 0 && n3 < r2;
|
|
6846
6888
|
});
|
|
6847
6889
|
}
|
|
6848
|
-
function
|
|
6890
|
+
function Hv(e5, t2, n2, r2, i2, a2, o2, s2) {
|
|
6849
6891
|
var c2, l2, u2, d2, f2;
|
|
6850
|
-
let p2 =
|
|
6851
|
-
let n3 =
|
|
6892
|
+
let p2 = Wv(), m2 = Math.floor((t2.cusp_lon % 360 + 360) % 360 / 30), h2 = (c2 = (l2 = t2.sign) == null ? av[m2] : l2) == null ? "" : c2, g2 = (u2 = iv[m2]) == null ? "" : u2, _2 = Vv(o2, t2.cusp_lon, n2.cusp_lon), v2 = Vv(s2, t2.cusp_lon, n2.cusp_lon), y2 = i2 || "Natal", b2 = r2 === "synastry" ? a2 == null ? "Synastry" : a2 : "Transit", x2 = (e6, t3) => e6.length === 0 ? '<div class="no-aspects">\u2014</div>' : e6.map((e7) => {
|
|
6893
|
+
let n3 = vv(e7.longitude), r3 = e7.retrograde ? " \u211E" : "";
|
|
6852
6894
|
return '<div class="aspect-row">\n <span class="wheel-badge '.concat(t3, '" style="font-size:9px">').concat(Q(t3 === "inner" ? y2 : b2), '</span>\n <span class="aspect-other">').concat(Q(Z(e7.name))).concat(r3, '</span>\n <span class="aspect-meta">').concat(Q(n3), "</span>\n </div>");
|
|
6853
|
-
}).join(""), S2 =
|
|
6895
|
+
}).join(""), S2 = Dv ? '<button class="ask-claude-btn" id="bi-ask-claude-house-btn">\u2728 Interpret this</button>' : "";
|
|
6854
6896
|
p2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:#7060b8;font-family:system-ui;font-weight:700;font-size:14px">'.concat(t2.number, '</span>\n <div class="info-title">\n <div><strong>House ').concat(t2.number, '</strong></div>\n <div class="info-subtitle">').concat(Q(g2), " ").concat(Q(h2), " on cusp").concat(t2.ruler ? " \xB7 ruled by ".concat(Q(Z(t2.ruler))) : "", '</div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title" style="margin-top:6px">').concat(Q(y2), ' planets</div>\n <div class="aspects-list">').concat(x2(_2, "inner"), '</div>\n <div class="aspects-title" style="margin-top:8px">').concat(Q(b2), ' planets currently here</div>\n <div class="aspects-list">').concat(x2(v2, "outer"), "</div>\n ").concat(S2, "\n "), p2.classList.add("open"), p2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (d2 = document.getElementById("bi-info-close-btn")) == null || d2.addEventListener("click", () => {
|
|
6855
|
-
|
|
6897
|
+
Gv(), Qv();
|
|
6856
6898
|
}), (f2 = document.getElementById("bi-ask-claude-house-btn")) == null || f2.addEventListener("click", () => {
|
|
6857
6899
|
var e6;
|
|
6858
|
-
if (!
|
|
6900
|
+
if (!Dv) return;
|
|
6859
6901
|
let n3 = document.getElementById("bi-ask-claude-house-btn");
|
|
6860
|
-
!n3 || n3.disabled || (n3.disabled = true, n3.textContent = "\u23F3 Sending\u2026", n3.classList.add("sending"),
|
|
6902
|
+
!n3 || n3.disabled || (n3.disabled = true, n3.textContent = "\u23F3 Sending\u2026", n3.classList.add("sending"), Dv({ type: "house", data: { house_number: t2.number, cusp_sign: h2, cusp_longitude: t2.cusp_lon, ruler: (e6 = t2.ruler) == null ? null : e6, mode: r2, inner_label: y2, outer_label: b2, inner_planets: _2.map((e7) => {
|
|
6861
6903
|
var t3;
|
|
6862
|
-
return { name: e7.name, position:
|
|
6904
|
+
return { name: e7.name, position: vv(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
|
|
6863
6905
|
}), outer_planets: v2.map((e7) => {
|
|
6864
6906
|
var t3;
|
|
6865
|
-
return { name: e7.name, position:
|
|
6907
|
+
return { name: e7.name, position: vv(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
|
|
6866
6908
|
}) } }).then(() => {
|
|
6867
6909
|
n3.textContent = "\u2713 Sent", n3.classList.remove("sending"), n3.classList.add("sent"), setTimeout(() => {
|
|
6868
6910
|
n3.textContent = "\u2728 Interpret this", n3.classList.remove("sent"), n3.disabled = false;
|
|
@@ -6872,23 +6914,23 @@ function bv(e5, t2, n2, r2, i2, a2, o2, s2) {
|
|
|
6872
6914
|
}));
|
|
6873
6915
|
});
|
|
6874
6916
|
}
|
|
6875
|
-
function
|
|
6917
|
+
function Uv(e5, t2, n2, r2, i2, a2, o2) {
|
|
6876
6918
|
var s2, c2;
|
|
6877
|
-
let l2 =
|
|
6878
|
-
let n3 =
|
|
6919
|
+
let l2 = Wv(), u2 = av[t2], d2 = iv[t2], f2 = dv[t2], p2 = fv[t2], m2 = (e6) => Math.floor((e6.longitude % 360 + 360) % 360 / 30) === t2, h2 = a2.filter(m2), g2 = o2.filter(m2), _2 = r2 || "Natal", v2 = n2 === "synastry" ? i2 == null ? "Synastry" : i2 : "Transit", y2 = (e6, t3) => e6.length === 0 ? '<div class="no-aspects">\u2014</div>' : e6.map((e7) => {
|
|
6920
|
+
let n3 = vv(e7.longitude), r3 = e7.retrograde ? " \u211E" : "";
|
|
6879
6921
|
return '<div class="aspect-row">\n <span class="wheel-badge '.concat(t3, '" style="font-size:9px">').concat(Q(t3 === "inner" ? _2 : v2), '</span>\n <span class="aspect-other">').concat(Q(Z(e7.name))).concat(r3, '</span>\n <span class="aspect-meta">').concat(Q(n3), "</span>\n </div>");
|
|
6880
|
-
}).join(""), b2 =
|
|
6881
|
-
l2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(
|
|
6882
|
-
|
|
6922
|
+
}).join(""), b2 = Dv ? '<button class="ask-claude-btn" id="bi-ask-claude-sign-btn">\u2728 Interpret this</button>' : "";
|
|
6923
|
+
l2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(mv(t2), ';font-family:serif;font-weight:700;font-size:16px">').concat(Q(d2), '</span>\n <div class="info-title">\n <div><strong>').concat(Q(u2), '</strong></div>\n <div class="info-subtitle"><em>').concat(Q(Z(f2)), " \xB7 ").concat(Q(Z(p2)), '</em></div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title" style="margin-top:6px">').concat(Q(_2), " planets in ").concat(Q(u2), '</div>\n <div class="aspects-list">').concat(y2(h2, "inner"), '</div>\n <div class="aspects-title" style="margin-top:8px">').concat(Q(v2), " planets currently in ").concat(Q(u2), '</div>\n <div class="aspects-list">').concat(y2(g2, "outer"), "</div>\n ").concat(b2, "\n "), l2.classList.add("open"), l2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (s2 = document.getElementById("bi-info-close-btn")) == null || s2.addEventListener("click", () => {
|
|
6924
|
+
Gv(), Qv();
|
|
6883
6925
|
}), (c2 = document.getElementById("bi-ask-claude-sign-btn")) == null || c2.addEventListener("click", () => {
|
|
6884
|
-
if (!
|
|
6926
|
+
if (!Dv) return;
|
|
6885
6927
|
let e6 = document.getElementById("bi-ask-claude-sign-btn");
|
|
6886
|
-
!e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"),
|
|
6928
|
+
!e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"), Dv({ type: "sign", data: { sign: u2, element: Z(f2), modality: Z(p2), mode: n2, inner_label: _2, outer_label: v2, inner_planets: h2.map((e7) => {
|
|
6887
6929
|
var t3;
|
|
6888
|
-
return { name: e7.name, position:
|
|
6930
|
+
return { name: e7.name, position: vv(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
|
|
6889
6931
|
}), outer_planets: g2.map((e7) => {
|
|
6890
6932
|
var t3;
|
|
6891
|
-
return { name: e7.name, position:
|
|
6933
|
+
return { name: e7.name, position: vv(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
|
|
6892
6934
|
}) } }).then(() => {
|
|
6893
6935
|
e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
|
|
6894
6936
|
e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
|
|
@@ -6898,7 +6940,7 @@ function xv(e5, t2, n2, r2, i2, a2, o2) {
|
|
|
6898
6940
|
}));
|
|
6899
6941
|
});
|
|
6900
6942
|
}
|
|
6901
|
-
function
|
|
6943
|
+
function Wv() {
|
|
6902
6944
|
if (document.body.classList.contains("is-fullscreen")) {
|
|
6903
6945
|
let e6 = document.querySelector("#fs-bottom-bar [data-column='right']");
|
|
6904
6946
|
if (e6) {
|
|
@@ -6906,36 +6948,36 @@ function Sv() {
|
|
|
6906
6948
|
return t3 || (t3 = document.createElement("div"), t3.className = "info-drawer info-drawer--fs", e6.appendChild(t3)), t3;
|
|
6907
6949
|
}
|
|
6908
6950
|
}
|
|
6909
|
-
if (
|
|
6910
|
-
|
|
6951
|
+
if (Pv && Pv.isConnected) return Pv;
|
|
6952
|
+
Pv = document.createElement("div"), Pv.id = "bi-info-drawer", Pv.className = "info-drawer";
|
|
6911
6953
|
let e5 = document.getElementById("chart-container");
|
|
6912
|
-
if (e5 != null && e5.parentElement) e5.parentElement.insertBefore(
|
|
6954
|
+
if (e5 != null && e5.parentElement) e5.parentElement.insertBefore(Pv, e5.nextSibling);
|
|
6913
6955
|
else {
|
|
6914
6956
|
var t2;
|
|
6915
|
-
(t2 = document.getElementById("app")) == null || t2.appendChild(
|
|
6957
|
+
(t2 = document.getElementById("app")) == null || t2.appendChild(Pv);
|
|
6916
6958
|
}
|
|
6917
|
-
return
|
|
6959
|
+
return Pv;
|
|
6918
6960
|
}
|
|
6919
|
-
function
|
|
6961
|
+
function Gv() {
|
|
6920
6962
|
var e5;
|
|
6921
|
-
|
|
6963
|
+
Pv == null || Pv.classList.remove("open"), (e5 = document.querySelector("#fs-bottom-bar [data-column='right'] .info-drawer--fs")) == null || e5.classList.remove("open"), Tv == null || Tv(null);
|
|
6922
6964
|
}
|
|
6923
|
-
function
|
|
6965
|
+
function Kv(e5, t2, n2, r2, i2, a2, o2) {
|
|
6924
6966
|
var s2, c2, l2, u2, d2;
|
|
6925
|
-
let f2 =
|
|
6967
|
+
let f2 = Wv(), p2 = (s2 = rv[t2.name.toLowerCase()]) == null ? "\u2605" : s2, m2 = (c2 = iv[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "" : c2, h2 = uv(t2.name, t2.longitude), g2;
|
|
6926
6968
|
g2 = n2 === "inner" ? a2 ? "".concat(a2, " \xB7 Natal") : "Inner \xB7 Natal" : i2 === "transit" ? "Outer \xB7 Transit" : o2 ? "".concat(o2, " \xB7 Synastry") : "Outer \xB7 Synastry";
|
|
6927
6969
|
let _2 = n2, v2 = r2.filter((e6) => n2 === "inner" && e6.planet1 === t2.name || n2 === "outer" && e6.planet2 === t2.name).sort((e6, t3) => e6.orb - t3.orb), y2 = v2.length ? v2.map((e6) => {
|
|
6928
6970
|
var t3, r3, a3, o3, s3, c3, l3;
|
|
6929
|
-
let u3 = n2 === "inner" ? e6.planet2 : e6.planet1, d3 = (t3 =
|
|
6971
|
+
let u3 = n2 === "inner" ? e6.planet2 : e6.planet1, d3 = (t3 = rv[u3.toLowerCase()]) == null ? u3 : t3, f3 = (r3 = (a3 = ov[(o3 = (s3 = e6.type) == null ? void 0 : s3.toLowerCase()) == null ? "" : o3]) == null ? e6.type : a3) == null ? "\u2014" : r3, p3 = sv((c3 = (l3 = e6.type) == null ? void 0 : l3.toLowerCase()) == null ? "" : c3), m3 = "".concat(e6.orb.toFixed(1), "\xB0"), h3 = i2 === "transit" ? e6.applying ? "\u2197" : "\u2198" : e6.orb <= 1 ? "exact" : e6.orb <= 3 ? "tight" : "wide";
|
|
6930
6972
|
return '<div class="aspect-row">\n <span class="aspect-dot" style="background:'.concat(p3, '"></span>\n <span class="aspect-sym" style="color:').concat(p3, '">').concat(f3, '</span>\n <span class="aspect-other">').concat(Q(d3), " ").concat(Q(Z(u3)), '</span>\n <span class="aspect-meta">').concat(m3, " ").concat(h3, "</span>\n </div>");
|
|
6931
|
-
}).join("") : '<div class="no-aspects">No cross-aspects within orb</div>', b2 = (l2 =
|
|
6932
|
-
f2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph">'.concat(Q(p2), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:6px;flex-wrap:wrap;">\n <strong>').concat(Q(Z(t2.name)), "</strong>\n ").concat(t2.retrograde ? "<span style='color:#e05252'>\u211E</span>" : "", "\n ").concat(h2 ? '<span class="dignity-badge '.concat(h2.cssClass, '">').concat(h2.emoji, " ").concat(Q(h2.label), "</span>") : "", '\n <span class="wheel-badge ').concat(_2, '">').concat(Q(g2), '</span>\n </div>\n <div class="info-subtitle">').concat(Q(m2), " ").concat(Q(
|
|
6933
|
-
|
|
6973
|
+
}).join("") : '<div class="no-aspects">No cross-aspects within orb</div>', b2 = (l2 = av[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "Unknown" : l2, x2 = Dv ? '<button class="ask-claude-btn" id="bi-ask-claude-planet-btn">\u2728 Interpret this</button>' : "";
|
|
6974
|
+
f2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph">'.concat(Q(p2), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:6px;flex-wrap:wrap;">\n <strong>').concat(Q(Z(t2.name)), "</strong>\n ").concat(t2.retrograde ? "<span style='color:#e05252'>\u211E</span>" : "", "\n ").concat(h2 ? '<span class="dignity-badge '.concat(h2.cssClass, '">').concat(h2.emoji, " ").concat(Q(h2.label), "</span>") : "", '\n <span class="wheel-badge ').concat(_2, '">').concat(Q(g2), '</span>\n </div>\n <div class="info-subtitle">').concat(Q(m2), " ").concat(Q(vv(t2.longitude))).concat(t2.house ? " \xB7 House ".concat(t2.house) : "", '</div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title">Cross-Aspects</div>\n <div class="aspects-list">').concat(y2, "</div>\n ").concat(x2, "\n "), f2.classList.add("open"), f2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (u2 = document.getElementById("bi-info-close-btn")) == null || u2.addEventListener("click", () => {
|
|
6975
|
+
Gv(), Qv();
|
|
6934
6976
|
}), (d2 = document.getElementById("bi-ask-claude-planet-btn")) == null || d2.addEventListener("click", () => {
|
|
6935
6977
|
var e6, r3;
|
|
6936
|
-
if (!
|
|
6978
|
+
if (!Dv) return;
|
|
6937
6979
|
let a3 = document.getElementById("bi-ask-claude-planet-btn");
|
|
6938
|
-
!a3 || a3.disabled || (a3.disabled = true, a3.textContent = "\u23F3 Sending\u2026", a3.classList.add("sending"),
|
|
6980
|
+
!a3 || a3.disabled || (a3.disabled = true, a3.textContent = "\u23F3 Sending\u2026", a3.classList.add("sending"), Dv({ type: "planet", data: { planet_name: t2.name, wheel: n2, longitude: t2.longitude, sign: b2, position: "".concat(Math.floor(t2.longitude % 30), "\xB0 ").concat(b2), house: (e6 = t2.house) == null ? null : e6, retrograde: (r3 = t2.retrograde) == null ? false : r3, mode: i2, cross_aspects: v2.map((e7) => ({ type: e7.type, partner: n2 === "inner" ? e7.planet2 : e7.planet1, orb: e7.orb, applying: e7.applying, orb_label: i2 === "transit" ? e7.applying ? "applying" : "separating" : e7.orb <= 1 ? "exact" : e7.orb <= 3 ? "tight" : "wide" })) } }).then(() => {
|
|
6939
6981
|
a3.textContent = "\u2713 Sent", a3.classList.remove("sending"), a3.classList.add("sent"), setTimeout(() => {
|
|
6940
6982
|
a3.textContent = "\u2728 Interpret this", a3.classList.remove("sent"), a3.disabled = false;
|
|
6941
6983
|
}, 2500);
|
|
@@ -6944,15 +6986,15 @@ function wv(e5, t2, n2, r2, i2, a2, o2) {
|
|
|
6944
6986
|
}));
|
|
6945
6987
|
});
|
|
6946
6988
|
}
|
|
6947
|
-
function
|
|
6989
|
+
function qv(e5, t2, n2, r2, i2) {
|
|
6948
6990
|
var a2, o2, s2, c2, l2, u2, d2, f2, p2;
|
|
6949
|
-
let m2 =
|
|
6991
|
+
let m2 = Wv(), h2 = (a2 = rv[t2.planet1.toLowerCase()]) == null ? "\u2605" : a2, g2 = (o2 = rv[t2.planet2.toLowerCase()]) == null ? "\u2605" : o2, _2 = (s2 = ov[(c2 = (l2 = t2.type) == null ? void 0 : l2.toLowerCase()) == null ? "" : c2]) == null ? t2.type : s2, v2 = sv((u2 = (d2 = t2.type) == null ? void 0 : d2.toLowerCase()) == null ? "" : u2), y2 = r2 ? "".concat(r2, "'s ").concat(Z(t2.planet1)) : Z(t2.planet1), b2 = n2 === "transit" ? "Tr. ".concat(Z(t2.planet2)) : i2 ? "".concat(i2, "'s ").concat(Z(t2.planet2)) : Z(t2.planet2), x2 = n2 === "transit" ? t2.applying ? "\u2197 Applying" : "\u2198 Separating" : t2.orb <= 1 ? "Exact" : t2.orb <= 3 ? "Tight" : "Wide", S2 = Dv ? '<button class="ask-claude-btn" id="bi-ask-claude-asp-btn">\u2728 Interpret this</button>' : "";
|
|
6950
6992
|
m2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(v2, '">').concat(Q(String(_2)), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:5px;flex-wrap:wrap;">\n <strong>').concat(Q(h2), " ").concat(Q(y2), '</strong>\n <span style="color:').concat(v2, '">').concat(Q(String(_2)), "</span>\n <strong>").concat(Q(g2), " ").concat(Q(b2), '</strong>\n </div>\n <div class="info-subtitle">').concat(t2.orb.toFixed(1), "\xB0 orb \xB7 ").concat(Q(x2), '</div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div style="display:flex;gap:6px;margin-bottom:10px;">\n <span class="wheel-badge inner">Inner \xB7 ').concat(Q(y2), '</span>\n <span class="wheel-badge outer">Outer \xB7 ').concat(Q(b2), "</span>\n </div>\n ").concat(S2, "\n "), m2.classList.add("open"), m2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (f2 = document.getElementById("bi-info-close-btn")) == null || f2.addEventListener("click", () => {
|
|
6951
|
-
|
|
6993
|
+
Gv(), Qv();
|
|
6952
6994
|
}), (p2 = document.getElementById("bi-ask-claude-asp-btn")) == null || p2.addEventListener("click", () => {
|
|
6953
|
-
if (!
|
|
6995
|
+
if (!Dv) return;
|
|
6954
6996
|
let e6 = document.getElementById("bi-ask-claude-asp-btn");
|
|
6955
|
-
!e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"),
|
|
6997
|
+
!e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"), Dv({ type: "cross_aspect", data: { planet1: t2.planet1, wheel1: t2.wheel1, planet2: t2.planet2, wheel2: t2.wheel2, aspect_type: t2.type, orb: t2.orb, applying: t2.applying, mode: n2 } }).then(() => {
|
|
6956
6998
|
e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
|
|
6957
6999
|
e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
|
|
6958
7000
|
}, 2500);
|
|
@@ -6961,82 +7003,82 @@ function Tv(e5, t2, n2, r2, i2) {
|
|
|
6961
7003
|
}));
|
|
6962
7004
|
});
|
|
6963
7005
|
}
|
|
6964
|
-
function
|
|
6965
|
-
|
|
7006
|
+
function Jv(e5, t2) {
|
|
7007
|
+
Iv.forEach(({ vis: n2, color: r2, symbolEls: i2 }, a2) => {
|
|
6966
7008
|
let o2 = a2.split("|");
|
|
6967
7009
|
(t2 === "inner" ? o2[0] === e5 : o2[2] === e5) ? (n2.style.stroke = r2, n2.style.strokeOpacity = "0.92", n2.style.strokeWidth = "1.8", n2.removeAttribute("stroke-dasharray"), n2.setAttribute("filter", "url(#aspect-glow)"), i2.forEach((e6) => e6.style.opacity = "1")) : (n2.style.strokeOpacity = "0.05", n2.style.strokeWidth = "0.5", n2.removeAttribute("filter"), i2.forEach((e6) => e6.style.opacity = "0.15"));
|
|
6968
|
-
}),
|
|
7010
|
+
}), Xv(e5, t2);
|
|
6969
7011
|
}
|
|
6970
|
-
function
|
|
6971
|
-
|
|
7012
|
+
function Yv(e5, t2) {
|
|
7013
|
+
Iv.forEach(({ vis: n2, color: r2, symbolEls: i2 }, a2) => {
|
|
6972
7014
|
a2 === e5 ? (n2.style.stroke = t2, n2.style.strokeOpacity = "0.95", n2.style.strokeWidth = "2", n2.removeAttribute("stroke-dasharray"), n2.setAttribute("filter", "url(#aspect-glow)"), i2.forEach((e6) => e6.style.opacity = "1")) : (n2.style.strokeOpacity = "0.05", n2.style.strokeWidth = "0.5", n2.removeAttribute("filter"), i2.forEach((e6) => e6.style.opacity = "0.15"));
|
|
6973
7015
|
});
|
|
6974
7016
|
}
|
|
6975
|
-
function
|
|
7017
|
+
function Xv(e5, t2) {
|
|
6976
7018
|
let n2 = e5.toLowerCase(), r2 = /* @__PURE__ */ new Set(), i2 = /* @__PURE__ */ new Set();
|
|
6977
|
-
|
|
7019
|
+
Iv.forEach((e6, a3) => {
|
|
6978
7020
|
var o2, s2;
|
|
6979
7021
|
let c2 = a3.split("|"), l2 = ((o2 = c2[0]) == null ? "" : o2).toLowerCase(), u2 = ((s2 = c2[2]) == null ? "" : s2).toLowerCase();
|
|
6980
7022
|
t2 === "inner" && l2 === n2 && i2.add(u2), t2 === "outer" && u2 === n2 && r2.add(l2);
|
|
6981
7023
|
});
|
|
6982
7024
|
let a2 = (e6, t3) => t3 === "inner" && r2.has(e6) || t3 === "outer" && i2.has(e6);
|
|
6983
|
-
|
|
7025
|
+
Fv == null || Fv.querySelectorAll(".planet-hit").forEach((e6) => {
|
|
6984
7026
|
var r3;
|
|
6985
7027
|
let i3 = e6.dataset.wheel, o2 = (r3 = e6.dataset.planet) == null ? "" : r3, s2 = o2 === n2 && i3 === t2, c2 = !s2 && a2(o2, i3);
|
|
6986
7028
|
e6.classList.toggle("dim", !s2 && !c2);
|
|
6987
|
-
}),
|
|
7029
|
+
}), Fv == null || Fv.querySelectorAll(".planet-glyph-group").forEach((e6) => {
|
|
6988
7030
|
var r3;
|
|
6989
7031
|
let i3 = e6.dataset.wheel, o2 = (r3 = e6.dataset.planet) == null ? "" : r3;
|
|
6990
7032
|
o2 === n2 && i3 === t2 ? e6.style.opacity = "1" : a2(o2, i3) ? e6.style.opacity = "0.55" : e6.style.opacity = "0.12";
|
|
6991
7033
|
});
|
|
6992
7034
|
}
|
|
6993
|
-
function
|
|
6994
|
-
|
|
7035
|
+
function Zv() {
|
|
7036
|
+
Iv.forEach(({ vis: e5, symbolEls: t2 }) => {
|
|
6995
7037
|
e5.style.strokeOpacity = "0.05", e5.style.strokeWidth = "0.5", e5.removeAttribute("filter"), t2.forEach((e6) => e6.style.opacity = "0.15");
|
|
6996
|
-
}),
|
|
7038
|
+
}), Fv == null || Fv.querySelectorAll(".planet-glyph-group").forEach((e5) => {
|
|
6997
7039
|
e5.style.opacity = "0.3";
|
|
6998
|
-
}),
|
|
7040
|
+
}), Fv == null || Fv.querySelectorAll(".planet-hit").forEach((e5) => {
|
|
6999
7041
|
e5.classList.add("dim");
|
|
7000
7042
|
});
|
|
7001
7043
|
}
|
|
7002
|
-
function
|
|
7003
|
-
|
|
7004
|
-
let i2 =
|
|
7044
|
+
function Qv() {
|
|
7045
|
+
Iv.forEach(({ vis: e5, color: t2, orb: n2, symbolEls: r2 }) => {
|
|
7046
|
+
let i2 = cv(n2 == null ? 4 : n2);
|
|
7005
7047
|
e5.style.stroke = t2, e5.style.strokeOpacity = i2.opacity, e5.style.strokeWidth = i2.width, e5.removeAttribute("filter"), i2.dash ? e5.setAttribute("stroke-dasharray", i2.dash) : e5.removeAttribute("stroke-dasharray"), r2.forEach((e6) => e6.style.opacity = "");
|
|
7006
|
-
}),
|
|
7048
|
+
}), Fv == null || Fv.querySelectorAll(".planet-glyph-group").forEach((e5) => {
|
|
7007
7049
|
e5.style.opacity = "";
|
|
7008
|
-
}),
|
|
7050
|
+
}), Fv == null || Fv.querySelectorAll(".planet-hit").forEach((e5) => e5.classList.remove("dim")), sy();
|
|
7009
7051
|
}
|
|
7010
|
-
function
|
|
7011
|
-
|
|
7052
|
+
function $v(e5) {
|
|
7053
|
+
Iv.forEach(({ vis: t2, symbolEls: n2 }) => {
|
|
7012
7054
|
t2.style.display = e5 ? "" : "none", n2.forEach((t3) => t3.style.display = e5 ? "" : "none");
|
|
7013
|
-
}),
|
|
7055
|
+
}), Fv == null || Fv.querySelectorAll(".aspect-hit").forEach((t2) => {
|
|
7014
7056
|
t2.style.display = e5 ? "" : "none";
|
|
7015
7057
|
});
|
|
7016
7058
|
}
|
|
7017
|
-
function
|
|
7059
|
+
function ey(e5, t2, n2) {
|
|
7018
7060
|
return "".concat(e5, "|inner|").concat(t2, "|outer|").concat(n2);
|
|
7019
7061
|
}
|
|
7020
|
-
function
|
|
7062
|
+
function ty(e5, t2, n2, r2, i2) {
|
|
7021
7063
|
return t2 === "inner" && r2 === "outer" ? "".concat(e5, "|inner|").concat(n2, "|outer|").concat(i2) : r2 === "inner" && t2 === "outer" ? "".concat(n2, "|inner|").concat(e5, "|outer|").concat(i2) : [e5, n2].sort().join("|") + "|".concat(i2);
|
|
7022
7064
|
}
|
|
7023
|
-
function
|
|
7065
|
+
function ny(e5, t2) {
|
|
7024
7066
|
return e5.filter((e6) => {
|
|
7025
7067
|
var n2;
|
|
7026
7068
|
return ((n2 = e6.type) == null ? "" : n2).toLowerCase() === t2;
|
|
7027
7069
|
});
|
|
7028
7070
|
}
|
|
7029
|
-
function
|
|
7071
|
+
function ry(e5) {
|
|
7030
7072
|
let t2 = [];
|
|
7031
7073
|
if (!e5.length) return t2;
|
|
7032
|
-
let n2 =
|
|
7074
|
+
let n2 = ny(e5, "trine"), r2 = ny(e5, "square"), i2 = ny(e5, "opposition"), a2 = ny(e5, "conjunction"), o2 = /* @__PURE__ */ new Set();
|
|
7033
7075
|
for (let e6 = 0; e6 < n2.length; e6++) for (let r3 = e6 + 1; r3 < n2.length; r3++) {
|
|
7034
7076
|
let i3 = n2[e6], a3 = n2[r3];
|
|
7035
7077
|
if (i3.planet1 !== a3.planet1) continue;
|
|
7036
7078
|
let s3 = i3.planet1, c3 = i3.planet2, l2 = a3.planet2;
|
|
7037
7079
|
if (c3 === l2) continue;
|
|
7038
7080
|
let u2 = [s3, c3, l2].sort().join("|");
|
|
7039
|
-
o2.has(u2) || (o2.add(u2), t2.push({ name: "Cross Trine", description: "".concat(Z(s3), " trines ").concat(Z(c3), " & ").concat(Z(l2)), planets: [{ name: s3, wheel: "inner" }, { name: c3, wheel: "outer" }, { name: l2, wheel: "outer" }], aspectKeys: [
|
|
7081
|
+
o2.has(u2) || (o2.add(u2), t2.push({ name: "Cross Trine", description: "".concat(Z(s3), " trines ").concat(Z(c3), " & ").concat(Z(l2)), planets: [{ name: s3, wheel: "inner" }, { name: c3, wheel: "outer" }, { name: l2, wheel: "outer" }], aspectKeys: [ey(s3, c3, "trine"), ey(s3, l2, "trine")] }));
|
|
7040
7082
|
}
|
|
7041
7083
|
let s2 = /* @__PURE__ */ new Set();
|
|
7042
7084
|
for (let e6 of i2) {
|
|
@@ -7051,7 +7093,7 @@ function Fv(e5) {
|
|
|
7051
7093
|
if (s2.has(c3)) continue;
|
|
7052
7094
|
let l2;
|
|
7053
7095
|
if (l2 = o3 === "outer" ? e7 : r2.find((e8) => e8.planet1 === a3 && e8.planet2 === i3), l2) {
|
|
7054
|
-
s2.add(c3), t2.push({ name: "Cross T-Square", description: "Apex: ".concat(Z(a3), " (").concat(o3, ")"), planets: [{ name: n3, wheel: "inner" }, { name: i3, wheel: "outer" }, { name: a3, wheel: o3 }], aspectKeys: [
|
|
7096
|
+
s2.add(c3), t2.push({ name: "Cross T-Square", description: "Apex: ".concat(Z(a3), " (").concat(o3, ")"), planets: [{ name: n3, wheel: "inner" }, { name: i3, wheel: "outer" }, { name: a3, wheel: o3 }], aspectKeys: [ey(n3, i3, "opposition"), ty(n3, "inner", a3, o3, "square"), ty(a3, o3, i3, "outer", "square")] });
|
|
7055
7097
|
break;
|
|
7056
7098
|
}
|
|
7057
7099
|
}
|
|
@@ -7067,26 +7109,26 @@ function Fv(e5) {
|
|
|
7067
7109
|
for (let [r3, i3] of e6) {
|
|
7068
7110
|
if (i3.length < 2) continue;
|
|
7069
7111
|
let e7 = "".concat(r3, "|").concat([...i3].sort().join("|"));
|
|
7070
|
-
n3.has(e7) || (n3.add(e7), t2.push({ name: "Cross Stellium", description: "".concat(Z(r3), " conjunct ").concat(i3.map(Z).join(" & "), " (cross-wheel)"), planets: [{ name: r3, wheel: "inner" }, ...i3.map((e8) => ({ name: e8, wheel: "outer" }))], aspectKeys: i3.map((e8) =>
|
|
7112
|
+
n3.has(e7) || (n3.add(e7), t2.push({ name: "Cross Stellium", description: "".concat(Z(r3), " conjunct ").concat(i3.map(Z).join(" & "), " (cross-wheel)"), planets: [{ name: r3, wheel: "inner" }, ...i3.map((e8) => ({ name: e8, wheel: "outer" }))], aspectKeys: i3.map((e8) => ey(r3, e8, "conjunction")) }));
|
|
7071
7113
|
}
|
|
7072
7114
|
}
|
|
7073
7115
|
return t2;
|
|
7074
7116
|
}
|
|
7075
|
-
var
|
|
7076
|
-
function
|
|
7117
|
+
var iy = { "Cross Trine": "rgba( 82,168,224, 0.14)", "Cross T-Square": "rgba(224,138, 82, 0.14)", "Cross Stellium": "rgba(154,127,212, 0.14)" }, ay = { "Cross Trine": "rgba( 82,168,224, 0.70)", "Cross T-Square": "rgba(224,138, 82, 0.70)", "Cross Stellium": "rgba(154,127,212, 0.70)" };
|
|
7118
|
+
function oy(e5, t2, n2, r2) {
|
|
7077
7119
|
var i2, a2;
|
|
7078
|
-
if (!
|
|
7120
|
+
if (!Fv) return null;
|
|
7079
7121
|
let o2 = /* @__PURE__ */ new Map();
|
|
7080
7122
|
for (let e6 of t2) o2.set(e6.name.toLowerCase(), e6.longitude);
|
|
7081
7123
|
let s2 = /* @__PURE__ */ new Map();
|
|
7082
7124
|
for (let e6 of n2) s2.set(e6.name.toLowerCase(), e6.longitude);
|
|
7083
7125
|
let c2 = [];
|
|
7084
7126
|
for (let { name: t3, wheel: n3 } of e5.planets) {
|
|
7085
|
-
let e6 = n3 === "inner" ? o2 : s2, i3 = n3 === "inner" ?
|
|
7127
|
+
let e6 = n3 === "inner" ? o2 : s2, i3 = n3 === "inner" ? Q_ : tv, a3 = e6.get(t3.toLowerCase());
|
|
7086
7128
|
a3 != null && c2.push(Y(a3, i3, r2));
|
|
7087
7129
|
}
|
|
7088
7130
|
if (c2.length < 2) return null;
|
|
7089
|
-
let l2 = (i2 =
|
|
7131
|
+
let l2 = (i2 = iy[e5.name]) == null ? "rgba(128,128,128,0.12)" : i2, u2 = (a2 = ay[e5.name]) == null ? "rgba(128,128,128,0.60)" : a2, d2;
|
|
7090
7132
|
if (c2.length === 2) {
|
|
7091
7133
|
let e6 = X("line");
|
|
7092
7134
|
e6.setAttribute("x1", c2[0].x.toFixed(1)), e6.setAttribute("y1", c2[0].y.toFixed(1)), e6.setAttribute("x2", c2[1].x.toFixed(1)), e6.setAttribute("y2", c2[1].y.toFixed(1)), e6.setAttribute("stroke", u2), e6.setAttribute("stroke-width", "2"), e6.setAttribute("fill", "none"), d2 = e6;
|
|
@@ -7095,39 +7137,39 @@ function Rv(e5, t2, n2, r2) {
|
|
|
7095
7137
|
t3.setAttribute("points", e6.map((e7) => "".concat(e7.x.toFixed(1), ",").concat(e7.y.toFixed(1))).join(" ")), t3.setAttribute("fill", l2), t3.setAttribute("stroke", u2), t3.setAttribute("stroke-width", "1.5"), t3.setAttribute("stroke-linejoin", "round"), d2 = t3;
|
|
7096
7138
|
}
|
|
7097
7139
|
d2.setAttribute("pointer-events", "none"), d2.setAttribute("class", "pattern-overlay");
|
|
7098
|
-
let f2 =
|
|
7099
|
-
return f2 ?
|
|
7140
|
+
let f2 = Fv.querySelector(".aspect-hit");
|
|
7141
|
+
return f2 ? Fv.insertBefore(d2, f2) : Fv.appendChild(d2), d2;
|
|
7100
7142
|
}
|
|
7101
|
-
function
|
|
7102
|
-
|
|
7143
|
+
function sy() {
|
|
7144
|
+
Fv == null || Fv.querySelectorAll(".pattern-overlay").forEach((e5) => e5.remove());
|
|
7103
7145
|
}
|
|
7104
|
-
function
|
|
7146
|
+
function cy(e5) {
|
|
7105
7147
|
let t2 = new Set(e5.aspectKeys);
|
|
7106
|
-
|
|
7148
|
+
Iv.forEach(({ vis: e6, color: n3, symbolEls: r2 }, i2) => {
|
|
7107
7149
|
t2.has(i2) ? (e6.style.stroke = n3, e6.style.strokeOpacity = "0.92", e6.style.strokeWidth = "1.8", e6.removeAttribute("stroke-dasharray"), e6.setAttribute("filter", "url(#aspect-glow)"), r2.forEach((e7) => e7.style.opacity = "1")) : (e6.style.strokeOpacity = "0.05", e6.style.strokeWidth = "0.5", e6.removeAttribute("filter"), r2.forEach((e7) => e7.style.opacity = "0.15"));
|
|
7108
7150
|
});
|
|
7109
7151
|
let n2 = new Set(e5.planets.map((e6) => "".concat(e6.name.toLowerCase(), "|").concat(e6.wheel)));
|
|
7110
|
-
|
|
7152
|
+
Fv == null || Fv.querySelectorAll(".planet-glyph-group").forEach((e6) => {
|
|
7111
7153
|
var t3, r2;
|
|
7112
7154
|
let i2 = "".concat((t3 = e6.dataset.planet) == null ? "" : t3, "|").concat((r2 = e6.dataset.wheel) == null ? "" : r2);
|
|
7113
7155
|
e6.style.opacity = n2.has(i2) ? "1" : "0.12";
|
|
7114
|
-
}),
|
|
7156
|
+
}), Fv == null || Fv.querySelectorAll(".planet-hit").forEach((e6) => {
|
|
7115
7157
|
var t3, r2;
|
|
7116
7158
|
let i2 = "".concat((t3 = e6.dataset.planet) == null ? "" : t3, "|").concat((r2 = e6.dataset.wheel) == null ? "" : r2);
|
|
7117
7159
|
e6.classList.toggle("dim", !n2.has(i2));
|
|
7118
7160
|
});
|
|
7119
7161
|
}
|
|
7120
|
-
function
|
|
7162
|
+
function ly(e5, t2, n2, r2, i2, a2) {
|
|
7121
7163
|
var o2, s2, c2, l2, u2, d2, f2, p2, m2, h2, g2, _2;
|
|
7122
|
-
|
|
7164
|
+
Dv = i2 == null ? null : i2;
|
|
7123
7165
|
let v2 = (o2 = t2.mode) == null ? "synastry" : o2, y2 = (s2 = t2._birth_params_inner) == null ? void 0 : s2.location, b2 = (c2 = t2._birth_params_outer) == null ? void 0 : c2.location, x2 = e5.querySelector("#pan-zoom-controls");
|
|
7124
|
-
e5.innerHTML = "", x2 && e5.appendChild(x2),
|
|
7125
|
-
let S2 =
|
|
7126
|
-
te2.length === 0 && S2.length > 0 && ee2.length > 0 && (te2 =
|
|
7127
|
-
let w2 = (d2 = (f2 = (p2 = C2[0]) == null ? void 0 : p2.cusp_lon) == null ? t2.ascendant : f2) == null ? 0 : d2, T2 =
|
|
7128
|
-
E2.setAttribute("viewBox", "0 0 620 620"), E2.setAttribute("width", "100%"), E2.setAttribute("height", "100%"), E2.style.display = "block", e5.appendChild(E2),
|
|
7166
|
+
e5.innerHTML = "", x2 && e5.appendChild(x2), Iv.clear(), Gv();
|
|
7167
|
+
let S2 = Sv(t2.inner), ee2 = Sv(t2.outer), C2 = (l2 = t2.inner_houses) == null ? [] : l2, te2 = (u2 = t2.cross_aspects) == null ? [] : u2;
|
|
7168
|
+
te2.length === 0 && S2.length > 0 && ee2.length > 0 && (te2 = wv(S2, ee2));
|
|
7169
|
+
let w2 = (d2 = (f2 = (p2 = C2[0]) == null ? void 0 : p2.cusp_lon) == null ? t2.ascendant : f2) == null ? 0 : d2, T2 = pv(), E2 = X("svg");
|
|
7170
|
+
E2.setAttribute("viewBox", "0 0 620 620"), E2.setAttribute("width", "100%"), E2.setAttribute("height", "100%"), E2.style.display = "block", e5.appendChild(E2), Fv = E2;
|
|
7129
7171
|
let ne2 = X("defs");
|
|
7130
|
-
ne2.innerHTML = '\n <filter id="aspect-glow" x="-50%" y="-50%" width="200%" height="200%">\n <feGaussianBlur in="SourceGraphic" stdDeviation="2.5" result="blur" />\n <feComposite in="SourceGraphic" in2="blur" operator="over" />\n </filter>\n ', E2.appendChild(ne2),
|
|
7172
|
+
ne2.innerHTML = '\n <filter id="aspect-glow" x="-50%" y="-50%" width="200%" height="200%">\n <feGaussianBlur in="SourceGraphic" stdDeviation="2.5" result="blur" />\n <feComposite in="SourceGraphic" in2="blur" operator="over" />\n </filter>\n ', E2.appendChild(ne2), o_(E2, "pan-zoom-controls");
|
|
7131
7173
|
let re2 = X("g");
|
|
7132
7174
|
re2.setAttribute("class", "chart-layer"), re2.style.setProperty("--layer-index", "1"), E2.appendChild(re2);
|
|
7133
7175
|
let D2 = X("g");
|
|
@@ -7142,110 +7184,110 @@ function Vv(e5, t2, n2, r2, i2, a2) {
|
|
|
7142
7184
|
E2.appendChild(se2);
|
|
7143
7185
|
let ce2 = X("circle");
|
|
7144
7186
|
ce2.setAttribute("cx", "310"), ce2.setAttribute("cy", "310"), ce2.setAttribute("r", "304"), ce2.style.fill = "var(--bg, #faf9f5)";
|
|
7145
|
-
let le2 =
|
|
7187
|
+
let le2 = p_(T2), ue2 = (e6, t3) => {
|
|
7146
7188
|
e6.setAttribute("stroke", le2.ring.stroke), e6.setAttribute("stroke-opacity", String(le2.ring.opacity)), e6.setAttribute("stroke-width", t3);
|
|
7147
7189
|
};
|
|
7148
7190
|
ue2(ce2, "0.5"), ce2.setAttribute("pointer-events", "none"), re2.appendChild(ce2);
|
|
7149
7191
|
let de2 = X("circle");
|
|
7150
|
-
de2.setAttribute("cx", "310"), de2.setAttribute("cy", "310"), de2.setAttribute("r", String(
|
|
7192
|
+
de2.setAttribute("cx", "310"), de2.setAttribute("cy", "310"), de2.setAttribute("r", String($_)), de2.setAttribute("fill", "var(--outer-ring, #fdf5e4)"), ue2(de2, "0.8"), de2.setAttribute("pointer-events", "none"), D2.appendChild(de2);
|
|
7151
7193
|
let fe2 = X("circle");
|
|
7152
|
-
fe2.setAttribute("cx", "310"), fe2.setAttribute("cy", "310"), fe2.setAttribute("r", String(
|
|
7153
|
-
for (let e6 = 0; e6 < 12; e6++)
|
|
7194
|
+
fe2.setAttribute("cx", "310"), fe2.setAttribute("cy", "310"), fe2.setAttribute("r", String(ev)), fe2.style.fill = "var(--bg, #faf9f5)", ue2(fe2, "0.8"), fe2.setAttribute("pointer-events", "none"), D2.appendChild(fe2);
|
|
7195
|
+
for (let e6 = 0; e6 < 12; e6++) gv(D2, w2, e6, ev, $_, uy(d_(e6, T2)), 0.16);
|
|
7154
7196
|
for (let e6 = 0; e6 < 12; e6++) {
|
|
7155
|
-
let t3 = e6 * 30, { x: n3, y: r3 } = Y(t3,
|
|
7197
|
+
let t3 = e6 * 30, { x: n3, y: r3 } = Y(t3, ev, w2), { x: i3, y: a3 } = Y(t3, $_, w2), o3 = X("line");
|
|
7156
7198
|
o3.setAttribute("x1", n3.toFixed(1)), o3.setAttribute("y1", r3.toFixed(1)), o3.setAttribute("x2", i3.toFixed(1)), o3.setAttribute("y2", a3.toFixed(1)), ue2(o3, "0.5"), o3.setAttribute("pointer-events", "none"), D2.appendChild(o3);
|
|
7157
7199
|
let { x: s3, y: c3 } = Y(t3 + 15, 536 / 2, w2), l3 = X("text");
|
|
7158
|
-
l3.setAttribute("x", s3.toFixed(1)), l3.setAttribute("y", c3.toFixed(1)), l3.setAttribute("text-anchor", "middle"), l3.setAttribute("dominant-baseline", "central"), l3.setAttribute("font-size", "12"), l3.setAttribute("fill",
|
|
7200
|
+
l3.setAttribute("x", s3.toFixed(1)), l3.setAttribute("y", c3.toFixed(1)), l3.setAttribute("text-anchor", "middle"), l3.setAttribute("dominant-baseline", "central"), l3.setAttribute("font-size", "12"), l3.setAttribute("fill", uy(d_(e6, T2))), l3.setAttribute("pointer-events", "none"), l3.style.fontFamily = s_, l3.textContent = iv[e6], D2.appendChild(l3);
|
|
7159
7201
|
for (let e7 = 1; e7 < 30; e7++) {
|
|
7160
|
-
let n4 = t3 + e7, r4 = e7 % 5 == 0, i4 = r4 ?
|
|
7202
|
+
let n4 = t3 + e7, r4 = e7 % 5 == 0, i4 = r4 ? $_ - 8 : $_ - 3.5, { x: a4, y: o4 } = Y(n4, $_, w2), { x: s4, y: c4 } = Y(n4, i4, w2), l4 = X("line");
|
|
7161
7203
|
l4.setAttribute("x1", a4.toFixed(1)), l4.setAttribute("y1", o4.toFixed(1)), l4.setAttribute("x2", s4.toFixed(1)), l4.setAttribute("y2", c4.toFixed(1));
|
|
7162
7204
|
let u4 = r4 ? le2.tickMajor : le2.tickMinor;
|
|
7163
7205
|
l4.setAttribute("stroke", u4.stroke), l4.setAttribute("stroke-opacity", String(u4.opacity)), l4.setAttribute("stroke-width", r4 ? "0.8" : "0.5"), l4.setAttribute("pointer-events", "none"), D2.appendChild(l4);
|
|
7164
7206
|
}
|
|
7165
|
-
let { x: u3, y: d3 } = Y(t3,
|
|
7166
|
-
x3.setAttribute("d", ["M ".concat(u3.toFixed(1), " ").concat(d3.toFixed(1)), "A ".concat(
|
|
7167
|
-
let C3 = "".concat(
|
|
7168
|
-
|
|
7169
|
-
|
|
7207
|
+
let { x: u3, y: d3 } = Y(t3, $_, w2), { x: f3, y: p3 } = Y(t3 + 30, $_, w2), { x: m3, y: h3 } = Y(t3, ev, w2), { x: g3, y: _3 } = Y(t3 + 30, ev, w2), x3 = X("path");
|
|
7208
|
+
x3.setAttribute("d", ["M ".concat(u3.toFixed(1), " ").concat(d3.toFixed(1)), "A ".concat($_, " ").concat($_, " 0 0 0 ").concat(f3.toFixed(1), " ").concat(p3.toFixed(1)), "L ".concat(g3.toFixed(1), " ").concat(_3.toFixed(1)), "A ".concat(ev, " ").concat(ev, " 0 0 1 ").concat(m3.toFixed(1), " ").concat(h3.toFixed(1)), "Z"].join(" ")), x3.setAttribute("fill", "transparent"), x3.setAttribute("class", "hit-region sign-hit"), x3.style.pointerEvents = "all", x3.style.cursor = "pointer";
|
|
7209
|
+
let C3 = "".concat(iv[e6], " ").concat(av[e6]), te3 = "".concat(Z(dv[e6]), " \xB7 ").concat(Z(fv[e6]));
|
|
7210
|
+
dy(x3, "".concat(av[e6], " \u2014 click for sign info")), x3.addEventListener("mouseenter", (e7) => Av(e7.clientX, e7.clientY, C3, te3, "Click for interpretation")), x3.addEventListener("mousemove", (e7) => Av(e7.clientX, e7.clientY, C3, te3, "Click for interpretation")), x3.addEventListener("mouseleave", jv), x3.addEventListener("click", (t4) => {
|
|
7211
|
+
jv(), Tv == null || Tv("".concat(C3)), Uv(t4, e6, v2, y2, b2, S2, ee2);
|
|
7170
7212
|
}), se2.appendChild(x3);
|
|
7171
7213
|
}
|
|
7172
7214
|
let pe2 = X("circle");
|
|
7173
|
-
pe2.setAttribute("cx", "310"), pe2.setAttribute("cy", "310"), pe2.setAttribute("r", String(
|
|
7215
|
+
pe2.setAttribute("cx", "310"), pe2.setAttribute("cy", "310"), pe2.setAttribute("r", String(q_)), pe2.setAttribute("fill", "var(--inner-ring, #f2ede6)"), ue2(pe2, "0.6"), pe2.setAttribute("pointer-events", "none"), D2.appendChild(pe2);
|
|
7174
7216
|
let me2 = X("circle");
|
|
7175
|
-
me2.setAttribute("cx", "310"), me2.setAttribute("cy", "310"), me2.setAttribute("r", String(
|
|
7176
|
-
for (let e6 = 0; e6 < 12; e6++)
|
|
7217
|
+
me2.setAttribute("cx", "310"), me2.setAttribute("cy", "310"), me2.setAttribute("r", String(J_)), me2.style.fill = "var(--bg, #faf9f5)", ue2(me2, "0.6"), me2.setAttribute("pointer-events", "none"), D2.appendChild(me2);
|
|
7218
|
+
for (let e6 = 0; e6 < 12; e6++) gv(D2, w2, e6, J_, q_, d_(e6, T2), u_(T2).zodiacFillOpacity);
|
|
7177
7219
|
for (let e6 = 0; e6 < 12; e6++) {
|
|
7178
|
-
let t3 = e6 * 30, { x: n3, y: r3 } = Y(t3,
|
|
7220
|
+
let t3 = e6 * 30, { x: n3, y: r3 } = Y(t3, J_, w2), { x: i3, y: a3 } = Y(t3, q_, w2), o3 = X("line");
|
|
7179
7221
|
o3.setAttribute("x1", n3.toFixed(1)), o3.setAttribute("y1", r3.toFixed(1)), o3.setAttribute("x2", i3.toFixed(1)), o3.setAttribute("y2", a3.toFixed(1)), ue2(o3, "0.5"), o3.setAttribute("pointer-events", "none"), D2.appendChild(o3);
|
|
7180
7222
|
let { x: s3, y: c3 } = Y(t3 + 15, 444 / 2, w2), l3 = X("text");
|
|
7181
|
-
l3.setAttribute("x", s3.toFixed(1)), l3.setAttribute("y", c3.toFixed(1)), l3.setAttribute("text-anchor", "middle"), l3.setAttribute("dominant-baseline", "central"), l3.setAttribute("font-size", "13"), l3.setAttribute("fill",
|
|
7223
|
+
l3.setAttribute("x", s3.toFixed(1)), l3.setAttribute("y", c3.toFixed(1)), l3.setAttribute("text-anchor", "middle"), l3.setAttribute("dominant-baseline", "central"), l3.setAttribute("font-size", "13"), l3.setAttribute("fill", d_(e6, T2)), l3.setAttribute("pointer-events", "none"), l3.style.fontFamily = s_, l3.textContent = iv[e6], D2.appendChild(l3);
|
|
7182
7224
|
for (let e7 = 1; e7 < 30; e7++) {
|
|
7183
|
-
let n4 = t3 + e7, r4 = e7 % 5 == 0, i4 = r4 ?
|
|
7225
|
+
let n4 = t3 + e7, r4 = e7 % 5 == 0, i4 = r4 ? q_ - 7 : q_ - 3, { x: a4, y: o4 } = Y(n4, q_, w2), { x: s4, y: c4 } = Y(n4, i4, w2), l4 = X("line");
|
|
7184
7226
|
l4.setAttribute("x1", a4.toFixed(1)), l4.setAttribute("y1", o4.toFixed(1)), l4.setAttribute("x2", s4.toFixed(1)), l4.setAttribute("y2", c4.toFixed(1));
|
|
7185
7227
|
let u3 = r4 ? le2.tickMajor : le2.tickMinor;
|
|
7186
7228
|
l4.setAttribute("stroke", u3.stroke), l4.setAttribute("stroke-opacity", String(u3.opacity)), l4.setAttribute("stroke-width", r4 ? "0.8" : "0.5"), l4.setAttribute("pointer-events", "none"), D2.appendChild(l4);
|
|
7187
7229
|
}
|
|
7188
7230
|
}
|
|
7189
7231
|
let he2 = X("g");
|
|
7190
|
-
he2.setAttribute("pointer-events", "none"), he2.setAttribute("opacity", T2 ? "0.18" : "0.10"), he2.setAttribute("transform", "translate(".concat(
|
|
7232
|
+
he2.setAttribute("pointer-events", "none"), he2.setAttribute("opacity", T2 ? "0.18" : "0.10"), he2.setAttribute("transform", "translate(".concat(G_, ", ").concat(K_, ")"));
|
|
7191
7233
|
let ge2 = X("circle");
|
|
7192
7234
|
ge2.setAttribute("cx", "0"), ge2.setAttribute("cy", "0"), ge2.setAttribute("r", "46"), ge2.setAttribute("fill", "none"), ge2.setAttribute("stroke", "var(--gold, #c8a84b)"), ge2.setAttribute("stroke-width", "2"), he2.appendChild(ge2);
|
|
7193
7235
|
let _e2 = X("circle");
|
|
7194
7236
|
_e2.setAttribute("cx", "0"), _e2.setAttribute("cy", "0"), _e2.setAttribute("r", "36"), _e2.setAttribute("fill", "none"), _e2.setAttribute("stroke", "var(--gold, #c8a84b)"), _e2.setAttribute("stroke-width", "0.7"), he2.appendChild(_e2);
|
|
7195
7237
|
let ve2 = X("text");
|
|
7196
|
-
ve2.setAttribute("x", "0"), ve2.setAttribute("y", "1"), ve2.setAttribute("text-anchor", "middle"), ve2.setAttribute("dominant-baseline", "central"), ve2.setAttribute("font-size", "18"), ve2.setAttribute("font-weight", "600"), ve2.setAttribute("letter-spacing", "3"), ve2.setAttribute("fill", "var(--gold, #c8a84b)"), ve2.style.fontFamily = "
|
|
7238
|
+
ve2.setAttribute("x", "0"), ve2.setAttribute("y", "1"), ve2.setAttribute("text-anchor", "middle"), ve2.setAttribute("dominant-baseline", "central"), ve2.setAttribute("font-size", "18"), ve2.setAttribute("font-weight", "600"), ve2.setAttribute("letter-spacing", "3"), ve2.setAttribute("fill", "var(--gold, #c8a84b)"), ve2.style.fontFamily = "var(--font-ui)", ve2.textContent = "OE", he2.appendChild(ve2);
|
|
7197
7239
|
for (let e6 of [0, 90, 180, 270]) {
|
|
7198
7240
|
let t3 = e6 * Math.PI / 180, n3 = Math.cos(t3) * 38, r3 = Math.sin(t3) * 38, i3 = Math.cos(t3) * 46, a3 = Math.sin(t3) * 46, o3 = X("line");
|
|
7199
7241
|
o3.setAttribute("x1", n3.toFixed(1)), o3.setAttribute("y1", r3.toFixed(1)), o3.setAttribute("x2", i3.toFixed(1)), o3.setAttribute("y2", a3.toFixed(1)), o3.setAttribute("stroke", "var(--gold, #c8a84b)"), o3.setAttribute("stroke-width", "1.5"), he2.appendChild(o3);
|
|
7200
7242
|
}
|
|
7201
7243
|
re2.appendChild(he2);
|
|
7202
7244
|
let ye2 = X("circle");
|
|
7203
|
-
ye2.setAttribute("cx", "310"), ye2.setAttribute("cy", "310"), ye2.setAttribute("r", String(
|
|
7245
|
+
ye2.setAttribute("cx", "310"), ye2.setAttribute("cy", "310"), ye2.setAttribute("r", String(J_)), ye2.style.fill = "var(--surface, #f2f1ea)", ye2.setAttribute("pointer-events", "none"), ie2.appendChild(ye2);
|
|
7204
7246
|
let be2 = X("circle");
|
|
7205
|
-
if (be2.setAttribute("cx", "310"), be2.setAttribute("cy", "310"), be2.setAttribute("r", String(
|
|
7247
|
+
if (be2.setAttribute("cx", "310"), be2.setAttribute("cy", "310"), be2.setAttribute("r", String(Z_)), be2.style.fill = le2.center, ue2(be2, "0.8"), be2.setAttribute("pointer-events", "none"), ie2.appendChild(be2), C2.length > 0) for (let e6 = 0; e6 < C2.length; e6++) {
|
|
7206
7248
|
let t3 = C2[e6], n3 = C2[(e6 + 1) % C2.length], r3 = [1, 4, 7, 10].includes(t3.number), i3 = X("path");
|
|
7207
|
-
i3.setAttribute("d",
|
|
7208
|
-
let { x: a3, y: o3 } = Y(t3.cusp_lon,
|
|
7249
|
+
i3.setAttribute("d", hv(t3.cusp_lon, n3.cusp_lon, Z_, J_, w2)), i3.setAttribute("fill", d_(Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30), T2)), i3.setAttribute("fill-opacity", String(u_(T2).houseFillOpacity)), i3.setAttribute("pointer-events", "none"), ie2.appendChild(i3);
|
|
7250
|
+
let { x: a3, y: o3 } = Y(t3.cusp_lon, Z_, w2), { x: s3, y: c3 } = Y(t3.cusp_lon, J_, w2), l3 = X("line");
|
|
7209
7251
|
l3.setAttribute("x1", a3.toFixed(1)), l3.setAttribute("y1", o3.toFixed(1)), l3.setAttribute("x2", s3.toFixed(1)), l3.setAttribute("y2", c3.toFixed(1));
|
|
7210
7252
|
let u3 = r3 ? le2.cuspAngular : le2.cuspIntermediate;
|
|
7211
7253
|
l3.setAttribute("stroke", u3.stroke), l3.setAttribute("stroke-opacity", String(u3.opacity)), l3.setAttribute("stroke-width", r3 ? "1.8" : "0.9"), r3 || l3.setAttribute("stroke-dasharray", le2.cuspDash(0.9)), l3.setAttribute("pointer-events", "none"), ie2.appendChild(l3);
|
|
7212
|
-
let d3 = (n3.cusp_lon - t3.cusp_lon + 360) % 360, { x: f3, y: p3 } = Y(t3.cusp_lon + d3 / 2,
|
|
7213
|
-
m3.setAttribute("x", f3.toFixed(1)), m3.setAttribute("y", p3.toFixed(1)), m3.setAttribute("text-anchor", "middle"), m3.setAttribute("dominant-baseline", "central"), m3.setAttribute("font-size", "12"), m3.setAttribute("fill",
|
|
7254
|
+
let d3 = (n3.cusp_lon - t3.cusp_lon + 360) % 360, { x: f3, y: p3 } = Y(t3.cusp_lon + d3 / 2, X_, w2), m3 = X("text");
|
|
7255
|
+
m3.setAttribute("x", f3.toFixed(1)), m3.setAttribute("y", p3.toFixed(1)), m3.setAttribute("text-anchor", "middle"), m3.setAttribute("dominant-baseline", "central"), m3.setAttribute("font-size", "12"), m3.setAttribute("fill", u_(T2).foreground), m3.setAttribute("opacity", "0.9"), m3.setAttribute("font-weight", r3 ? "700" : "600"), m3.setAttribute("pointer-events", "none"), m3.textContent = String(t3.number), ie2.appendChild(m3);
|
|
7214
7256
|
let h3 = X("circle");
|
|
7215
7257
|
h3.setAttribute("cx", f3.toFixed(1)), h3.setAttribute("cy", p3.toFixed(1)), h3.setAttribute("r", "14"), h3.setAttribute("fill", "transparent"), h3.setAttribute("class", "hit-region house-hit"), h3.style.pointerEvents = "all", h3.style.cursor = "pointer";
|
|
7216
|
-
let g3 = "House ".concat(t3.number), _3 = "".concat(
|
|
7217
|
-
|
|
7218
|
-
|
|
7258
|
+
let g3 = "House ".concat(t3.number), _3 = "".concat(Bv[t3.number] ? Bv[t3.number] + " \xB7 " : "").concat(vv(t3.cusp_lon));
|
|
7259
|
+
dy(h3, "".concat(g3, " \u2014 click for interpretation")), h3.addEventListener("mouseenter", (e7) => Av(e7.clientX, e7.clientY, g3, _3, "Click for interpretation")), h3.addEventListener("mousemove", (e7) => Av(e7.clientX, e7.clientY, g3, _3, "Click for interpretation")), h3.addEventListener("mouseleave", jv), h3.addEventListener("click", (e7) => {
|
|
7260
|
+
jv(), Tv == null || Tv("".concat(g3, " \xB7 ").concat(vv(t3.cusp_lon))), Hv(e7, t3, n3, v2, y2, b2, S2, ee2);
|
|
7219
7261
|
}), se2.appendChild(h3);
|
|
7220
7262
|
}
|
|
7221
7263
|
let O2 = C2.find((e6) => e6.number === 1), xe2 = C2.find((e6) => e6.number === 4), k2 = C2.find((e6) => e6.number === 7), Se2 = C2.find((e6) => e6.number === 10), Ce2 = [{ lon: (m2 = O2 == null ? void 0 : O2.cusp_lon) == null ? w2 : m2, label: "ASC" }, { lon: (h2 = k2 == null ? void 0 : k2.cusp_lon) == null ? (w2 + 180) % 360 : h2, label: "DSC" }, { lon: (g2 = Se2 == null ? void 0 : Se2.cusp_lon) == null ? (w2 + 270) % 360 : g2, label: "MC" }, { lon: (_2 = xe2 == null ? void 0 : xe2.cusp_lon) == null ? (w2 + 90) % 360 : _2, label: "IC" }];
|
|
7222
7264
|
for (let e6 of Ce2) {
|
|
7223
7265
|
var we2;
|
|
7224
|
-
let t3 =
|
|
7225
|
-
i3.setAttribute("x", n3.toFixed(1)), i3.setAttribute("y", r3.toFixed(1)), i3.setAttribute("text-anchor", "middle"), i3.setAttribute("dominant-baseline", "central"), i3.setAttribute("font-size", "12"), i3.setAttribute("font-weight", "700"), i3.setAttribute("fill",
|
|
7266
|
+
let t3 = Rv[e6.label], { x: n3, y: r3 } = Y(e6.lon, $_ - 8, w2), i3 = X("text");
|
|
7267
|
+
i3.setAttribute("x", n3.toFixed(1)), i3.setAttribute("y", r3.toFixed(1)), i3.setAttribute("text-anchor", "middle"), i3.setAttribute("dominant-baseline", "central"), i3.setAttribute("font-size", "12"), i3.setAttribute("font-weight", "700"), i3.setAttribute("fill", u_(T2).foreground), i3.setAttribute("pointer-events", "none"), i3.style.transition = "opacity 150ms ease", i3.textContent = e6.label, ie2.appendChild(i3);
|
|
7226
7268
|
let a3 = X("circle");
|
|
7227
|
-
a3.setAttribute("cx", n3.toFixed(1)), a3.setAttribute("cy", r3.toFixed(1)), a3.setAttribute("r", "14"), a3.setAttribute("fill", "transparent"), a3.setAttribute("class", "hit-region angle-hit"), a3.style.pointerEvents = "all", a3.style.cursor = "pointer",
|
|
7228
|
-
let o3 =
|
|
7269
|
+
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", dy(a3, "".concat((we2 = t3 == null ? void 0 : t3.title) == null ? e6.label : we2, " \u2014 click for interpretation"));
|
|
7270
|
+
let o3 = vv(e6.lon), s3 = "".concat(t3 != null && t3.keyword ? t3.keyword + " \xB7 " : "").concat(o3);
|
|
7229
7271
|
a3.addEventListener("mouseenter", (n4) => {
|
|
7230
7272
|
var r4;
|
|
7231
|
-
|
|
7273
|
+
Av(n4.clientX, n4.clientY, "".concat(e6.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4), s3, "Click for interpretation"), i3.style.opacity = "0.6";
|
|
7232
7274
|
}), a3.addEventListener("mouseleave", () => {
|
|
7233
|
-
|
|
7275
|
+
jv(), i3.style.opacity = "";
|
|
7234
7276
|
}), a3.addEventListener("click", (n4) => {
|
|
7235
7277
|
var r4;
|
|
7236
|
-
|
|
7278
|
+
jv(), Zv(), Tv == null || Tv("".concat(e6.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4, " \xB7 ").concat(o3)), zv(n4, e6.label, e6.lon, v2, y2);
|
|
7237
7279
|
}), se2.appendChild(a3);
|
|
7238
7280
|
}
|
|
7239
7281
|
for (let e6 of te2) {
|
|
7240
7282
|
var Te2, Ee2, De2, Oe2, ke2, Ae2, je2, Me2, Ne2, Pe2, Fe2, Ie2;
|
|
7241
7283
|
let t3 = S2.find((t4) => t4.name.toLowerCase() === e6.planet1.toLowerCase()), n3 = ee2.find((t4) => t4.name.toLowerCase() === e6.planet2.toLowerCase());
|
|
7242
7284
|
if (!t3 || !n3) continue;
|
|
7243
|
-
let i3 =
|
|
7285
|
+
let i3 = sv((Te2 = (Ee2 = e6.type) == null ? void 0 : Ee2.toLowerCase()) == null ? "" : Te2), a3 = cv(e6.orb), { x: o3, y: s3 } = Y(t3.longitude, Q_, w2), { x: c3, y: l3 } = Y(n3.longitude, ev, w2), u3 = X("line");
|
|
7244
7286
|
u3.setAttribute("x1", o3.toFixed(1)), u3.setAttribute("y1", s3.toFixed(1)), u3.setAttribute("x2", c3.toFixed(1)), u3.setAttribute("y2", l3.toFixed(1)), a3.dash && u3.setAttribute("stroke-dasharray", a3.dash), u3.setAttribute("stroke-linecap", "round"), u3.setAttribute("pointer-events", "none"), u3.style.stroke = i3, u3.style.strokeOpacity = a3.opacity, u3.style.strokeWidth = a3.width, ae2.appendChild(u3);
|
|
7245
7287
|
let d3 = o3 + (c3 - o3) * 0.35, f3 = s3 + (l3 - s3) * 0.35, p3 = Math.hypot(c3 - o3, l3 - s3), m3 = [];
|
|
7246
7288
|
if (p3 > 40) {
|
|
7247
7289
|
var Le2, A2, Re2;
|
|
7248
|
-
let t4 = (Le2 =
|
|
7290
|
+
let t4 = (Le2 = ov[(A2 = (Re2 = e6.type) == null ? void 0 : Re2.toLowerCase()) == null ? "" : A2]) == null ? "" : Le2;
|
|
7249
7291
|
if (t4) {
|
|
7250
7292
|
let e7 = X("circle");
|
|
7251
7293
|
e7.setAttribute("cx", d3.toFixed(1)), e7.setAttribute("cy", f3.toFixed(1)), e7.setAttribute("r", "9"), e7.setAttribute("fill", le2.center), e7.setAttribute("stroke", i3), e7.setAttribute("stroke-opacity", "0.9"), e7.setAttribute("stroke-width", "1"), e7.setAttribute("pointer-events", "none"), e7.classList.add("aspect-symbol-group"), ae2.appendChild(e7), m3.push(e7);
|
|
@@ -7254,123 +7296,123 @@ function Vv(e5, t2, n2, r2, i2, a2) {
|
|
|
7254
7296
|
}
|
|
7255
7297
|
}
|
|
7256
7298
|
let h3 = X("line");
|
|
7257
|
-
h3.setAttribute("x1", o3.toFixed(1)), h3.setAttribute("y1", s3.toFixed(1)), h3.setAttribute("x2", c3.toFixed(1)), h3.setAttribute("y2", l3.toFixed(1)), h3.setAttribute("stroke", "transparent"), h3.setAttribute("stroke-width", "20"), h3.setAttribute("fill", "none"), h3.setAttribute("class", "hit-region aspect-hit"), h3.style.pointerEvents = "all",
|
|
7258
|
-
let g3 = (De2 =
|
|
7299
|
+
h3.setAttribute("x1", o3.toFixed(1)), h3.setAttribute("y1", s3.toFixed(1)), h3.setAttribute("x2", c3.toFixed(1)), h3.setAttribute("y2", l3.toFixed(1)), h3.setAttribute("stroke", "transparent"), h3.setAttribute("stroke-width", "20"), h3.setAttribute("fill", "none"), h3.setAttribute("class", "hit-region aspect-hit"), h3.style.pointerEvents = "all", dy(h3, "Aspect: ".concat(e6.type || "Aspect", " between inner ").concat(e6.planet1, " and outer ").concat(e6.planet2));
|
|
7300
|
+
let g3 = (De2 = rv[t3.name.toLowerCase()]) == null ? t3.name : De2, _3 = (Oe2 = rv[n3.name.toLowerCase()]) == null ? n3.name : Oe2, x3 = (ke2 = (Ae2 = ov[(je2 = (Me2 = e6.type) == null ? void 0 : Me2.toLowerCase()) == null ? "" : je2]) == null ? e6.type : Ae2) == null ? "" : ke2, C3 = v2 === "transit" ? e6.applying ? " (applying)" : " (separating)" : e6.orb <= 1 ? " (exact)" : e6.orb <= 3 ? " (tight)" : " (wide)", te3 = (Ne2 = Nv[(Pe2 = (Fe2 = e6.type) == null ? void 0 : Fe2.toLowerCase()) == null ? "" : Pe2]) == null ? "" : Ne2, T3 = "".concat(te3 ? te3 + " \xB7 " : "").concat(g3, " ").concat(x3, " ").concat(_3, " \xB7 ").concat(e6.orb.toFixed(1), "\xB0 orb").concat(C3);
|
|
7259
7301
|
h3.addEventListener("mouseenter", (t4) => {
|
|
7260
7302
|
var n4;
|
|
7261
|
-
return
|
|
7303
|
+
return Av(t4.clientX, t4.clientY, Z((n4 = e6.type) == null ? "Cross-Aspect" : n4), T3, "Click for interpretation");
|
|
7262
7304
|
}), h3.addEventListener("mousemove", (t4) => {
|
|
7263
7305
|
var n4;
|
|
7264
|
-
return
|
|
7265
|
-
}), h3.addEventListener("mouseleave",
|
|
7306
|
+
return Av(t4.clientX, t4.clientY, Z((n4 = e6.type) == null ? "Cross-Aspect" : n4), T3, "Click for interpretation");
|
|
7307
|
+
}), h3.addEventListener("mouseleave", jv), h3.addEventListener("click", (t4) => {
|
|
7266
7308
|
var n4, a4, o4, s4, c4, l4;
|
|
7267
|
-
|
|
7268
|
-
let u4 = (n4 =
|
|
7269
|
-
|
|
7270
|
-
}),
|
|
7309
|
+
jv(), Yv(Lv(e6), i3), qv(t4, e6, v2, y2, b2);
|
|
7310
|
+
let u4 = (n4 = rv[e6.planet1.toLowerCase()]) == null ? e6.planet1 : n4, d4 = (a4 = rv[e6.planet2.toLowerCase()]) == null ? e6.planet2 : a4, f4 = (o4 = (s4 = ov[(c4 = (l4 = e6.type) == null ? void 0 : l4.toLowerCase()) == null ? "" : c4]) == null ? e6.type : s4) == null ? "" : o4, p4 = y2 ? "".concat(y2, "'s ").concat(u4) : "".concat(u4), m4 = v2 === "transit" ? "Tr. ".concat(d4) : b2 ? "".concat(b2, "'s ").concat(d4) : d4;
|
|
7311
|
+
Tv == null || Tv("".concat(p4, " ").concat(f4, " ").concat(m4, " \xB7 ").concat(e6.orb.toFixed(1), "\xB0")), r2(e6);
|
|
7312
|
+
}), Iv.set(Lv(e6), { vis: u3, color: i3, aspectType: ((Ie2 = e6.type) == null ? void 0 : Ie2.toLowerCase()) || "unknown", orb: e6.orb, symbolEls: m3 }), se2.appendChild(h3);
|
|
7271
7313
|
}
|
|
7272
|
-
let ze2 =
|
|
7314
|
+
let ze2 = y_(ee2.map((e6) => ({ name: e6.name.toLowerCase(), longitude: e6.longitude })), 7), Be2 = X("g");
|
|
7273
7315
|
Be2.setAttribute("class", "outer-planet-group"), oe2.appendChild(Be2);
|
|
7274
7316
|
for (let e6 of ee2) {
|
|
7275
7317
|
var Ve2, He2, Ue2;
|
|
7276
|
-
let t3 = (Ve2 =
|
|
7318
|
+
let t3 = (Ve2 = rv[e6.name.toLowerCase()]) == null ? "\u2605" : Ve2, r3 = e6.name.toLowerCase(), i3 = (He2 = ze2.get(r3)) == null ? e6.longitude : He2, { x: a3, y: o3 } = Y(i3, tv, w2), s3 = X("g");
|
|
7277
7319
|
s3.setAttribute("class", "planet-glyph-group"), s3.dataset.planet = r3, s3.dataset.wheel = "outer", s3.style.transition = "opacity 200ms ease", Be2.appendChild(s3);
|
|
7278
7320
|
let { x: c3, y: l3 } = Y(e6.longitude, 251, w2), u3 = X("circle");
|
|
7279
|
-
if (u3.setAttribute("cx", c3.toFixed(1)), u3.setAttribute("cy", l3.toFixed(1)), u3.setAttribute("r", "2.5"), u3.setAttribute("fill", "var(--outer-tick, #c8860e)"), u3.setAttribute("opacity", "0.75"), u3.setAttribute("pointer-events", "none"), s3.appendChild(u3),
|
|
7321
|
+
if (u3.setAttribute("cx", c3.toFixed(1)), u3.setAttribute("cy", l3.toFixed(1)), u3.setAttribute("r", "2.5"), u3.setAttribute("fill", "var(--outer-tick, #c8860e)"), u3.setAttribute("opacity", "0.75"), u3.setAttribute("pointer-events", "none"), s3.appendChild(u3), C_(e6.longitude, i3) > 2) {
|
|
7280
7322
|
let e7 = X("line");
|
|
7281
7323
|
e7.setAttribute("x1", c3.toFixed(1)), e7.setAttribute("y1", l3.toFixed(1)), e7.setAttribute("x2", a3.toFixed(1)), e7.setAttribute("y2", o3.toFixed(1)), e7.setAttribute("stroke", "var(--outer-tick, #c8860e)"), e7.setAttribute("stroke-width", "0.7"), e7.setAttribute("stroke-opacity", "0.35"), e7.setAttribute("stroke-linecap", "round"), e7.setAttribute("pointer-events", "none"), s3.appendChild(e7);
|
|
7282
7324
|
}
|
|
7283
7325
|
let d3 = X("text");
|
|
7284
|
-
d3.setAttribute("x", a3.toFixed(1)), d3.setAttribute("y", o3.toFixed(1)), d3.setAttribute("text-anchor", "middle"), d3.setAttribute("dominant-baseline", "central"), d3.setAttribute("font-size", "18"), d3.setAttribute("font-weight", "600"), d3.setAttribute("pointer-events", "none"), d3.style.fill =
|
|
7285
|
-
let f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), { x: p3, y: m3 } = Y(i3,
|
|
7326
|
+
d3.setAttribute("x", a3.toFixed(1)), d3.setAttribute("y", o3.toFixed(1)), d3.setAttribute("text-anchor", "middle"), d3.setAttribute("dominant-baseline", "central"), d3.setAttribute("font-size", "18"), d3.setAttribute("font-weight", "600"), d3.setAttribute("pointer-events", "none"), d3.style.fill = u_(T2).transit, d3.style.fontFamily = s_, d3.textContent = t3, s3.appendChild(d3);
|
|
7327
|
+
let f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), { x: p3, y: m3 } = Y(i3, tv - 14, w2), h3 = X("text");
|
|
7286
7328
|
if (h3.setAttribute("x", p3.toFixed(1)), h3.setAttribute("y", m3.toFixed(1)), h3.setAttribute("text-anchor", "middle"), h3.setAttribute("dominant-baseline", "central"), h3.setAttribute("font-size", "8.5"), h3.setAttribute("fill", "#b08030"), h3.setAttribute("pointer-events", "none"), h3.textContent = "".concat(f3, "\xB0"), s3.appendChild(h3), e6.retrograde) {
|
|
7287
7329
|
let { x: e7, y: t4 } = Y(i3, 277, w2), n3 = X("text");
|
|
7288
7330
|
n3.setAttribute("x", e7.toFixed(1)), n3.setAttribute("y", t4.toFixed(1)), n3.setAttribute("text-anchor", "middle"), n3.setAttribute("dominant-baseline", "central"), n3.setAttribute("font-size", "8"), n3.setAttribute("fill", "#e05252"), n3.setAttribute("pointer-events", "none"), n3.textContent = "\u211E", s3.appendChild(n3);
|
|
7289
7331
|
}
|
|
7290
|
-
let g3 =
|
|
7332
|
+
let g3 = uv(e6.name, e6.longitude);
|
|
7291
7333
|
if (g3) {
|
|
7292
7334
|
let { x: e7, y: t4 } = Y(i3, 276, w2), n3 = X("circle");
|
|
7293
7335
|
n3.setAttribute("cx", e7.toFixed(1)), n3.setAttribute("cy", t4.toFixed(1)), n3.setAttribute("r", "2.5"), n3.setAttribute("fill", g3.positive ? "oklch(72% 0.12 80)" : "oklch(55% 0.18 20 / 0.6)"), n3.setAttribute("pointer-events", "none"), s3.appendChild(n3);
|
|
7294
7336
|
}
|
|
7295
7337
|
let _3 = X("circle");
|
|
7296
|
-
_3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(
|
|
7297
|
-
let x3 = "".concat(v2 === "transit" ? "Tr. " : b2 ? "".concat(b2, "'s ") : "").concat(t3, " ").concat(Z(e6.name)), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Ue2 =
|
|
7298
|
-
_3.addEventListener("mouseenter", (e7) =>
|
|
7338
|
+
_3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(nv)), _3.setAttribute("fill", "transparent"), _3.setAttribute("class", "hit-region planet-hit"), _3.dataset.planet = r3, _3.dataset.wheel = "outer", _3.style.pointerEvents = "all", dy(_3, "Outer Planet: ".concat(e6.name));
|
|
7339
|
+
let x3 = "".concat(v2 === "transit" ? "Tr. " : b2 ? "".concat(b2, "'s ") : "").concat(t3, " ").concat(Z(e6.name)), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Ue2 = Mv[e6.name.toLowerCase()]) == null ? "" : Ue2, C3 = "".concat(ee3 ? ee3 + " \xB7 " : "").concat(vv(e6.longitude)).concat(e6.house ? " \xB7 H".concat(e6.house) : "").concat(e6.retrograde ? " \u211E" : "").concat(S3);
|
|
7340
|
+
_3.addEventListener("mouseenter", (e7) => Av(e7.clientX, e7.clientY, x3, C3, "Click to explore")), _3.addEventListener("mousemove", (e7) => Av(e7.clientX, e7.clientY, x3, C3, "Click to explore")), _3.addEventListener("mouseleave", jv), _3.addEventListener("click", (t4) => {
|
|
7299
7341
|
var r4, i4;
|
|
7300
|
-
|
|
7301
|
-
let a4 = (r4 =
|
|
7302
|
-
|
|
7342
|
+
jv(), Jv(e6.name, "outer"), Kv(t4, e6, "outer", te2, v2, y2, b2);
|
|
7343
|
+
let a4 = (r4 = rv[e6.name.toLowerCase()]) == null ? "\u2605" : r4, o4 = Math.floor((e6.longitude % 360 + 360) % 360 / 30), s4 = v2 === "transit" ? "Tr. " : b2 ? "".concat(b2, "'s ") : "";
|
|
7344
|
+
Tv == null || Tv("".concat(s4).concat(a4, " ").concat(Z(e6.name), " \xB7 ").concat((i4 = av[o4]) == null ? "" : i4)), n2(e6, "outer", te2);
|
|
7303
7345
|
}), s3.appendChild(_3);
|
|
7304
7346
|
}
|
|
7305
|
-
let We2 =
|
|
7347
|
+
let We2 = y_(S2.map((e6) => ({ name: e6.name.toLowerCase(), longitude: e6.longitude })), 8), Ge2 = X("g");
|
|
7306
7348
|
Ge2.setAttribute("class", "inner-planet-group"), oe2.appendChild(Ge2);
|
|
7307
7349
|
for (let e6 of S2) {
|
|
7308
7350
|
var Ke2, qe2, Je2;
|
|
7309
|
-
let t3 = (Ke2 =
|
|
7351
|
+
let t3 = (Ke2 = rv[e6.name.toLowerCase()]) == null ? "\u2605" : Ke2, r3 = e6.name.toLowerCase(), i3 = (qe2 = We2.get(r3)) == null ? e6.longitude : qe2, { x: a3, y: o3 } = Y(i3, Y_, w2), s3 = X("g");
|
|
7310
7352
|
s3.setAttribute("class", "planet-glyph-group"), s3.dataset.planet = r3, s3.dataset.wheel = "inner", s3.style.transition = "opacity 200ms ease", Ge2.appendChild(s3);
|
|
7311
|
-
let { x: c3, y: l3 } = Y(e6.longitude,
|
|
7312
|
-
if (u3.setAttribute("cx", c3.toFixed(1)), u3.setAttribute("cy", l3.toFixed(1)), u3.setAttribute("r", "2.5"), u3.setAttribute("fill", "var(--inner-tick, #7060b8)"), u3.setAttribute("opacity", "0.65"), u3.setAttribute("pointer-events", "none"), s3.appendChild(u3),
|
|
7353
|
+
let { x: c3, y: l3 } = Y(e6.longitude, J_ - 5, w2), u3 = X("circle");
|
|
7354
|
+
if (u3.setAttribute("cx", c3.toFixed(1)), u3.setAttribute("cy", l3.toFixed(1)), u3.setAttribute("r", "2.5"), u3.setAttribute("fill", "var(--inner-tick, #7060b8)"), u3.setAttribute("opacity", "0.65"), u3.setAttribute("pointer-events", "none"), s3.appendChild(u3), C_(e6.longitude, i3) > 2) {
|
|
7313
7355
|
let e7 = X("line");
|
|
7314
7356
|
e7.setAttribute("x1", c3.toFixed(1)), e7.setAttribute("y1", l3.toFixed(1)), e7.setAttribute("x2", a3.toFixed(1)), e7.setAttribute("y2", o3.toFixed(1)), e7.setAttribute("stroke", "var(--inner-tick, #7060b8)"), e7.setAttribute("stroke-width", "0.7"), e7.setAttribute("stroke-opacity", "0.35"), e7.setAttribute("stroke-linecap", "round"), e7.setAttribute("pointer-events", "none"), s3.appendChild(e7);
|
|
7315
7357
|
}
|
|
7316
7358
|
let d3 = X("text");
|
|
7317
|
-
d3.setAttribute("x", a3.toFixed(1)), d3.setAttribute("y", o3.toFixed(1)), d3.setAttribute("text-anchor", "middle"), d3.setAttribute("dominant-baseline", "central"), d3.setAttribute("font-size", "20"), d3.setAttribute("font-weight", "600"), d3.setAttribute("pointer-events", "none"), d3.style.fill =
|
|
7318
|
-
let f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), { x: p3, y: m3 } = Y(i3,
|
|
7319
|
-
if (h3.setAttribute("x", p3.toFixed(1)), h3.setAttribute("y", m3.toFixed(1)), h3.setAttribute("text-anchor", "middle"), h3.setAttribute("dominant-baseline", "central"), h3.setAttribute("font-size", "8.5"), h3.setAttribute("fill",
|
|
7359
|
+
d3.setAttribute("x", a3.toFixed(1)), d3.setAttribute("y", o3.toFixed(1)), d3.setAttribute("text-anchor", "middle"), d3.setAttribute("dominant-baseline", "central"), d3.setAttribute("font-size", "20"), d3.setAttribute("font-weight", "600"), d3.setAttribute("pointer-events", "none"), d3.style.fill = u_(T2).foreground, d3.style.fontFamily = s_, d3.textContent = t3, s3.appendChild(d3);
|
|
7360
|
+
let f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), { x: p3, y: m3 } = Y(i3, Y_ - 17, w2), h3 = X("text");
|
|
7361
|
+
if (h3.setAttribute("x", p3.toFixed(1)), h3.setAttribute("y", m3.toFixed(1)), h3.setAttribute("text-anchor", "middle"), h3.setAttribute("dominant-baseline", "central"), h3.setAttribute("font-size", "8.5"), h3.setAttribute("fill", u_(T2).foreground), h3.setAttribute("opacity", "0.8"), h3.setAttribute("pointer-events", "none"), h3.textContent = "".concat(f3, "\xB0"), s3.appendChild(h3), e6.retrograde) {
|
|
7320
7362
|
let { x: e7, y: t4 } = Y(i3, 204, w2), n3 = X("text");
|
|
7321
7363
|
n3.setAttribute("x", e7.toFixed(1)), n3.setAttribute("y", t4.toFixed(1)), n3.setAttribute("text-anchor", "middle"), n3.setAttribute("dominant-baseline", "central"), n3.setAttribute("font-size", "8"), n3.setAttribute("fill", "#e05252"), n3.setAttribute("pointer-events", "none"), n3.textContent = "\u211E", s3.appendChild(n3);
|
|
7322
7364
|
}
|
|
7323
|
-
let g3 =
|
|
7365
|
+
let g3 = uv(e6.name, e6.longitude);
|
|
7324
7366
|
if (g3) {
|
|
7325
7367
|
let { x: e7, y: t4 } = Y(i3, 202, w2), n3 = X("circle");
|
|
7326
7368
|
n3.setAttribute("cx", e7.toFixed(1)), n3.setAttribute("cy", t4.toFixed(1)), n3.setAttribute("r", "2.5"), n3.setAttribute("fill", g3.positive ? "oklch(72% 0.12 80)" : "oklch(55% 0.18 20 / 0.6)"), n3.setAttribute("pointer-events", "none"), s3.appendChild(n3);
|
|
7327
7369
|
}
|
|
7328
7370
|
let _3 = X("circle");
|
|
7329
|
-
_3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(
|
|
7330
|
-
let x3 = y2 ? "".concat(y2, "'s ").concat(t3, " ").concat(Z(e6.name)) : "".concat(t3, " ").concat(Z(e6.name), " (natal)"), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Je2 =
|
|
7331
|
-
_3.addEventListener("mouseenter", (e7) =>
|
|
7371
|
+
_3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(nv)), _3.setAttribute("fill", "transparent"), _3.setAttribute("class", "hit-region planet-hit"), _3.dataset.planet = r3, _3.dataset.wheel = "inner", _3.style.pointerEvents = "all", dy(_3, "Inner Planet: ".concat(e6.name));
|
|
7372
|
+
let x3 = y2 ? "".concat(y2, "'s ").concat(t3, " ").concat(Z(e6.name)) : "".concat(t3, " ").concat(Z(e6.name), " (natal)"), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Je2 = Mv[e6.name.toLowerCase()]) == null ? "" : Je2, C3 = "".concat(ee3 ? ee3 + " \xB7 " : "").concat(vv(e6.longitude)).concat(e6.house ? " \xB7 H".concat(e6.house) : "").concat(e6.retrograde ? " \u211E" : "").concat(S3);
|
|
7373
|
+
_3.addEventListener("mouseenter", (e7) => Av(e7.clientX, e7.clientY, x3, C3, "Click to explore")), _3.addEventListener("mousemove", (e7) => Av(e7.clientX, e7.clientY, x3, C3, "Click to explore")), _3.addEventListener("mouseleave", jv), _3.addEventListener("click", (t4) => {
|
|
7332
7374
|
var r4, i4, a4;
|
|
7333
|
-
|
|
7334
|
-
let o4 = (r4 =
|
|
7335
|
-
|
|
7375
|
+
jv(), Jv(e6.name, "inner"), Kv(t4, e6, "inner", te2, v2, y2, b2);
|
|
7376
|
+
let o4 = (r4 = rv[e6.name.toLowerCase()]) == null ? "\u2605" : r4, s4 = Math.floor((e6.longitude % 360 + 360) % 360 / 30), c4 = y2 ? "".concat(y2, "'s ").concat(o4, " ").concat(Z(e6.name), " \xB7 ").concat((i4 = av[s4]) == null ? "" : i4) : "".concat(o4, " ").concat(Z(e6.name), " \xB7 ").concat((a4 = av[s4]) == null ? "" : a4, " (natal)");
|
|
7377
|
+
Tv == null || Tv(c4), n2(e6, "inner", te2);
|
|
7336
7378
|
}), s3.appendChild(_3);
|
|
7337
7379
|
}
|
|
7338
7380
|
let Ye2 = "__biWheelClickOutside__", Xe2 = document[Ye2];
|
|
7339
7381
|
Xe2 && document.removeEventListener("click", Xe2, false);
|
|
7340
7382
|
let Ze2 = (e6) => {
|
|
7341
7383
|
let t3 = e6.target;
|
|
7342
|
-
!t3.closest(".hit-region") && !t3.closest("#bi-info-drawer") && (
|
|
7384
|
+
!t3.closest(".hit-region") && !t3.closest("#bi-info-drawer") && (Qv(), Gv());
|
|
7343
7385
|
};
|
|
7344
7386
|
document[Ye2] = Ze2, document.addEventListener("click", Ze2, false);
|
|
7345
7387
|
let Qe2 = (e6) => {
|
|
7346
|
-
e6.key === "Escape" && (
|
|
7388
|
+
e6.key === "Escape" && (Qv(), Gv());
|
|
7347
7389
|
};
|
|
7348
7390
|
document.removeEventListener("keydown", window.__biWheelEscHandler, false), window.__biWheelEscHandler = Qe2, document.addEventListener("keydown", Qe2, false);
|
|
7349
7391
|
}
|
|
7350
|
-
function
|
|
7392
|
+
function uy(e5) {
|
|
7351
7393
|
let t2 = parseInt(e5.slice(1, 3), 16), n2 = parseInt(e5.slice(3, 5), 16), r2 = parseInt(e5.slice(5, 7), 16), i2 = 0.6;
|
|
7352
7394
|
return "rgb(".concat(Math.round(t2 * (1 - i2) + 208 * i2), ",").concat(Math.round(n2 * (1 - i2) + 144 * i2), ",").concat(Math.round(r2 * (1 - i2) + 32 * i2), ")");
|
|
7353
7395
|
}
|
|
7354
|
-
function
|
|
7396
|
+
function dy(e5, t2) {
|
|
7355
7397
|
e5 && (e5.setAttribute("tabindex", "0"), e5.setAttribute("role", "button"), e5.setAttribute("aria-label", t2), e5.addEventListener("keydown", (t3) => {
|
|
7356
7398
|
let n2 = t3;
|
|
7357
7399
|
(n2.key === "Enter" || n2.key === " ") && (n2.preventDefault(), e5.dispatchEvent(new MouseEvent("click", { bubbles: true, cancelable: true })));
|
|
7358
7400
|
}));
|
|
7359
7401
|
}
|
|
7360
|
-
function
|
|
7402
|
+
function fy(e5) {
|
|
7361
7403
|
return e5.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
7362
7404
|
}
|
|
7363
|
-
function
|
|
7405
|
+
function py(e5) {
|
|
7364
7406
|
return e5.replace(/_/g, " ").replace(/\b\w/g, (e6) => e6.toUpperCase());
|
|
7365
7407
|
}
|
|
7366
|
-
function
|
|
7367
|
-
let t2 = e5.filter((e6) => e6.items.length > 0).map((e6) => '<div class="legend-group"><span class="legend-group-title">'.concat(
|
|
7408
|
+
function my(e5) {
|
|
7409
|
+
let t2 = e5.filter((e6) => e6.items.length > 0).map((e6) => '<div class="legend-group"><span class="legend-group-title">'.concat(fy(e6.title), "</span>") + e6.items.map((e7) => '<span class="legend-item"><span class="legend-glyph">'.concat(fy(e7.glyph), "</span>").concat(fy(e7.label), "</span>")).join("") + "</div>").join("");
|
|
7368
7410
|
return t2 ? '<details class="glyph-legend"><summary><span class="legend-spark">\u2726</span> Legend</summary><div class="legend-body">'.concat(t2, "</div></details>") : "";
|
|
7369
7411
|
}
|
|
7370
|
-
var
|
|
7371
|
-
function
|
|
7412
|
+
var hy = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?(?:\.\d+)?$/;
|
|
7413
|
+
function gy(e5, t2) {
|
|
7372
7414
|
if (!e5) return null;
|
|
7373
|
-
let n2 =
|
|
7415
|
+
let n2 = hy.exec(e5.trim());
|
|
7374
7416
|
if (n2) {
|
|
7375
7417
|
let [, e6, t3, r3, i2, a2, o2] = n2, s2 = new Date(Date.UTC(+e6, t3 - 1, +r3, +i2, +a2, o2 ? +o2 : 0));
|
|
7376
7418
|
return isNaN(s2.getTime()) ? null : { date: s2, timeZone: "UTC" };
|
|
@@ -7378,17 +7420,17 @@ function Jv(e5, t2) {
|
|
|
7378
7420
|
let r2 = new Date(e5);
|
|
7379
7421
|
return isNaN(r2.getTime()) ? null : { date: r2, timeZone: t2 || "UTC" };
|
|
7380
7422
|
}
|
|
7381
|
-
function
|
|
7423
|
+
function _y(e5) {
|
|
7382
7424
|
var t2;
|
|
7383
7425
|
if (!e5) return "";
|
|
7384
7426
|
let n2 = [], r2 = (t2 = e5.location) == null ? void 0 : t2.trim();
|
|
7385
7427
|
if (r2 ? n2.push(r2) : typeof e5.latitude == "number" && typeof e5.longitude == "number" && n2.push("".concat(e5.latitude.toFixed(2), ", ").concat(e5.longitude.toFixed(2))), e5.datetime) {
|
|
7386
|
-
let t3 = /^\d{4}-\d{2}-\d{2}/.test(e5.datetime.trim()) ?
|
|
7428
|
+
let t3 = /^\d{4}-\d{2}-\d{2}/.test(e5.datetime.trim()) ? gy(e5.datetime, e5.timezone) : null;
|
|
7387
7429
|
t3 ? n2.push(t3.date.toLocaleString("en-US", { timeZone: t3.timeZone, day: "numeric", month: "short", year: "numeric", hour: "numeric", minute: "2-digit" })) : n2.push(e5.datetime);
|
|
7388
7430
|
}
|
|
7389
7431
|
return n2.join(" \xB7 ");
|
|
7390
7432
|
}
|
|
7391
|
-
var
|
|
7433
|
+
var vy = class e4 {
|
|
7392
7434
|
constructor(t2) {
|
|
7393
7435
|
var n2, r2, i2, a2, s2, c2;
|
|
7394
7436
|
o(this, "config", void 0), o(this, "params", void 0), o(this, "dateInput", void 0), o(this, "timeInput", void 0), o(this, "refreshBtn", void 0), o(this, "locInput", void 0), o(this, "locDropdown", void 0), o(this, "summaryBar", void 0), o(this, "extraToggleInput", void 0), o(this, "searchTimeout", null), o(this, "searchVersion", 0), o(this, "isSearching", false), o(this, "suggestions", []), o(this, "activeIndex", -1), o(this, "selecting", false), o(this, "listboxId", "loc-listbox-".concat(e4.comboSeq++)), this.config = t2, this.params = { date: ((n2 = t2.initialParams) == null ? void 0 : n2.date) || this.getTodayDate(), time: ((r2 = t2.initialParams) == null ? void 0 : r2.time) || "12:00", latitude: ((i2 = t2.initialParams) == null ? void 0 : i2.latitude) || null, longitude: ((a2 = t2.initialParams) == null ? void 0 : a2.longitude) || null, timezone: ((s2 = t2.initialParams) == null ? void 0 : s2.timezone) || null, locationName: ((c2 = t2.initialParams) == null ? void 0 : c2.locationName) || null }, this.render();
|
|
@@ -7568,14 +7610,14 @@ var Xv = class e4 {
|
|
|
7568
7610
|
return e5.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
7569
7611
|
}
|
|
7570
7612
|
};
|
|
7571
|
-
o(
|
|
7572
|
-
var
|
|
7573
|
-
function
|
|
7613
|
+
o(vy, "comboSeq", 0);
|
|
7614
|
+
var yy = { "chart-wheel": { stripIcon: "\u2726", stripTitle: "About the Natal Chart", stripHints: ["Click any <strong>planet</strong> for a deep placement reading", "Click any <strong>aspect line</strong> for its dynamic interpretation", "Click any <strong>house cusp</strong> for house themes", "Use the <strong>date controls</strong> to move through time"], modalText: "This wheel is an exact celestial snapshot of the sky at a given moment and place \u2014 every planet, house, and aspect line is clickable." }, "bi-wheel": { stripIcon: "\u2295", stripTitle: "About the Bi-Wheel", stripHints: ["Click any <strong>inner planet</strong> for natal placement depth", "Click any <strong>outer planet</strong> for transit or synastry meaning", "Click a <strong>cross-aspect line</strong> for inter-chart dynamics", "Use the <strong>date controls</strong> to advance transits"], modalText: "Two charts are layered here \u2014 the inner wheel is the natal chart; the outer ring shows the second chart (transits or another person's planets)." }, bodygraph: { stripIcon: "\u25C8", stripTitle: "About the Bodygraph", stripHints: ["Click any <strong>center</strong> (defined or undefined) for its meaning", "Click any <strong>channel</strong> to explore its life theme", "Click any <strong>gate number</strong> for its I Ching hexagram reading", "Click a <strong>planet row</strong> in the sidebar for its HD role"], modalText: "The bodygraph is a living map of the energy centres, channels, and gates that define a Human Design chart." }, "vedic-chart": { stripIcon: "\u{1F549}", stripTitle: "About the Jyotish Chart", stripHints: ["Click any <strong>rashi cell</strong> for its themes and any planets placed there", "The <strong>diagonal mark</strong> shows the Lagna (Ascendant) rashi", "Use the <strong>action bar</strong> for a full chart interpretation", "Click <strong>Moon & Nakshatra</strong> for lunar mansion detail"], modalText: "This is a Vedic birth chart rendered as a South Indian Rashi grid \u2014 sidereal planetary placements by fixed sign." }, "transit-timeline": { stripIcon: "\u2604", stripTitle: "About the Transit Timeline", stripHints: ["Each entry is an <strong>exact transit hit</strong> \u2014 a transiting planet contacting a natal point", "Events are <strong>grouped by month</strong> in chronological order", "The <strong>\u211E marker</strong> flags a retrograde crossing", "Click any transit for a focused <strong>interpretation</strong>"], modalText: "This timeline lists upcoming transits to the natal chart \u2014 the exact dates outer-planet energies activate each placement." }, "moon-phase": { stripIcon: "\u263E", stripTitle: "About the Moon Phase Dial", stripHints: ["Click the <strong>Moon</strong> for its phase interpretation", "Click the <strong>Void-of-Course</strong> card when the Moon is VOC", "Use the <strong>date control</strong> to move the sky to any moment"], modalText: "The dial shows the Moon's live illumination, phase, sign, and void-of-course status for the selected moment." }, bazi: { stripIcon: "\u56DB", stripTitle: "About the BaZi Chart", stripHints: ["Click any <strong>pillar</strong> (Year, Month, Day, Hour) for its interpretation", "The <strong>Day Master</strong> is the core identity element", "The <strong>Wu Xing bar</strong> shows the Five Element balance"], modalText: "This BaZi (Four Pillars of Destiny) chart maps the Heavenly Stems and Earthly Branches present at a given moment of birth." } }, by = '\n .oe-welcome-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: oklch(0% 0 0 / 0.55);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n animation: oe-fade-in 0.4s ease both;\n font-family: system-ui, sans-serif;\n }\n\n .oe-welcome-modal {\n /* Themed, not hardcoded: the title/text/hints below all resolve through\n var(--text\u2026), so a fixed dark surface here meant that once the light\n palette became reachable the modal rendered near-black text on a\n near-black card \u2014 1.09:1, effectively invisible. The fallback is the\n previous literal, and every app\'s dark --surface is oklch(11-12%), so\n dark rendering is unchanged. */\n background: var(--surface, oklch(11% 0.010 265));\n border: 1px solid var(--gold-glow, oklch(72% 0.12 80 / 0.20));\n border-radius: 16px;\n padding: 32px;\n width: 90%;\n max-width: 440px;\n box-shadow: 0 20px 40px oklch(0% 0 0 / 0.55), inset 0 1px 0 oklch(100% 0 0 / 0.06);\n animation: oe-modal-in 0.5s cubic-bezier(0.22, 1, 0.36, 1) both;\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n @keyframes oe-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @keyframes oe-modal-in {\n from { opacity: 0; transform: scale(0.95) translateY(10px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n }\n\n .oe-welcome-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 4px;\n }\n\n .oe-welcome-icon {\n font-size: 28px;\n color: var(--gold, oklch(72% 0.12 80));\n line-height: 1;\n text-shadow: 0 0 10px var(--gold-glow, oklch(72% 0.12 80 / 0.30));\n }\n\n .oe-welcome-title {\n font-size: 20px;\n font-weight: 600;\n color: var(--text, oklch(92% 0.006 265));\n margin: 0;\n letter-spacing: 0.02em;\n }\n\n .oe-welcome-text {\n font-size: 14.5px;\n line-height: 1.5;\n color: var(--text-secondary, oklch(68% 0.008 265));\n margin: 0;\n }\n\n .oe-welcome-hints {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin: 8px 0 12px 0;\n padding: 0;\n list-style: none;\n }\n\n .oe-welcome-hints li {\n font-size: 13.5px;\n line-height: 1.4;\n color: var(--text-secondary, oklch(68% 0.008 265));\n display: flex;\n align-items: flex-start;\n gap: 10px;\n opacity: 0;\n animation: oe-fade-in 0.4s ease forwards;\n }\n\n /* Stagger the hints */\n .oe-welcome-hints li:nth-child(1) { animation-delay: 0.15s; }\n .oe-welcome-hints li:nth-child(2) { animation-delay: 0.25s; }\n .oe-welcome-hints li:nth-child(3) { animation-delay: 0.35s; }\n .oe-welcome-hints li:nth-child(4) { animation-delay: 0.45s; }\n\n .oe-welcome-hints li::before {\n content: "\u2726";\n color: var(--gold-dim, oklch(52% 0.06 80));\n font-size: 12px;\n padding-top: 2px;\n }\n\n .oe-welcome-hints strong {\n color: var(--text, oklch(92% 0.006 265));\n font-weight: 600;\n }\n\n .oe-welcome-button {\n align-self: flex-end;\n background: var(--gold-subtle, oklch(72% 0.12 80 / 0.10));\n color: var(--gold, oklch(72% 0.12 80));\n border: 1px solid var(--gold-glow, oklch(72% 0.12 80 / 0.20));\n padding: 10px 24px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s ease, border-color 0.2s ease;\n margin-top: 4px;\n }\n\n .oe-welcome-button:hover {\n background: oklch(72% 0.12 80 / 0.18);\n border-color: oklch(72% 0.12 80 / 0.40);\n }\n\n .oe-welcome-button:focus-visible {\n outline: 2px solid var(--gold, oklch(72% 0.12 80));\n outline-offset: 2px;\n }\n\n .oe-welcome-backdrop.is-dismissing {\n animation: oe-fade-out 0.3s ease forwards;\n }\n\n .oe-welcome-backdrop.is-dismissing .oe-welcome-modal {\n animation: oe-modal-out 0.3s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n }\n\n @keyframes oe-fade-out {\n to { opacity: 0; }\n }\n\n @keyframes oe-modal-out {\n to { opacity: 0; transform: scale(0.95) translateY(10px); }\n }\n';
|
|
7615
|
+
function xy() {
|
|
7574
7616
|
if (document.getElementById("oe-first-run-styles")) return;
|
|
7575
7617
|
let e5 = document.createElement("style");
|
|
7576
|
-
e5.id = "oe-first-run-styles", e5.textContent =
|
|
7618
|
+
e5.id = "oe-first-run-styles", e5.textContent = by, document.head.appendChild(e5);
|
|
7577
7619
|
}
|
|
7578
|
-
function
|
|
7620
|
+
function Sy(e5) {
|
|
7579
7621
|
let t2 = document.activeElement, n2 = document.createElement("div");
|
|
7580
7622
|
n2.className = "oe-welcome-backdrop";
|
|
7581
7623
|
let r2 = document.createElement("div");
|
|
@@ -7593,34 +7635,34 @@ function ey(e5) {
|
|
|
7593
7635
|
e6.key === "Escape" && (e6.preventDefault(), o2()), e6.key === "Tab" && (e6.preventDefault(), a2.focus());
|
|
7594
7636
|
}), requestAnimationFrame(() => a2.focus()), n2;
|
|
7595
7637
|
}
|
|
7596
|
-
function
|
|
7597
|
-
|
|
7598
|
-
let t2 =
|
|
7638
|
+
function Cy(e5) {
|
|
7639
|
+
xy();
|
|
7640
|
+
let t2 = Sy(yy[e5]);
|
|
7599
7641
|
document.body.appendChild(t2);
|
|
7600
7642
|
}
|
|
7601
|
-
var
|
|
7602
|
-
function
|
|
7643
|
+
var wy = "\n .oe-info-button {\n position: fixed;\n top: 12px;\n right: 12px;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n background: var(--surface-2, oklch(16% 0.010 265));\n border: 1px solid var(--border-strong, oklch(30% 0.010 265));\n color: var(--text-secondary, oklch(68% 0.008 265));\n font: 600 14px/1 Georgia, serif;\n font-style: italic;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 9998;\n transition: all 150ms ease;\n }\n\n .oe-info-button:hover {\n background: var(--surface, oklch(11% 0.010 265));\n border-color: var(--gold-dim, oklch(52% 0.06 80));\n color: var(--gold, oklch(72% 0.12 80));\n }\n\n .oe-info-button:focus-visible {\n outline: 2px solid var(--gold, oklch(72% 0.12 80));\n outline-offset: 2px;\n }\n";
|
|
7644
|
+
function Ty() {
|
|
7603
7645
|
if (document.getElementById("oe-info-button-styles")) return;
|
|
7604
7646
|
let e5 = document.createElement("style");
|
|
7605
|
-
e5.id = "oe-info-button-styles", e5.textContent =
|
|
7647
|
+
e5.id = "oe-info-button-styles", e5.textContent = wy, document.head.appendChild(e5);
|
|
7606
7648
|
}
|
|
7607
|
-
function
|
|
7649
|
+
function Ey(e5) {
|
|
7608
7650
|
if (document.getElementById("oe-info-button")) return;
|
|
7609
|
-
|
|
7651
|
+
Ty();
|
|
7610
7652
|
let t2 = document.createElement("button");
|
|
7611
|
-
t2.id = "oe-info-button", t2.className = "oe-info-button", t2.setAttribute("aria-label", "About this chart"), t2.title = "About this chart", t2.textContent = "i", t2.addEventListener("click", () =>
|
|
7653
|
+
t2.id = "oe-info-button", t2.className = "oe-info-button", t2.setAttribute("aria-label", "About this chart"), t2.title = "About this chart", t2.textContent = "i", t2.addEventListener("click", () => Cy(e5)), document.body.appendChild(t2);
|
|
7612
7654
|
}
|
|
7613
|
-
function
|
|
7655
|
+
function Dy(e5) {
|
|
7614
7656
|
return e5.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
7615
7657
|
}
|
|
7616
|
-
function
|
|
7617
|
-
let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e5, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(
|
|
7618
|
-
if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(
|
|
7658
|
+
function Oy(e5) {
|
|
7659
|
+
let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e5, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(Dy(i2), "</button>") : "";
|
|
7660
|
+
if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(Dy(n2), "</p>") + a2 + "</div>", t2.removeAttribute("hidden"), r2) {
|
|
7619
7661
|
var o2;
|
|
7620
7662
|
(o2 = t2.querySelector(".error-retry-btn")) == null || o2.addEventListener("click", r2);
|
|
7621
7663
|
}
|
|
7622
7664
|
}
|
|
7623
|
-
function
|
|
7665
|
+
function ky(e5) {
|
|
7624
7666
|
var t2;
|
|
7625
7667
|
if (!e5) return null;
|
|
7626
7668
|
if (e5.structuredContent != null && typeof e5.structuredContent == "object") return e5.structuredContent;
|
|
@@ -7633,12 +7675,25 @@ function sy(e5) {
|
|
|
7633
7675
|
}
|
|
7634
7676
|
return null;
|
|
7635
7677
|
}
|
|
7636
|
-
|
|
7637
|
-
|
|
7678
|
+
var Ay = ["inline", "fullscreen"];
|
|
7679
|
+
function jy(e5) {
|
|
7680
|
+
var t2;
|
|
7681
|
+
return (t2 = e5.getHostContext) == null ? void 0 : t2.call(e5);
|
|
7682
|
+
}
|
|
7683
|
+
function My(e5) {
|
|
7684
|
+
var t2;
|
|
7685
|
+
let n2 = (t2 = jy(e5)) == null ? void 0 : t2.availableDisplayModes;
|
|
7686
|
+
return Array.isArray(n2) ? n2 : [];
|
|
7687
|
+
}
|
|
7688
|
+
var Ny = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">\n <polyline points="5,1 1,1 1,5"/>\n <polyline points="11,1 15,1 15,5"/>\n <polyline points="5,15 1,15 1,11"/>\n <polyline points="11,15 15,15 15,11"/>\n </svg>', Py = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">\n <polyline points="1,5 5,5 5,1"/>\n <polyline points="15,5 11,5 11,1"/>\n <polyline points="1,11 5,11 5,15"/>\n <polyline points="15,11 11,11 11,15"/>\n </svg>', Fy = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round" aria-hidden="true">\n <rect x="1" y="2.5" width="14" height="11" rx="1.5"/>\n <rect x="8" y="8" width="5.5" height="4" rx="0.8" fill="currentColor" stroke="none"/>\n </svg>', Iy = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">\n <rect x="1" y="2.5" width="14" height="11" rx="1.5"/>\n <polyline points="6,6 10,10"/>\n <polyline points="6,9.5 6,6 9.5,6"/>\n </svg>';
|
|
7689
|
+
function Ly(e5, t2, n2 = [], r2 = {}) {
|
|
7690
|
+
var i2;
|
|
7638
7691
|
if (!t2 || t2.querySelector("#btn-fullscreen")) return;
|
|
7639
7692
|
let a2 = document.createElement("button");
|
|
7640
|
-
a2.id = "btn-fullscreen", a2.className = "pan-btn pan-btn--fullscreen", a2.
|
|
7641
|
-
let o2 =
|
|
7693
|
+
a2.id = "btn-fullscreen", a2.type = "button", a2.className = "pan-btn pan-btn--fullscreen", a2.innerHTML = Ny, a2.hidden = true;
|
|
7694
|
+
let o2 = null;
|
|
7695
|
+
r2.pip && (o2 = document.createElement("button"), o2.id = "btn-pip", o2.type = "button", o2.className = "pan-btn pan-btn--pip", o2.innerHTML = Fy, o2.hidden = true);
|
|
7696
|
+
let s2 = ["param-controls", "aspect-filter", "controls-panel", "mode-badge"];
|
|
7642
7697
|
function c2() {
|
|
7643
7698
|
if (document.getElementById("fs-bottom-bar") || !n2.length) return;
|
|
7644
7699
|
let e6 = document.getElementById("app");
|
|
@@ -7671,59 +7726,59 @@ function cy(e5, t2, n2 = []) {
|
|
|
7671
7726
|
}
|
|
7672
7727
|
e6.remove();
|
|
7673
7728
|
}
|
|
7674
|
-
|
|
7675
|
-
|
|
7676
|
-
|
|
7729
|
+
let u2 = "inline";
|
|
7730
|
+
function d2(t3) {
|
|
7731
|
+
let n3 = u2 === "fullscreen", r3 = t3 === "fullscreen";
|
|
7732
|
+
u2 = t3, document.body.classList.toggle("is-fullscreen", r3), document.body.classList.toggle("is-pip", t3 === "pip"), document.documentElement.setAttribute("data-display-mode", t3), a2.innerHTML = r3 ? Py : Ny;
|
|
7733
|
+
let i3 = r3 ? "Exit fullscreen" : "Enter fullscreen";
|
|
7734
|
+
if (a2.setAttribute("aria-label", i3), a2.title = r3 ? "Exit fullscreen (Esc)" : i3, o2) {
|
|
7735
|
+
let e6 = t3 === "pip";
|
|
7736
|
+
o2.innerHTML = e6 ? Iy : Fy;
|
|
7737
|
+
let n4 = e6 ? "Return to the conversation" : "Pop out (picture-in-picture)";
|
|
7738
|
+
o2.setAttribute("aria-label", n4), o2.title = n4;
|
|
7739
|
+
}
|
|
7740
|
+
r3 && !n3 && (c2(), Ry(e5)), !r3 && n3 && l2();
|
|
7677
7741
|
}
|
|
7678
|
-
|
|
7679
|
-
|
|
7680
|
-
|
|
7681
|
-
|
|
7682
|
-
|
|
7683
|
-
|
|
7684
|
-
|
|
7685
|
-
|
|
7686
|
-
|
|
7687
|
-
|
|
7742
|
+
function f2() {
|
|
7743
|
+
var n3, r3;
|
|
7744
|
+
let i3 = My(e5);
|
|
7745
|
+
a2.hidden = !i3.includes("fullscreen"), o2 && (o2.hidden = !i3.includes("pip")), (!a2.hidden || o2 && !o2.hidden) && (t2.hidden = false);
|
|
7746
|
+
let s3 = (n3 = (r3 = jy(e5)) == null ? void 0 : r3.displayMode) == null ? "inline" : n3;
|
|
7747
|
+
s3 !== u2 && d2(s3);
|
|
7748
|
+
}
|
|
7749
|
+
async function p2(t3) {
|
|
7750
|
+
if (!(t3 !== "inline" && !My(e5).includes(t3))) try {
|
|
7751
|
+
var n3;
|
|
7752
|
+
let r3 = await e5.requestDisplayMode({ mode: t3 });
|
|
7753
|
+
d2((n3 = r3 == null ? void 0 : r3.mode) == null ? u2 : n3);
|
|
7688
7754
|
} catch (e6) {
|
|
7689
7755
|
console.warn("[AppChrome] requestDisplayMode failed:", e6);
|
|
7690
7756
|
}
|
|
7691
|
-
}), document.addEventListener("keydown", async (t3) => {
|
|
7692
|
-
if (t3.key === "Escape" && document.body.classList.contains("is-fullscreen")) {
|
|
7693
|
-
t3.preventDefault();
|
|
7694
|
-
try {
|
|
7695
|
-
var n3;
|
|
7696
|
-
let t4 = await e5.requestDisplayMode({ mode: "inline" });
|
|
7697
|
-
u2((n3 = t4 == null ? void 0 : t4.mode) == null ? "inline" : n3);
|
|
7698
|
-
} catch (e6) {
|
|
7699
|
-
console.warn("[AppChrome] Escape fullscreen failed:", e6);
|
|
7700
|
-
}
|
|
7701
|
-
}
|
|
7702
|
-
}), (r2 = e5.addEventListener) == null || r2.call(e5, "hostcontextchanged", (e6) => {
|
|
7703
|
-
var t3;
|
|
7704
|
-
u2((t3 = e6 == null ? void 0 : e6.displayMode) == null ? "inline" : t3);
|
|
7705
|
-
});
|
|
7706
|
-
let d2 = (i2 = e5.getHostContext) == null ? void 0 : i2.call(e5);
|
|
7707
|
-
d2 != null && d2.displayMode && u2(d2.displayMode), t2.insertBefore(a2, t2.firstChild), t2.removeAttribute("hidden");
|
|
7708
|
-
function f2() {
|
|
7709
|
-
let e6 = document.getElementById("fs-hint-banner");
|
|
7710
|
-
e6 && e6.remove();
|
|
7711
|
-
let t3 = document.createElement("div");
|
|
7712
|
-
t3.id = "fs-hint-banner", Object.assign(t3.style, { position: "fixed", top: "12px", left: "50%", transform: "translateX(-50%)", background: "oklch(14% 0.012 265 / 0.90)", backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)", border: "1px solid oklch(72% 0.12 80 / 0.3)", borderRadius: "20px", padding: "6px 16px", fontSize: "11px", fontWeight: "600", color: "oklch(80% 0.08 80)", letterSpacing: "0.04em", zIndex: "9999", pointerEvents: "none", opacity: "0", transition: "opacity 300ms ease", whiteSpace: "nowrap" }), t3.textContent = "Esc \u2014 exit fullscreen & return to chat", document.body.appendChild(t3), requestAnimationFrame(() => {
|
|
7713
|
-
t3.style.opacity = "1";
|
|
7714
|
-
}), setTimeout(() => {
|
|
7715
|
-
t3.style.opacity = "0", setTimeout(() => t3.remove(), 350);
|
|
7716
|
-
}, 4e3);
|
|
7717
7757
|
}
|
|
7758
|
+
a2.addEventListener("click", () => {
|
|
7759
|
+
p2(u2 === "fullscreen" ? "inline" : "fullscreen");
|
|
7760
|
+
}), o2 == null || o2.addEventListener("click", () => {
|
|
7761
|
+
p2(u2 === "pip" ? "inline" : "pip");
|
|
7762
|
+
}), document.addEventListener("keydown", (e6) => {
|
|
7763
|
+
e6.key !== "Escape" || u2 !== "fullscreen" || (e6.preventDefault(), p2("inline"));
|
|
7764
|
+
}), (i2 = e5.addEventListener) == null || i2.call(e5, "hostcontextchanged", f2), o2 && t2.insertBefore(o2, t2.firstChild), t2.insertBefore(a2, t2.firstChild), d2("inline"), f2();
|
|
7765
|
+
}
|
|
7766
|
+
function Ry(e5) {
|
|
7767
|
+
var t2, n2;
|
|
7768
|
+
(t2 = document.getElementById("fs-hint-banner")) == null || t2.remove();
|
|
7769
|
+
let r2 = (n2 = jy(e5)) == null ? void 0 : n2.deviceCapabilities, i2 = !!(r2 != null && r2.touch) && (r2 == null ? void 0 : r2.hover) === false, a2 = document.createElement("div");
|
|
7770
|
+
a2.id = "fs-hint-banner", a2.className = "fs-hint-banner", a2.setAttribute("role", "status"), a2.textContent = i2 ? "Tap the collapse button to return to the chat" : "Esc \u2014 exit fullscreen & return to chat", document.body.appendChild(a2), requestAnimationFrame(() => a2.classList.add("visible")), setTimeout(() => {
|
|
7771
|
+
a2.classList.remove("visible"), setTimeout(() => a2.remove(), 350);
|
|
7772
|
+
}, 4e3);
|
|
7718
7773
|
}
|
|
7719
|
-
function
|
|
7774
|
+
function zy(e5, t2) {
|
|
7720
7775
|
e5.ontoolcancelled = (e6) => {
|
|
7721
7776
|
var n2, r2, i2;
|
|
7722
7777
|
let a2 = (n2 = e6.reason) == null ? "Tool call was cancelled" : n2;
|
|
7723
|
-
console.warn("[AppChrome] Tool cancelled:", a2), (r2 = t2.statusFn) == null || r2.call(t2, null), !t2.loadingEl.hidden && t2.loadingEl.getAttribute("hidden") === null && (t2.loadingEl.setAttribute("hidden", ""), t2.contentEl.removeAttribute("hidden")), (i2 = t2.paramControls) == null || (i2 = i2.call(t2)) == null || i2.setBusy(false),
|
|
7778
|
+
console.warn("[AppChrome] Tool cancelled:", a2), (r2 = t2.statusFn) == null || r2.call(t2, null), !t2.loadingEl.hidden && t2.loadingEl.getAttribute("hidden") === null && (t2.loadingEl.setAttribute("hidden", ""), t2.contentEl.removeAttribute("hidden")), (i2 = t2.paramControls) == null || (i2 = i2.call(t2)) == null || i2.setBusy(false), By(a2);
|
|
7724
7779
|
};
|
|
7725
7780
|
}
|
|
7726
|
-
function
|
|
7781
|
+
function By(e5) {
|
|
7727
7782
|
var t2;
|
|
7728
7783
|
(t2 = document.getElementById("cancel-toast")) == null || t2.remove();
|
|
7729
7784
|
let n2 = document.createElement("div");
|
|
@@ -7731,162 +7786,176 @@ function uy(e5) {
|
|
|
7731
7786
|
n2.classList.remove("visible"), setTimeout(() => n2.remove(), 300);
|
|
7732
7787
|
}, 3e3);
|
|
7733
7788
|
}
|
|
7734
|
-
function
|
|
7789
|
+
function Vy(e5) {
|
|
7735
7790
|
var t2;
|
|
7736
|
-
|
|
7737
|
-
|
|
7738
|
-
|
|
7739
|
-
|
|
7740
|
-
|
|
7741
|
-
|
|
7742
|
-
|
|
7743
|
-
|
|
7744
|
-
|
|
7745
|
-
|
|
7746
|
-
|
|
7747
|
-
|
|
7748
|
-
|
|
7749
|
-
|
|
7791
|
+
let n2 = document.documentElement, r2 = (e6, t3) => {
|
|
7792
|
+
typeof t3 == "number" && Number.isFinite(t3) && t3 > 0 ? n2.style.setProperty(e6, "".concat(t3, "px")) : n2.style.removeProperty(e6);
|
|
7793
|
+
}, i2 = (e6, t3) => {
|
|
7794
|
+
t3 === void 0 ? n2.removeAttribute(e6) : n2.setAttribute(e6, t3 ? "true" : "false");
|
|
7795
|
+
};
|
|
7796
|
+
function a2() {
|
|
7797
|
+
var t3, a3, o2;
|
|
7798
|
+
let s2 = jy(e5);
|
|
7799
|
+
if (!s2) return;
|
|
7800
|
+
let c2 = (t3 = s2.containerDimensions) == null ? {} : t3;
|
|
7801
|
+
r2("--host-width", c2.width), r2("--host-max-width", c2.maxWidth), r2("--host-height", c2.height), r2("--host-max-height", c2.maxHeight);
|
|
7802
|
+
let l2 = (a3 = s2.safeAreaInsets) == null ? {} : a3;
|
|
7803
|
+
for (let e6 of ["top", "right", "bottom", "left"]) {
|
|
7804
|
+
let t4 = l2[e6];
|
|
7805
|
+
n2.style.setProperty("--safe-".concat(e6), typeof t4 == "number" && t4 > 0 ? "".concat(t4, "px") : "0px");
|
|
7806
|
+
}
|
|
7807
|
+
let u2 = l2.bottom;
|
|
7808
|
+
n2.toggleAttribute("data-safe-bottom", typeof u2 == "number" && u2 > 0), typeof s2.platform == "string" && n2.setAttribute("data-platform", s2.platform);
|
|
7809
|
+
let d2 = s2.deviceCapabilities;
|
|
7810
|
+
i2("data-touch", d2 == null ? void 0 : d2.touch), i2("data-hover", d2 == null ? void 0 : d2.hover);
|
|
7811
|
+
let f2 = s2.styles;
|
|
7812
|
+
f2 != null && f2.variables && r_(f2.variables, n2), !(f2 == null || (o2 = f2.css) == null) && o2.fonts && i_(f2.css.fonts);
|
|
7813
|
+
}
|
|
7814
|
+
a2(), (t2 = e5.addEventListener) == null || t2.call(e5, "hostcontextchanged", a2);
|
|
7815
|
+
}
|
|
7816
|
+
var Hy = document.getElementById("chart-container"), Uy = document.getElementById("loading-state"), Wy = document.getElementById("mode-badge"), Gy = document.getElementById("chart-status"), Ky = document.getElementById("aspect-filter"), qy = document.getElementById("chart-provenance"), Jy = document.getElementById("bi-patterns-strip"), Yy = document.getElementById("param-controls-container"), Xy = new a_({ name: "Bi-Wheel Chart Explorer", version: "1.0.0" }, { availableDisplayModes: Ay }), $ = null, Zy = null, Qy = false, $y = false, eb = "placidus";
|
|
7817
|
+
__(() => {
|
|
7818
|
+
$ && kb($);
|
|
7750
7819
|
});
|
|
7751
|
-
var
|
|
7752
|
-
function
|
|
7753
|
-
if (
|
|
7820
|
+
var tb = "true";
|
|
7821
|
+
function nb(e5) {
|
|
7822
|
+
if (Gy) {
|
|
7754
7823
|
if (!e5) {
|
|
7755
|
-
|
|
7824
|
+
Gy.classList.remove("visible");
|
|
7756
7825
|
return;
|
|
7757
7826
|
}
|
|
7758
|
-
|
|
7827
|
+
Gy.textContent = "\xB7 ".concat(e5), Gy.classList.add("visible");
|
|
7759
7828
|
}
|
|
7760
7829
|
}
|
|
7761
|
-
|
|
7762
|
-
function
|
|
7763
|
-
|
|
7830
|
+
Ev(nb);
|
|
7831
|
+
function rb() {
|
|
7832
|
+
Uy.hidden = false, Hy.hidden = true, Wy.hidden = true, qy && (qy.hidden = true), Jy && (Jy.hidden = true, Jy.innerHTML = "");
|
|
7764
7833
|
}
|
|
7765
|
-
function
|
|
7766
|
-
|
|
7834
|
+
function ib() {
|
|
7835
|
+
Uy.hidden = true, Hy.hidden = false, Hy.classList.remove("refreshing"), Wy.hidden = false, qy && (qy.hidden = false);
|
|
7767
7836
|
}
|
|
7768
|
-
function
|
|
7769
|
-
if (!$ ||
|
|
7770
|
-
|
|
7837
|
+
function ab() {
|
|
7838
|
+
if (!$ || Hy.hidden) {
|
|
7839
|
+
rb();
|
|
7771
7840
|
return;
|
|
7772
7841
|
}
|
|
7773
|
-
|
|
7842
|
+
Hy.classList.add("refreshing");
|
|
7774
7843
|
}
|
|
7775
|
-
function
|
|
7776
|
-
|
|
7844
|
+
function ob() {
|
|
7845
|
+
Hy.classList.remove("refreshing"), Hy.classList.remove("chart-rendered"), Hy.offsetWidth, Hy.classList.add("chart-rendered");
|
|
7777
7846
|
}
|
|
7778
|
-
function
|
|
7779
|
-
|
|
7847
|
+
function sb(e5, t2) {
|
|
7848
|
+
Uy.hidden = true, qy && (qy.hidden = true), Oy({ container: Hy, message: e5, onRetry: t2 });
|
|
7780
7849
|
}
|
|
7781
|
-
function
|
|
7850
|
+
function cb(e5) {
|
|
7782
7851
|
return e5.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
7783
7852
|
}
|
|
7784
|
-
async function
|
|
7853
|
+
async function lb(e5) {
|
|
7785
7854
|
try {
|
|
7786
|
-
(await
|
|
7855
|
+
(await Xy.sendMessage({ role: "user", content: [{ type: "text", text: e5 }] })).isError && console.error("[BiWheel] Host rejected sendMessage");
|
|
7787
7856
|
} catch (e6) {
|
|
7788
7857
|
console.error("[BiWheel] sendMessage failed:", e6);
|
|
7789
7858
|
}
|
|
7790
7859
|
}
|
|
7791
|
-
function
|
|
7792
|
-
let t2 =
|
|
7860
|
+
function ub(e5) {
|
|
7861
|
+
let t2 = ky(e5);
|
|
7793
7862
|
return t2 && "inner" in t2 && "outer" in t2 ? t2 : null;
|
|
7794
7863
|
}
|
|
7795
|
-
var
|
|
7796
|
-
function
|
|
7864
|
+
var db = [{ label: "Tight", mult: 0.55 }, { label: "Standard", mult: 1 }, { label: "Wide", mult: 1.6 }], fb = true, pb = 1;
|
|
7865
|
+
function mb() {
|
|
7797
7866
|
var e5, t2, n2;
|
|
7798
|
-
if (!
|
|
7867
|
+
if (!Ky) return;
|
|
7799
7868
|
let r2 = (t2 = { synastry: "Synastry \u2192 Natal", transit: "Transit \u2192 Natal", progressed: "Progressions \u2192 Natal", solar_return: "Solar Return \u2192 Natal", lunar_return: "Lunar Return \u2192 Natal", solar_arc: "Solar Arc \u2192 Natal" }[(e5 = $ == null ? void 0 : $.mode) == null ? "synastry" : e5]) == null ? "Cross-Wheel" : t2, i2 = [{ key: "placidus", label: "Placidus" }, { key: "whole_sign", label: "Whole Sign" }, { key: "equal", label: "Equal" }, { key: "koch", label: "Koch" }, { key: "regiomontanus", label: "Regio." }], a2 = (() => {
|
|
7800
7869
|
var e6, t3;
|
|
7801
7870
|
let n3 = /* @__PURE__ */ new Set();
|
|
7802
7871
|
for (let r3 of [...(e6 = $ == null ? void 0 : $.inner) == null ? [] : e6, ...(t3 = $ == null ? void 0 : $.outer) == null ? [] : t3]) r3 && typeof r3 == "object" && "name" in r3 && n3.add(String(r3.name).toLowerCase());
|
|
7803
|
-
return
|
|
7872
|
+
return P_(n3);
|
|
7804
7873
|
})();
|
|
7805
|
-
|
|
7806
|
-
let o2 = a2 ? '\n <div class="asp-section">\n <span class="asp-section-label">Nodes</span>\n <button class="orb-preset-btn node-btn'.concat(
|
|
7807
|
-
|
|
7808
|
-
let s2 = [...
|
|
7874
|
+
bv(tb);
|
|
7875
|
+
let o2 = a2 ? '\n <div class="asp-section">\n <span class="asp-section-label">Nodes</span>\n <button class="orb-preset-btn node-btn'.concat(tb === "mean" ? " active" : "", '" data-node="mean" title="Mean lunar node (averaged orbit)">Mean</button>\n <button class="orb-preset-btn node-btn').concat(tb === "true" ? " active" : "", '" data-node="true" title="True (osculating) lunar node">True</button>\n </div>') : "";
|
|
7876
|
+
fb = true, Ky.innerHTML = '\n <div class="asp-panel">\n <div class="asp-section">\n <span class="asp-section-label">Aspects</span>\n <button class="aspect-toggle-btn active" id="aspect-vis-toggle"\n title="Toggle all aspect lines & symbols">\n <span class="toggle-icon">\u2295</span> '.concat(r2, '\n </button>\n </div>\n <div class="asp-section">\n <span class="asp-section-label">Orb</span>\n ').concat(db.map((e6) => '<button class="orb-preset-btn'.concat(e6.mult === pb ? " active" : "", '" data-mult="').concat(e6.mult, '" title="').concat(e6.label, ' orbs">').concat(e6.label, "</button>")).join(""), '\n </div>\n <div class="asp-section">\n <span class="asp-section-label">Houses</span>\n ').concat(i2.map((e6) => '<button class="orb-preset-btn house-btn'.concat(e6.key === eb ? " active" : "", '" data-hs="').concat(e6.key, '" title="').concat(e6.label, ' houses">').concat(e6.label, "</button>")).join(""), "\n </div>").concat(o2, "\n </div>\n ");
|
|
7877
|
+
let s2 = [...Sv($ == null ? void 0 : $.inner), ...Sv($ == null ? void 0 : $.outer)], c2 = /* @__PURE__ */ new Set(), l2 = [];
|
|
7809
7878
|
for (let e6 of s2) {
|
|
7810
7879
|
let t3 = e6.name.toLowerCase();
|
|
7811
7880
|
if (c2.has(t3)) continue;
|
|
7812
7881
|
c2.add(t3);
|
|
7813
|
-
let n3 =
|
|
7814
|
-
n3 && l2.push({ glyph: n3, label:
|
|
7882
|
+
let n3 = rv[t3];
|
|
7883
|
+
n3 && l2.push({ glyph: n3, label: py(e6.name) });
|
|
7815
7884
|
}
|
|
7816
7885
|
let u2 = [...new Set(((n2 = $ == null ? void 0 : $.cross_aspects) == null ? [] : n2).map((e6) => {
|
|
7817
7886
|
var t3;
|
|
7818
7887
|
return ((t3 = e6.type) == null ? "" : t3).toLowerCase();
|
|
7819
7888
|
}).filter(Boolean))].map((e6) => {
|
|
7820
7889
|
var t3;
|
|
7821
|
-
return { glyph: (t3 =
|
|
7890
|
+
return { glyph: (t3 = ov[e6]) == null ? "" : t3, label: py(e6) };
|
|
7822
7891
|
}).filter((e6) => e6.glyph);
|
|
7823
|
-
|
|
7892
|
+
Ky.insertAdjacentHTML("beforeend", my([{ title: "Bodies", items: l2 }, { title: "Aspects", items: u2 }])), Ky.removeAttribute("hidden");
|
|
7824
7893
|
let d2 = document.getElementById("aspect-vis-toggle");
|
|
7825
7894
|
d2 == null || d2.addEventListener("click", () => {
|
|
7826
|
-
|
|
7827
|
-
}),
|
|
7895
|
+
fb = !fb, $v(fb), d2.classList.toggle("active", fb), d2.querySelector(".toggle-icon").textContent = fb ? "\u2295" : "\u2296";
|
|
7896
|
+
}), Ky.querySelectorAll(".orb-preset-btn[data-mult]").forEach((e6) => {
|
|
7828
7897
|
e6.addEventListener("click", () => {
|
|
7829
7898
|
var t3;
|
|
7830
7899
|
let n3 = parseFloat((t3 = e6.dataset.mult) == null ? "1" : t3);
|
|
7831
|
-
n3 !==
|
|
7900
|
+
n3 !== pb && (pb = n3, Ky.querySelectorAll(".orb-preset-btn[data-mult]").forEach((e7) => e7.classList.toggle("active", e7.dataset.mult === String(n3))), $ && hb($, n3));
|
|
7832
7901
|
});
|
|
7833
|
-
}),
|
|
7902
|
+
}), Ky.querySelectorAll(".house-btn").forEach((e6) => {
|
|
7834
7903
|
e6.addEventListener("click", () => {
|
|
7835
7904
|
var t3;
|
|
7836
7905
|
let n3 = (t3 = e6.dataset.hs) == null ? "placidus" : t3;
|
|
7837
|
-
n3 ===
|
|
7906
|
+
n3 === eb || !$ || (eb = n3, Ky.querySelectorAll(".house-btn").forEach((e7) => e7.classList.toggle("active", e7.dataset.hs === n3)), Nb(n3));
|
|
7838
7907
|
});
|
|
7839
|
-
}),
|
|
7908
|
+
}), Ky.querySelectorAll(".node-btn").forEach((e6) => {
|
|
7840
7909
|
e6.addEventListener("click", () => {
|
|
7841
7910
|
let t3 = e6.dataset.node === "mean" ? "mean" : "true";
|
|
7842
|
-
t3 ===
|
|
7911
|
+
t3 === tb || !$ || (tb = t3, bv(t3), Ky.querySelectorAll(".node-btn").forEach((e7) => e7.classList.toggle("active", e7.dataset.node === t3)), hb($, pb));
|
|
7843
7912
|
});
|
|
7844
7913
|
});
|
|
7845
7914
|
}
|
|
7846
|
-
function
|
|
7915
|
+
function hb(e5, t2) {
|
|
7847
7916
|
var n2, r2, i2, a2;
|
|
7848
|
-
let o2 =
|
|
7849
|
-
|
|
7917
|
+
let o2 = Sv(e5.inner), s2 = Sv(e5.outer), c2 = wv(o2, s2, t2), l2 = { ...e5, cross_aspects: c2 };
|
|
7918
|
+
ly(Hy, l2, Pb, Fb, wb, Ob()), fb || $v(false);
|
|
7850
7919
|
let u2 = (r2 = (i2 = (a2 = ((n2 = l2.inner_houses) == null ? [] : n2)[0]) == null ? void 0 : a2.cusp_lon) == null ? l2.ascendant : i2) == null ? 0 : r2;
|
|
7851
|
-
|
|
7920
|
+
Mb(ry(c2), o2, s2, u2);
|
|
7852
7921
|
}
|
|
7853
|
-
var
|
|
7854
|
-
function
|
|
7855
|
-
|
|
7922
|
+
var gb = null;
|
|
7923
|
+
function _b(e5) {
|
|
7924
|
+
gb = e5, e5 ? Hy.setAttribute("data-focus", e5) : Hy.removeAttribute("data-focus"), Wy.querySelectorAll(".mode-badge-name").forEach((t2) => {
|
|
7856
7925
|
let n2 = t2.dataset.focus;
|
|
7857
7926
|
t2.classList.toggle("focused", n2 === e5);
|
|
7858
|
-
}), $ &&
|
|
7927
|
+
}), $ && Cb($, e5);
|
|
7859
7928
|
}
|
|
7860
|
-
function
|
|
7929
|
+
function vb(e5) {
|
|
7861
7930
|
var t2, n2, r2, i2, a2, o2, s2;
|
|
7862
7931
|
let c2 = (t2 = e5.mode) == null ? "synastry" : t2, l2 = (n2 = (r2 = e5._birth_params_inner) == null ? void 0 : r2.location) == null ? "Person 1" : n2, u2 = (i2 = (a2 = e5._birth_params_outer) == null ? void 0 : a2.location) == null ? c2 === "transit" ? "Transits" : "Person 2" : i2;
|
|
7863
|
-
|
|
7932
|
+
gb = null, Hy.removeAttribute("data-focus");
|
|
7864
7933
|
let d2 = "";
|
|
7865
7934
|
if (c2 === "transit" && (o2 = e5._birth_params_outer) != null && o2.datetime) try {
|
|
7866
|
-
let t3 =
|
|
7867
|
-
t3 && (d2 = '<span class="mode-badge-date">'.concat(
|
|
7935
|
+
let t3 = gy(e5._birth_params_outer.datetime, e5._birth_params_outer.timezone);
|
|
7936
|
+
t3 && (d2 = '<span class="mode-badge-date">'.concat(cb(t3.date.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", timeZone: t3.timeZone })), "</span>"));
|
|
7868
7937
|
} catch (e6) {
|
|
7869
7938
|
}
|
|
7870
|
-
|
|
7939
|
+
Wy.innerHTML = '\n <button class="mode-badge-name inner-name" data-focus="inner" title="Click to focus inner (natal) wheel">\n <span class="mode-badge-dot-inner"></span>'.concat(cb(l2), '\n </button>\n <button class="mode-badge-swap" title="Toggle focus">\u21C4</button>\n <button class="mode-badge-name outer-name" data-focus="outer" title="Click to focus outer (').concat(c2, ') wheel">\n <span class="mode-badge-dot-outer"></span>').concat(cb(u2), "\n </button>\n ").concat(d2), Wy.querySelectorAll(".mode-badge-name").forEach((e6) => {
|
|
7871
7940
|
e6.addEventListener("click", () => {
|
|
7872
7941
|
let t3 = e6.dataset.focus;
|
|
7873
|
-
|
|
7942
|
+
_b(gb === t3 ? null : t3);
|
|
7874
7943
|
});
|
|
7875
|
-
}), (s2 =
|
|
7876
|
-
|
|
7944
|
+
}), (s2 = Wy.querySelector(".mode-badge-swap")) == null || s2.addEventListener("click", () => {
|
|
7945
|
+
_b(gb === "inner" ? "outer" : "inner");
|
|
7877
7946
|
});
|
|
7878
7947
|
}
|
|
7879
|
-
var
|
|
7880
|
-
function
|
|
7948
|
+
var yb = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"], bb = { sun: "\u2609", moon: "\u263D", mercury: "\u263F", venus: "\u2640", mars: "\u2642", jupiter: "\u2643", saturn: "\u2644", uranus: "\u2645", neptune: "\u2646", pluto: "\u2647", asc: "AC", mc: "MC" };
|
|
7949
|
+
function xb(e5, t2) {
|
|
7881
7950
|
var n2, r2;
|
|
7882
7951
|
let i2 = e5.find((e6) => e6.name.toLowerCase() === t2);
|
|
7883
7952
|
if (!i2) return "\u2014";
|
|
7884
7953
|
let a2 = Math.floor((i2.longitude % 360 + 360) % 360 / 30), o2 = Math.floor(i2.longitude % 30);
|
|
7885
|
-
return "".concat((n2 =
|
|
7954
|
+
return "".concat((n2 = bb[t2]) == null ? t2 : n2, " ").concat(o2, "\xB0 ").concat((r2 = yb[a2]) == null ? "" : r2);
|
|
7886
7955
|
}
|
|
7887
|
-
function
|
|
7956
|
+
function Sb(e5, t2) {
|
|
7888
7957
|
try {
|
|
7889
|
-
let n2 =
|
|
7958
|
+
let n2 = gy(e5, t2);
|
|
7890
7959
|
if (!n2) return e5;
|
|
7891
7960
|
let { date: r2, timeZone: i2 } = n2;
|
|
7892
7961
|
return r2.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", timeZone: i2 }) + " \xB7 " + r2.toLocaleTimeString("en-US", { hour: "numeric", minute: "2-digit", hour12: true, timeZone: i2 });
|
|
@@ -7894,22 +7963,22 @@ function Ky(e5, t2) {
|
|
|
7894
7963
|
return e5;
|
|
7895
7964
|
}
|
|
7896
7965
|
}
|
|
7897
|
-
function
|
|
7966
|
+
function Cb(e5, t2) {
|
|
7898
7967
|
var n2, r2, i2, a2, o2;
|
|
7899
|
-
if (!
|
|
7900
|
-
let s2 = t2 == null ? "inner" : t2, c2 = s2 === "inner" ? e5.inner : e5.outer, l2 = s2 === "inner" ? e5._birth_params_inner : e5._birth_params_outer, u2 = (n2 = e5.mode) == null ? "synastry" : n2, d2 = (r2 = l2 == null ? void 0 : l2.location) == null ? s2 === "inner" ? "Inner chart" : u2 === "transit" ? "Transits" : "Outer chart" : r2, f2 = (i2 = l2 == null ? void 0 : l2.timezone) == null ? null : i2, p2 = l2 != null && l2.datetime ?
|
|
7968
|
+
if (!qy) return;
|
|
7969
|
+
let s2 = t2 == null ? "inner" : t2, c2 = s2 === "inner" ? e5.inner : e5.outer, l2 = s2 === "inner" ? e5._birth_params_inner : e5._birth_params_outer, u2 = (n2 = e5.mode) == null ? "synastry" : n2, d2 = (r2 = l2 == null ? void 0 : l2.location) == null ? s2 === "inner" ? "Inner chart" : u2 === "transit" ? "Transits" : "Outer chart" : r2, f2 = (i2 = l2 == null ? void 0 : l2.timezone) == null ? null : i2, p2 = l2 != null && l2.datetime ? Sb(l2.datetime, f2) : null, m2 = s2 === "inner" ? e5.inner_houses : (a2 = e5.outer_houses) == null ? [] : a2, h2 = (o2 = e5.house_system) == null ? m2.length > 0 ? "Placidus" : null : o2, g2 = xb(c2, "sun"), _2 = xb(c2, "moon"), v2 = xb(c2, "asc");
|
|
7901
7970
|
if (v2 === "AC \u2014" && m2.length > 0) {
|
|
7902
7971
|
let e6 = m2.find((e7) => e7.number === 1);
|
|
7903
7972
|
if (e6) {
|
|
7904
7973
|
var y2;
|
|
7905
7974
|
let t3 = Math.floor((e6.cusp_lon % 360 + 360) % 360 / 30);
|
|
7906
|
-
v2 = "AC ".concat(Math.floor(e6.cusp_lon % 30), "\xB0 ").concat((y2 =
|
|
7975
|
+
v2 = "AC ".concat(Math.floor(e6.cusp_lon % 30), "\xB0 ").concat((y2 = yb[t3]) == null ? "" : y2);
|
|
7907
7976
|
}
|
|
7908
7977
|
}
|
|
7909
7978
|
let b2 = s2 === "outer" && u2 === "transit" ? "Transit" : s2 === "outer" ? "Synastry" : "Natal";
|
|
7910
|
-
|
|
7979
|
+
qy.innerHTML = '\n <div class="prov-name">'.concat(cb(d2), '\n <span class="prov-mode-tag">').concat(cb(b2), '</span>\n </div>\n <div class="prov-trio">\n <span class="prov-planet">').concat(cb(g2), '</span>\n <span class="prov-sep">\xB7</span>\n <span class="prov-planet">').concat(cb(_2), '</span>\n <span class="prov-sep">\xB7</span>\n <span class="prov-planet">').concat(cb(v2), "</span>\n </div>\n ").concat(p2 ? '<div class="prov-meta">'.concat(cb(p2)).concat(f2 ? ' <span class="prov-tz">'.concat(cb(f2), "</span>") : "", "</div>") : "", "\n ").concat(h2 ? '<div class="prov-meta">'.concat(cb(h2), " houses</div>") : "", "\n "), qy.hidden = false;
|
|
7911
7980
|
}
|
|
7912
|
-
async function
|
|
7981
|
+
async function wb(e5) {
|
|
7913
7982
|
var t2;
|
|
7914
7983
|
let n2 = (t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2, r2 = "";
|
|
7915
7984
|
if (e5.type === "planet") {
|
|
@@ -7936,36 +8005,36 @@ async function Jy(e5) {
|
|
|
7936
8005
|
r2 = "Interpret the ".concat(String(t3.name), " forming in this ").concat(n2, " bi-wheel involving ").concat(s3, ". ") + (t3.description ? "".concat(String(t3.description), ". ") : "") + "This is a cross-chart pattern \u2014 it spans both wheels, so the meaning lives in the interaction between the ".concat(a3, " foundation and the ").concat(o3, " activation. Give a rich interpretation covering: (1) the core dynamic this pattern creates, (2) how the ").concat(a3, " planets set the stage, (3) what the ").concat(o3, " planets activate or challenge, (4) the psychological theme and practical expression").concat(n2 === "transit" ? ", and (5) timing \u2014 what to do with this energy now" : "", ".");
|
|
7937
8006
|
}
|
|
7938
8007
|
if (!r2) return;
|
|
7939
|
-
let h2 =
|
|
8008
|
+
let h2 = _y($ == null ? void 0 : $._birth_params_inner), g2 = _y($ == null ? void 0 : $._birth_params_outer);
|
|
7940
8009
|
if (h2 || g2) {
|
|
7941
8010
|
let e6 = n2 === "transit" ? "Natal" : "Inner wheel", t3 = n2 === "transit" ? "Transits" : "Outer wheel";
|
|
7942
8011
|
r2 = "".concat([h2 ? "".concat(e6, ": ").concat(h2) : "", g2 ? "".concat(t3, ": ").concat(g2) : ""].filter(Boolean).join("\n"), "\n\n").concat(r2);
|
|
7943
8012
|
}
|
|
7944
|
-
await
|
|
8013
|
+
await lb(r2);
|
|
7945
8014
|
}
|
|
7946
|
-
async function
|
|
8015
|
+
async function Tb() {
|
|
7947
8016
|
var e5, t2, n2, r2, i2, a2, o2, s2;
|
|
7948
8017
|
if (!$) return;
|
|
7949
8018
|
let c2 = $, l2 = (e5 = c2.mode) == null ? "synastry" : e5, u2 = String((t2 = (n2 = c2._birth_params_inner) == null ? void 0 : n2.location) == null ? "Person 1" : t2), d2 = l2 === "transit" ? "transits (".concat(String((r2 = (i2 = c2._birth_params_outer) == null ? void 0 : i2.location) == null ? "today" : r2), ")") : String((a2 = (o2 = c2._birth_params_outer) == null ? void 0 : o2.location) == null ? "Person 2" : a2), f2 = ((s2 = c2.cross_aspects) == null ? [] : s2).slice(0, 8).map((e6) => " \u2022 ".concat(e6.planet1, " ").concat(e6.type, " ").concat(e6.planet2, " (").concat(e6.orb.toFixed(1), "\xB0").concat(e6.applying === void 0 ? "" : ", ".concat(e6.applying ? "applying" : "separating"), ")")).join("\n") || " \u2022 No cross-aspects within orb";
|
|
7950
|
-
await
|
|
8019
|
+
await lb(l2 === "transit" ? "Please interpret this transit chart for ".concat(u2, ".\n\nKey transit cross-aspects:\n").concat(f2, "\n\nCover: (1) The most significant active transits and their themes, (2) Timing \u2014 what's applying vs separating, (3) Practical guidance \u2014 what to focus on now, (4) The overall energetic signature of this moment in time.") : "Please interpret this synastry bi-wheel between ".concat(u2, " and ").concat(d2, ".\n\nTop cross-wheel aspects:\n").concat(f2, "\n\nCover: (1) The core relational dynamic and overall compatibility theme, (2) The most significant planet-to-planet contacts and their meaning, (3) Areas of natural ease vs creative tension, (4) How each person experiences the other energetically."));
|
|
7951
8020
|
}
|
|
7952
|
-
async function
|
|
8021
|
+
async function Eb() {
|
|
7953
8022
|
var e5, t2, n2, r2, i2, a2;
|
|
7954
8023
|
if (!$) return;
|
|
7955
8024
|
let o2 = $, s2 = (e5 = o2.mode) == null ? "synastry" : e5, c2 = String((t2 = (n2 = o2._birth_params_inner) == null ? void 0 : n2.location) == null ? "Person 1" : t2), l2 = s2 === "transit" ? "today's transits" : String((r2 = (i2 = o2._birth_params_outer) == null ? void 0 : i2.location) == null ? "Person 2" : r2), u2 = ((a2 = o2.cross_aspects) == null ? [] : a2).slice(0, 6).map((e6) => "".concat(e6.planet1, " ").concat(e6.type, " ").concat(e6.planet2, " (").concat(e6.orb.toFixed(1), "\xB0)")).join(", ") || "none detected";
|
|
7956
|
-
await
|
|
8025
|
+
await lb(s2 === "transit" ? "I'm exploring a transit chart for ".concat(c2, ". The active cross-aspects include: ").concat(u2, ".\n\nBased on these transits, please suggest 3-4 specific, insightful questions I could ask to understand this moment \u2014 such as what each transit means for different life areas, timing, or how to work with the energy consciously. Present each as a tappable question I can ask you.") : "I'm exploring a synastry chart between ".concat(c2, " and ").concat(l2, ". The key cross-wheel contacts include: ").concat(u2, ".\n\nBased on these connections, please suggest 3-4 specific, insightful questions I could ask to understand this relationship dynamic \u2014 such as what specific aspects mean, areas of natural ease or tension, or how these two charts interact. Present each as a tappable question I can ask you."));
|
|
7957
8026
|
}
|
|
7958
|
-
async function
|
|
7959
|
-
if (
|
|
8027
|
+
async function Db(e5) {
|
|
8028
|
+
if (Qy) try {
|
|
7960
8029
|
var t2;
|
|
7961
|
-
await
|
|
8030
|
+
await Xy.updateModelContext({ content: [{ type: "text", text: "User selected ".concat(e5.type, ": ").concat(JSON.stringify(e5.data, null, 2), "\nMode: ").concat((t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2) }] });
|
|
7962
8031
|
} catch (e6) {
|
|
7963
8032
|
}
|
|
7964
8033
|
}
|
|
7965
|
-
function
|
|
7966
|
-
if (
|
|
8034
|
+
function Ob() {
|
|
8035
|
+
if ($y) return async (e5) => {
|
|
7967
8036
|
var t2;
|
|
7968
|
-
let n2 = await
|
|
8037
|
+
let n2 = await Xy.createSamplingMessage({ maxTokens: 150, systemPrompt: "You are an expert astrologer interpreting a ".concat(($ == null ? void 0 : $.mode) === "synastry" ? "synastry (relationship)" : "".concat((t2 = $ == null ? void 0 : $.mode) == null ? "transit" : t2, " (planetary weather)"), " chart. Give a focused, mode-appropriate interpretation. Insightful and concise."), messages: [{ role: "user", content: { type: "text", text: e5 } }] });
|
|
7969
8038
|
if (n2.isError) {
|
|
7970
8039
|
var r2, i2;
|
|
7971
8040
|
throw Error((r2 = (i2 = n2.error) == null ? void 0 : i2.message) == null ? "Sampling failed" : r2);
|
|
@@ -7975,133 +8044,133 @@ function Qy() {
|
|
|
7975
8044
|
throw Error("Unexpected sampling response format");
|
|
7976
8045
|
};
|
|
7977
8046
|
}
|
|
7978
|
-
function
|
|
8047
|
+
function kb(e5) {
|
|
7979
8048
|
var t2, n2, r2, i2, a2, o2, s2;
|
|
7980
|
-
$ = e5, clearTimeout(
|
|
7981
|
-
let c2 =
|
|
7982
|
-
|
|
8049
|
+
$ = e5, clearTimeout(Lb), vb(e5), ly(Hy, e5, Pb, Fb, wb, Ob()), mb(), Cb(e5, gb);
|
|
8050
|
+
let c2 = Sv(e5.inner), l2 = Sv(e5.outer), u2 = (n2 = (r2 = (i2 = ((t2 = e5.inner_houses) == null ? [] : t2)[0]) == null ? void 0 : i2.cusp_lon) == null ? e5.ascendant : r2) == null ? 0 : n2;
|
|
8051
|
+
Mb(ry((a2 = e5.cross_aspects) == null ? [] : a2), c2, l2, u2), e5.house_system && (eb = e5.house_system);
|
|
7983
8052
|
let d2 = document.getElementById("bi-action-bar");
|
|
7984
8053
|
if (!d2) {
|
|
7985
8054
|
d2 = document.createElement("div"), d2.id = "bi-action-bar", d2.className = "hd-action-bar";
|
|
7986
8055
|
let e6 = document.querySelector("#fs-bottom-bar [data-column='right']");
|
|
7987
8056
|
if (e6) e6.appendChild(d2);
|
|
7988
8057
|
else {
|
|
7989
|
-
let e7 = document.getElementById("app"), t3 =
|
|
8058
|
+
let e7 = document.getElementById("app"), t3 = Wy.parentElement === e7 ? Wy : null;
|
|
7990
8059
|
e7 == null || e7.insertBefore(d2, t3);
|
|
7991
8060
|
}
|
|
7992
8061
|
}
|
|
7993
|
-
d2.innerHTML = '\n <button class="action-btn action-btn--primary" id="bi-interpret-btn">\u2728 Interpret this chart</button>\n <button class="action-btn" id="bi-questions-btn">\u{1F52E} What should I ask?</button>\n ', (o2 = d2.querySelector("#bi-interpret-btn")) == null || o2.addEventListener("click", () => void
|
|
8062
|
+
d2.innerHTML = '\n <button class="action-btn action-btn--primary" id="bi-interpret-btn">\u2728 Interpret this chart</button>\n <button class="action-btn" id="bi-questions-btn">\u{1F52E} What should I ask?</button>\n ', (o2 = d2.querySelector("#bi-interpret-btn")) == null || o2.addEventListener("click", () => void Tb()), (s2 = d2.querySelector("#bi-questions-btn")) == null || s2.addEventListener("click", () => void Eb()), ib(), ob(), Ey("bi-wheel");
|
|
7994
8063
|
}
|
|
7995
|
-
var
|
|
7996
|
-
function
|
|
7997
|
-
if (!
|
|
8064
|
+
var Ab = null, jb = { "Cross Trine": "#52a8e0", "Cross T-Square": "#e08a52", "Cross Stellium": "#9a7fd4" };
|
|
8065
|
+
function Mb(e5, t2, n2, r2) {
|
|
8066
|
+
if (!Jy) return;
|
|
7998
8067
|
if (e5.length === 0) {
|
|
7999
|
-
|
|
8068
|
+
Jy.hidden = true, Jy.innerHTML = "";
|
|
8000
8069
|
return;
|
|
8001
8070
|
}
|
|
8002
|
-
|
|
8071
|
+
Ab = null, Jy.innerHTML = '\n <span class="patterns-label">Cross-Patterns:</span>\n '.concat(e5.map((e6, t3) => {
|
|
8003
8072
|
var n3;
|
|
8004
|
-
let r3 = (n3 =
|
|
8073
|
+
let r3 = (n3 = jb[e6.name]) == null ? "#888" : n3;
|
|
8005
8074
|
return '<button class="pattern-pill"\n data-idx="'.concat(t3, '"\n data-color="').concat(r3, '"\n style="color:').concat(r3, ";border-color:").concat(r3, '"\n title="').concat(e6.description, '">\n ').concat(e6.name, '\n <span class="pattern-pill-detail">').concat(e6.description, "</span>\n </button>");
|
|
8006
|
-
}).join(""), "\n "),
|
|
8075
|
+
}).join(""), "\n "), Jy.removeAttribute("hidden");
|
|
8007
8076
|
let i2 = document.createElement("button");
|
|
8008
|
-
i2.className = "pattern-ask-claude-btn", i2.textContent = "\u2728 Interpret", i2.style.display = "none",
|
|
8077
|
+
i2.className = "pattern-ask-claude-btn", i2.textContent = "\u2728 Interpret", i2.style.display = "none", Jy.appendChild(i2), i2.addEventListener("click", () => {
|
|
8009
8078
|
var t3;
|
|
8010
|
-
let n3 =
|
|
8079
|
+
let n3 = Ab;
|
|
8011
8080
|
if (n3 === null) return;
|
|
8012
8081
|
let r3 = e5[n3];
|
|
8013
|
-
r3 && (i2.disabled = true, i2.textContent = "\u23F3 Sending\u2026",
|
|
8082
|
+
r3 && (i2.disabled = true, i2.textContent = "\u23F3 Sending\u2026", wb({ type: "pattern", data: { name: r3.name, planets: r3.planets, description: (t3 = r3.description) == null ? "" : t3 } }).then(() => {
|
|
8014
8083
|
i2.textContent = "\u2713 Sent", setTimeout(() => {
|
|
8015
8084
|
i2.textContent = "\u2728 Interpret", i2.disabled = false;
|
|
8016
8085
|
}, 2500);
|
|
8017
8086
|
}).catch(() => {
|
|
8018
8087
|
i2.textContent = "\u26A0 Failed", i2.disabled = false;
|
|
8019
8088
|
}));
|
|
8020
|
-
}),
|
|
8089
|
+
}), Jy.querySelectorAll(".pattern-pill").forEach((a2) => {
|
|
8021
8090
|
a2.addEventListener("click", () => {
|
|
8022
8091
|
var o2, s2;
|
|
8023
8092
|
let c2 = parseInt((o2 = a2.dataset.idx) == null ? "-1" : o2, 10), l2 = e5[c2];
|
|
8024
8093
|
if (!l2) return;
|
|
8025
8094
|
let u2 = (s2 = a2.dataset.color) == null ? "#888" : s2;
|
|
8026
|
-
if (
|
|
8027
|
-
|
|
8095
|
+
if (Ab === c2) {
|
|
8096
|
+
Ab = null, a2.classList.remove("active"), a2.style.background = "transparent", a2.style.color = u2, a2.style.borderColor = u2, Qv(), sy(), i2.style.display = "none";
|
|
8028
8097
|
return;
|
|
8029
8098
|
}
|
|
8030
|
-
|
|
8099
|
+
Ab = c2, Jy.querySelectorAll(".pattern-pill").forEach((e6) => {
|
|
8031
8100
|
var t3;
|
|
8032
8101
|
e6.classList.remove("active");
|
|
8033
8102
|
let n3 = (t3 = e6.dataset.color) == null ? "#888" : t3;
|
|
8034
8103
|
e6.style.color = n3, e6.style.borderColor = n3, e6.style.background = "transparent";
|
|
8035
|
-
}), a2.classList.add("active"), a2.style.background = u2, a2.style.color = "#fff", a2.style.borderColor = u2,
|
|
8104
|
+
}), a2.classList.add("active"), a2.style.background = u2, a2.style.color = "#fff", a2.style.borderColor = u2, cy(l2), sy(), oy(l2, t2, n2, r2), i2.style.display = "", i2.textContent = "\u2728 Interpret", i2.disabled = false;
|
|
8036
8105
|
});
|
|
8037
8106
|
});
|
|
8038
8107
|
}
|
|
8039
|
-
async function
|
|
8108
|
+
async function Nb(e5) {
|
|
8040
8109
|
if (!$) return;
|
|
8041
8110
|
let t2 = $;
|
|
8042
|
-
|
|
8111
|
+
ab();
|
|
8043
8112
|
try {
|
|
8044
8113
|
var n2, r2, i2, a2, o2, s2, c2, l2, u2, d2;
|
|
8045
|
-
let f2 = new Promise((e6, t3) => setTimeout(() => t3(Error("House system recalculate timed out")), 3e4)), p2 =
|
|
8046
|
-
p2 ?
|
|
8114
|
+
let f2 = new Promise((e6, t3) => setTimeout(() => t3(Error("House system recalculate timed out")), 3e4)), p2 = ub(await Promise.race([Xy.callServerTool({ name: "bi_wheel_recalculate", arguments: { mode: t2.mode, person1_datetime: (n2 = t2._birth_params_inner) == null ? void 0 : n2.datetime, person1_latitude: (r2 = t2._birth_params_inner) == null ? void 0 : r2.latitude, person1_longitude: (i2 = t2._birth_params_inner) == null ? void 0 : i2.longitude, person1_timezone: (a2 = t2._birth_params_inner) == null ? void 0 : a2.timezone, person1_name: (o2 = t2._birth_params_inner) == null ? void 0 : o2.location, person2_datetime: (s2 = t2._birth_params_outer) == null ? void 0 : s2.datetime, person2_latitude: (c2 = t2._birth_params_outer) == null ? void 0 : c2.latitude, person2_longitude: (l2 = t2._birth_params_outer) == null ? void 0 : l2.longitude, person2_timezone: (u2 = t2._birth_params_outer) == null ? void 0 : u2.timezone, person2_name: (d2 = t2._birth_params_outer) == null ? void 0 : d2.location, house_system: e5 } }), f2]));
|
|
8115
|
+
p2 ? kb(p2) : $ && ib();
|
|
8047
8116
|
} catch (e6) {
|
|
8048
|
-
console.error("[BiWheel] House system recalculate failed:", e6), $ &&
|
|
8117
|
+
console.error("[BiWheel] House system recalculate failed:", e6), $ && ib();
|
|
8049
8118
|
}
|
|
8050
8119
|
}
|
|
8051
|
-
function
|
|
8120
|
+
function Pb(e5, t2, n2) {
|
|
8052
8121
|
var r2, i2, a2, o2, s2;
|
|
8053
8122
|
let c2 = Math.floor((e5.longitude % 360 + 360) % 360 / 30), l2 = (r2 = (i2 = e5.sign) == null ? ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"][c2] : i2) == null ? "Unknown" : r2;
|
|
8054
|
-
|
|
8123
|
+
Db({ type: "planet", data: { planet_name: e5.name, wheel: t2, longitude: e5.longitude, sign: l2, position: "".concat(Math.floor(e5.longitude % 30), "\xB0 ").concat(l2), house: (a2 = e5.house) == null ? null : a2, retrograde: (o2 = e5.retrograde) == null ? false : o2, mode: (s2 = $ == null ? void 0 : $.mode) == null ? "synastry" : s2, cross_aspects: n2.filter((n3) => t2 === "inner" && n3.planet1 === e5.name || t2 === "outer" && n3.planet2 === e5.name).slice(0, 5).map((e6) => ({ type: e6.type, partner: t2 === "inner" ? e6.planet2 : e6.planet1, orb: e6.orb, applying: e6.applying, orb_label: e6.orb <= 1 ? "exact" : e6.orb <= 3 ? "tight" : "wide" })) } });
|
|
8055
8124
|
}
|
|
8056
|
-
function
|
|
8125
|
+
function Fb(e5) {
|
|
8057
8126
|
var t2;
|
|
8058
8127
|
let n2 = $ == null ? void 0 : $.inner.find((t3) => t3.name === e5.planet1), r2 = $ == null ? void 0 : $.outer.find((t3) => t3.name === e5.planet2), i2 = n2 ? Math.floor((n2.longitude % 360 + 360) % 360 / 30) : NaN, a2 = r2 ? Math.floor((r2.longitude % 360 + 360) % 360 / 30) : NaN, o2 = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"];
|
|
8059
|
-
|
|
8128
|
+
Db({ type: "cross_aspect", data: { planet1: e5.planet1, wheel1: e5.wheel1, planet2: e5.planet2, wheel2: e5.wheel2, aspect_type: e5.type, orb: e5.orb, applying: e5.applying, planet1_sign: isNaN(i2) ? null : o2[i2], planet2_sign: isNaN(a2) ? null : o2[a2], mode: (t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2 } });
|
|
8060
8129
|
}
|
|
8061
|
-
|
|
8062
|
-
clearTimeout(
|
|
8063
|
-
let t2 =
|
|
8130
|
+
Xy.ontoolresult = (e5) => {
|
|
8131
|
+
clearTimeout(Lb);
|
|
8132
|
+
let t2 = ub(e5);
|
|
8064
8133
|
if (!t2) {
|
|
8065
|
-
|
|
8134
|
+
sb("The chart didn't load. Tap to try again.", Ib);
|
|
8066
8135
|
return;
|
|
8067
8136
|
}
|
|
8068
|
-
if (!
|
|
8137
|
+
if (!Zy) {
|
|
8069
8138
|
var n2, r2, i2, a2;
|
|
8070
8139
|
let e6 = (n2 = t2._birth_params_outer) == null ? {} : n2, o2 = (r2 = e6.datetime) == null ? "" : r2, s2 = (i2 = e6.location) == null ? "" : i2, c2 = (a2 = e6.timezone) == null ? "" : a2, l2 = e6.latitude, u2 = e6.longitude, d2 = "", f2 = "12:00";
|
|
8071
8140
|
if (o2 && o2.includes("T")) {
|
|
8072
8141
|
let e7 = o2.split("T");
|
|
8073
8142
|
d2 = e7[0], f2 = e7[1].substring(0, 5);
|
|
8074
8143
|
}
|
|
8075
|
-
|
|
8076
|
-
|
|
8144
|
+
Zy = new vy({ app: Xy, container: Yy, initialParams: { date: d2, time: f2, locationName: s2, timezone: c2, latitude: typeof l2 == "number" ? l2 : null, longitude: typeof u2 == "number" ? u2 : null }, showStepControls: t2.mode === "transit", costHint: "~2 credits", onRefresh: async (e7) => {
|
|
8145
|
+
Zy == null || Zy.setBusy(true), ab(), Yy.setAttribute("hidden", "");
|
|
8077
8146
|
try {
|
|
8078
8147
|
var n3, r3, i3, a3, o3;
|
|
8079
|
-
let s3 = "".concat(e7.date, "T").concat(e7.time, ":00"), c3 = new Promise((e8, t3) => setTimeout(() => t3(Error("Bi-wheel recalculate timed out after 30s")), 3e4)), l3 =
|
|
8080
|
-
l3 ?
|
|
8148
|
+
let s3 = "".concat(e7.date, "T").concat(e7.time, ":00"), c3 = new Promise((e8, t3) => setTimeout(() => t3(Error("Bi-wheel recalculate timed out after 30s")), 3e4)), l3 = ub(await Promise.race([Xy.callServerTool({ name: "bi_wheel_recalculate", arguments: { mode: t2.mode, person1_datetime: (n3 = t2._birth_params_inner) == null ? void 0 : n3.datetime, person1_latitude: (r3 = t2._birth_params_inner) == null ? void 0 : r3.latitude, person1_longitude: (i3 = t2._birth_params_inner) == null ? void 0 : i3.longitude, person1_timezone: (a3 = t2._birth_params_inner) == null ? void 0 : a3.timezone, person1_name: (o3 = t2._birth_params_inner) == null ? void 0 : o3.location, person2_datetime: "".concat(s3).concat(e7.timezone ? "" : "Z"), person2_latitude: e7.latitude, person2_longitude: e7.longitude, person2_timezone: e7.timezone, person2_name: e7.locationName } }), c3]));
|
|
8149
|
+
l3 ? kb(l3) : $ && ib();
|
|
8081
8150
|
} catch (e8) {
|
|
8082
|
-
console.error("[BiWheel] Recalculate failed or timed out:", e8), $ &&
|
|
8151
|
+
console.error("[BiWheel] Recalculate failed or timed out:", e8), $ && ib();
|
|
8083
8152
|
} finally {
|
|
8084
|
-
|
|
8153
|
+
Zy == null || Zy.setBusy(false), Yy.removeAttribute("hidden");
|
|
8085
8154
|
}
|
|
8086
8155
|
} });
|
|
8087
8156
|
}
|
|
8088
|
-
|
|
8157
|
+
kb(t2), Yy.removeAttribute("hidden");
|
|
8089
8158
|
};
|
|
8090
|
-
function
|
|
8091
|
-
clearTimeout(
|
|
8092
|
-
|
|
8093
|
-
}, 3e4),
|
|
8159
|
+
function Ib() {
|
|
8160
|
+
clearTimeout(Lb), rb(), Lb = setTimeout(() => {
|
|
8161
|
+
Hy.hidden && sb("The chart didn't load. Tap to try again.", Ib);
|
|
8162
|
+
}, 3e4), Xy.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the bi-wheel chart." }] }).catch(() => {
|
|
8094
8163
|
});
|
|
8095
8164
|
}
|
|
8096
|
-
var
|
|
8097
|
-
|
|
8165
|
+
var Lb = setTimeout(() => {
|
|
8166
|
+
Hy.hidden && sb("Chart data is taking longer than expected.", Ib);
|
|
8098
8167
|
}, 3e4);
|
|
8099
|
-
|
|
8168
|
+
rb(), zy(Xy, { loadingEl: Uy, contentEl: Hy, statusFn: nb, paramControls: () => Zy }), (async () => {
|
|
8100
8169
|
try {
|
|
8101
|
-
await
|
|
8102
|
-
let e5 =
|
|
8103
|
-
|
|
8104
|
-
$ &&
|
|
8170
|
+
await Xy.connect();
|
|
8171
|
+
let e5 = Xy.getHostCapabilities();
|
|
8172
|
+
Qy = !!(e5 != null && e5.modelContext), $y = !!(e5 != null && e5.sampling), Ly(Xy, document.getElementById("pan-zoom-controls"), ["mode-badge", "aspect-filter", "param-controls-container", "chart-provenance", "bi-patterns-strip", "bi-action-bar"]), Vy(Xy), v_(Xy, () => {
|
|
8173
|
+
$ && kb($);
|
|
8105
8174
|
});
|
|
8106
8175
|
} catch (e5) {
|
|
8107
8176
|
console.error("[BiWheel] connect() failed:", e5);
|