@openephemeris/mcp-server 4.18.0 → 4.20.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 +37 -0
- package/dist/index.js +8 -110
- package/dist/server-sse.js +7 -114
- package/dist/tools/apps/bazi-app.d.ts +1 -1
- package/dist/tools/apps/bazi-app.js +3 -2
- package/dist/tools/apps/bi-wheel-app.d.ts +1 -1
- package/dist/tools/apps/bi-wheel-app.js +3 -2
- package/dist/tools/apps/bodygraph-app.d.ts +7 -4
- package/dist/tools/apps/bodygraph-app.js +13 -5
- package/dist/tools/apps/chart-wheel-app.d.ts +1 -1
- package/dist/tools/apps/chart-wheel-app.js +3 -2
- package/dist/tools/apps/moon-phase-app.d.ts +1 -1
- package/dist/tools/apps/moon-phase-app.js +3 -2
- package/dist/tools/apps/transit-timeline-app.d.ts +1 -1
- package/dist/tools/apps/transit-timeline-app.js +3 -2
- 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 +3 -2
- package/dist/tools/specialized/comparative.js +25 -23
- package/dist/tools/specialized/hd_cycles.js +22 -23
- package/dist/tools/specialized/progressed.js +5 -2
- package/dist/tools/specialized/relocation.js +5 -2
- package/dist/tools/visual.d.ts +15 -0
- package/dist/tools/visual.js +22 -0
- package/dist/ui/bazi.html +893 -856
- package/dist/ui/bi-wheel.html +555 -518
- package/dist/ui/bodygraph.html +433 -337
- package/dist/ui/chart-wheel.html +632 -595
- package/dist/ui/moon-phase.html +190 -155
- package/dist/ui/transit-timeline.html +865 -830
- package/dist/ui/vedic-chart.html +252 -215
- 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,81 +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
|
|
6723
|
-
function
|
|
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) {
|
|
6724
6734
|
var t2;
|
|
6725
|
-
return (t2 =
|
|
6735
|
+
return (t2 = A_[e5.trim().toLowerCase()]) == null ? null : t2;
|
|
6726
6736
|
}
|
|
6727
|
-
var
|
|
6728
|
-
function
|
|
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) {
|
|
6729
6739
|
let t2 = /* @__PURE__ */ new Set();
|
|
6730
6740
|
for (let n2 of e5) {
|
|
6731
|
-
let e6 =
|
|
6741
|
+
let e6 = j_(n2);
|
|
6732
6742
|
e6 && t2.add(e6);
|
|
6733
6743
|
}
|
|
6734
6744
|
return t2.has("north node (mean)") && t2.has("north node (true)") || t2.has("south node (mean)") && t2.has("south node (true)");
|
|
6735
6745
|
}
|
|
6736
|
-
function
|
|
6737
|
-
let n2 = new Set(e5.map((e6) =>
|
|
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_]];
|
|
6738
6748
|
for (let [e6, a2] of i2) n2.has(e6) && n2.has(a2) && r2.add(t2 === "true" ? e6 : a2);
|
|
6739
6749
|
return r2.size === 0 ? e5 : e5.filter((e6) => {
|
|
6740
6750
|
var t3;
|
|
6741
|
-
return !r2.has((t3 =
|
|
6751
|
+
return !r2.has((t3 = j_(e6.name)) == null ? "" : t3);
|
|
6742
6752
|
});
|
|
6743
6753
|
}
|
|
6744
|
-
var
|
|
6745
|
-
function
|
|
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) {
|
|
6746
6756
|
var t2;
|
|
6747
|
-
return (t2 =
|
|
6757
|
+
return (t2 = B_[e5.trim().toLowerCase()]) == null ? null : t2;
|
|
6748
6758
|
}
|
|
6749
|
-
var
|
|
6750
|
-
function
|
|
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) {
|
|
6751
6761
|
var t2, n2;
|
|
6752
|
-
return (t2 = (n2 =
|
|
6762
|
+
return (t2 = (n2 = j_(e5)) == null ? V_(e5) : n2) == null ? e5 : t2;
|
|
6753
6763
|
}
|
|
6754
|
-
var
|
|
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;
|
|
6755
6765
|
function Y(e5, t2, n2) {
|
|
6756
6766
|
let r2 = -(e5 - n2 + 180) * Math.PI / 180;
|
|
6757
|
-
return { x:
|
|
6767
|
+
return { x: G_ + t2 * Math.cos(r2), y: K_ + t2 * Math.sin(r2) };
|
|
6758
6768
|
}
|
|
6759
6769
|
function X(e5) {
|
|
6760
6770
|
return document.createElementNS("http://www.w3.org/2000/svg", e5);
|
|
6761
6771
|
}
|
|
6762
|
-
var
|
|
6763
|
-
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) {
|
|
6764
6774
|
let t2 = e5.toLowerCase();
|
|
6765
|
-
return getComputedStyle(document.documentElement).getPropertyValue("--xasp-".concat(t2)).trim() ||
|
|
6775
|
+
return getComputedStyle(document.documentElement).getPropertyValue("--xasp-".concat(t2)).trim() || f_(t2, pv());
|
|
6766
6776
|
}
|
|
6767
|
-
function
|
|
6777
|
+
function cv(e5) {
|
|
6768
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" };
|
|
6769
6779
|
}
|
|
6770
|
-
var
|
|
6771
|
-
function
|
|
6772
|
-
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()];
|
|
6773
6783
|
if (!n2) return null;
|
|
6774
6784
|
let r2 = Math.floor((t2 % 360 + 360) % 360 / 30);
|
|
6775
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;
|
|
6776
6786
|
}
|
|
6777
|
-
var
|
|
6778
|
-
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) {
|
|
6779
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);
|
|
6780
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(" ");
|
|
6781
6791
|
}
|
|
6782
|
-
function
|
|
6792
|
+
function gv(e5, t2, n2, r2, i2, a2, o2) {
|
|
6783
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");
|
|
6784
6794
|
m2.setAttribute("d", p2), m2.setAttribute("fill", a2), m2.setAttribute("fill-opacity", String(o2)), m2.setAttribute("pointer-events", "none"), e5.appendChild(m2);
|
|
6785
6795
|
}
|
|
6786
|
-
var
|
|
6787
|
-
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) {
|
|
6788
6798
|
let t2 = (e5 % 360 + 360) % 360, n2 = Math.floor(t2 / 30), r2 = Math.floor(t2 % 30);
|
|
6789
|
-
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]);
|
|
6790
6800
|
}
|
|
6791
6801
|
function Z(e5) {
|
|
6792
6802
|
return e5.replace(/\b\w/g, (e6) => e6.toUpperCase());
|
|
@@ -6794,29 +6804,29 @@ function Z(e5) {
|
|
|
6794
6804
|
function Q(e5) {
|
|
6795
6805
|
return String(e5).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
6796
6806
|
}
|
|
6797
|
-
var
|
|
6798
|
-
function
|
|
6799
|
-
|
|
6807
|
+
var yv = "true";
|
|
6808
|
+
function bv(e5) {
|
|
6809
|
+
yv = e5;
|
|
6800
6810
|
}
|
|
6801
|
-
function
|
|
6802
|
-
return
|
|
6803
|
-
let t2 =
|
|
6811
|
+
function xv(e5) {
|
|
6812
|
+
return F_(e5.map((e6) => {
|
|
6813
|
+
let t2 = W_(e6.name);
|
|
6804
6814
|
return t2 === e6.name ? e6 : { ...e6, name: t2 };
|
|
6805
|
-
}),
|
|
6815
|
+
}), yv);
|
|
6806
6816
|
}
|
|
6807
|
-
function
|
|
6808
|
-
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]) => {
|
|
6809
6819
|
var n2, r2, i2, a2, o2, s2;
|
|
6810
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 };
|
|
6811
6821
|
})) : [];
|
|
6812
6822
|
}
|
|
6813
|
-
var
|
|
6814
|
-
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) {
|
|
6815
6825
|
let r2 = [];
|
|
6816
6826
|
for (let o2 of e5) for (let e6 of t2) {
|
|
6817
6827
|
let t3 = Math.abs(o2.longitude - e6.longitude) % 360;
|
|
6818
6828
|
t3 > 180 && (t3 = 360 - t3);
|
|
6819
|
-
for (let s2 of
|
|
6829
|
+
for (let s2 of Cv) {
|
|
6820
6830
|
let c2 = s2.orb * n2, l2 = Math.abs(t3 - s2.angle);
|
|
6821
6831
|
if (l2 <= c2) {
|
|
6822
6832
|
var i2, a2;
|
|
@@ -6828,39 +6838,39 @@ function Sv(e5, t2, n2 = 1) {
|
|
|
6828
6838
|
}
|
|
6829
6839
|
return r2.sort((e6, t3) => e6.orb - t3.orb).slice(0, 40);
|
|
6830
6840
|
}
|
|
6831
|
-
var
|
|
6832
|
-
function
|
|
6833
|
-
|
|
6841
|
+
var Tv = null;
|
|
6842
|
+
function Ev(e5) {
|
|
6843
|
+
Tv = e5;
|
|
6834
6844
|
}
|
|
6835
|
-
var
|
|
6836
|
-
function
|
|
6837
|
-
return
|
|
6845
|
+
var Dv = null, Ov = null;
|
|
6846
|
+
function kv() {
|
|
6847
|
+
return Ov || (Ov = document.getElementById("tooltip")), Ov;
|
|
6838
6848
|
}
|
|
6839
|
-
function
|
|
6840
|
-
let a2 =
|
|
6849
|
+
function Av(e5, t2, n2, r2, i2) {
|
|
6850
|
+
let a2 = kv();
|
|
6841
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 ");
|
|
6842
6852
|
let o2 = a2.getBoundingClientRect(), s2 = o2.width || 240, c2 = o2.height || 80, l2 = e5 + 14, u2 = t2 + 10;
|
|
6843
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");
|
|
6844
6854
|
}
|
|
6845
|
-
function
|
|
6846
|
-
|
|
6855
|
+
function jv() {
|
|
6856
|
+
kv().classList.remove("visible");
|
|
6847
6857
|
}
|
|
6848
|
-
var
|
|
6849
|
-
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) {
|
|
6850
6860
|
return "".concat(e5.planet1, "|inner|").concat(e5.planet2, "|outer|").concat(e5.type);
|
|
6851
6861
|
}
|
|
6852
|
-
var
|
|
6853
|
-
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) {
|
|
6854
6864
|
var a2, o2;
|
|
6855
|
-
let s2 =
|
|
6865
|
+
let s2 = Wv(), c2 = Rv[t2];
|
|
6856
6866
|
if (!c2) return;
|
|
6857
|
-
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>' : "";
|
|
6858
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", () => {
|
|
6859
|
-
|
|
6869
|
+
Gv(), Qv();
|
|
6860
6870
|
}), (o2 = document.getElementById("bi-ask-claude-angle-btn")) == null || o2.addEventListener("click", () => {
|
|
6861
|
-
if (!
|
|
6871
|
+
if (!Dv) return;
|
|
6862
6872
|
let e6 = document.getElementById("bi-ask-claude-angle-btn");
|
|
6863
|
-
!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(() => {
|
|
6864
6874
|
e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
|
|
6865
6875
|
e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
|
|
6866
6876
|
}, 2500);
|
|
@@ -6869,32 +6879,32 @@ function Lv(e5, t2, n2, r2, i2) {
|
|
|
6869
6879
|
}));
|
|
6870
6880
|
});
|
|
6871
6881
|
}
|
|
6872
|
-
var
|
|
6873
|
-
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) {
|
|
6874
6884
|
let r2 = (n2 - t2 + 360) % 360;
|
|
6875
6885
|
return e5.filter((e6) => {
|
|
6876
6886
|
let n3 = (e6.longitude - t2 + 360) % 360;
|
|
6877
6887
|
return n3 >= 0 && n3 < r2;
|
|
6878
6888
|
});
|
|
6879
6889
|
}
|
|
6880
|
-
function
|
|
6890
|
+
function Hv(e5, t2, n2, r2, i2, a2, o2, s2) {
|
|
6881
6891
|
var c2, l2, u2, d2, f2;
|
|
6882
|
-
let p2 =
|
|
6883
|
-
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" : "";
|
|
6884
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>");
|
|
6885
|
-
}).join(""), S2 =
|
|
6895
|
+
}).join(""), S2 = Dv ? '<button class="ask-claude-btn" id="bi-ask-claude-house-btn">\u2728 Interpret this</button>' : "";
|
|
6886
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", () => {
|
|
6887
|
-
|
|
6897
|
+
Gv(), Qv();
|
|
6888
6898
|
}), (f2 = document.getElementById("bi-ask-claude-house-btn")) == null || f2.addEventListener("click", () => {
|
|
6889
6899
|
var e6;
|
|
6890
|
-
if (!
|
|
6900
|
+
if (!Dv) return;
|
|
6891
6901
|
let n3 = document.getElementById("bi-ask-claude-house-btn");
|
|
6892
|
-
!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) => {
|
|
6893
6903
|
var t3;
|
|
6894
|
-
return { name: e7.name, position:
|
|
6904
|
+
return { name: e7.name, position: vv(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
|
|
6895
6905
|
}), outer_planets: v2.map((e7) => {
|
|
6896
6906
|
var t3;
|
|
6897
|
-
return { name: e7.name, position:
|
|
6907
|
+
return { name: e7.name, position: vv(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
|
|
6898
6908
|
}) } }).then(() => {
|
|
6899
6909
|
n3.textContent = "\u2713 Sent", n3.classList.remove("sending"), n3.classList.add("sent"), setTimeout(() => {
|
|
6900
6910
|
n3.textContent = "\u2728 Interpret this", n3.classList.remove("sent"), n3.disabled = false;
|
|
@@ -6904,23 +6914,23 @@ function Bv(e5, t2, n2, r2, i2, a2, o2, s2) {
|
|
|
6904
6914
|
}));
|
|
6905
6915
|
});
|
|
6906
6916
|
}
|
|
6907
|
-
function
|
|
6917
|
+
function Uv(e5, t2, n2, r2, i2, a2, o2) {
|
|
6908
6918
|
var s2, c2;
|
|
6909
|
-
let l2 =
|
|
6910
|
-
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" : "";
|
|
6911
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>");
|
|
6912
|
-
}).join(""), b2 =
|
|
6913
|
-
l2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(
|
|
6914
|
-
|
|
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();
|
|
6915
6925
|
}), (c2 = document.getElementById("bi-ask-claude-sign-btn")) == null || c2.addEventListener("click", () => {
|
|
6916
|
-
if (!
|
|
6926
|
+
if (!Dv) return;
|
|
6917
6927
|
let e6 = document.getElementById("bi-ask-claude-sign-btn");
|
|
6918
|
-
!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) => {
|
|
6919
6929
|
var t3;
|
|
6920
|
-
return { name: e7.name, position:
|
|
6930
|
+
return { name: e7.name, position: vv(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
|
|
6921
6931
|
}), outer_planets: g2.map((e7) => {
|
|
6922
6932
|
var t3;
|
|
6923
|
-
return { name: e7.name, position:
|
|
6933
|
+
return { name: e7.name, position: vv(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
|
|
6924
6934
|
}) } }).then(() => {
|
|
6925
6935
|
e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
|
|
6926
6936
|
e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
|
|
@@ -6930,7 +6940,7 @@ function Vv(e5, t2, n2, r2, i2, a2, o2) {
|
|
|
6930
6940
|
}));
|
|
6931
6941
|
});
|
|
6932
6942
|
}
|
|
6933
|
-
function
|
|
6943
|
+
function Wv() {
|
|
6934
6944
|
if (document.body.classList.contains("is-fullscreen")) {
|
|
6935
6945
|
let e6 = document.querySelector("#fs-bottom-bar [data-column='right']");
|
|
6936
6946
|
if (e6) {
|
|
@@ -6938,36 +6948,36 @@ function Hv() {
|
|
|
6938
6948
|
return t3 || (t3 = document.createElement("div"), t3.className = "info-drawer info-drawer--fs", e6.appendChild(t3)), t3;
|
|
6939
6949
|
}
|
|
6940
6950
|
}
|
|
6941
|
-
if (
|
|
6942
|
-
|
|
6951
|
+
if (Pv && Pv.isConnected) return Pv;
|
|
6952
|
+
Pv = document.createElement("div"), Pv.id = "bi-info-drawer", Pv.className = "info-drawer";
|
|
6943
6953
|
let e5 = document.getElementById("chart-container");
|
|
6944
|
-
if (e5 != null && e5.parentElement) e5.parentElement.insertBefore(
|
|
6954
|
+
if (e5 != null && e5.parentElement) e5.parentElement.insertBefore(Pv, e5.nextSibling);
|
|
6945
6955
|
else {
|
|
6946
6956
|
var t2;
|
|
6947
|
-
(t2 = document.getElementById("app")) == null || t2.appendChild(
|
|
6957
|
+
(t2 = document.getElementById("app")) == null || t2.appendChild(Pv);
|
|
6948
6958
|
}
|
|
6949
|
-
return
|
|
6959
|
+
return Pv;
|
|
6950
6960
|
}
|
|
6951
|
-
function
|
|
6961
|
+
function Gv() {
|
|
6952
6962
|
var e5;
|
|
6953
|
-
|
|
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);
|
|
6954
6964
|
}
|
|
6955
|
-
function
|
|
6965
|
+
function Kv(e5, t2, n2, r2, i2, a2, o2) {
|
|
6956
6966
|
var s2, c2, l2, u2, d2;
|
|
6957
|
-
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;
|
|
6958
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";
|
|
6959
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) => {
|
|
6960
6970
|
var t3, r3, a3, o3, s3, c3, l3;
|
|
6961
|
-
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";
|
|
6962
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>");
|
|
6963
|
-
}).join("") : '<div class="no-aspects">No cross-aspects within orb</div>', b2 = (l2 =
|
|
6964
|
-
f2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph">'.concat(Q(p2), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:6px;flex-wrap:wrap;">\n <strong>').concat(Q(Z(t2.name)), "</strong>\n ").concat(t2.retrograde ? "<span style='color:#e05252'>\u211E</span>" : "", "\n ").concat(h2 ? '<span class="dignity-badge '.concat(h2.cssClass, '">').concat(h2.emoji, " ").concat(Q(h2.label), "</span>") : "", '\n <span class="wheel-badge ').concat(_2, '">').concat(Q(g2), '</span>\n </div>\n <div class="info-subtitle">').concat(Q(m2), " ").concat(Q(
|
|
6965
|
-
|
|
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();
|
|
6966
6976
|
}), (d2 = document.getElementById("bi-ask-claude-planet-btn")) == null || d2.addEventListener("click", () => {
|
|
6967
6977
|
var e6, r3;
|
|
6968
|
-
if (!
|
|
6978
|
+
if (!Dv) return;
|
|
6969
6979
|
let a3 = document.getElementById("bi-ask-claude-planet-btn");
|
|
6970
|
-
!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(() => {
|
|
6971
6981
|
a3.textContent = "\u2713 Sent", a3.classList.remove("sending"), a3.classList.add("sent"), setTimeout(() => {
|
|
6972
6982
|
a3.textContent = "\u2728 Interpret this", a3.classList.remove("sent"), a3.disabled = false;
|
|
6973
6983
|
}, 2500);
|
|
@@ -6976,15 +6986,15 @@ function Wv(e5, t2, n2, r2, i2, a2, o2) {
|
|
|
6976
6986
|
}));
|
|
6977
6987
|
});
|
|
6978
6988
|
}
|
|
6979
|
-
function
|
|
6989
|
+
function qv(e5, t2, n2, r2, i2) {
|
|
6980
6990
|
var a2, o2, s2, c2, l2, u2, d2, f2, p2;
|
|
6981
|
-
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>' : "";
|
|
6982
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", () => {
|
|
6983
|
-
|
|
6993
|
+
Gv(), Qv();
|
|
6984
6994
|
}), (p2 = document.getElementById("bi-ask-claude-asp-btn")) == null || p2.addEventListener("click", () => {
|
|
6985
|
-
if (!
|
|
6995
|
+
if (!Dv) return;
|
|
6986
6996
|
let e6 = document.getElementById("bi-ask-claude-asp-btn");
|
|
6987
|
-
!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(() => {
|
|
6988
6998
|
e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
|
|
6989
6999
|
e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
|
|
6990
7000
|
}, 2500);
|
|
@@ -6993,82 +7003,82 @@ function Gv(e5, t2, n2, r2, i2) {
|
|
|
6993
7003
|
}));
|
|
6994
7004
|
});
|
|
6995
7005
|
}
|
|
6996
|
-
function
|
|
6997
|
-
|
|
7006
|
+
function Jv(e5, t2) {
|
|
7007
|
+
Iv.forEach(({ vis: n2, color: r2, symbolEls: i2 }, a2) => {
|
|
6998
7008
|
let o2 = a2.split("|");
|
|
6999
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"));
|
|
7000
|
-
}),
|
|
7010
|
+
}), Xv(e5, t2);
|
|
7001
7011
|
}
|
|
7002
|
-
function
|
|
7003
|
-
|
|
7012
|
+
function Yv(e5, t2) {
|
|
7013
|
+
Iv.forEach(({ vis: n2, color: r2, symbolEls: i2 }, a2) => {
|
|
7004
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"));
|
|
7005
7015
|
});
|
|
7006
7016
|
}
|
|
7007
|
-
function
|
|
7017
|
+
function Xv(e5, t2) {
|
|
7008
7018
|
let n2 = e5.toLowerCase(), r2 = /* @__PURE__ */ new Set(), i2 = /* @__PURE__ */ new Set();
|
|
7009
|
-
|
|
7019
|
+
Iv.forEach((e6, a3) => {
|
|
7010
7020
|
var o2, s2;
|
|
7011
7021
|
let c2 = a3.split("|"), l2 = ((o2 = c2[0]) == null ? "" : o2).toLowerCase(), u2 = ((s2 = c2[2]) == null ? "" : s2).toLowerCase();
|
|
7012
7022
|
t2 === "inner" && l2 === n2 && i2.add(u2), t2 === "outer" && u2 === n2 && r2.add(l2);
|
|
7013
7023
|
});
|
|
7014
7024
|
let a2 = (e6, t3) => t3 === "inner" && r2.has(e6) || t3 === "outer" && i2.has(e6);
|
|
7015
|
-
|
|
7025
|
+
Fv == null || Fv.querySelectorAll(".planet-hit").forEach((e6) => {
|
|
7016
7026
|
var r3;
|
|
7017
7027
|
let i3 = e6.dataset.wheel, o2 = (r3 = e6.dataset.planet) == null ? "" : r3, s2 = o2 === n2 && i3 === t2, c2 = !s2 && a2(o2, i3);
|
|
7018
7028
|
e6.classList.toggle("dim", !s2 && !c2);
|
|
7019
|
-
}),
|
|
7029
|
+
}), Fv == null || Fv.querySelectorAll(".planet-glyph-group").forEach((e6) => {
|
|
7020
7030
|
var r3;
|
|
7021
7031
|
let i3 = e6.dataset.wheel, o2 = (r3 = e6.dataset.planet) == null ? "" : r3;
|
|
7022
7032
|
o2 === n2 && i3 === t2 ? e6.style.opacity = "1" : a2(o2, i3) ? e6.style.opacity = "0.55" : e6.style.opacity = "0.12";
|
|
7023
7033
|
});
|
|
7024
7034
|
}
|
|
7025
|
-
function
|
|
7026
|
-
|
|
7035
|
+
function Zv() {
|
|
7036
|
+
Iv.forEach(({ vis: e5, symbolEls: t2 }) => {
|
|
7027
7037
|
e5.style.strokeOpacity = "0.05", e5.style.strokeWidth = "0.5", e5.removeAttribute("filter"), t2.forEach((e6) => e6.style.opacity = "0.15");
|
|
7028
|
-
}),
|
|
7038
|
+
}), Fv == null || Fv.querySelectorAll(".planet-glyph-group").forEach((e5) => {
|
|
7029
7039
|
e5.style.opacity = "0.3";
|
|
7030
|
-
}),
|
|
7040
|
+
}), Fv == null || Fv.querySelectorAll(".planet-hit").forEach((e5) => {
|
|
7031
7041
|
e5.classList.add("dim");
|
|
7032
7042
|
});
|
|
7033
7043
|
}
|
|
7034
|
-
function
|
|
7035
|
-
|
|
7036
|
-
let i2 =
|
|
7044
|
+
function Qv() {
|
|
7045
|
+
Iv.forEach(({ vis: e5, color: t2, orb: n2, symbolEls: r2 }) => {
|
|
7046
|
+
let i2 = cv(n2 == null ? 4 : n2);
|
|
7037
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 = "");
|
|
7038
|
-
}),
|
|
7048
|
+
}), Fv == null || Fv.querySelectorAll(".planet-glyph-group").forEach((e5) => {
|
|
7039
7049
|
e5.style.opacity = "";
|
|
7040
|
-
}),
|
|
7050
|
+
}), Fv == null || Fv.querySelectorAll(".planet-hit").forEach((e5) => e5.classList.remove("dim")), sy();
|
|
7041
7051
|
}
|
|
7042
|
-
function
|
|
7043
|
-
|
|
7052
|
+
function $v(e5) {
|
|
7053
|
+
Iv.forEach(({ vis: t2, symbolEls: n2 }) => {
|
|
7044
7054
|
t2.style.display = e5 ? "" : "none", n2.forEach((t3) => t3.style.display = e5 ? "" : "none");
|
|
7045
|
-
}),
|
|
7055
|
+
}), Fv == null || Fv.querySelectorAll(".aspect-hit").forEach((t2) => {
|
|
7046
7056
|
t2.style.display = e5 ? "" : "none";
|
|
7047
7057
|
});
|
|
7048
7058
|
}
|
|
7049
|
-
function
|
|
7059
|
+
function ey(e5, t2, n2) {
|
|
7050
7060
|
return "".concat(e5, "|inner|").concat(t2, "|outer|").concat(n2);
|
|
7051
7061
|
}
|
|
7052
|
-
function
|
|
7062
|
+
function ty(e5, t2, n2, r2, i2) {
|
|
7053
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);
|
|
7054
7064
|
}
|
|
7055
|
-
function
|
|
7065
|
+
function ny(e5, t2) {
|
|
7056
7066
|
return e5.filter((e6) => {
|
|
7057
7067
|
var n2;
|
|
7058
7068
|
return ((n2 = e6.type) == null ? "" : n2).toLowerCase() === t2;
|
|
7059
7069
|
});
|
|
7060
7070
|
}
|
|
7061
|
-
function
|
|
7071
|
+
function ry(e5) {
|
|
7062
7072
|
let t2 = [];
|
|
7063
7073
|
if (!e5.length) return t2;
|
|
7064
|
-
let n2 =
|
|
7074
|
+
let n2 = ny(e5, "trine"), r2 = ny(e5, "square"), i2 = ny(e5, "opposition"), a2 = ny(e5, "conjunction"), o2 = /* @__PURE__ */ new Set();
|
|
7065
7075
|
for (let e6 = 0; e6 < n2.length; e6++) for (let r3 = e6 + 1; r3 < n2.length; r3++) {
|
|
7066
7076
|
let i3 = n2[e6], a3 = n2[r3];
|
|
7067
7077
|
if (i3.planet1 !== a3.planet1) continue;
|
|
7068
7078
|
let s3 = i3.planet1, c3 = i3.planet2, l2 = a3.planet2;
|
|
7069
7079
|
if (c3 === l2) continue;
|
|
7070
7080
|
let u2 = [s3, c3, l2].sort().join("|");
|
|
7071
|
-
o2.has(u2) || (o2.add(u2), t2.push({ name: "Cross Trine", description: "".concat(Z(s3), " trines ").concat(Z(c3), " & ").concat(Z(l2)), planets: [{ name: s3, wheel: "inner" }, { name: c3, wheel: "outer" }, { name: l2, wheel: "outer" }], aspectKeys: [
|
|
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")] }));
|
|
7072
7082
|
}
|
|
7073
7083
|
let s2 = /* @__PURE__ */ new Set();
|
|
7074
7084
|
for (let e6 of i2) {
|
|
@@ -7083,7 +7093,7 @@ function ty(e5) {
|
|
|
7083
7093
|
if (s2.has(c3)) continue;
|
|
7084
7094
|
let l2;
|
|
7085
7095
|
if (l2 = o3 === "outer" ? e7 : r2.find((e8) => e8.planet1 === a3 && e8.planet2 === i3), l2) {
|
|
7086
|
-
s2.add(c3), t2.push({ name: "Cross T-Square", description: "Apex: ".concat(Z(a3), " (").concat(o3, ")"), planets: [{ name: n3, wheel: "inner" }, { name: i3, wheel: "outer" }, { name: a3, wheel: o3 }], aspectKeys: [
|
|
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")] });
|
|
7087
7097
|
break;
|
|
7088
7098
|
}
|
|
7089
7099
|
}
|
|
@@ -7099,26 +7109,26 @@ function ty(e5) {
|
|
|
7099
7109
|
for (let [r3, i3] of e6) {
|
|
7100
7110
|
if (i3.length < 2) continue;
|
|
7101
7111
|
let e7 = "".concat(r3, "|").concat([...i3].sort().join("|"));
|
|
7102
|
-
n3.has(e7) || (n3.add(e7), t2.push({ name: "Cross Stellium", description: "".concat(Z(r3), " conjunct ").concat(i3.map(Z).join(" & "), " (cross-wheel)"), planets: [{ name: r3, wheel: "inner" }, ...i3.map((e8) => ({ name: e8, wheel: "outer" }))], aspectKeys: i3.map((e8) =>
|
|
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")) }));
|
|
7103
7113
|
}
|
|
7104
7114
|
}
|
|
7105
7115
|
return t2;
|
|
7106
7116
|
}
|
|
7107
|
-
var
|
|
7108
|
-
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) {
|
|
7109
7119
|
var i2, a2;
|
|
7110
|
-
if (!
|
|
7120
|
+
if (!Fv) return null;
|
|
7111
7121
|
let o2 = /* @__PURE__ */ new Map();
|
|
7112
7122
|
for (let e6 of t2) o2.set(e6.name.toLowerCase(), e6.longitude);
|
|
7113
7123
|
let s2 = /* @__PURE__ */ new Map();
|
|
7114
7124
|
for (let e6 of n2) s2.set(e6.name.toLowerCase(), e6.longitude);
|
|
7115
7125
|
let c2 = [];
|
|
7116
7126
|
for (let { name: t3, wheel: n3 } of e5.planets) {
|
|
7117
|
-
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());
|
|
7118
7128
|
a3 != null && c2.push(Y(a3, i3, r2));
|
|
7119
7129
|
}
|
|
7120
7130
|
if (c2.length < 2) return null;
|
|
7121
|
-
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;
|
|
7122
7132
|
if (c2.length === 2) {
|
|
7123
7133
|
let e6 = X("line");
|
|
7124
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;
|
|
@@ -7127,39 +7137,39 @@ function iy(e5, t2, n2, r2) {
|
|
|
7127
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;
|
|
7128
7138
|
}
|
|
7129
7139
|
d2.setAttribute("pointer-events", "none"), d2.setAttribute("class", "pattern-overlay");
|
|
7130
|
-
let f2 =
|
|
7131
|
-
return f2 ?
|
|
7140
|
+
let f2 = Fv.querySelector(".aspect-hit");
|
|
7141
|
+
return f2 ? Fv.insertBefore(d2, f2) : Fv.appendChild(d2), d2;
|
|
7132
7142
|
}
|
|
7133
|
-
function
|
|
7134
|
-
|
|
7143
|
+
function sy() {
|
|
7144
|
+
Fv == null || Fv.querySelectorAll(".pattern-overlay").forEach((e5) => e5.remove());
|
|
7135
7145
|
}
|
|
7136
|
-
function
|
|
7146
|
+
function cy(e5) {
|
|
7137
7147
|
let t2 = new Set(e5.aspectKeys);
|
|
7138
|
-
|
|
7148
|
+
Iv.forEach(({ vis: e6, color: n3, symbolEls: r2 }, i2) => {
|
|
7139
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"));
|
|
7140
7150
|
});
|
|
7141
7151
|
let n2 = new Set(e5.planets.map((e6) => "".concat(e6.name.toLowerCase(), "|").concat(e6.wheel)));
|
|
7142
|
-
|
|
7152
|
+
Fv == null || Fv.querySelectorAll(".planet-glyph-group").forEach((e6) => {
|
|
7143
7153
|
var t3, r2;
|
|
7144
7154
|
let i2 = "".concat((t3 = e6.dataset.planet) == null ? "" : t3, "|").concat((r2 = e6.dataset.wheel) == null ? "" : r2);
|
|
7145
7155
|
e6.style.opacity = n2.has(i2) ? "1" : "0.12";
|
|
7146
|
-
}),
|
|
7156
|
+
}), Fv == null || Fv.querySelectorAll(".planet-hit").forEach((e6) => {
|
|
7147
7157
|
var t3, r2;
|
|
7148
7158
|
let i2 = "".concat((t3 = e6.dataset.planet) == null ? "" : t3, "|").concat((r2 = e6.dataset.wheel) == null ? "" : r2);
|
|
7149
7159
|
e6.classList.toggle("dim", !n2.has(i2));
|
|
7150
7160
|
});
|
|
7151
7161
|
}
|
|
7152
|
-
function
|
|
7162
|
+
function ly(e5, t2, n2, r2, i2, a2) {
|
|
7153
7163
|
var o2, s2, c2, l2, u2, d2, f2, p2, m2, h2, g2, _2;
|
|
7154
|
-
|
|
7164
|
+
Dv = i2 == null ? null : i2;
|
|
7155
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");
|
|
7156
|
-
e5.innerHTML = "", x2 && e5.appendChild(x2),
|
|
7157
|
-
let S2 =
|
|
7158
|
-
te2.length === 0 && S2.length > 0 && ee2.length > 0 && (te2 =
|
|
7159
|
-
let w2 = (d2 = (f2 = (p2 = C2[0]) == null ? void 0 : p2.cusp_lon) == null ? t2.ascendant : f2) == null ? 0 : d2, T2 =
|
|
7160
|
-
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;
|
|
7161
7171
|
let ne2 = X("defs");
|
|
7162
|
-
ne2.innerHTML = '\n <filter id="aspect-glow" x="-50%" y="-50%" width="200%" height="200%">\n <feGaussianBlur in="SourceGraphic" stdDeviation="2.5" result="blur" />\n <feComposite in="SourceGraphic" in2="blur" operator="over" />\n </filter>\n ', E2.appendChild(ne2),
|
|
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");
|
|
7163
7173
|
let re2 = X("g");
|
|
7164
7174
|
re2.setAttribute("class", "chart-layer"), re2.style.setProperty("--layer-index", "1"), E2.appendChild(re2);
|
|
7165
7175
|
let D2 = X("g");
|
|
@@ -7174,110 +7184,110 @@ function sy(e5, t2, n2, r2, i2, a2) {
|
|
|
7174
7184
|
E2.appendChild(se2);
|
|
7175
7185
|
let ce2 = X("circle");
|
|
7176
7186
|
ce2.setAttribute("cx", "310"), ce2.setAttribute("cy", "310"), ce2.setAttribute("r", "304"), ce2.style.fill = "var(--bg, #faf9f5)";
|
|
7177
|
-
let le2 =
|
|
7187
|
+
let le2 = p_(T2), ue2 = (e6, t3) => {
|
|
7178
7188
|
e6.setAttribute("stroke", le2.ring.stroke), e6.setAttribute("stroke-opacity", String(le2.ring.opacity)), e6.setAttribute("stroke-width", t3);
|
|
7179
7189
|
};
|
|
7180
7190
|
ue2(ce2, "0.5"), ce2.setAttribute("pointer-events", "none"), re2.appendChild(ce2);
|
|
7181
7191
|
let de2 = X("circle");
|
|
7182
|
-
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);
|
|
7183
7193
|
let fe2 = X("circle");
|
|
7184
|
-
fe2.setAttribute("cx", "310"), fe2.setAttribute("cy", "310"), fe2.setAttribute("r", String(
|
|
7185
|
-
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);
|
|
7186
7196
|
for (let e6 = 0; e6 < 12; e6++) {
|
|
7187
|
-
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");
|
|
7188
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);
|
|
7189
7199
|
let { x: s3, y: c3 } = Y(t3 + 15, 536 / 2, w2), l3 = X("text");
|
|
7190
|
-
l3.setAttribute("x", s3.toFixed(1)), l3.setAttribute("y", c3.toFixed(1)), l3.setAttribute("text-anchor", "middle"), l3.setAttribute("dominant-baseline", "central"), l3.setAttribute("font-size", "12"), l3.setAttribute("fill",
|
|
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);
|
|
7191
7201
|
for (let e7 = 1; e7 < 30; e7++) {
|
|
7192
|
-
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");
|
|
7193
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));
|
|
7194
7204
|
let u4 = r4 ? le2.tickMajor : le2.tickMinor;
|
|
7195
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);
|
|
7196
7206
|
}
|
|
7197
|
-
let { x: u3, y: d3 } = Y(t3,
|
|
7198
|
-
x3.setAttribute("d", ["M ".concat(u3.toFixed(1), " ").concat(d3.toFixed(1)), "A ".concat(
|
|
7199
|
-
let C3 = "".concat(
|
|
7200
|
-
|
|
7201
|
-
|
|
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);
|
|
7202
7212
|
}), se2.appendChild(x3);
|
|
7203
7213
|
}
|
|
7204
7214
|
let pe2 = X("circle");
|
|
7205
|
-
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);
|
|
7206
7216
|
let me2 = X("circle");
|
|
7207
|
-
me2.setAttribute("cx", "310"), me2.setAttribute("cy", "310"), me2.setAttribute("r", String(
|
|
7208
|
-
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);
|
|
7209
7219
|
for (let e6 = 0; e6 < 12; e6++) {
|
|
7210
|
-
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");
|
|
7211
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);
|
|
7212
7222
|
let { x: s3, y: c3 } = Y(t3 + 15, 444 / 2, w2), l3 = X("text");
|
|
7213
|
-
l3.setAttribute("x", s3.toFixed(1)), l3.setAttribute("y", c3.toFixed(1)), l3.setAttribute("text-anchor", "middle"), l3.setAttribute("dominant-baseline", "central"), l3.setAttribute("font-size", "13"), l3.setAttribute("fill",
|
|
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);
|
|
7214
7224
|
for (let e7 = 1; e7 < 30; e7++) {
|
|
7215
|
-
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");
|
|
7216
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));
|
|
7217
7227
|
let u3 = r4 ? le2.tickMajor : le2.tickMinor;
|
|
7218
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);
|
|
7219
7229
|
}
|
|
7220
7230
|
}
|
|
7221
7231
|
let he2 = X("g");
|
|
7222
|
-
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_, ")"));
|
|
7223
7233
|
let ge2 = X("circle");
|
|
7224
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);
|
|
7225
7235
|
let _e2 = X("circle");
|
|
7226
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);
|
|
7227
7237
|
let ve2 = X("text");
|
|
7228
|
-
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);
|
|
7229
7239
|
for (let e6 of [0, 90, 180, 270]) {
|
|
7230
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");
|
|
7231
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);
|
|
7232
7242
|
}
|
|
7233
7243
|
re2.appendChild(he2);
|
|
7234
7244
|
let ye2 = X("circle");
|
|
7235
|
-
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);
|
|
7236
7246
|
let be2 = X("circle");
|
|
7237
|
-
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++) {
|
|
7238
7248
|
let t3 = C2[e6], n3 = C2[(e6 + 1) % C2.length], r3 = [1, 4, 7, 10].includes(t3.number), i3 = X("path");
|
|
7239
|
-
i3.setAttribute("d",
|
|
7240
|
-
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");
|
|
7241
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));
|
|
7242
7252
|
let u3 = r3 ? le2.cuspAngular : le2.cuspIntermediate;
|
|
7243
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);
|
|
7244
|
-
let d3 = (n3.cusp_lon - t3.cusp_lon + 360) % 360, { x: f3, y: p3 } = Y(t3.cusp_lon + d3 / 2,
|
|
7245
|
-
m3.setAttribute("x", f3.toFixed(1)), m3.setAttribute("y", p3.toFixed(1)), m3.setAttribute("text-anchor", "middle"), m3.setAttribute("dominant-baseline", "central"), m3.setAttribute("font-size", "12"), m3.setAttribute("fill",
|
|
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);
|
|
7246
7256
|
let h3 = X("circle");
|
|
7247
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";
|
|
7248
|
-
let g3 = "House ".concat(t3.number), _3 = "".concat(
|
|
7249
|
-
|
|
7250
|
-
|
|
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);
|
|
7251
7261
|
}), se2.appendChild(h3);
|
|
7252
7262
|
}
|
|
7253
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" }];
|
|
7254
7264
|
for (let e6 of Ce2) {
|
|
7255
7265
|
var we2;
|
|
7256
|
-
let t3 =
|
|
7257
|
-
i3.setAttribute("x", n3.toFixed(1)), i3.setAttribute("y", r3.toFixed(1)), i3.setAttribute("text-anchor", "middle"), i3.setAttribute("dominant-baseline", "central"), i3.setAttribute("font-size", "12"), i3.setAttribute("font-weight", "700"), i3.setAttribute("fill",
|
|
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);
|
|
7258
7268
|
let a3 = X("circle");
|
|
7259
|
-
a3.setAttribute("cx", n3.toFixed(1)), a3.setAttribute("cy", r3.toFixed(1)), a3.setAttribute("r", "14"), a3.setAttribute("fill", "transparent"), a3.setAttribute("class", "hit-region angle-hit"), a3.style.pointerEvents = "all", a3.style.cursor = "pointer",
|
|
7260
|
-
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);
|
|
7261
7271
|
a3.addEventListener("mouseenter", (n4) => {
|
|
7262
7272
|
var r4;
|
|
7263
|
-
|
|
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";
|
|
7264
7274
|
}), a3.addEventListener("mouseleave", () => {
|
|
7265
|
-
|
|
7275
|
+
jv(), i3.style.opacity = "";
|
|
7266
7276
|
}), a3.addEventListener("click", (n4) => {
|
|
7267
7277
|
var r4;
|
|
7268
|
-
|
|
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);
|
|
7269
7279
|
}), se2.appendChild(a3);
|
|
7270
7280
|
}
|
|
7271
7281
|
for (let e6 of te2) {
|
|
7272
7282
|
var Te2, Ee2, De2, Oe2, ke2, Ae2, je2, Me2, Ne2, Pe2, Fe2, Ie2;
|
|
7273
7283
|
let t3 = S2.find((t4) => t4.name.toLowerCase() === e6.planet1.toLowerCase()), n3 = ee2.find((t4) => t4.name.toLowerCase() === e6.planet2.toLowerCase());
|
|
7274
7284
|
if (!t3 || !n3) continue;
|
|
7275
|
-
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");
|
|
7276
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);
|
|
7277
7287
|
let d3 = o3 + (c3 - o3) * 0.35, f3 = s3 + (l3 - s3) * 0.35, p3 = Math.hypot(c3 - o3, l3 - s3), m3 = [];
|
|
7278
7288
|
if (p3 > 40) {
|
|
7279
7289
|
var Le2, A2, Re2;
|
|
7280
|
-
let t4 = (Le2 =
|
|
7290
|
+
let t4 = (Le2 = ov[(A2 = (Re2 = e6.type) == null ? void 0 : Re2.toLowerCase()) == null ? "" : A2]) == null ? "" : Le2;
|
|
7281
7291
|
if (t4) {
|
|
7282
7292
|
let e7 = X("circle");
|
|
7283
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);
|
|
@@ -7286,123 +7296,123 @@ function sy(e5, t2, n2, r2, i2, a2) {
|
|
|
7286
7296
|
}
|
|
7287
7297
|
}
|
|
7288
7298
|
let h3 = X("line");
|
|
7289
|
-
h3.setAttribute("x1", o3.toFixed(1)), h3.setAttribute("y1", s3.toFixed(1)), h3.setAttribute("x2", c3.toFixed(1)), h3.setAttribute("y2", l3.toFixed(1)), h3.setAttribute("stroke", "transparent"), h3.setAttribute("stroke-width", "20"), h3.setAttribute("fill", "none"), h3.setAttribute("class", "hit-region aspect-hit"), h3.style.pointerEvents = "all",
|
|
7290
|
-
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);
|
|
7291
7301
|
h3.addEventListener("mouseenter", (t4) => {
|
|
7292
7302
|
var n4;
|
|
7293
|
-
return
|
|
7303
|
+
return Av(t4.clientX, t4.clientY, Z((n4 = e6.type) == null ? "Cross-Aspect" : n4), T3, "Click for interpretation");
|
|
7294
7304
|
}), h3.addEventListener("mousemove", (t4) => {
|
|
7295
7305
|
var n4;
|
|
7296
|
-
return
|
|
7297
|
-
}), 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) => {
|
|
7298
7308
|
var n4, a4, o4, s4, c4, l4;
|
|
7299
|
-
|
|
7300
|
-
let u4 = (n4 =
|
|
7301
|
-
|
|
7302
|
-
}),
|
|
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);
|
|
7303
7313
|
}
|
|
7304
|
-
let ze2 =
|
|
7314
|
+
let ze2 = y_(ee2.map((e6) => ({ name: e6.name.toLowerCase(), longitude: e6.longitude })), 7), Be2 = X("g");
|
|
7305
7315
|
Be2.setAttribute("class", "outer-planet-group"), oe2.appendChild(Be2);
|
|
7306
7316
|
for (let e6 of ee2) {
|
|
7307
7317
|
var Ve2, He2, Ue2;
|
|
7308
|
-
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");
|
|
7309
7319
|
s3.setAttribute("class", "planet-glyph-group"), s3.dataset.planet = r3, s3.dataset.wheel = "outer", s3.style.transition = "opacity 200ms ease", Be2.appendChild(s3);
|
|
7310
7320
|
let { x: c3, y: l3 } = Y(e6.longitude, 251, w2), u3 = X("circle");
|
|
7311
|
-
if (u3.setAttribute("cx", c3.toFixed(1)), u3.setAttribute("cy", l3.toFixed(1)), u3.setAttribute("r", "2.5"), u3.setAttribute("fill", "var(--outer-tick, #c8860e)"), u3.setAttribute("opacity", "0.75"), u3.setAttribute("pointer-events", "none"), s3.appendChild(u3),
|
|
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) {
|
|
7312
7322
|
let e7 = X("line");
|
|
7313
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);
|
|
7314
7324
|
}
|
|
7315
7325
|
let d3 = X("text");
|
|
7316
|
-
d3.setAttribute("x", a3.toFixed(1)), d3.setAttribute("y", o3.toFixed(1)), d3.setAttribute("text-anchor", "middle"), d3.setAttribute("dominant-baseline", "central"), d3.setAttribute("font-size", "18"), d3.setAttribute("font-weight", "600"), d3.setAttribute("pointer-events", "none"), d3.style.fill =
|
|
7317
|
-
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");
|
|
7318
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) {
|
|
7319
7329
|
let { x: e7, y: t4 } = Y(i3, 277, w2), n3 = X("text");
|
|
7320
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);
|
|
7321
7331
|
}
|
|
7322
|
-
let g3 =
|
|
7332
|
+
let g3 = uv(e6.name, e6.longitude);
|
|
7323
7333
|
if (g3) {
|
|
7324
7334
|
let { x: e7, y: t4 } = Y(i3, 276, w2), n3 = X("circle");
|
|
7325
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);
|
|
7326
7336
|
}
|
|
7327
7337
|
let _3 = X("circle");
|
|
7328
|
-
_3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(
|
|
7329
|
-
let x3 = "".concat(v2 === "transit" ? "Tr. " : b2 ? "".concat(b2, "'s ") : "").concat(t3, " ").concat(Z(e6.name)), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Ue2 =
|
|
7330
|
-
_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) => {
|
|
7331
7341
|
var r4, i4;
|
|
7332
|
-
|
|
7333
|
-
let a4 = (r4 =
|
|
7334
|
-
|
|
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);
|
|
7335
7345
|
}), s3.appendChild(_3);
|
|
7336
7346
|
}
|
|
7337
|
-
let We2 =
|
|
7347
|
+
let We2 = y_(S2.map((e6) => ({ name: e6.name.toLowerCase(), longitude: e6.longitude })), 8), Ge2 = X("g");
|
|
7338
7348
|
Ge2.setAttribute("class", "inner-planet-group"), oe2.appendChild(Ge2);
|
|
7339
7349
|
for (let e6 of S2) {
|
|
7340
7350
|
var Ke2, qe2, Je2;
|
|
7341
|
-
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");
|
|
7342
7352
|
s3.setAttribute("class", "planet-glyph-group"), s3.dataset.planet = r3, s3.dataset.wheel = "inner", s3.style.transition = "opacity 200ms ease", Ge2.appendChild(s3);
|
|
7343
|
-
let { x: c3, y: l3 } = Y(e6.longitude,
|
|
7344
|
-
if (u3.setAttribute("cx", c3.toFixed(1)), u3.setAttribute("cy", l3.toFixed(1)), u3.setAttribute("r", "2.5"), u3.setAttribute("fill", "var(--inner-tick, #7060b8)"), u3.setAttribute("opacity", "0.65"), u3.setAttribute("pointer-events", "none"), s3.appendChild(u3),
|
|
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) {
|
|
7345
7355
|
let e7 = X("line");
|
|
7346
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);
|
|
7347
7357
|
}
|
|
7348
7358
|
let d3 = X("text");
|
|
7349
|
-
d3.setAttribute("x", a3.toFixed(1)), d3.setAttribute("y", o3.toFixed(1)), d3.setAttribute("text-anchor", "middle"), d3.setAttribute("dominant-baseline", "central"), d3.setAttribute("font-size", "20"), d3.setAttribute("font-weight", "600"), d3.setAttribute("pointer-events", "none"), d3.style.fill =
|
|
7350
|
-
let f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), { x: p3, y: m3 } = Y(i3,
|
|
7351
|
-
if (h3.setAttribute("x", p3.toFixed(1)), h3.setAttribute("y", m3.toFixed(1)), h3.setAttribute("text-anchor", "middle"), h3.setAttribute("dominant-baseline", "central"), h3.setAttribute("font-size", "8.5"), h3.setAttribute("fill",
|
|
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) {
|
|
7352
7362
|
let { x: e7, y: t4 } = Y(i3, 204, w2), n3 = X("text");
|
|
7353
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);
|
|
7354
7364
|
}
|
|
7355
|
-
let g3 =
|
|
7365
|
+
let g3 = uv(e6.name, e6.longitude);
|
|
7356
7366
|
if (g3) {
|
|
7357
7367
|
let { x: e7, y: t4 } = Y(i3, 202, w2), n3 = X("circle");
|
|
7358
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);
|
|
7359
7369
|
}
|
|
7360
7370
|
let _3 = X("circle");
|
|
7361
|
-
_3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(
|
|
7362
|
-
let x3 = y2 ? "".concat(y2, "'s ").concat(t3, " ").concat(Z(e6.name)) : "".concat(t3, " ").concat(Z(e6.name), " (natal)"), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Je2 =
|
|
7363
|
-
_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) => {
|
|
7364
7374
|
var r4, i4, a4;
|
|
7365
|
-
|
|
7366
|
-
let o4 = (r4 =
|
|
7367
|
-
|
|
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);
|
|
7368
7378
|
}), s3.appendChild(_3);
|
|
7369
7379
|
}
|
|
7370
7380
|
let Ye2 = "__biWheelClickOutside__", Xe2 = document[Ye2];
|
|
7371
7381
|
Xe2 && document.removeEventListener("click", Xe2, false);
|
|
7372
7382
|
let Ze2 = (e6) => {
|
|
7373
7383
|
let t3 = e6.target;
|
|
7374
|
-
!t3.closest(".hit-region") && !t3.closest("#bi-info-drawer") && (
|
|
7384
|
+
!t3.closest(".hit-region") && !t3.closest("#bi-info-drawer") && (Qv(), Gv());
|
|
7375
7385
|
};
|
|
7376
7386
|
document[Ye2] = Ze2, document.addEventListener("click", Ze2, false);
|
|
7377
7387
|
let Qe2 = (e6) => {
|
|
7378
|
-
e6.key === "Escape" && (
|
|
7388
|
+
e6.key === "Escape" && (Qv(), Gv());
|
|
7379
7389
|
};
|
|
7380
7390
|
document.removeEventListener("keydown", window.__biWheelEscHandler, false), window.__biWheelEscHandler = Qe2, document.addEventListener("keydown", Qe2, false);
|
|
7381
7391
|
}
|
|
7382
|
-
function
|
|
7392
|
+
function uy(e5) {
|
|
7383
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;
|
|
7384
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), ")");
|
|
7385
7395
|
}
|
|
7386
|
-
function
|
|
7396
|
+
function dy(e5, t2) {
|
|
7387
7397
|
e5 && (e5.setAttribute("tabindex", "0"), e5.setAttribute("role", "button"), e5.setAttribute("aria-label", t2), e5.addEventListener("keydown", (t3) => {
|
|
7388
7398
|
let n2 = t3;
|
|
7389
7399
|
(n2.key === "Enter" || n2.key === " ") && (n2.preventDefault(), e5.dispatchEvent(new MouseEvent("click", { bubbles: true, cancelable: true })));
|
|
7390
7400
|
}));
|
|
7391
7401
|
}
|
|
7392
|
-
function
|
|
7402
|
+
function fy(e5) {
|
|
7393
7403
|
return e5.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
7394
7404
|
}
|
|
7395
|
-
function
|
|
7405
|
+
function py(e5) {
|
|
7396
7406
|
return e5.replace(/_/g, " ").replace(/\b\w/g, (e6) => e6.toUpperCase());
|
|
7397
7407
|
}
|
|
7398
|
-
function
|
|
7399
|
-
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("");
|
|
7400
7410
|
return t2 ? '<details class="glyph-legend"><summary><span class="legend-spark">\u2726</span> Legend</summary><div class="legend-body">'.concat(t2, "</div></details>") : "";
|
|
7401
7411
|
}
|
|
7402
|
-
var
|
|
7403
|
-
function
|
|
7412
|
+
var hy = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?(?:\.\d+)?$/;
|
|
7413
|
+
function gy(e5, t2) {
|
|
7404
7414
|
if (!e5) return null;
|
|
7405
|
-
let n2 =
|
|
7415
|
+
let n2 = hy.exec(e5.trim());
|
|
7406
7416
|
if (n2) {
|
|
7407
7417
|
let [, e6, t3, r3, i2, a2, o2] = n2, s2 = new Date(Date.UTC(+e6, t3 - 1, +r3, +i2, +a2, o2 ? +o2 : 0));
|
|
7408
7418
|
return isNaN(s2.getTime()) ? null : { date: s2, timeZone: "UTC" };
|
|
@@ -7410,17 +7420,17 @@ function my(e5, t2) {
|
|
|
7410
7420
|
let r2 = new Date(e5);
|
|
7411
7421
|
return isNaN(r2.getTime()) ? null : { date: r2, timeZone: t2 || "UTC" };
|
|
7412
7422
|
}
|
|
7413
|
-
function
|
|
7423
|
+
function _y(e5) {
|
|
7414
7424
|
var t2;
|
|
7415
7425
|
if (!e5) return "";
|
|
7416
7426
|
let n2 = [], r2 = (t2 = e5.location) == null ? void 0 : t2.trim();
|
|
7417
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) {
|
|
7418
|
-
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;
|
|
7419
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);
|
|
7420
7430
|
}
|
|
7421
7431
|
return n2.join(" \xB7 ");
|
|
7422
7432
|
}
|
|
7423
|
-
var
|
|
7433
|
+
var vy = class e4 {
|
|
7424
7434
|
constructor(t2) {
|
|
7425
7435
|
var n2, r2, i2, a2, s2, c2;
|
|
7426
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();
|
|
@@ -7600,14 +7610,14 @@ var gy = class e4 {
|
|
|
7600
7610
|
return e5.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
7601
7611
|
}
|
|
7602
7612
|
};
|
|
7603
|
-
o(
|
|
7604
|
-
var
|
|
7605
|
-
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() {
|
|
7606
7616
|
if (document.getElementById("oe-first-run-styles")) return;
|
|
7607
7617
|
let e5 = document.createElement("style");
|
|
7608
|
-
e5.id = "oe-first-run-styles", e5.textContent =
|
|
7618
|
+
e5.id = "oe-first-run-styles", e5.textContent = by, document.head.appendChild(e5);
|
|
7609
7619
|
}
|
|
7610
|
-
function
|
|
7620
|
+
function Sy(e5) {
|
|
7611
7621
|
let t2 = document.activeElement, n2 = document.createElement("div");
|
|
7612
7622
|
n2.className = "oe-welcome-backdrop";
|
|
7613
7623
|
let r2 = document.createElement("div");
|
|
@@ -7625,34 +7635,34 @@ function by(e5) {
|
|
|
7625
7635
|
e6.key === "Escape" && (e6.preventDefault(), o2()), e6.key === "Tab" && (e6.preventDefault(), a2.focus());
|
|
7626
7636
|
}), requestAnimationFrame(() => a2.focus()), n2;
|
|
7627
7637
|
}
|
|
7628
|
-
function
|
|
7629
|
-
|
|
7630
|
-
let t2 =
|
|
7638
|
+
function Cy(e5) {
|
|
7639
|
+
xy();
|
|
7640
|
+
let t2 = Sy(yy[e5]);
|
|
7631
7641
|
document.body.appendChild(t2);
|
|
7632
7642
|
}
|
|
7633
|
-
var
|
|
7634
|
-
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() {
|
|
7635
7645
|
if (document.getElementById("oe-info-button-styles")) return;
|
|
7636
7646
|
let e5 = document.createElement("style");
|
|
7637
|
-
e5.id = "oe-info-button-styles", e5.textContent =
|
|
7647
|
+
e5.id = "oe-info-button-styles", e5.textContent = wy, document.head.appendChild(e5);
|
|
7638
7648
|
}
|
|
7639
|
-
function
|
|
7649
|
+
function Ey(e5) {
|
|
7640
7650
|
if (document.getElementById("oe-info-button")) return;
|
|
7641
|
-
|
|
7651
|
+
Ty();
|
|
7642
7652
|
let t2 = document.createElement("button");
|
|
7643
|
-
t2.id = "oe-info-button", t2.className = "oe-info-button", t2.setAttribute("aria-label", "About this chart"), t2.title = "About this chart", t2.textContent = "i", t2.addEventListener("click", () =>
|
|
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);
|
|
7644
7654
|
}
|
|
7645
|
-
function
|
|
7655
|
+
function Dy(e5) {
|
|
7646
7656
|
return e5.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
7647
7657
|
}
|
|
7648
|
-
function
|
|
7649
|
-
let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e5, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(
|
|
7650
|
-
if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(
|
|
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) {
|
|
7651
7661
|
var o2;
|
|
7652
7662
|
(o2 = t2.querySelector(".error-retry-btn")) == null || o2.addEventListener("click", r2);
|
|
7653
7663
|
}
|
|
7654
7664
|
}
|
|
7655
|
-
function
|
|
7665
|
+
function ky(e5) {
|
|
7656
7666
|
var t2;
|
|
7657
7667
|
if (!e5) return null;
|
|
7658
7668
|
if (e5.structuredContent != null && typeof e5.structuredContent == "object") return e5.structuredContent;
|
|
@@ -7665,12 +7675,25 @@ function Dy(e5) {
|
|
|
7665
7675
|
}
|
|
7666
7676
|
return null;
|
|
7667
7677
|
}
|
|
7668
|
-
|
|
7669
|
-
|
|
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;
|
|
7670
7691
|
if (!t2 || t2.querySelector("#btn-fullscreen")) return;
|
|
7671
7692
|
let a2 = document.createElement("button");
|
|
7672
|
-
a2.id = "btn-fullscreen", a2.className = "pan-btn pan-btn--fullscreen", a2.
|
|
7673
|
-
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"];
|
|
7674
7697
|
function c2() {
|
|
7675
7698
|
if (document.getElementById("fs-bottom-bar") || !n2.length) return;
|
|
7676
7699
|
let e6 = document.getElementById("app");
|
|
@@ -7703,59 +7726,59 @@ function Oy(e5, t2, n2 = []) {
|
|
|
7703
7726
|
}
|
|
7704
7727
|
e6.remove();
|
|
7705
7728
|
}
|
|
7706
|
-
|
|
7707
|
-
|
|
7708
|
-
|
|
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();
|
|
7741
|
+
}
|
|
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);
|
|
7709
7748
|
}
|
|
7710
|
-
|
|
7711
|
-
try {
|
|
7712
|
-
var
|
|
7713
|
-
let
|
|
7714
|
-
|
|
7715
|
-
console.warn('[AppChrome] Display mode "'.concat(c3, '" not available. Available: ').concat(s3.join(", ")));
|
|
7716
|
-
return;
|
|
7717
|
-
}
|
|
7718
|
-
let l3 = await e5.requestDisplayMode({ mode: c3 });
|
|
7719
|
-
u2((i3 = l3 == null ? void 0 : l3.mode) == null ? "inline" : i3);
|
|
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);
|
|
7720
7754
|
} catch (e6) {
|
|
7721
7755
|
console.warn("[AppChrome] requestDisplayMode failed:", e6);
|
|
7722
7756
|
}
|
|
7723
|
-
}), document.addEventListener("keydown", async (t3) => {
|
|
7724
|
-
if (t3.key === "Escape" && document.body.classList.contains("is-fullscreen")) {
|
|
7725
|
-
t3.preventDefault();
|
|
7726
|
-
try {
|
|
7727
|
-
var n3;
|
|
7728
|
-
let t4 = await e5.requestDisplayMode({ mode: "inline" });
|
|
7729
|
-
u2((n3 = t4 == null ? void 0 : t4.mode) == null ? "inline" : n3);
|
|
7730
|
-
} catch (e6) {
|
|
7731
|
-
console.warn("[AppChrome] Escape fullscreen failed:", e6);
|
|
7732
|
-
}
|
|
7733
|
-
}
|
|
7734
|
-
}), (r2 = e5.addEventListener) == null || r2.call(e5, "hostcontextchanged", (e6) => {
|
|
7735
|
-
var t3;
|
|
7736
|
-
u2((t3 = e6 == null ? void 0 : e6.displayMode) == null ? "inline" : t3);
|
|
7737
|
-
});
|
|
7738
|
-
let d2 = (i2 = e5.getHostContext) == null ? void 0 : i2.call(e5);
|
|
7739
|
-
d2 != null && d2.displayMode && u2(d2.displayMode), t2.insertBefore(a2, t2.firstChild), t2.removeAttribute("hidden");
|
|
7740
|
-
function f2() {
|
|
7741
|
-
let e6 = document.getElementById("fs-hint-banner");
|
|
7742
|
-
e6 && e6.remove();
|
|
7743
|
-
let t3 = document.createElement("div");
|
|
7744
|
-
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(() => {
|
|
7745
|
-
t3.style.opacity = "1";
|
|
7746
|
-
}), setTimeout(() => {
|
|
7747
|
-
t3.style.opacity = "0", setTimeout(() => t3.remove(), 350);
|
|
7748
|
-
}, 4e3);
|
|
7749
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);
|
|
7750
7773
|
}
|
|
7751
|
-
function
|
|
7774
|
+
function zy(e5, t2) {
|
|
7752
7775
|
e5.ontoolcancelled = (e6) => {
|
|
7753
7776
|
var n2, r2, i2;
|
|
7754
7777
|
let a2 = (n2 = e6.reason) == null ? "Tool call was cancelled" : n2;
|
|
7755
|
-
console.warn("[AppChrome] Tool cancelled:", a2), (r2 = t2.statusFn) == null || r2.call(t2, null), !t2.loadingEl.hidden && t2.loadingEl.getAttribute("hidden") === null && (t2.loadingEl.setAttribute("hidden", ""), t2.contentEl.removeAttribute("hidden")), (i2 = t2.paramControls) == null || (i2 = i2.call(t2)) == null || i2.setBusy(false),
|
|
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);
|
|
7756
7779
|
};
|
|
7757
7780
|
}
|
|
7758
|
-
function
|
|
7781
|
+
function By(e5) {
|
|
7759
7782
|
var t2;
|
|
7760
7783
|
(t2 = document.getElementById("cancel-toast")) == null || t2.remove();
|
|
7761
7784
|
let n2 = document.createElement("div");
|
|
@@ -7763,162 +7786,176 @@ function Ay(e5) {
|
|
|
7763
7786
|
n2.classList.remove("visible"), setTimeout(() => n2.remove(), 300);
|
|
7764
7787
|
}, 3e3);
|
|
7765
7788
|
}
|
|
7766
|
-
function
|
|
7789
|
+
function Vy(e5) {
|
|
7767
7790
|
var t2;
|
|
7768
|
-
|
|
7769
|
-
|
|
7770
|
-
|
|
7771
|
-
|
|
7772
|
-
|
|
7773
|
-
|
|
7774
|
-
|
|
7775
|
-
|
|
7776
|
-
|
|
7777
|
-
|
|
7778
|
-
|
|
7779
|
-
|
|
7780
|
-
|
|
7781
|
-
|
|
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($);
|
|
7782
7819
|
});
|
|
7783
|
-
var
|
|
7784
|
-
function
|
|
7785
|
-
if (
|
|
7820
|
+
var tb = "true";
|
|
7821
|
+
function nb(e5) {
|
|
7822
|
+
if (Gy) {
|
|
7786
7823
|
if (!e5) {
|
|
7787
|
-
|
|
7824
|
+
Gy.classList.remove("visible");
|
|
7788
7825
|
return;
|
|
7789
7826
|
}
|
|
7790
|
-
|
|
7827
|
+
Gy.textContent = "\xB7 ".concat(e5), Gy.classList.add("visible");
|
|
7791
7828
|
}
|
|
7792
7829
|
}
|
|
7793
|
-
|
|
7794
|
-
function
|
|
7795
|
-
|
|
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 = "");
|
|
7796
7833
|
}
|
|
7797
|
-
function
|
|
7798
|
-
|
|
7834
|
+
function ib() {
|
|
7835
|
+
Uy.hidden = true, Hy.hidden = false, Hy.classList.remove("refreshing"), Wy.hidden = false, qy && (qy.hidden = false);
|
|
7799
7836
|
}
|
|
7800
|
-
function
|
|
7801
|
-
if (!$ ||
|
|
7802
|
-
|
|
7837
|
+
function ab() {
|
|
7838
|
+
if (!$ || Hy.hidden) {
|
|
7839
|
+
rb();
|
|
7803
7840
|
return;
|
|
7804
7841
|
}
|
|
7805
|
-
|
|
7842
|
+
Hy.classList.add("refreshing");
|
|
7806
7843
|
}
|
|
7807
|
-
function
|
|
7808
|
-
|
|
7844
|
+
function ob() {
|
|
7845
|
+
Hy.classList.remove("refreshing"), Hy.classList.remove("chart-rendered"), Hy.offsetWidth, Hy.classList.add("chart-rendered");
|
|
7809
7846
|
}
|
|
7810
|
-
function
|
|
7811
|
-
|
|
7847
|
+
function sb(e5, t2) {
|
|
7848
|
+
Uy.hidden = true, qy && (qy.hidden = true), Oy({ container: Hy, message: e5, onRetry: t2 });
|
|
7812
7849
|
}
|
|
7813
|
-
function
|
|
7850
|
+
function cb(e5) {
|
|
7814
7851
|
return e5.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
7815
7852
|
}
|
|
7816
|
-
async function
|
|
7853
|
+
async function lb(e5) {
|
|
7817
7854
|
try {
|
|
7818
|
-
(await
|
|
7855
|
+
(await Xy.sendMessage({ role: "user", content: [{ type: "text", text: e5 }] })).isError && console.error("[BiWheel] Host rejected sendMessage");
|
|
7819
7856
|
} catch (e6) {
|
|
7820
7857
|
console.error("[BiWheel] sendMessage failed:", e6);
|
|
7821
7858
|
}
|
|
7822
7859
|
}
|
|
7823
|
-
function
|
|
7824
|
-
let t2 =
|
|
7860
|
+
function ub(e5) {
|
|
7861
|
+
let t2 = ky(e5);
|
|
7825
7862
|
return t2 && "inner" in t2 && "outer" in t2 ? t2 : null;
|
|
7826
7863
|
}
|
|
7827
|
-
var
|
|
7828
|
-
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() {
|
|
7829
7866
|
var e5, t2, n2;
|
|
7830
|
-
if (!
|
|
7867
|
+
if (!Ky) return;
|
|
7831
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 = (() => {
|
|
7832
7869
|
var e6, t3;
|
|
7833
7870
|
let n3 = /* @__PURE__ */ new Set();
|
|
7834
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());
|
|
7835
|
-
return
|
|
7872
|
+
return P_(n3);
|
|
7836
7873
|
})();
|
|
7837
|
-
|
|
7838
|
-
let o2 = a2 ? '\n <div class="asp-section">\n <span class="asp-section-label">Nodes</span>\n <button class="orb-preset-btn node-btn'.concat(
|
|
7839
|
-
|
|
7840
|
-
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 = [];
|
|
7841
7878
|
for (let e6 of s2) {
|
|
7842
7879
|
let t3 = e6.name.toLowerCase();
|
|
7843
7880
|
if (c2.has(t3)) continue;
|
|
7844
7881
|
c2.add(t3);
|
|
7845
|
-
let n3 =
|
|
7846
|
-
n3 && l2.push({ glyph: n3, label:
|
|
7882
|
+
let n3 = rv[t3];
|
|
7883
|
+
n3 && l2.push({ glyph: n3, label: py(e6.name) });
|
|
7847
7884
|
}
|
|
7848
7885
|
let u2 = [...new Set(((n2 = $ == null ? void 0 : $.cross_aspects) == null ? [] : n2).map((e6) => {
|
|
7849
7886
|
var t3;
|
|
7850
7887
|
return ((t3 = e6.type) == null ? "" : t3).toLowerCase();
|
|
7851
7888
|
}).filter(Boolean))].map((e6) => {
|
|
7852
7889
|
var t3;
|
|
7853
|
-
return { glyph: (t3 =
|
|
7890
|
+
return { glyph: (t3 = ov[e6]) == null ? "" : t3, label: py(e6) };
|
|
7854
7891
|
}).filter((e6) => e6.glyph);
|
|
7855
|
-
|
|
7892
|
+
Ky.insertAdjacentHTML("beforeend", my([{ title: "Bodies", items: l2 }, { title: "Aspects", items: u2 }])), Ky.removeAttribute("hidden");
|
|
7856
7893
|
let d2 = document.getElementById("aspect-vis-toggle");
|
|
7857
7894
|
d2 == null || d2.addEventListener("click", () => {
|
|
7858
|
-
|
|
7859
|
-
}),
|
|
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) => {
|
|
7860
7897
|
e6.addEventListener("click", () => {
|
|
7861
7898
|
var t3;
|
|
7862
7899
|
let n3 = parseFloat((t3 = e6.dataset.mult) == null ? "1" : t3);
|
|
7863
|
-
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));
|
|
7864
7901
|
});
|
|
7865
|
-
}),
|
|
7902
|
+
}), Ky.querySelectorAll(".house-btn").forEach((e6) => {
|
|
7866
7903
|
e6.addEventListener("click", () => {
|
|
7867
7904
|
var t3;
|
|
7868
7905
|
let n3 = (t3 = e6.dataset.hs) == null ? "placidus" : t3;
|
|
7869
|
-
n3 ===
|
|
7906
|
+
n3 === eb || !$ || (eb = n3, Ky.querySelectorAll(".house-btn").forEach((e7) => e7.classList.toggle("active", e7.dataset.hs === n3)), Nb(n3));
|
|
7870
7907
|
});
|
|
7871
|
-
}),
|
|
7908
|
+
}), Ky.querySelectorAll(".node-btn").forEach((e6) => {
|
|
7872
7909
|
e6.addEventListener("click", () => {
|
|
7873
7910
|
let t3 = e6.dataset.node === "mean" ? "mean" : "true";
|
|
7874
|
-
t3 ===
|
|
7911
|
+
t3 === tb || !$ || (tb = t3, bv(t3), Ky.querySelectorAll(".node-btn").forEach((e7) => e7.classList.toggle("active", e7.dataset.node === t3)), hb($, pb));
|
|
7875
7912
|
});
|
|
7876
7913
|
});
|
|
7877
7914
|
}
|
|
7878
|
-
function
|
|
7915
|
+
function hb(e5, t2) {
|
|
7879
7916
|
var n2, r2, i2, a2;
|
|
7880
|
-
let o2 =
|
|
7881
|
-
|
|
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);
|
|
7882
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;
|
|
7883
|
-
|
|
7920
|
+
Mb(ry(c2), o2, s2, u2);
|
|
7884
7921
|
}
|
|
7885
|
-
var
|
|
7886
|
-
function
|
|
7887
|
-
|
|
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) => {
|
|
7888
7925
|
let n2 = t2.dataset.focus;
|
|
7889
7926
|
t2.classList.toggle("focused", n2 === e5);
|
|
7890
|
-
}), $ &&
|
|
7927
|
+
}), $ && Cb($, e5);
|
|
7891
7928
|
}
|
|
7892
|
-
function
|
|
7929
|
+
function vb(e5) {
|
|
7893
7930
|
var t2, n2, r2, i2, a2, o2, s2;
|
|
7894
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;
|
|
7895
|
-
|
|
7932
|
+
gb = null, Hy.removeAttribute("data-focus");
|
|
7896
7933
|
let d2 = "";
|
|
7897
7934
|
if (c2 === "transit" && (o2 = e5._birth_params_outer) != null && o2.datetime) try {
|
|
7898
|
-
let t3 =
|
|
7899
|
-
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>"));
|
|
7900
7937
|
} catch (e6) {
|
|
7901
7938
|
}
|
|
7902
|
-
|
|
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) => {
|
|
7903
7940
|
e6.addEventListener("click", () => {
|
|
7904
7941
|
let t3 = e6.dataset.focus;
|
|
7905
|
-
|
|
7942
|
+
_b(gb === t3 ? null : t3);
|
|
7906
7943
|
});
|
|
7907
|
-
}), (s2 =
|
|
7908
|
-
|
|
7944
|
+
}), (s2 = Wy.querySelector(".mode-badge-swap")) == null || s2.addEventListener("click", () => {
|
|
7945
|
+
_b(gb === "inner" ? "outer" : "inner");
|
|
7909
7946
|
});
|
|
7910
7947
|
}
|
|
7911
|
-
var
|
|
7912
|
-
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) {
|
|
7913
7950
|
var n2, r2;
|
|
7914
7951
|
let i2 = e5.find((e6) => e6.name.toLowerCase() === t2);
|
|
7915
7952
|
if (!i2) return "\u2014";
|
|
7916
7953
|
let a2 = Math.floor((i2.longitude % 360 + 360) % 360 / 30), o2 = Math.floor(i2.longitude % 30);
|
|
7917
|
-
return "".concat((n2 =
|
|
7954
|
+
return "".concat((n2 = bb[t2]) == null ? t2 : n2, " ").concat(o2, "\xB0 ").concat((r2 = yb[a2]) == null ? "" : r2);
|
|
7918
7955
|
}
|
|
7919
|
-
function
|
|
7956
|
+
function Sb(e5, t2) {
|
|
7920
7957
|
try {
|
|
7921
|
-
let n2 =
|
|
7958
|
+
let n2 = gy(e5, t2);
|
|
7922
7959
|
if (!n2) return e5;
|
|
7923
7960
|
let { date: r2, timeZone: i2 } = n2;
|
|
7924
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 });
|
|
@@ -7926,22 +7963,22 @@ function fb(e5, t2) {
|
|
|
7926
7963
|
return e5;
|
|
7927
7964
|
}
|
|
7928
7965
|
}
|
|
7929
|
-
function
|
|
7966
|
+
function Cb(e5, t2) {
|
|
7930
7967
|
var n2, r2, i2, a2, o2;
|
|
7931
|
-
if (!
|
|
7932
|
-
let s2 = t2 == null ? "inner" : t2, c2 = s2 === "inner" ? e5.inner : e5.outer, l2 = s2 === "inner" ? e5._birth_params_inner : e5._birth_params_outer, u2 = (n2 = e5.mode) == null ? "synastry" : n2, d2 = (r2 = l2 == null ? void 0 : l2.location) == null ? s2 === "inner" ? "Inner chart" : u2 === "transit" ? "Transits" : "Outer chart" : r2, f2 = (i2 = l2 == null ? void 0 : l2.timezone) == null ? null : i2, p2 = l2 != null && l2.datetime ?
|
|
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");
|
|
7933
7970
|
if (v2 === "AC \u2014" && m2.length > 0) {
|
|
7934
7971
|
let e6 = m2.find((e7) => e7.number === 1);
|
|
7935
7972
|
if (e6) {
|
|
7936
7973
|
var y2;
|
|
7937
7974
|
let t3 = Math.floor((e6.cusp_lon % 360 + 360) % 360 / 30);
|
|
7938
|
-
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);
|
|
7939
7976
|
}
|
|
7940
7977
|
}
|
|
7941
7978
|
let b2 = s2 === "outer" && u2 === "transit" ? "Transit" : s2 === "outer" ? "Synastry" : "Natal";
|
|
7942
|
-
|
|
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;
|
|
7943
7980
|
}
|
|
7944
|
-
async function
|
|
7981
|
+
async function wb(e5) {
|
|
7945
7982
|
var t2;
|
|
7946
7983
|
let n2 = (t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2, r2 = "";
|
|
7947
7984
|
if (e5.type === "planet") {
|
|
@@ -7968,36 +8005,36 @@ async function mb(e5) {
|
|
|
7968
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" : "", ".");
|
|
7969
8006
|
}
|
|
7970
8007
|
if (!r2) return;
|
|
7971
|
-
let h2 =
|
|
8008
|
+
let h2 = _y($ == null ? void 0 : $._birth_params_inner), g2 = _y($ == null ? void 0 : $._birth_params_outer);
|
|
7972
8009
|
if (h2 || g2) {
|
|
7973
8010
|
let e6 = n2 === "transit" ? "Natal" : "Inner wheel", t3 = n2 === "transit" ? "Transits" : "Outer wheel";
|
|
7974
8011
|
r2 = "".concat([h2 ? "".concat(e6, ": ").concat(h2) : "", g2 ? "".concat(t3, ": ").concat(g2) : ""].filter(Boolean).join("\n"), "\n\n").concat(r2);
|
|
7975
8012
|
}
|
|
7976
|
-
await
|
|
8013
|
+
await lb(r2);
|
|
7977
8014
|
}
|
|
7978
|
-
async function
|
|
8015
|
+
async function Tb() {
|
|
7979
8016
|
var e5, t2, n2, r2, i2, a2, o2, s2;
|
|
7980
8017
|
if (!$) return;
|
|
7981
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";
|
|
7982
|
-
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."));
|
|
7983
8020
|
}
|
|
7984
|
-
async function
|
|
8021
|
+
async function Eb() {
|
|
7985
8022
|
var e5, t2, n2, r2, i2, a2;
|
|
7986
8023
|
if (!$) return;
|
|
7987
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";
|
|
7988
|
-
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."));
|
|
7989
8026
|
}
|
|
7990
|
-
async function
|
|
7991
|
-
if (
|
|
8027
|
+
async function Db(e5) {
|
|
8028
|
+
if (Qy) try {
|
|
7992
8029
|
var t2;
|
|
7993
|
-
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) }] });
|
|
7994
8031
|
} catch (e6) {
|
|
7995
8032
|
}
|
|
7996
8033
|
}
|
|
7997
|
-
function
|
|
7998
|
-
if (
|
|
8034
|
+
function Ob() {
|
|
8035
|
+
if ($y) return async (e5) => {
|
|
7999
8036
|
var t2;
|
|
8000
|
-
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 } }] });
|
|
8001
8038
|
if (n2.isError) {
|
|
8002
8039
|
var r2, i2;
|
|
8003
8040
|
throw Error((r2 = (i2 = n2.error) == null ? void 0 : i2.message) == null ? "Sampling failed" : r2);
|
|
@@ -8007,133 +8044,133 @@ function vb() {
|
|
|
8007
8044
|
throw Error("Unexpected sampling response format");
|
|
8008
8045
|
};
|
|
8009
8046
|
}
|
|
8010
|
-
function
|
|
8047
|
+
function kb(e5) {
|
|
8011
8048
|
var t2, n2, r2, i2, a2, o2, s2;
|
|
8012
|
-
$ = e5, clearTimeout(
|
|
8013
|
-
let c2 =
|
|
8014
|
-
|
|
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);
|
|
8015
8052
|
let d2 = document.getElementById("bi-action-bar");
|
|
8016
8053
|
if (!d2) {
|
|
8017
8054
|
d2 = document.createElement("div"), d2.id = "bi-action-bar", d2.className = "hd-action-bar";
|
|
8018
8055
|
let e6 = document.querySelector("#fs-bottom-bar [data-column='right']");
|
|
8019
8056
|
if (e6) e6.appendChild(d2);
|
|
8020
8057
|
else {
|
|
8021
|
-
let e7 = document.getElementById("app"), t3 =
|
|
8058
|
+
let e7 = document.getElementById("app"), t3 = Wy.parentElement === e7 ? Wy : null;
|
|
8022
8059
|
e7 == null || e7.insertBefore(d2, t3);
|
|
8023
8060
|
}
|
|
8024
8061
|
}
|
|
8025
|
-
d2.innerHTML = '\n <button class="action-btn action-btn--primary" id="bi-interpret-btn">\u2728 Interpret this chart</button>\n <button class="action-btn" id="bi-questions-btn">\u{1F52E} What should I ask?</button>\n ', (o2 = d2.querySelector("#bi-interpret-btn")) == null || o2.addEventListener("click", () => void
|
|
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");
|
|
8026
8063
|
}
|
|
8027
|
-
var
|
|
8028
|
-
function
|
|
8029
|
-
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;
|
|
8030
8067
|
if (e5.length === 0) {
|
|
8031
|
-
|
|
8068
|
+
Jy.hidden = true, Jy.innerHTML = "";
|
|
8032
8069
|
return;
|
|
8033
8070
|
}
|
|
8034
|
-
|
|
8071
|
+
Ab = null, Jy.innerHTML = '\n <span class="patterns-label">Cross-Patterns:</span>\n '.concat(e5.map((e6, t3) => {
|
|
8035
8072
|
var n3;
|
|
8036
|
-
let r3 = (n3 =
|
|
8073
|
+
let r3 = (n3 = jb[e6.name]) == null ? "#888" : n3;
|
|
8037
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>");
|
|
8038
|
-
}).join(""), "\n "),
|
|
8075
|
+
}).join(""), "\n "), Jy.removeAttribute("hidden");
|
|
8039
8076
|
let i2 = document.createElement("button");
|
|
8040
|
-
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", () => {
|
|
8041
8078
|
var t3;
|
|
8042
|
-
let n3 =
|
|
8079
|
+
let n3 = Ab;
|
|
8043
8080
|
if (n3 === null) return;
|
|
8044
8081
|
let r3 = e5[n3];
|
|
8045
|
-
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(() => {
|
|
8046
8083
|
i2.textContent = "\u2713 Sent", setTimeout(() => {
|
|
8047
8084
|
i2.textContent = "\u2728 Interpret", i2.disabled = false;
|
|
8048
8085
|
}, 2500);
|
|
8049
8086
|
}).catch(() => {
|
|
8050
8087
|
i2.textContent = "\u26A0 Failed", i2.disabled = false;
|
|
8051
8088
|
}));
|
|
8052
|
-
}),
|
|
8089
|
+
}), Jy.querySelectorAll(".pattern-pill").forEach((a2) => {
|
|
8053
8090
|
a2.addEventListener("click", () => {
|
|
8054
8091
|
var o2, s2;
|
|
8055
8092
|
let c2 = parseInt((o2 = a2.dataset.idx) == null ? "-1" : o2, 10), l2 = e5[c2];
|
|
8056
8093
|
if (!l2) return;
|
|
8057
8094
|
let u2 = (s2 = a2.dataset.color) == null ? "#888" : s2;
|
|
8058
|
-
if (
|
|
8059
|
-
|
|
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";
|
|
8060
8097
|
return;
|
|
8061
8098
|
}
|
|
8062
|
-
|
|
8099
|
+
Ab = c2, Jy.querySelectorAll(".pattern-pill").forEach((e6) => {
|
|
8063
8100
|
var t3;
|
|
8064
8101
|
e6.classList.remove("active");
|
|
8065
8102
|
let n3 = (t3 = e6.dataset.color) == null ? "#888" : t3;
|
|
8066
8103
|
e6.style.color = n3, e6.style.borderColor = n3, e6.style.background = "transparent";
|
|
8067
|
-
}), 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;
|
|
8068
8105
|
});
|
|
8069
8106
|
});
|
|
8070
8107
|
}
|
|
8071
|
-
async function
|
|
8108
|
+
async function Nb(e5) {
|
|
8072
8109
|
if (!$) return;
|
|
8073
8110
|
let t2 = $;
|
|
8074
|
-
|
|
8111
|
+
ab();
|
|
8075
8112
|
try {
|
|
8076
8113
|
var n2, r2, i2, a2, o2, s2, c2, l2, u2, d2;
|
|
8077
|
-
let f2 = new Promise((e6, t3) => setTimeout(() => t3(Error("House system recalculate timed out")), 3e4)), p2 =
|
|
8078
|
-
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();
|
|
8079
8116
|
} catch (e6) {
|
|
8080
|
-
console.error("[BiWheel] House system recalculate failed:", e6), $ &&
|
|
8117
|
+
console.error("[BiWheel] House system recalculate failed:", e6), $ && ib();
|
|
8081
8118
|
}
|
|
8082
8119
|
}
|
|
8083
|
-
function
|
|
8120
|
+
function Pb(e5, t2, n2) {
|
|
8084
8121
|
var r2, i2, a2, o2, s2;
|
|
8085
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;
|
|
8086
|
-
|
|
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" })) } });
|
|
8087
8124
|
}
|
|
8088
|
-
function
|
|
8125
|
+
function Fb(e5) {
|
|
8089
8126
|
var t2;
|
|
8090
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"];
|
|
8091
|
-
|
|
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 } });
|
|
8092
8129
|
}
|
|
8093
|
-
|
|
8094
|
-
clearTimeout(
|
|
8095
|
-
let t2 =
|
|
8130
|
+
Xy.ontoolresult = (e5) => {
|
|
8131
|
+
clearTimeout(Lb);
|
|
8132
|
+
let t2 = ub(e5);
|
|
8096
8133
|
if (!t2) {
|
|
8097
|
-
|
|
8134
|
+
sb("The chart didn't load. Tap to try again.", Ib);
|
|
8098
8135
|
return;
|
|
8099
8136
|
}
|
|
8100
|
-
if (!
|
|
8137
|
+
if (!Zy) {
|
|
8101
8138
|
var n2, r2, i2, a2;
|
|
8102
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";
|
|
8103
8140
|
if (o2 && o2.includes("T")) {
|
|
8104
8141
|
let e7 = o2.split("T");
|
|
8105
8142
|
d2 = e7[0], f2 = e7[1].substring(0, 5);
|
|
8106
8143
|
}
|
|
8107
|
-
|
|
8108
|
-
|
|
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", "");
|
|
8109
8146
|
try {
|
|
8110
8147
|
var n3, r3, i3, a3, o3;
|
|
8111
|
-
let s3 = "".concat(e7.date, "T").concat(e7.time, ":00"), c3 = new Promise((e8, t3) => setTimeout(() => t3(Error("Bi-wheel recalculate timed out after 30s")), 3e4)), l3 =
|
|
8112
|
-
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();
|
|
8113
8150
|
} catch (e8) {
|
|
8114
|
-
console.error("[BiWheel] Recalculate failed or timed out:", e8), $ &&
|
|
8151
|
+
console.error("[BiWheel] Recalculate failed or timed out:", e8), $ && ib();
|
|
8115
8152
|
} finally {
|
|
8116
|
-
|
|
8153
|
+
Zy == null || Zy.setBusy(false), Yy.removeAttribute("hidden");
|
|
8117
8154
|
}
|
|
8118
8155
|
} });
|
|
8119
8156
|
}
|
|
8120
|
-
|
|
8157
|
+
kb(t2), Yy.removeAttribute("hidden");
|
|
8121
8158
|
};
|
|
8122
|
-
function
|
|
8123
|
-
clearTimeout(
|
|
8124
|
-
|
|
8125
|
-
}, 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(() => {
|
|
8126
8163
|
});
|
|
8127
8164
|
}
|
|
8128
|
-
var
|
|
8129
|
-
|
|
8165
|
+
var Lb = setTimeout(() => {
|
|
8166
|
+
Hy.hidden && sb("Chart data is taking longer than expected.", Ib);
|
|
8130
8167
|
}, 3e4);
|
|
8131
|
-
|
|
8168
|
+
rb(), zy(Xy, { loadingEl: Uy, contentEl: Hy, statusFn: nb, paramControls: () => Zy }), (async () => {
|
|
8132
8169
|
try {
|
|
8133
|
-
await
|
|
8134
|
-
let e5 =
|
|
8135
|
-
|
|
8136
|
-
$ &&
|
|
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($);
|
|
8137
8174
|
});
|
|
8138
8175
|
} catch (e5) {
|
|
8139
8176
|
console.error("[BiWheel] connect() failed:", e5);
|