@openephemeris/mcp-server 3.14.0 → 3.16.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 +25 -0
- package/README.md +8 -6
- package/dist/prompts.js +16 -16
- package/dist/server-sse.js +65 -14
- package/dist/tools/apps/bi-wheel-app.js +12 -3
- package/dist/tools/apps/bodygraph-app.d.ts +9 -5
- package/dist/tools/apps/bodygraph-app.js +207 -9
- package/dist/tools/apps/chart-wheel-app.js +29 -5
- package/dist/tools/apps/location-tools.js +38 -5
- package/dist/tools/apps/moon-phase-app.js +7 -1
- package/dist/tools/dev.js +102 -68
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.js +15 -1
- package/dist/tools/specialized/bazi.js +6 -6
- package/dist/tools/specialized/bi_wheel.js +3 -2
- package/dist/tools/specialized/chart_wheel.js +3 -2
- package/dist/tools/specialized/comparative.js +2 -2
- package/dist/tools/specialized/hd_bodygraph.js +4 -3
- package/dist/ui/bazi.html +21 -21
- package/dist/ui/bi-wheel.html +335 -293
- package/dist/ui/bodygraph.html +1645 -1615
- package/dist/ui/chart-wheel.html +1966 -1912
- package/dist/ui/moon-phase.html +72 -49
- package/dist/ui/transit-timeline.html +1 -1
- package/dist/ui/vedic-chart.html +21 -21
- package/package.json +5 -1
package/dist/ui/bi-wheel.html
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<title>Bi-Wheel Explorer</title>
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
<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);--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:#a494f6;--xasp-opposition:#dd4d57;--xasp-trine:#00b4bb;--xasp-square:#ec6d3d;--xasp-sextile:#1da871}@supports (color:color(display-p3 0 0 0)){:root{--bg:color(display-p3 .00515318 .00655345 .0110262);--surface:color(display-p3 .0181758 .0222118 .0344746);--surface-2:color(display-p3 .0438795 .0516065 .0708656);--border:color(display-p3 .0763929 .0859556 .109705);--border-strong:color(display-p3 .146313 .159736 .192938);--text:color(display-p3 .889546 .895785 .910689);--text-secondary:color(display-p3 .470023 .47923 .50135);--gold:color(display-p3 .76996 .617341 .321369);--gold-dim:color(display-p3 .469305 .400291 .270966);--gold-glow:color(display-p3 .76996 .617341 .321369/.2);--gold-subtle:color(display-p3 .76996 .617341 .321369/.1);--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 .63252 .582093 .937636);--xasp-opposition:color(display-p3 .803557 .340931 .357065);--xasp-trine:color(display-p3 .311493 .696068 .728277);--xasp-square:color(display-p3 .864679 .454605 .289251);--xasp-sextile:color(display-p3 .313719 .651039 .459895)}}@supports (color:lab(0% 0 0)){:root{--bg:lab(.455387% .00626594 -.517511);--surface:lab(1.54195% -.000223517 -1.4246);--surface-2:lab(3.66055% -.0193194 -3.00652);--border:lab(7.15581% -.0557452 -5.11242);--border-strong:lab(16.3845% -.109613 -6.65551);--text:lab(90.6942% -.142396 -2.26941);--text-secondary:lab(51.2352% -.205308 -3.76425);--gold:lab(67.5798% 11.9379 52.333);--gold-dim:lab(44.394% 5.21129 24.4453);--gold-glow:lab(67.5798% 11.9379 52.333/.2);--gold-subtle:lab(67.5798% 11.9379 52.333/.1);--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.4333);--inner-tick:lab(49.7428% 19.7831 -40.5855);--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.96196 9.88836);--xasp-conjunction:lab(65.7597% 22.6847 -47.4333);--xasp-opposition:lab(54.0218% 57.6814 26.7913);--xasp-trine:lab(66.3586% -37.5367 -15.4041);--xasp-square:lab(61.5466% 48.3829 50.2676);--xasp-sextile:lab(61.2436% -46.7762 18.3644)}}*,: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:hidden}#app{flex-direction:column;height:100%;min-height:440px;display:flex;position:relative;overflow:hidden}#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{flex:1 1 0;justify-content:center;align-items:center;width:100%;min-height:240px;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.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.4333/.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.4333/.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;opacity:.65;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:#d4af37;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:#f0d060;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:#0d0802;color:color(display-p3 .0492866 .0328715 .0111297);color:lab(2.4863% .883393 2.81807)}.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.5396 -28.3166);background:rgba(47,181,216,.1);background:color(display-p3 .359655 .701622 .832954/.1);background:lab(68.1219% -27.5396 -28.3166/.1)}.tally-item.water{color:#7792ee;color:color(display-p3 .487398 .569622 .908946);color:lab(61.5869% 9.51821 -50.2978);background:rgba(119,146,238,.1);background:color(display-p3 .487398 .569622 .908946/.1);background:lab(61.5869% 9.51821 -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.5396 -28.3166)}.tally-bar-fill.water{background:#7792ee;background:color(display-p3 .487398 .569622 .908946);background:lab(61.5869% 9.51821 -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)}@media (prefers-color-scheme:light){:root{--bg:#f7f5f1;--surface:#fff;--surface-2:#f1eee9;--border:#dbd7d0;--border-strong:#bdb6ac;--text:#101215;--text-secondary:#4f5359;--gold:#8d5f00;--gold-dim:#6d4b00;--gold-glow:rgba(141,95,0,.25);--gold-subtle:rgba(141,95,0,.1);--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{--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 .542549 .371783 -.107551);--gold-dim:color(display-p3 .414099 .299019 .034461);--gold-glow:color(display-p3 .542549 .371783 -.107551/.25);--gold-subtle:color(display-p3 .542549 .371783 -.107551/.1);--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{--bg:lab(96.5376% .34076 2.2589);--surface:lab(100% 0 0);--surface-2:lab(94.2232% .459731 3.01526);--border:lab(86.1085% .583261 3.77473);--border-strong:lab(74.5232% .975847 6.06879);--text:lab(5.23809% -.0738502 -2.43738);--text-secondary:lab(34.9842% -.210047 -4.49809);--gold:lab(44.1995% 17.0662 84.3373);--gold-dim:lab(35.0077% 11.3181 50.9422);--gold-glow:lab(44.1995% 17.0662 84.3373/.25);--gold-subtle:lab(44.1995% 17.0662 84.3373/.1);--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.54931);--inner-stroke:lab(61.7097% 15.1373 -34.1533);--inner-glyph:lab(24.6169% 28.6686 -46.7313);--inner-tick:lab(38.0413% 20.9664 -40.377);--outer-ring:lab(95.394% .703871 4.53229);--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)}}html,body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background-image:none}.tooltip{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--text);border-color:var(--border-strong);background:rgba(255,255,255,.96);background:color(display-p3 1 1 1/.96);background:lab(100% 0 0/.96);box-shadow:0 8px 32px rgba(0,0,0,.18),inset 0 .5px rgba(255,255,255,.6);box-shadow:0 8px 32px color(display-p3 0 0 0/.18),inset 0 .5px color(display-p3 1 1 1/.6);box-shadow:0 8px 32px lab(0% 0 0/.18),inset 0 .5px lab(100% 0 0/.6)}.tooltip-title{color:var(--text)}.tooltip-detail{color:var(--text-secondary)}.tooltip-hint{color:var(--gold-dim)}.chart-status{color:var(--gold);background:rgba(247,245,241,.92);background:color(display-p3 .967616 .959866 .945308/.92);background:lab(96.5376% .34076 2.2589/.92);border-color:rgba(141,95,0,.35);border-color:color(display-p3 .542549 .371783 -.107551/.35);border-color:lab(44.1995% 17.0662 84.3373/.35)}.chart-provenance{background:var(--surface)}.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)}.pan-btn{background:var(--surface)}.pan-btn:hover{background:var(--surface-2)}#fs-bottom-bar{background:#f7f5f1;background:color(display-p3 .967616 .959866 .945308);background:lab(96.5376% .34076 2.2589);border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{background:#f1eeea;background:color(display-p3 .941472 .933762 .919279);background:lab(94.2176% .341028 2.25905)}#fs-bottom-bar [data-column=left]{border-right-color:#caced4;border-right-color:color(display-p3 .796183 .806346 .830691);border-right-color:lab(82.5562% -.22167 -3.77336)}#fs-bottom-bar [data-column=right]{border-left-color:#caced4;border-left-color:color(display-p3 .796183 .806346 .830691);border-left-color:lab(82.5562% -.22167 -3.77336)}#fs-bottom-bar [data-column]>*+*{border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}.cancel-toast{background:var(--surface);border-color:var(--border-strong);color:var(--text-secondary)}}.param-controls{background:var(--surface);border-top:1px solid var(--border);flex-shrink:0;padding:6px 12px}.param-controls-grid{flex-wrap:wrap;align-items:center;gap:6px 10px;display:flex}.param-group{flex-direction:row;align-items:center;gap:6px;display:flex}.param-group label{text-transform:uppercase;color:var(--text-secondary);letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:700}.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);color-scheme:inherit;border-radius:var(--radius-sm);width:120px;height:24px;padding:3px 6px;font-family:inherit;font-size:11px}@media (prefers-reduced-motion:no-preference){.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{transition:border-color .15s}}.param-group input:focus{border-color:var(--gold-dim);outline:none}.loc-searching{border-color:var(--gold-dim)!important}@media (prefers-reduced-motion:no-preference){.loc-searching{animation:1s ease-in-out infinite alternate loc-pulse}}@keyframes loc-pulse{0%{border-color:var(--gold-dim)}to{border-color:rgba(204,156,66,.55);border-color:color(display-p3 .76996 .617341 .321369/.55);border-color:lab(67.5798% 11.9379 52.333/.55)}}.param-group-loc{flex:1;position:relative}.param-group-loc input{width:100%}.loc-suggestions{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius-sm);z-index:100;max-height:200px;margin-top:4px;position:absolute;top:100%;left:0;right:0;overflow-y:auto;box-shadow:0 4px 12px rgba(0,0,0,.35);box-shadow:0 4px 12px color(display-p3 0 0 0/.35);box-shadow:0 4px 12px lab(0% 0 0/.35)}.loc-item{color:var(--text);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid var(--border);padding:8px 10px;font-size:12px;overflow:hidden}.loc-item:last-child{border-bottom:none}@media (prefers-reduced-motion:no-preference){.loc-item{transition:background .1s,color .1s}}.loc-item:hover{background:var(--gold-subtle);color:var(--gold)}.loc-status{color:var(--text-secondary);letter-spacing:.01em;padding:8px 10px;font-size:11px;font-style:italic}.loc-status-error{color:#d76a5a;color:color(display-p3 .788241 .439621 .373983);color:lab(58.1265% 42.6447 29.9439);font-style:normal;font-weight:600}.param-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.param-btn-icon{border:1px solid var(--border-strong);color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;background:0 0;justify-content:center;align-items:center;width:24px;height:24px;display:flex}@media (prefers-reduced-motion:no-preference){.param-btn-icon{transition:background .15s,border-color .15s,color .15s}}.param-btn-icon:hover{background:var(--surface-2);color:var(--text);border-color:var(--gold-dim)}.param-btn-primary{color:var(--gold);border-radius:var(--radius-sm);cursor:pointer;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);height:24px;padding:3px 10px;font-family:inherit;font-size:10px;font-weight:600}@media (prefers-reduced-motion:no-preference){.param-btn-primary{transition:background .15s,border-color .15s}}.param-btn-primary:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65)}.param-btn-primary:disabled{opacity:.5;cursor:not-allowed}@media (prefers-color-scheme:light){.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{border-color:var(--border-strong);color:var(--text);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167578 1.1277)}.loc-suggestions{border-color:var(--border-strong);background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167578 1.1277)}.param-btn-primary{background:rgba(160,112,0,.12);background:color(display-p3 .615135 .441554 -.0204711/.12);background:lab(51.2092% 16.2654 78.3504/.12);border-color:rgba(160,112,0,.4);border-color:color(display-p3 .615135 .441554 -.0204711/.4);border-color:lab(51.2092% 16.2654 78.3504/.4)}.param-btn-primary:hover:not(:disabled){background:rgba(160,112,0,.22);background:color(display-p3 .615135 .441554 -.0204711/.22);background:lab(51.2092% 16.2654 78.3504/.22);border-color:rgba(160,112,0,.65);border-color:color(display-p3 .615135 .441554 -.0204711/.65);border-color:lab(51.2092% 16.2654 78.3504/.65)}}.param-summary-bar{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:2px 0;margin-bottom:4px;padding:3px 4px 5px;font-size:10px;line-height:1.3;display:flex}.param-summary-bar[hidden]{display:none}.summary-name{color:var(--gold,#d6a54d);letter-spacing:.01em;padding-right:2px;font-size:12px;font-weight:700}@supports (color:color(display-p3 0 0 0)){.summary-name{color:var(--gold,color(display-p3 .808073 .654274 .358094))}}@supports (color:lab(0% 0 0)){.summary-name{color:var(--gold,lab(71.071% 11.7474 51.7651))}}.summary-datetime{font-variant-numeric:tabular-nums;color:#a8a49e;color:color(display-p3 .655561 .643538 .620997);color:lab(67.5481% .590652 3.77966);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}
|
|
10
|
+
<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:#a494f6;--xasp-opposition:#dd4d57;--xasp-trine:#00b4bb;--xasp-square:#ec6d3d;--xasp-sextile:#1da871}@supports (color:color(display-p3 0 0 0)){:root{--bg:color(display-p3 .00515318 .00655345 .0110262);--surface:color(display-p3 .0181758 .0222118 .0344746);--surface-2:color(display-p3 .0438795 .0516065 .0708656);--border:color(display-p3 .0763929 .0859556 .109705);--border-strong:color(display-p3 .146313 .159736 .192938);--text:color(display-p3 .889546 .895785 .910689);--text-secondary:color(display-p3 .470023 .47923 .50135);--gold:color(display-p3 .76996 .617341 .321369);--gold-dim:color(display-p3 .469305 .400291 .270966);--gold-glow:color(display-p3 .76996 .617341 .321369/.2);--gold-subtle:color(display-p3 .76996 .617341 .321369/.1);--on-gold:color(display-p3 .0492866 .0328715 .0111297);--success:color(display-p3 .313719 .651039 .459895);--error:color(display-p3 .710345 .252818 .279408);--shadow:0 4px 20px color(display-p3 0 0 0/.45);--shadow-md:0 8px 40px color(display-p3 0 0 0/.65), 0 0 0 1px var(--border-strong);--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 .63252 .582093 .937636);--xasp-opposition:color(display-p3 .803557 .340931 .357065);--xasp-trine:color(display-p3 .311493 .696068 .728277);--xasp-square:color(display-p3 .864679 .454605 .289251);--xasp-sextile:color(display-p3 .313719 .651039 .459895)}}@supports (color:lab(0% 0 0)){:root{--bg:lab(.455387% .00626594 -.517511);--surface:lab(1.54195% -.000223517 -1.4246);--surface-2:lab(3.66055% -.0193194 -3.00652);--border:lab(7.15581% -.0557452 -5.11242);--border-strong:lab(16.3845% -.109613 -6.65551);--text:lab(90.6942% -.142396 -2.26941);--text-secondary:lab(51.2352% -.205308 -3.76425);--gold:lab(67.5798% 11.9379 52.333);--gold-dim:lab(44.394% 5.21129 24.4453);--gold-glow:lab(67.5798% 11.9379 52.333/.2);--gold-subtle:lab(67.5798% 11.9379 52.333/.1);--on-gold:lab(2.4863% .883393 2.81807);--success:lab(61.2436% -46.7762 18.3644);--error:lab(45.8893% 57.7361 27.393);--shadow:0 4px 20px lab(0% 0 0/.45);--shadow-md:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong);--inner-glyph:lab(65.7597% 22.6847 -47.4333);--inner-tick:lab(49.7428% 19.7831 -40.5855);--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.96196 9.88836);--xasp-conjunction:lab(65.7597% 22.6847 -47.4333);--xasp-opposition:lab(54.0218% 57.6814 26.7913);--xasp-trine:lab(66.3586% -37.5367 -15.4041);--xasp-square:lab(61.5466% 48.3829 50.2676);--xasp-sextile:lab(61.2436% -46.7762 18.3644)}}*,: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.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.4333/.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.4333/.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.5396 -28.3166);background:rgba(47,181,216,.1);background:color(display-p3 .359655 .701622 .832954/.1);background:lab(68.1219% -27.5396 -28.3166/.1)}.tally-item.water{color:#7792ee;color:color(display-p3 .487398 .569622 .908946);color:lab(61.5869% 9.51821 -50.2978);background:rgba(119,146,238,.1);background:color(display-p3 .487398 .569622 .908946/.1);background:lab(61.5869% 9.51821 -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.5396 -28.3166)}.tally-bar-fill.water{background:#7792ee;background:color(display-p3 .487398 .569622 .908946);background:lab(61.5869% 9.51821 -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)}@media (prefers-color-scheme:light){:root{--bg:#f7f5f1;--surface:#fff;--surface-2:#f1eee9;--border:#dbd7d0;--border-strong:#bdb6ac;--text:#101215;--text-secondary:#4f5359;--gold:#825700;--gold-dim:#6d4b00;--gold-glow:rgba(130,87,0,.25);--gold-subtle:rgba(130,87,0,.1);--on-gold:#fcf4e6;--success:#007145;--error:#b1002b;--shadow:0 4px 20px rgba(0,0,0,.1);--shadow-md:0 8px 32px rgba(0,0,0,.14), 0 0 0 1px var(--border-strong);--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{--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{--bg:lab(96.5376% .34076 2.2589);--surface:lab(100% 0 0);--surface-2:lab(94.2232% .459731 3.01526);--border:lab(86.1085% .583261 3.77473);--border-strong:lab(74.5232% .975847 6.06879);--text:lab(5.23809% -.0738502 -2.43738);--text-secondary:lab(34.9842% -.210047 -4.49809);--gold:lab(40.7346% 15.7445 75.3139);--gold-dim:lab(35.0077% 11.3181 50.9422);--gold-glow:lab(40.7346% 15.7445 75.3139/.25);--gold-subtle:lab(40.7346% 15.7445 75.3139/.1);--on-gold:lab(96.574% 1.22038 7.58642);--success:lab(41.7514% -55.3249 21.5039);--error:lab(37.5238% 64.2774 32.6097);--shadow:0 4px 20px lab(0% 0 0/.1);--shadow-md:0 8px 32px lab(0% 0 0/.14), 0 0 0 1px var(--border-strong);--inner-ring:lab(91.7856% 1.21665 -3.54931);--inner-stroke:lab(61.7097% 15.1373 -34.1533);--inner-glyph:lab(24.6169% 28.6686 -46.7313);--inner-tick:lab(38.0413% 20.9664 -40.377);--outer-ring:lab(95.394% .703871 4.53229);--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)}}html,body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background-image:none}.tooltip{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--text);border-color:var(--border-strong);background:rgba(255,255,255,.96);background:color(display-p3 1 1 1/.96);background:lab(100% 0 0/.96);box-shadow:0 8px 32px rgba(0,0,0,.18),inset 0 .5px rgba(255,255,255,.6);box-shadow:0 8px 32px color(display-p3 0 0 0/.18),inset 0 .5px color(display-p3 1 1 1/.6);box-shadow:0 8px 32px lab(0% 0 0/.18),inset 0 .5px lab(100% 0 0/.6)}.tooltip-title{color:var(--text)}.tooltip-detail{color:var(--text-secondary)}.tooltip-hint{color:var(--gold-dim)}.chart-status{color:var(--gold);background:rgba(247,245,241,.92);background:color(display-p3 .967616 .959866 .945308/.92);background:lab(96.5376% .34076 2.2589/.92);border-color:rgba(141,95,0,.35);border-color:color(display-p3 .542549 .371783 -.107551/.35);border-color:lab(44.1995% 17.0662 84.3373/.35)}.chart-provenance{background:var(--surface)}.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)}.pan-btn{background:var(--surface)}.pan-btn:hover{background:var(--surface-2)}#fs-bottom-bar{background:#f7f5f1;background:color(display-p3 .967616 .959866 .945308);background:lab(96.5376% .34076 2.2589);border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{background:#f1eeea;background:color(display-p3 .941472 .933762 .919279);background:lab(94.2176% .341028 2.25905)}#fs-bottom-bar [data-column=left]{border-right-color:#caced4;border-right-color:color(display-p3 .796183 .806346 .830691);border-right-color:lab(82.5562% -.22167 -3.77336)}#fs-bottom-bar [data-column=right]{border-left-color:#caced4;border-left-color:color(display-p3 .796183 .806346 .830691);border-left-color:lab(82.5562% -.22167 -3.77336)}#fs-bottom-bar [data-column]>*+*{border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}.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:6px}.pan-btn{min-width:40px;min-height:40px}.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{background:var(--gold-subtle);color:var(--gold)}.loc-status{color:var(--text-secondary);letter-spacing:.01em;padding:8px 10px;font-size:11px;font-style:italic}.loc-status-error{color:#d76a5a;color:color(display-p3 .788241 .439621 .373983);color:lab(58.1265% 42.6447 29.9439);font-style:normal;font-weight:600}.param-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.param-btn-icon{border:1px solid var(--border-strong);color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;background:0 0;justify-content:center;align-items:center;width:24px;height:24px;display:flex}@media (prefers-reduced-motion:no-preference){.param-btn-icon{transition:background .15s,border-color .15s,color .15s}}.param-btn-icon:hover{background:var(--surface-2);color:var(--text);border-color:var(--gold-dim)}.param-btn-primary{color:var(--gold);border-radius:var(--radius-sm);cursor:pointer;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);height:24px;padding:3px 10px;font-family:inherit;font-size:10px;font-weight:600}@media (prefers-reduced-motion:no-preference){.param-btn-primary{transition:background .15s,border-color .15s}}.param-btn-primary:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65)}.param-btn-primary:disabled{opacity:.5;cursor:not-allowed}@media (prefers-color-scheme:light){.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{border-color:var(--border-strong);color:var(--text);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167578 1.1277)}.loc-suggestions{border-color:var(--border-strong);background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167578 1.1277)}.param-btn-primary{background:rgba(160,112,0,.12);background:color(display-p3 .615135 .441554 -.0204711/.12);background:lab(51.2092% 16.2654 78.3504/.12);border-color:rgba(160,112,0,.4);border-color:color(display-p3 .615135 .441554 -.0204711/.4);border-color:lab(51.2092% 16.2654 78.3504/.4)}.param-btn-primary:hover:not(:disabled){background:rgba(160,112,0,.22);background:color(display-p3 .615135 .441554 -.0204711/.22);background:lab(51.2092% 16.2654 78.3504/.22);border-color:rgba(160,112,0,.65);border-color:color(display-p3 .615135 .441554 -.0204711/.65);border-color:lab(51.2092% 16.2654 78.3504/.65)}}.param-summary-bar{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:2px 0;margin-bottom:4px;padding:3px 4px 5px;font-size:10px;line-height:1.3;display:flex}.param-summary-bar[hidden]{display:none}.summary-name{color:var(--gold,#d6a54d);letter-spacing:.01em;padding-right:2px;font-size:12px;font-weight:700}@supports (color:color(display-p3 0 0 0)){.summary-name{color:var(--gold,color(display-p3 .808073 .654274 .358094))}}@supports (color:lab(0% 0 0)){.summary-name{color:var(--gold,lab(71.071% 11.7474 51.7651))}}.summary-datetime{font-variant-numeric:tabular-nums;color:var(--text-secondary);align-items:baseline;gap:4px;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-size:11px;display:inline-flex}.summary-time-sep{color:var(--border-strong);opacity:.7;font-family:inherit;font-size:9px}.summary-loc{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:200px;padding-left:2px;font-size:11px;font-style:italic;overflow:hidden}.summary-sep{background:var(--border-strong);opacity:.5;vertical-align:middle;flex-shrink:0;width:1px;height:11px;margin:0 7px;display:inline-block}
|
|
11
11
|
/*$vite$:1*/</style>
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
@@ -6678,19 +6678,29 @@ function X(e4) {
|
|
|
6678
6678
|
function Z(e4) {
|
|
6679
6679
|
return String(e4).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
6680
6680
|
}
|
|
6681
|
-
|
|
6682
|
-
|
|
6681
|
+
var R_ = "true";
|
|
6682
|
+
function z_(e4) {
|
|
6683
|
+
R_ = e4;
|
|
6684
|
+
}
|
|
6685
|
+
function B_(e4) {
|
|
6686
|
+
let t2 = e4.some((e5) => e5.name === "true_node"), n2 = e4.some((e5) => e5.name === "north_node");
|
|
6687
|
+
if (!t2 || !n2) return e4;
|
|
6688
|
+
let r2 = R_ === "true" ? "north_node" : "true_node";
|
|
6689
|
+
return e4.filter((e5) => e5.name !== r2);
|
|
6690
|
+
}
|
|
6691
|
+
function V_(e4) {
|
|
6692
|
+
return Array.isArray(e4) ? B_(e4.filter((e5) => e5 && typeof e5.longitude == "number" && isFinite(e5.longitude))) : e4 && typeof e4 == "object" ? B_(Object.entries(e4).filter(([e5]) => I_.has(e5.toLowerCase())).map(([e5, t2]) => {
|
|
6683
6693
|
var n2, r2, i2, a2, o2, s2;
|
|
6684
6694
|
return { name: e5.toLowerCase(), longitude: (n2 = (r2 = t2.longitude) == null ? t2.lon : r2) == null ? 0 : n2, speed: (i2 = t2.longitude_speed) == null ? t2.speed : i2, retrograde: !!((a2 = t2.is_retrograde) == null ? t2.retrograde : a2), sign: (o2 = t2.sign_name) == null ? t2.sign : o2, house: (s2 = t2.house_number) == null ? t2.house : s2 };
|
|
6685
|
-
}) : [];
|
|
6695
|
+
})) : [];
|
|
6686
6696
|
}
|
|
6687
|
-
var
|
|
6688
|
-
function
|
|
6697
|
+
var H_ = [{ 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 }];
|
|
6698
|
+
function U_(e4, t2, n2 = 1) {
|
|
6689
6699
|
let r2 = [];
|
|
6690
6700
|
for (let o2 of e4) for (let e5 of t2) {
|
|
6691
6701
|
let t3 = Math.abs(o2.longitude - e5.longitude) % 360;
|
|
6692
6702
|
t3 > 180 && (t3 = 360 - t3);
|
|
6693
|
-
for (let s2 of
|
|
6703
|
+
for (let s2 of H_) {
|
|
6694
6704
|
let c2 = s2.orb * n2, l2 = Math.abs(t3 - s2.angle);
|
|
6695
6705
|
if (l2 <= c2) {
|
|
6696
6706
|
var i2, a2;
|
|
@@ -6702,39 +6712,39 @@ function B_(e4, t2, n2 = 1) {
|
|
|
6702
6712
|
}
|
|
6703
6713
|
return r2.sort((e5, t3) => e5.orb - t3.orb).slice(0, 40);
|
|
6704
6714
|
}
|
|
6705
|
-
var
|
|
6706
|
-
function
|
|
6707
|
-
|
|
6715
|
+
var W_ = null;
|
|
6716
|
+
function G_(e4) {
|
|
6717
|
+
W_ = e4;
|
|
6708
6718
|
}
|
|
6709
|
-
var
|
|
6710
|
-
function
|
|
6711
|
-
return
|
|
6719
|
+
var K_ = null, q_ = null;
|
|
6720
|
+
function J_() {
|
|
6721
|
+
return q_ || (q_ = document.getElementById("tooltip")), q_;
|
|
6712
6722
|
}
|
|
6713
|
-
function
|
|
6714
|
-
let a2 =
|
|
6723
|
+
function Y_(e4, t2, n2, r2, i2) {
|
|
6724
|
+
let a2 = J_();
|
|
6715
6725
|
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 ");
|
|
6716
6726
|
let o2 = a2.getBoundingClientRect(), s2 = o2.width || 240, c2 = o2.height || 80, l2 = e4 + 14, u2 = t2 + 10;
|
|
6717
6727
|
l2 + s2 > window.innerWidth && (l2 = e4 - 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");
|
|
6718
6728
|
}
|
|
6719
|
-
function
|
|
6720
|
-
|
|
6729
|
+
function X_() {
|
|
6730
|
+
J_().classList.remove("visible");
|
|
6721
6731
|
}
|
|
6722
|
-
var
|
|
6723
|
-
function
|
|
6732
|
+
var Z_ = { sun: "identity & vitality", moon: "emotions & instincts", mercury: "mind & communication", venus: "love & values", mars: "drive & desire", jupiter: "expansion & meaning", saturn: "discipline & mastery", uranus: "innovation & rebellion", neptune: "dreams & transcendence", pluto: "transformation & power", chiron: "wound & healing", "north node": "soul direction", "south node": "past-life gifts", "true node": "soul direction" }, Q_ = { conjunction: "fusion & amplification", opposition: "polarity & integration", trine: "ease & natural flow", square: "tension & growth", sextile: "opportunity & cooperation", quincunx: "adjustment & recalibration", semisquare: "friction & minor tension" }, $_ = null, Q = null, ev = /* @__PURE__ */ new Map();
|
|
6733
|
+
function tv(e4) {
|
|
6724
6734
|
return "".concat(e4.planet1, "|inner|").concat(e4.planet2, "|outer|").concat(e4.type);
|
|
6725
6735
|
}
|
|
6726
|
-
var
|
|
6727
|
-
function
|
|
6736
|
+
var nv = { 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"] } };
|
|
6737
|
+
function rv(e4, t2, n2, r2, i2) {
|
|
6728
6738
|
var a2, o2;
|
|
6729
|
-
let s2 =
|
|
6739
|
+
let s2 = cv(), c2 = nv[t2];
|
|
6730
6740
|
if (!c2) return;
|
|
6731
|
-
let l2 = L_(n2), u2 = Math.floor((n2 % 360 + 360) % 360 / 30), d2 = M_[u2], f2 = N_[u2], p2 = T_[u2], m2 = P_[u2], h2 = i2 ? "".concat(i2, " \xB7 Natal") : "Inner \xB7 Natal", g2 =
|
|
6741
|
+
let l2 = L_(n2), u2 = Math.floor((n2 % 360 + 360) % 360 / 30), d2 = M_[u2], f2 = N_[u2], p2 = T_[u2], m2 = P_[u2], h2 = i2 ? "".concat(i2, " \xB7 Natal") : "Inner \xB7 Natal", g2 = K_ ? '<button class="ask-claude-btn" id="bi-ask-claude-angle-btn">\u2728 Ask Claude to interpret</button>' : "";
|
|
6732
6742
|
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(Z(c2.symbol), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:6px;flex-wrap:wrap;">\n <strong>').concat(Z(c2.title), '</strong>\n <span class="wheel-badge inner">').concat(Z(h2), '</span>\n </div>\n <div class="info-subtitle">').concat(Z(p2), " ").concat(Z(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(Z(p2), "</span>\n <em>").concat(Z(d2), " \xB7 ").concat(Z(f2), '</em>\n </div>\n <div style="font-size:12px;line-height:1.55;margin-bottom:8px">').concat(Z(c2.meaning), '</div>\n <div class="aspects-title">').concat(Z(c2.keyword), '</div>\n <div class="aspects-list">\n ').concat(c2.themes.map((e5) => '<div class="aspect-row"><span class="aspect-other">'.concat(Z(e5), "</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", () => {
|
|
6733
|
-
|
|
6743
|
+
lv(), gv();
|
|
6734
6744
|
}), (o2 = document.getElementById("bi-ask-claude-angle-btn")) == null || o2.addEventListener("click", () => {
|
|
6735
|
-
if (!
|
|
6745
|
+
if (!K_) return;
|
|
6736
6746
|
let e5 = document.getElementById("bi-ask-claude-angle-btn");
|
|
6737
|
-
!e5 || e5.disabled || (e5.disabled = true, e5.textContent = "\u23F3 Sending\u2026", e5.classList.add("sending"),
|
|
6747
|
+
!e5 || e5.disabled || (e5.disabled = true, e5.textContent = "\u23F3 Sending\u2026", e5.classList.add("sending"), K_({ type: "angle_interpretation", data: { angle: c2.title, longitude: n2, sign: E_[u2], position: l2, element: d2, modality: f2, mode: r2 } }).then(() => {
|
|
6738
6748
|
e5.textContent = "\u2713 Sent to Claude", e5.classList.remove("sending"), e5.classList.add("sent"), setTimeout(() => {
|
|
6739
6749
|
e5.textContent = "\u2728 Ask Claude to interpret", e5.classList.remove("sent"), e5.disabled = false;
|
|
6740
6750
|
}, 2500);
|
|
@@ -6743,27 +6753,27 @@ function ev(e4, t2, n2, r2, i2) {
|
|
|
6743
6753
|
}));
|
|
6744
6754
|
});
|
|
6745
6755
|
}
|
|
6746
|
-
var
|
|
6747
|
-
function
|
|
6756
|
+
var iv = { 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" };
|
|
6757
|
+
function av(e4, t2, n2) {
|
|
6748
6758
|
let r2 = (n2 - t2 + 360) % 360;
|
|
6749
6759
|
return e4.filter((e5) => {
|
|
6750
6760
|
let n3 = (e5.longitude - t2 + 360) % 360;
|
|
6751
6761
|
return n3 >= 0 && n3 < r2;
|
|
6752
6762
|
});
|
|
6753
6763
|
}
|
|
6754
|
-
function
|
|
6764
|
+
function ov(e4, t2, n2, r2, i2, a2, o2, s2) {
|
|
6755
6765
|
var c2, l2, u2, d2, f2;
|
|
6756
|
-
let p2 =
|
|
6766
|
+
let p2 = cv(), m2 = Math.floor((t2.cusp_lon % 360 + 360) % 360 / 30), h2 = (c2 = (l2 = t2.sign) == null ? E_[m2] : l2) == null ? "" : c2, g2 = (u2 = T_[m2]) == null ? "" : u2, _2 = av(o2, t2.cusp_lon, n2.cusp_lon), v2 = av(s2, t2.cusp_lon, n2.cusp_lon), y2 = i2 || "Natal", b2 = r2 === "synastry" ? a2 == null ? "Synastry" : a2 : "Transit", x2 = (e5, t3) => e5.length === 0 ? '<div class="no-aspects">\u2014</div>' : e5.map((e6) => {
|
|
6757
6767
|
let n3 = L_(e6.longitude), r3 = e6.retrograde ? " \u211E" : "";
|
|
6758
6768
|
return '<div class="aspect-row">\n <span class="wheel-badge '.concat(t3, '" style="font-size:9px">').concat(Z(t3 === "inner" ? y2 : b2), '</span>\n <span class="aspect-other">').concat(Z(X(e6.name))).concat(r3, '</span>\n <span class="aspect-meta">').concat(Z(n3), "</span>\n </div>");
|
|
6759
|
-
}).join(""), S2 =
|
|
6769
|
+
}).join(""), S2 = K_ ? '<button class="ask-claude-btn" id="bi-ask-claude-house-btn">\u2728 Ask Claude to interpret</button>' : "";
|
|
6760
6770
|
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(Z(g2), " ").concat(Z(h2), " on cusp").concat(t2.ruler ? " \xB7 ruled by ".concat(Z(X(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(Z(y2), ' planets</div>\n <div class="aspects-list">').concat(x2(_2, "inner"), '</div>\n <div class="aspects-title" style="margin-top:8px">').concat(Z(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", () => {
|
|
6761
|
-
|
|
6771
|
+
lv(), gv();
|
|
6762
6772
|
}), (f2 = document.getElementById("bi-ask-claude-house-btn")) == null || f2.addEventListener("click", () => {
|
|
6763
6773
|
var e5;
|
|
6764
|
-
if (!
|
|
6774
|
+
if (!K_) return;
|
|
6765
6775
|
let n3 = document.getElementById("bi-ask-claude-house-btn");
|
|
6766
|
-
!n3 || n3.disabled || (n3.disabled = true, n3.textContent = "\u23F3 Sending\u2026", n3.classList.add("sending"),
|
|
6776
|
+
!n3 || n3.disabled || (n3.disabled = true, n3.textContent = "\u23F3 Sending\u2026", n3.classList.add("sending"), K_({ type: "house", data: { house_number: t2.number, cusp_sign: h2, cusp_longitude: t2.cusp_lon, ruler: (e5 = t2.ruler) == null ? null : e5, mode: r2, inner_label: y2, outer_label: b2, inner_planets: _2.map((e6) => {
|
|
6767
6777
|
var t3;
|
|
6768
6778
|
return { name: e6.name, position: L_(e6.longitude), retrograde: (t3 = e6.retrograde) == null ? false : t3 };
|
|
6769
6779
|
}), outer_planets: v2.map((e6) => {
|
|
@@ -6778,18 +6788,18 @@ function rv(e4, t2, n2, r2, i2, a2, o2, s2) {
|
|
|
6778
6788
|
}));
|
|
6779
6789
|
});
|
|
6780
6790
|
}
|
|
6781
|
-
function
|
|
6791
|
+
function sv(e4, t2, n2, r2, i2, a2, o2) {
|
|
6782
6792
|
var s2, c2;
|
|
6783
|
-
let l2 =
|
|
6793
|
+
let l2 = cv(), u2 = E_[t2], d2 = T_[t2], f2 = M_[t2], p2 = N_[t2], m2 = (e5) => Math.floor((e5.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 = (e5, t3) => e5.length === 0 ? '<div class="no-aspects">\u2014</div>' : e5.map((e6) => {
|
|
6784
6794
|
let n3 = L_(e6.longitude), r3 = e6.retrograde ? " \u211E" : "";
|
|
6785
6795
|
return '<div class="aspect-row">\n <span class="wheel-badge '.concat(t3, '" style="font-size:9px">').concat(Z(t3 === "inner" ? _2 : v2), '</span>\n <span class="aspect-other">').concat(Z(X(e6.name))).concat(r3, '</span>\n <span class="aspect-meta">').concat(Z(n3), "</span>\n </div>");
|
|
6786
|
-
}).join(""), b2 =
|
|
6796
|
+
}).join(""), b2 = K_ ? '<button class="ask-claude-btn" id="bi-ask-claude-sign-btn">\u2728 Ask Claude to interpret</button>' : "";
|
|
6787
6797
|
l2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(P_[t2], ';font-family:serif;font-weight:700;font-size:16px">').concat(Z(d2), '</span>\n <div class="info-title">\n <div><strong>').concat(Z(u2), '</strong></div>\n <div class="info-subtitle"><em>').concat(Z(X(f2)), " \xB7 ").concat(Z(X(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(Z(_2), " planets in ").concat(Z(u2), '</div>\n <div class="aspects-list">').concat(y2(h2, "inner"), '</div>\n <div class="aspects-title" style="margin-top:8px">').concat(Z(v2), " planets currently in ").concat(Z(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", () => {
|
|
6788
|
-
|
|
6798
|
+
lv(), gv();
|
|
6789
6799
|
}), (c2 = document.getElementById("bi-ask-claude-sign-btn")) == null || c2.addEventListener("click", () => {
|
|
6790
|
-
if (!
|
|
6800
|
+
if (!K_) return;
|
|
6791
6801
|
let e5 = document.getElementById("bi-ask-claude-sign-btn");
|
|
6792
|
-
!e5 || e5.disabled || (e5.disabled = true, e5.textContent = "\u23F3 Sending\u2026", e5.classList.add("sending"),
|
|
6802
|
+
!e5 || e5.disabled || (e5.disabled = true, e5.textContent = "\u23F3 Sending\u2026", e5.classList.add("sending"), K_({ type: "sign", data: { sign: u2, element: X(f2), modality: X(p2), mode: n2, inner_label: _2, outer_label: v2, inner_planets: h2.map((e6) => {
|
|
6793
6803
|
var t3;
|
|
6794
6804
|
return { name: e6.name, position: L_(e6.longitude), retrograde: (t3 = e6.retrograde) == null ? false : t3 };
|
|
6795
6805
|
}), outer_planets: g2.map((e6) => {
|
|
@@ -6804,7 +6814,7 @@ function iv(e4, t2, n2, r2, i2, a2, o2) {
|
|
|
6804
6814
|
}));
|
|
6805
6815
|
});
|
|
6806
6816
|
}
|
|
6807
|
-
function
|
|
6817
|
+
function cv() {
|
|
6808
6818
|
if (document.body.classList.contains("is-fullscreen")) {
|
|
6809
6819
|
let e5 = document.querySelector("#fs-bottom-bar [data-column='right']");
|
|
6810
6820
|
if (e5) {
|
|
@@ -6812,36 +6822,36 @@ function av() {
|
|
|
6812
6822
|
return t3 || (t3 = document.createElement("div"), t3.className = "info-drawer info-drawer--fs", e5.appendChild(t3)), t3;
|
|
6813
6823
|
}
|
|
6814
6824
|
}
|
|
6815
|
-
if (
|
|
6816
|
-
|
|
6825
|
+
if ($_ && $_.isConnected) return $_;
|
|
6826
|
+
$_ = document.createElement("div"), $_.id = "bi-info-drawer", $_.className = "info-drawer";
|
|
6817
6827
|
let e4 = document.getElementById("chart-container");
|
|
6818
|
-
if (e4 != null && e4.parentElement) e4.parentElement.insertBefore(
|
|
6828
|
+
if (e4 != null && e4.parentElement) e4.parentElement.insertBefore($_, e4.nextSibling);
|
|
6819
6829
|
else {
|
|
6820
6830
|
var t2;
|
|
6821
|
-
(t2 = document.getElementById("app")) == null || t2.appendChild(
|
|
6831
|
+
(t2 = document.getElementById("app")) == null || t2.appendChild($_);
|
|
6822
6832
|
}
|
|
6823
|
-
return
|
|
6833
|
+
return $_;
|
|
6824
6834
|
}
|
|
6825
|
-
function
|
|
6835
|
+
function lv() {
|
|
6826
6836
|
var e4;
|
|
6827
|
-
|
|
6837
|
+
$_ == null || $_.classList.remove("open"), (e4 = document.querySelector("#fs-bottom-bar [data-column='right'] .info-drawer--fs")) == null || e4.classList.remove("open"), W_ == null || W_(null);
|
|
6828
6838
|
}
|
|
6829
|
-
function
|
|
6839
|
+
function uv(e4, t2, n2, r2, i2, a2, o2) {
|
|
6830
6840
|
var s2, c2, l2, u2, d2;
|
|
6831
|
-
let f2 =
|
|
6841
|
+
let f2 = cv(), p2 = (s2 = w_[t2.name.toLowerCase()]) == null ? "\u2605" : s2, m2 = (c2 = T_[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "" : c2, h2 = j_(t2.name, t2.longitude), g2;
|
|
6832
6842
|
g2 = n2 === "inner" ? a2 ? "".concat(a2, " \xB7 Natal") : "Inner \xB7 Natal" : i2 === "transit" ? "Outer \xB7 Transit" : o2 ? "".concat(o2, " \xB7 Synastry") : "Outer \xB7 Synastry";
|
|
6833
6843
|
let _2 = n2, v2 = r2.filter((e5) => n2 === "inner" && e5.planet1 === t2.name || n2 === "outer" && e5.planet2 === t2.name).sort((e5, t3) => e5.orb - t3.orb), y2 = v2.length ? v2.map((e5) => {
|
|
6834
6844
|
var t3, r3, a3, o3, s3, c3, l3;
|
|
6835
6845
|
let u3 = n2 === "inner" ? e5.planet2 : e5.planet1, d3 = (t3 = w_[u3.toLowerCase()]) == null ? u3 : t3, f3 = (r3 = (a3 = D_[(o3 = (s3 = e5.type) == null ? void 0 : s3.toLowerCase()) == null ? "" : o3]) == null ? e5.type : a3) == null ? "\u2014" : r3, p3 = O_((c3 = (l3 = e5.type) == null ? void 0 : l3.toLowerCase()) == null ? "" : c3), m3 = "".concat(e5.orb.toFixed(1), "\xB0"), h3 = i2 === "transit" ? e5.applying ? "\u2197" : "\u2198" : e5.orb <= 1 ? "exact" : e5.orb <= 3 ? "tight" : "wide";
|
|
6836
6846
|
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(Z(d3), " ").concat(Z(X(u3)), '</span>\n <span class="aspect-meta">').concat(m3, " ").concat(h3, "</span>\n </div>");
|
|
6837
|
-
}).join("") : '<div class="no-aspects">No cross-aspects within orb</div>', b2 = (l2 = E_[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "Unknown" : l2, x2 =
|
|
6847
|
+
}).join("") : '<div class="no-aspects">No cross-aspects within orb</div>', b2 = (l2 = E_[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "Unknown" : l2, x2 = K_ ? '<button class="ask-claude-btn" id="bi-ask-claude-planet-btn">\u2728 Ask Claude to interpret</button>' : "";
|
|
6838
6848
|
f2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph">'.concat(Z(p2), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:6px;flex-wrap:wrap;">\n <strong>').concat(Z(X(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(Z(h2.label), "</span>") : "", '\n <span class="wheel-badge ').concat(_2, '">').concat(Z(g2), '</span>\n </div>\n <div class="info-subtitle">').concat(Z(m2), " ").concat(Z(L_(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", () => {
|
|
6839
|
-
|
|
6849
|
+
lv(), gv();
|
|
6840
6850
|
}), (d2 = document.getElementById("bi-ask-claude-planet-btn")) == null || d2.addEventListener("click", () => {
|
|
6841
6851
|
var e5, r3;
|
|
6842
|
-
if (!
|
|
6852
|
+
if (!K_) return;
|
|
6843
6853
|
let a3 = document.getElementById("bi-ask-claude-planet-btn");
|
|
6844
|
-
!a3 || a3.disabled || (a3.disabled = true, a3.textContent = "\u23F3 Sending\u2026", a3.classList.add("sending"),
|
|
6854
|
+
!a3 || a3.disabled || (a3.disabled = true, a3.textContent = "\u23F3 Sending\u2026", a3.classList.add("sending"), K_({ 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: (e5 = t2.house) == null ? null : e5, retrograde: (r3 = t2.retrograde) == null ? false : r3, mode: i2, cross_aspects: v2.map((e6) => ({ type: e6.type, partner: n2 === "inner" ? e6.planet2 : e6.planet1, orb: e6.orb, applying: e6.applying, orb_label: i2 === "transit" ? e6.applying ? "applying" : "separating" : e6.orb <= 1 ? "exact" : e6.orb <= 3 ? "tight" : "wide" })) } }).then(() => {
|
|
6845
6855
|
a3.textContent = "\u2713 Sent to Claude", a3.classList.remove("sending"), a3.classList.add("sent"), setTimeout(() => {
|
|
6846
6856
|
a3.textContent = "\u2728 Ask Claude to interpret", a3.classList.remove("sent"), a3.disabled = false;
|
|
6847
6857
|
}, 2500);
|
|
@@ -6850,15 +6860,15 @@ function sv(e4, t2, n2, r2, i2, a2, o2) {
|
|
|
6850
6860
|
}));
|
|
6851
6861
|
});
|
|
6852
6862
|
}
|
|
6853
|
-
function
|
|
6863
|
+
function dv(e4, t2, n2, r2, i2) {
|
|
6854
6864
|
var a2, o2, s2, c2, l2, u2, d2, f2, p2;
|
|
6855
|
-
let m2 =
|
|
6865
|
+
let m2 = cv(), h2 = (a2 = w_[t2.planet1.toLowerCase()]) == null ? "\u2605" : a2, g2 = (o2 = w_[t2.planet2.toLowerCase()]) == null ? "\u2605" : o2, _2 = (s2 = D_[(c2 = (l2 = t2.type) == null ? void 0 : l2.toLowerCase()) == null ? "" : c2]) == null ? t2.type : s2, v2 = O_((u2 = (d2 = t2.type) == null ? void 0 : d2.toLowerCase()) == null ? "" : u2), y2 = r2 ? "".concat(r2, "'s ").concat(X(t2.planet1)) : X(t2.planet1), b2 = n2 === "transit" ? "Tr. ".concat(X(t2.planet2)) : i2 ? "".concat(i2, "'s ").concat(X(t2.planet2)) : X(t2.planet2), x2 = n2 === "transit" ? t2.applying ? "\u2197 Applying" : "\u2198 Separating" : t2.orb <= 1 ? "Exact" : t2.orb <= 3 ? "Tight" : "Wide", S2 = K_ ? '<button class="ask-claude-btn" id="bi-ask-claude-asp-btn">\u2728 Ask Claude to interpret</button>' : "";
|
|
6856
6866
|
m2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(v2, '">').concat(Z(String(_2)), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:5px;flex-wrap:wrap;">\n <strong>').concat(Z(h2), " ").concat(Z(y2), '</strong>\n <span style="color:').concat(v2, '">').concat(Z(String(_2)), "</span>\n <strong>").concat(Z(g2), " ").concat(Z(b2), '</strong>\n </div>\n <div class="info-subtitle">').concat(t2.orb.toFixed(1), "\xB0 orb \xB7 ").concat(Z(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(Z(y2), '</span>\n <span class="wheel-badge outer">Outer \xB7 ').concat(Z(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", () => {
|
|
6857
|
-
|
|
6867
|
+
lv(), gv();
|
|
6858
6868
|
}), (p2 = document.getElementById("bi-ask-claude-asp-btn")) == null || p2.addEventListener("click", () => {
|
|
6859
|
-
if (!
|
|
6869
|
+
if (!K_) return;
|
|
6860
6870
|
let e5 = document.getElementById("bi-ask-claude-asp-btn");
|
|
6861
|
-
!e5 || e5.disabled || (e5.disabled = true, e5.textContent = "\u23F3 Sending\u2026", e5.classList.add("sending"),
|
|
6871
|
+
!e5 || e5.disabled || (e5.disabled = true, e5.textContent = "\u23F3 Sending\u2026", e5.classList.add("sending"), K_({ 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(() => {
|
|
6862
6872
|
e5.textContent = "\u2713 Sent to Claude", e5.classList.remove("sending"), e5.classList.add("sent"), setTimeout(() => {
|
|
6863
6873
|
e5.textContent = "\u2728 Ask Claude to interpret", e5.classList.remove("sent"), e5.disabled = false;
|
|
6864
6874
|
}, 2500);
|
|
@@ -6867,20 +6877,20 @@ function cv(e4, t2, n2, r2, i2) {
|
|
|
6867
6877
|
}));
|
|
6868
6878
|
});
|
|
6869
6879
|
}
|
|
6870
|
-
function
|
|
6871
|
-
|
|
6880
|
+
function fv(e4, t2) {
|
|
6881
|
+
ev.forEach(({ vis: n2, color: r2, symbolEls: i2 }, a2) => {
|
|
6872
6882
|
let o2 = a2.split("|");
|
|
6873
6883
|
(t2 === "inner" ? o2[0] === e4 : o2[2] === e4) ? (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((e5) => e5.style.opacity = "1")) : (n2.style.strokeOpacity = "0.05", n2.style.strokeWidth = "0.5", n2.removeAttribute("filter"), i2.forEach((e5) => e5.style.opacity = "0.15"));
|
|
6874
|
-
}),
|
|
6884
|
+
}), mv(e4, t2);
|
|
6875
6885
|
}
|
|
6876
|
-
function
|
|
6877
|
-
|
|
6886
|
+
function pv(e4, t2) {
|
|
6887
|
+
ev.forEach(({ vis: n2, color: r2, symbolEls: i2 }, a2) => {
|
|
6878
6888
|
a2 === e4 ? (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((e5) => e5.style.opacity = "1")) : (n2.style.strokeOpacity = "0.05", n2.style.strokeWidth = "0.5", n2.removeAttribute("filter"), i2.forEach((e5) => e5.style.opacity = "0.15"));
|
|
6879
6889
|
});
|
|
6880
6890
|
}
|
|
6881
|
-
function
|
|
6891
|
+
function mv(e4, t2) {
|
|
6882
6892
|
let n2 = e4.toLowerCase(), r2 = /* @__PURE__ */ new Set(), i2 = /* @__PURE__ */ new Set();
|
|
6883
|
-
|
|
6893
|
+
ev.forEach((e5, a3) => {
|
|
6884
6894
|
var o2, s2;
|
|
6885
6895
|
let c2 = a3.split("|"), l2 = ((o2 = c2[0]) == null ? "" : o2).toLowerCase(), u2 = ((s2 = c2[2]) == null ? "" : s2).toLowerCase();
|
|
6886
6896
|
t2 === "inner" && l2 === n2 && i2.add(u2), t2 === "outer" && u2 === n2 && r2.add(l2);
|
|
@@ -6896,8 +6906,8 @@ function dv(e4, t2) {
|
|
|
6896
6906
|
o2 === n2 && i3 === t2 ? e5.style.opacity = "1" : a2(o2, i3) ? e5.style.opacity = "0.55" : e5.style.opacity = "0.12";
|
|
6897
6907
|
});
|
|
6898
6908
|
}
|
|
6899
|
-
function
|
|
6900
|
-
|
|
6909
|
+
function hv() {
|
|
6910
|
+
ev.forEach(({ vis: e4, symbolEls: t2 }) => {
|
|
6901
6911
|
e4.style.strokeOpacity = "0.05", e4.style.strokeWidth = "0.5", e4.removeAttribute("filter"), t2.forEach((e5) => e5.style.opacity = "0.15");
|
|
6902
6912
|
}), Q == null || Q.querySelectorAll(".planet-glyph-group").forEach((e4) => {
|
|
6903
6913
|
e4.style.opacity = "0.3";
|
|
@@ -6905,44 +6915,44 @@ function fv() {
|
|
|
6905
6915
|
e4.classList.add("dim");
|
|
6906
6916
|
});
|
|
6907
6917
|
}
|
|
6908
|
-
function
|
|
6909
|
-
|
|
6918
|
+
function gv() {
|
|
6919
|
+
ev.forEach(({ vis: e4, color: t2, orb: n2, symbolEls: r2 }) => {
|
|
6910
6920
|
let i2 = k_(n2 == null ? 4 : n2);
|
|
6911
6921
|
e4.style.stroke = t2, e4.style.strokeOpacity = i2.opacity, e4.style.strokeWidth = i2.width, e4.removeAttribute("filter"), i2.dash ? e4.setAttribute("stroke-dasharray", i2.dash) : e4.removeAttribute("stroke-dasharray"), r2.forEach((e5) => e5.style.opacity = "");
|
|
6912
6922
|
}), Q == null || Q.querySelectorAll(".planet-glyph-group").forEach((e4) => {
|
|
6913
6923
|
e4.style.opacity = "";
|
|
6914
|
-
}), Q == null || Q.querySelectorAll(".planet-hit").forEach((e4) => e4.classList.remove("dim")),
|
|
6924
|
+
}), Q == null || Q.querySelectorAll(".planet-hit").forEach((e4) => e4.classList.remove("dim")), Tv();
|
|
6915
6925
|
}
|
|
6916
|
-
function
|
|
6917
|
-
|
|
6926
|
+
function _v(e4) {
|
|
6927
|
+
ev.forEach(({ vis: t2, symbolEls: n2 }) => {
|
|
6918
6928
|
t2.style.display = e4 ? "" : "none", n2.forEach((t3) => t3.style.display = e4 ? "" : "none");
|
|
6919
6929
|
}), Q == null || Q.querySelectorAll(".aspect-hit").forEach((t2) => {
|
|
6920
6930
|
t2.style.display = e4 ? "" : "none";
|
|
6921
6931
|
});
|
|
6922
6932
|
}
|
|
6923
|
-
function
|
|
6933
|
+
function vv(e4, t2, n2) {
|
|
6924
6934
|
return "".concat(e4, "|inner|").concat(t2, "|outer|").concat(n2);
|
|
6925
6935
|
}
|
|
6926
|
-
function
|
|
6936
|
+
function yv(e4, t2, n2, r2, i2) {
|
|
6927
6937
|
return t2 === "inner" && r2 === "outer" ? "".concat(e4, "|inner|").concat(n2, "|outer|").concat(i2) : r2 === "inner" && t2 === "outer" ? "".concat(n2, "|inner|").concat(e4, "|outer|").concat(i2) : [e4, n2].sort().join("|") + "|".concat(i2);
|
|
6928
6938
|
}
|
|
6929
|
-
function
|
|
6939
|
+
function bv(e4, t2) {
|
|
6930
6940
|
return e4.filter((e5) => {
|
|
6931
6941
|
var n2;
|
|
6932
6942
|
return ((n2 = e5.type) == null ? "" : n2).toLowerCase() === t2;
|
|
6933
6943
|
});
|
|
6934
6944
|
}
|
|
6935
|
-
function
|
|
6945
|
+
function xv(e4) {
|
|
6936
6946
|
let t2 = [];
|
|
6937
6947
|
if (!e4.length) return t2;
|
|
6938
|
-
let n2 =
|
|
6948
|
+
let n2 = bv(e4, "trine"), r2 = bv(e4, "square"), i2 = bv(e4, "opposition"), a2 = bv(e4, "conjunction"), o2 = /* @__PURE__ */ new Set();
|
|
6939
6949
|
for (let e5 = 0; e5 < n2.length; e5++) for (let r3 = e5 + 1; r3 < n2.length; r3++) {
|
|
6940
6950
|
let i3 = n2[e5], a3 = n2[r3];
|
|
6941
6951
|
if (i3.planet1 !== a3.planet1) continue;
|
|
6942
6952
|
let s3 = i3.planet1, c3 = i3.planet2, l2 = a3.planet2;
|
|
6943
6953
|
if (c3 === l2) continue;
|
|
6944
6954
|
let u2 = [s3, c3, l2].sort().join("|");
|
|
6945
|
-
o2.has(u2) || (o2.add(u2), t2.push({ name: "Cross Trine", description: "".concat(X(s3), " trines ").concat(X(c3), " & ").concat(X(l2)), planets: [{ name: s3, wheel: "inner" }, { name: c3, wheel: "outer" }, { name: l2, wheel: "outer" }], aspectKeys: [
|
|
6955
|
+
o2.has(u2) || (o2.add(u2), t2.push({ name: "Cross Trine", description: "".concat(X(s3), " trines ").concat(X(c3), " & ").concat(X(l2)), planets: [{ name: s3, wheel: "inner" }, { name: c3, wheel: "outer" }, { name: l2, wheel: "outer" }], aspectKeys: [vv(s3, c3, "trine"), vv(s3, l2, "trine")] }));
|
|
6946
6956
|
}
|
|
6947
6957
|
let s2 = /* @__PURE__ */ new Set();
|
|
6948
6958
|
for (let e5 of i2) {
|
|
@@ -6957,7 +6967,7 @@ function vv(e4) {
|
|
|
6957
6967
|
if (s2.has(c3)) continue;
|
|
6958
6968
|
let l2;
|
|
6959
6969
|
if (l2 = o3 === "outer" ? e6 : r2.find((e7) => e7.planet1 === a3 && e7.planet2 === i3), l2) {
|
|
6960
|
-
s2.add(c3), t2.push({ name: "Cross T-Square", description: "Apex: ".concat(X(a3), " (").concat(o3, ")"), planets: [{ name: n3, wheel: "inner" }, { name: i3, wheel: "outer" }, { name: a3, wheel: o3 }], aspectKeys: [
|
|
6970
|
+
s2.add(c3), t2.push({ name: "Cross T-Square", description: "Apex: ".concat(X(a3), " (").concat(o3, ")"), planets: [{ name: n3, wheel: "inner" }, { name: i3, wheel: "outer" }, { name: a3, wheel: o3 }], aspectKeys: [vv(n3, i3, "opposition"), yv(n3, "inner", a3, o3, "square"), yv(a3, o3, i3, "outer", "square")] });
|
|
6961
6971
|
break;
|
|
6962
6972
|
}
|
|
6963
6973
|
}
|
|
@@ -6973,13 +6983,13 @@ function vv(e4) {
|
|
|
6973
6983
|
for (let [r3, i3] of e5) {
|
|
6974
6984
|
if (i3.length < 2) continue;
|
|
6975
6985
|
let e6 = "".concat(r3, "|").concat([...i3].sort().join("|"));
|
|
6976
|
-
n3.has(e6) || (n3.add(e6), t2.push({ name: "Cross Stellium", description: "".concat(X(r3), " conjunct ").concat(i3.map(X).join(" & "), " (cross-wheel)"), planets: [{ name: r3, wheel: "inner" }, ...i3.map((e7) => ({ name: e7, wheel: "outer" }))], aspectKeys: i3.map((e7) =>
|
|
6986
|
+
n3.has(e6) || (n3.add(e6), t2.push({ name: "Cross Stellium", description: "".concat(X(r3), " conjunct ").concat(i3.map(X).join(" & "), " (cross-wheel)"), planets: [{ name: r3, wheel: "inner" }, ...i3.map((e7) => ({ name: e7, wheel: "outer" }))], aspectKeys: i3.map((e7) => vv(r3, e7, "conjunction")) }));
|
|
6977
6987
|
}
|
|
6978
6988
|
}
|
|
6979
6989
|
return t2;
|
|
6980
6990
|
}
|
|
6981
|
-
var
|
|
6982
|
-
function
|
|
6991
|
+
var Sv = { "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)" }, Cv = { "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)" };
|
|
6992
|
+
function wv(e4, t2, n2, r2) {
|
|
6983
6993
|
var i2, a2;
|
|
6984
6994
|
if (!Q) return null;
|
|
6985
6995
|
let o2 = /* @__PURE__ */ new Map();
|
|
@@ -6992,7 +7002,7 @@ function xv(e4, t2, n2, r2) {
|
|
|
6992
7002
|
a3 != null && c2.push(J(a3, i3, r2));
|
|
6993
7003
|
}
|
|
6994
7004
|
if (c2.length < 2) return null;
|
|
6995
|
-
let l2 = (i2 =
|
|
7005
|
+
let l2 = (i2 = Sv[e4.name]) == null ? "rgba(128,128,128,0.12)" : i2, u2 = (a2 = Cv[e4.name]) == null ? "rgba(128,128,128,0.60)" : a2, d2;
|
|
6996
7006
|
if (c2.length === 2) {
|
|
6997
7007
|
let e5 = Y("line");
|
|
6998
7008
|
e5.setAttribute("x1", c2[0].x.toFixed(1)), e5.setAttribute("y1", c2[0].y.toFixed(1)), e5.setAttribute("x2", c2[1].x.toFixed(1)), e5.setAttribute("y2", c2[1].y.toFixed(1)), e5.setAttribute("stroke", u2), e5.setAttribute("stroke-width", "2"), e5.setAttribute("fill", "none"), d2 = e5;
|
|
@@ -7004,12 +7014,12 @@ function xv(e4, t2, n2, r2) {
|
|
|
7004
7014
|
let f2 = Q.querySelector(".aspect-hit");
|
|
7005
7015
|
return f2 ? Q.insertBefore(d2, f2) : Q.appendChild(d2), d2;
|
|
7006
7016
|
}
|
|
7007
|
-
function
|
|
7017
|
+
function Tv() {
|
|
7008
7018
|
Q == null || Q.querySelectorAll(".pattern-overlay").forEach((e4) => e4.remove());
|
|
7009
7019
|
}
|
|
7010
|
-
function
|
|
7020
|
+
function Ev(e4) {
|
|
7011
7021
|
let t2 = new Set(e4.aspectKeys);
|
|
7012
|
-
|
|
7022
|
+
ev.forEach(({ vis: e5, color: n3, symbolEls: r2 }, i2) => {
|
|
7013
7023
|
t2.has(i2) ? (e5.style.stroke = n3, e5.style.strokeOpacity = "0.92", e5.style.strokeWidth = "1.8", e5.removeAttribute("stroke-dasharray"), e5.setAttribute("filter", "url(#aspect-glow)"), r2.forEach((e6) => e6.style.opacity = "1")) : (e5.style.strokeOpacity = "0.05", e5.style.strokeWidth = "0.5", e5.removeAttribute("filter"), r2.forEach((e6) => e6.style.opacity = "0.15"));
|
|
7014
7024
|
});
|
|
7015
7025
|
let n2 = new Set(e4.planets.map((e5) => "".concat(e5.name.toLowerCase(), "|").concat(e5.wheel)));
|
|
@@ -7023,13 +7033,13 @@ function Cv(e4) {
|
|
|
7023
7033
|
e5.classList.toggle("dim", !n2.has(i2));
|
|
7024
7034
|
});
|
|
7025
7035
|
}
|
|
7026
|
-
function
|
|
7036
|
+
function Dv(e4, t2, n2, r2, i2, a2) {
|
|
7027
7037
|
var o2, s2, c2, l2, u2, d2, f2, p2, m2, h2, g2, _2;
|
|
7028
|
-
|
|
7038
|
+
K_ = i2 == null ? null : i2;
|
|
7029
7039
|
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 = e4.querySelector("#pan-zoom-controls");
|
|
7030
|
-
e4.innerHTML = "", x2 && e4.appendChild(x2),
|
|
7031
|
-
let S2 =
|
|
7032
|
-
te2.length === 0 && S2.length > 0 && ee2.length > 0 && (te2 =
|
|
7040
|
+
e4.innerHTML = "", x2 && e4.appendChild(x2), ev.clear(), lv();
|
|
7041
|
+
let S2 = V_(t2.inner), ee2 = V_(t2.outer), C2 = (l2 = t2.inner_houses) == null ? [] : l2, te2 = (u2 = t2.cross_aspects) == null ? [] : u2;
|
|
7042
|
+
te2.length === 0 && S2.length > 0 && ee2.length > 0 && (te2 = U_(S2, ee2));
|
|
7033
7043
|
let w2 = (d2 = (f2 = (p2 = C2[0]) == null ? void 0 : p2.cusp_lon) == null ? t2.ascendant : f2) == null ? 0 : d2, ne2 = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
7034
7044
|
if (!ne2) try {
|
|
7035
7045
|
let e5 = getComputedStyle(document.body).backgroundColor.match(/\d+/g);
|
|
@@ -7058,13 +7068,13 @@ function wv(e4, t2, n2, r2, i2, a2) {
|
|
|
7058
7068
|
ue2.setAttribute("cx", "310"), ue2.setAttribute("cy", "310"), ue2.setAttribute("r", String(b_)), ue2.setAttribute("fill", "var(--outer-ring, #fdf5e4)"), ue2.setAttribute("stroke", "var(--outer-stroke, #d4ac60)"), ue2.setAttribute("stroke-width", "0.8"), ue2.setAttribute("pointer-events", "none"), E2.appendChild(ue2);
|
|
7059
7069
|
let de2 = Y("circle");
|
|
7060
7070
|
de2.setAttribute("cx", "310"), de2.setAttribute("cy", "310"), de2.setAttribute("r", String(x_)), de2.style.fill = "var(--bg, #faf9f5)", de2.setAttribute("stroke", "var(--outer-stroke, #d4ac60)"), de2.setAttribute("stroke-width", "0.8"), de2.setAttribute("pointer-events", "none"), E2.appendChild(de2);
|
|
7061
|
-
for (let e5 = 0; e5 < 12; e5++) F_(E2, w2, e5, x_, b_,
|
|
7071
|
+
for (let e5 = 0; e5 < 12; e5++) F_(E2, w2, e5, x_, b_, Ov(P_[e5]), 0.16);
|
|
7062
7072
|
let fe2 = ne2 ? "rgba(200,155,65,0.32)" : "rgba(180,140,60,0.28)", pe2 = ne2 ? "rgba(200,155,65,0.62)" : "rgba(180,140,60,0.55)";
|
|
7063
7073
|
for (let e5 = 0; e5 < 12; e5++) {
|
|
7064
7074
|
let t3 = e5 * 30, { x: n3, y: r3 } = J(t3, x_, w2), { x: i3, y: a3 } = J(t3, b_, w2), o3 = Y("line");
|
|
7065
7075
|
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(--outer-stroke, #d4ac60)"), o3.setAttribute("stroke-width", "0.5"), o3.setAttribute("pointer-events", "none"), E2.appendChild(o3);
|
|
7066
7076
|
let { x: s3, y: c3 } = J(t3 + 15, 536 / 2, w2), l3 = Y("text");
|
|
7067
|
-
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",
|
|
7077
|
+
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", Ov(P_[e5])), l3.setAttribute("pointer-events", "none"), l3.style.fontFamily = "serif", l3.textContent = T_[e5], E2.appendChild(l3);
|
|
7068
7078
|
for (let e6 = 1; e6 < 30; e6++) {
|
|
7069
7079
|
let n4 = t3 + e6, r4 = e6 % 5 == 0, i4 = r4 ? b_ - 8 : b_ - 3.5, { x: a4, y: o4 } = J(n4, b_, w2), { x: s4, y: c4 } = J(n4, i4, w2), l4 = Y("line");
|
|
7070
7080
|
l4.setAttribute("x1", a4.toFixed(1)), l4.setAttribute("y1", o4.toFixed(1)), l4.setAttribute("x2", s4.toFixed(1)), l4.setAttribute("y2", c4.toFixed(1)), l4.setAttribute("stroke", r4 ? pe2 : fe2), l4.setAttribute("stroke-width", r4 ? "0.8" : "0.5"), l4.setAttribute("pointer-events", "none"), E2.appendChild(l4);
|
|
@@ -7072,8 +7082,8 @@ function wv(e4, t2, n2, r2, i2, a2) {
|
|
|
7072
7082
|
let { x: u3, y: d3 } = J(t3, b_, w2), { x: f3, y: p3 } = J(t3 + 30, b_, w2), { x: m3, y: h3 } = J(t3, x_, w2), { x: g3, y: _3 } = J(t3 + 30, x_, w2), x3 = Y("path");
|
|
7073
7083
|
x3.setAttribute("d", ["M ".concat(u3.toFixed(1), " ").concat(d3.toFixed(1)), "A ".concat(b_, " ").concat(b_, " 0 0 0 ").concat(f3.toFixed(1), " ").concat(p3.toFixed(1)), "L ".concat(g3.toFixed(1), " ").concat(_3.toFixed(1)), "A ".concat(x_, " ").concat(x_, " 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";
|
|
7074
7084
|
let C3 = "".concat(T_[e5], " ").concat(E_[e5]), te3 = "".concat(X(M_[e5]), " \xB7 ").concat(X(N_[e5]));
|
|
7075
|
-
|
|
7076
|
-
|
|
7085
|
+
kv(x3, "".concat(E_[e5], " \u2014 click for sign info")), x3.addEventListener("mouseenter", (e6) => Y_(e6.clientX, e6.clientY, C3, te3, "Click for interpretation")), x3.addEventListener("mousemove", (e6) => Y_(e6.clientX, e6.clientY, C3, te3, "Click for interpretation")), x3.addEventListener("mouseleave", X_), x3.addEventListener("click", (t4) => {
|
|
7086
|
+
X_(), W_ == null || W_("".concat(C3)), sv(t4, e5, v2, y2, b2, S2, ee2);
|
|
7077
7087
|
}), ce2.appendChild(x3);
|
|
7078
7088
|
}
|
|
7079
7089
|
let me2 = Y("circle");
|
|
@@ -7113,27 +7123,27 @@ function wv(e4, t2, n2, r2, i2, a2) {
|
|
|
7113
7123
|
f3.setAttribute("x", u3.toFixed(1)), f3.setAttribute("y", d3.toFixed(1)), f3.setAttribute("text-anchor", "middle"), f3.setAttribute("dominant-baseline", "central"), f3.setAttribute("font-size", "10"), f3.setAttribute("fill", r3 ? ne2 ? "#a090d8" : "#7060b8" : ne2 ? "#8878a0" : "#787080"), f3.setAttribute("font-weight", r3 ? "700" : "500"), f3.setAttribute("pointer-events", "none"), f3.textContent = String(t3.number), ae2.appendChild(f3);
|
|
7114
7124
|
let p3 = Y("circle");
|
|
7115
7125
|
p3.setAttribute("cx", u3.toFixed(1)), p3.setAttribute("cy", d3.toFixed(1)), p3.setAttribute("r", "14"), p3.setAttribute("fill", "transparent"), p3.setAttribute("class", "hit-region house-hit"), p3.style.pointerEvents = "all", p3.style.cursor = "pointer";
|
|
7116
|
-
let m3 = "House ".concat(t3.number), h3 = "".concat(
|
|
7117
|
-
|
|
7118
|
-
|
|
7126
|
+
let m3 = "House ".concat(t3.number), h3 = "".concat(iv[t3.number] ? iv[t3.number] + " \xB7 " : "").concat(L_(t3.cusp_lon));
|
|
7127
|
+
kv(p3, "".concat(m3, " \u2014 click for interpretation")), p3.addEventListener("mouseenter", (e6) => Y_(e6.clientX, e6.clientY, m3, h3, "Click for interpretation")), p3.addEventListener("mousemove", (e6) => Y_(e6.clientX, e6.clientY, m3, h3, "Click for interpretation")), p3.addEventListener("mouseleave", X_), p3.addEventListener("click", (e6) => {
|
|
7128
|
+
X_(), W_ == null || W_("".concat(m3, " \xB7 ").concat(L_(t3.cusp_lon))), ov(e6, t3, n3, v2, y2, b2, S2, ee2);
|
|
7119
7129
|
}), ce2.appendChild(p3);
|
|
7120
7130
|
}
|
|
7121
7131
|
let Se2 = C2.find((e5) => e5.number === 1), O2 = C2.find((e5) => e5.number === 4), Ce2 = C2.find((e5) => e5.number === 7), we2 = C2.find((e5) => e5.number === 10), Te2 = [{ lon: (m2 = Se2 == null ? void 0 : Se2.cusp_lon) == null ? w2 : m2, label: "ASC" }, { lon: (h2 = Ce2 == null ? void 0 : Ce2.cusp_lon) == null ? (w2 + 180) % 360 : h2, label: "DSC" }, { lon: (g2 = we2 == null ? void 0 : we2.cusp_lon) == null ? (w2 + 270) % 360 : g2, label: "MC" }, { lon: (_2 = O2 == null ? void 0 : O2.cusp_lon) == null ? (w2 + 90) % 360 : _2, label: "IC" }];
|
|
7122
7132
|
for (let e5 of Te2) {
|
|
7123
7133
|
var Ee2;
|
|
7124
|
-
let t3 =
|
|
7134
|
+
let t3 = nv[e5.label], { x: n3, y: r3 } = J(e5.lon, b_ - 8, w2), i3 = Y("text");
|
|
7125
7135
|
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", ne2 ? "#a090d8" : "#7060b8"), i3.setAttribute("pointer-events", "none"), i3.style.transition = "opacity 150ms ease", i3.textContent = e5.label, ae2.appendChild(i3);
|
|
7126
7136
|
let a3 = Y("circle");
|
|
7127
|
-
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",
|
|
7137
|
+
a3.setAttribute("cx", n3.toFixed(1)), a3.setAttribute("cy", r3.toFixed(1)), a3.setAttribute("r", "14"), a3.setAttribute("fill", "transparent"), a3.setAttribute("class", "hit-region angle-hit"), a3.style.pointerEvents = "all", a3.style.cursor = "pointer", kv(a3, "".concat((Ee2 = t3 == null ? void 0 : t3.title) == null ? e5.label : Ee2, " \u2014 click for interpretation"));
|
|
7128
7138
|
let o3 = L_(e5.lon), s3 = "".concat(t3 != null && t3.keyword ? t3.keyword + " \xB7 " : "").concat(o3);
|
|
7129
7139
|
a3.addEventListener("mouseenter", (n4) => {
|
|
7130
7140
|
var r4;
|
|
7131
|
-
|
|
7141
|
+
Y_(n4.clientX, n4.clientY, "".concat(e5.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4), s3, "Click for interpretation"), i3.style.opacity = "0.6";
|
|
7132
7142
|
}), a3.addEventListener("mouseleave", () => {
|
|
7133
|
-
|
|
7143
|
+
X_(), i3.style.opacity = "";
|
|
7134
7144
|
}), a3.addEventListener("click", (n4) => {
|
|
7135
7145
|
var r4;
|
|
7136
|
-
|
|
7146
|
+
X_(), hv(), W_ == null || W_("".concat(e5.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4, " \xB7 ").concat(o3)), rv(n4, e5.label, e5.lon, v2, y2);
|
|
7137
7147
|
}), ce2.appendChild(a3);
|
|
7138
7148
|
}
|
|
7139
7149
|
for (let e5 of te2) {
|
|
@@ -7154,20 +7164,20 @@ function wv(e4, t2, n2, r2, i2, a2) {
|
|
|
7154
7164
|
}
|
|
7155
7165
|
}
|
|
7156
7166
|
let h3 = Y("line");
|
|
7157
|
-
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",
|
|
7158
|
-
let g3 = (ke2 = w_[t3.name.toLowerCase()]) == null ? t3.name : ke2, _3 = (Ae2 = w_[n3.name.toLowerCase()]) == null ? n3.name : Ae2, x3 = (je2 = (Me2 = D_[(Ne2 = (Pe2 = e5.type) == null ? void 0 : Pe2.toLowerCase()) == null ? "" : Ne2]) == null ? e5.type : Me2) == null ? "" : je2, C3 = v2 === "transit" ? e5.applying ? " (applying)" : " (separating)" : e5.orb <= 1 ? " (exact)" : e5.orb <= 3 ? " (tight)" : " (wide)", te3 = (Fe2 =
|
|
7167
|
+
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", kv(h3, "Aspect: ".concat(e5.type || "Aspect", " between inner ").concat(e5.planet1, " and outer ").concat(e5.planet2));
|
|
7168
|
+
let g3 = (ke2 = w_[t3.name.toLowerCase()]) == null ? t3.name : ke2, _3 = (Ae2 = w_[n3.name.toLowerCase()]) == null ? n3.name : Ae2, x3 = (je2 = (Me2 = D_[(Ne2 = (Pe2 = e5.type) == null ? void 0 : Pe2.toLowerCase()) == null ? "" : Ne2]) == null ? e5.type : Me2) == null ? "" : je2, C3 = v2 === "transit" ? e5.applying ? " (applying)" : " (separating)" : e5.orb <= 1 ? " (exact)" : e5.orb <= 3 ? " (tight)" : " (wide)", te3 = (Fe2 = Q_[(Ie2 = (Le2 = e5.type) == null ? void 0 : Le2.toLowerCase()) == null ? "" : Ie2]) == null ? "" : Fe2, ne3 = "".concat(te3 ? te3 + " \xB7 " : "").concat(g3, " ").concat(x3, " ").concat(_3, " \xB7 ").concat(e5.orb.toFixed(1), "\xB0 orb").concat(C3);
|
|
7159
7169
|
h3.addEventListener("mouseenter", (t4) => {
|
|
7160
7170
|
var n4;
|
|
7161
|
-
return
|
|
7171
|
+
return Y_(t4.clientX, t4.clientY, X((n4 = e5.type) == null ? "Cross-Aspect" : n4), ne3, "Click for interpretation");
|
|
7162
7172
|
}), h3.addEventListener("mousemove", (t4) => {
|
|
7163
7173
|
var n4;
|
|
7164
|
-
return
|
|
7165
|
-
}), h3.addEventListener("mouseleave",
|
|
7174
|
+
return Y_(t4.clientX, t4.clientY, X((n4 = e5.type) == null ? "Cross-Aspect" : n4), ne3, "Click for interpretation");
|
|
7175
|
+
}), h3.addEventListener("mouseleave", X_), h3.addEventListener("click", (t4) => {
|
|
7166
7176
|
var n4, a4, o4, s4, c4, l4;
|
|
7167
|
-
|
|
7177
|
+
X_(), pv(tv(e5), i3), dv(t4, e5, v2, y2, b2);
|
|
7168
7178
|
let u4 = (n4 = w_[e5.planet1.toLowerCase()]) == null ? e5.planet1 : n4, d4 = (a4 = w_[e5.planet2.toLowerCase()]) == null ? e5.planet2 : a4, f4 = (o4 = (s4 = D_[(c4 = (l4 = e5.type) == null ? void 0 : l4.toLowerCase()) == null ? "" : c4]) == null ? e5.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;
|
|
7169
|
-
|
|
7170
|
-
}),
|
|
7179
|
+
W_ == null || W_("".concat(p4, " ").concat(f4, " ").concat(m4, " \xB7 ").concat(e5.orb.toFixed(1), "\xB0")), r2(e5);
|
|
7180
|
+
}), ev.set(tv(e5), { vis: u3, color: i3, aspectType: ((Re2 = e5.type) == null ? void 0 : Re2.toLowerCase()) || "unknown", orb: e5.orb, symbolEls: m3 }), ce2.appendChild(h3);
|
|
7171
7181
|
}
|
|
7172
7182
|
let Ve2 = o_(ee2.map((e5) => ({ name: e5.name.toLowerCase(), longitude: e5.longitude })), 7), He2 = Y("g");
|
|
7173
7183
|
He2.setAttribute("class", "outer-planet-group"), se2.appendChild(He2);
|
|
@@ -7193,13 +7203,13 @@ function wv(e4, t2, n2, r2, i2, a2) {
|
|
|
7193
7203
|
n3.setAttribute("cx", e6.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);
|
|
7194
7204
|
}
|
|
7195
7205
|
let _3 = Y("circle");
|
|
7196
|
-
_3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(C_)), _3.setAttribute("fill", "transparent"), _3.setAttribute("class", "hit-region planet-hit"), _3.dataset.planet = r3, _3.dataset.wheel = "outer", _3.style.pointerEvents = "all",
|
|
7197
|
-
let x3 = "".concat(v2 === "transit" ? "Tr. " : b2 ? "".concat(b2, "'s ") : "").concat(t3, " ").concat(X(e5.name)), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Ge2 =
|
|
7198
|
-
_3.addEventListener("mouseenter", (e6) =>
|
|
7206
|
+
_3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(C_)), _3.setAttribute("fill", "transparent"), _3.setAttribute("class", "hit-region planet-hit"), _3.dataset.planet = r3, _3.dataset.wheel = "outer", _3.style.pointerEvents = "all", kv(_3, "Outer Planet: ".concat(e5.name));
|
|
7207
|
+
let x3 = "".concat(v2 === "transit" ? "Tr. " : b2 ? "".concat(b2, "'s ") : "").concat(t3, " ").concat(X(e5.name)), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Ge2 = Z_[e5.name.toLowerCase()]) == null ? "" : Ge2, C3 = "".concat(ee3 ? ee3 + " \xB7 " : "").concat(L_(e5.longitude)).concat(e5.house ? " \xB7 H".concat(e5.house) : "").concat(e5.retrograde ? " \u211E" : "").concat(S3);
|
|
7208
|
+
_3.addEventListener("mouseenter", (e6) => Y_(e6.clientX, e6.clientY, x3, C3, "Click to explore")), _3.addEventListener("mousemove", (e6) => Y_(e6.clientX, e6.clientY, x3, C3, "Click to explore")), _3.addEventListener("mouseleave", X_), _3.addEventListener("click", (t4) => {
|
|
7199
7209
|
var r4, i4;
|
|
7200
|
-
|
|
7210
|
+
X_(), fv(e5.name, "outer"), uv(t4, e5, "outer", te2, v2, y2, b2);
|
|
7201
7211
|
let a4 = (r4 = w_[e5.name.toLowerCase()]) == null ? "\u2605" : r4, o4 = Math.floor((e5.longitude % 360 + 360) % 360 / 30), s4 = v2 === "transit" ? "Tr. " : b2 ? "".concat(b2, "'s ") : "";
|
|
7202
|
-
|
|
7212
|
+
W_ == null || W_("".concat(s4).concat(a4, " ").concat(X(e5.name), " \xB7 ").concat((i4 = E_[o4]) == null ? "" : i4)), n2(e5, "outer", te2);
|
|
7203
7213
|
}), s3.appendChild(_3);
|
|
7204
7214
|
}
|
|
7205
7215
|
let Ke2 = o_(S2.map((e5) => ({ name: e5.name.toLowerCase(), longitude: e5.longitude })), 8), qe2 = Y("g");
|
|
@@ -7226,38 +7236,48 @@ function wv(e4, t2, n2, r2, i2, a2) {
|
|
|
7226
7236
|
n3.setAttribute("cx", e6.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);
|
|
7227
7237
|
}
|
|
7228
7238
|
let _3 = Y("circle");
|
|
7229
|
-
_3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(C_)), _3.setAttribute("fill", "transparent"), _3.setAttribute("class", "hit-region planet-hit"), _3.dataset.planet = r3, _3.dataset.wheel = "inner", _3.style.pointerEvents = "all",
|
|
7230
|
-
let x3 = y2 ? "".concat(y2, "'s ").concat(t3, " ").concat(X(e5.name)) : "".concat(t3, " ").concat(X(e5.name), " (natal)"), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Xe2 =
|
|
7231
|
-
_3.addEventListener("mouseenter", (e6) =>
|
|
7239
|
+
_3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(C_)), _3.setAttribute("fill", "transparent"), _3.setAttribute("class", "hit-region planet-hit"), _3.dataset.planet = r3, _3.dataset.wheel = "inner", _3.style.pointerEvents = "all", kv(_3, "Inner Planet: ".concat(e5.name));
|
|
7240
|
+
let x3 = y2 ? "".concat(y2, "'s ").concat(t3, " ").concat(X(e5.name)) : "".concat(t3, " ").concat(X(e5.name), " (natal)"), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Xe2 = Z_[e5.name.toLowerCase()]) == null ? "" : Xe2, C3 = "".concat(ee3 ? ee3 + " \xB7 " : "").concat(L_(e5.longitude)).concat(e5.house ? " \xB7 H".concat(e5.house) : "").concat(e5.retrograde ? " \u211E" : "").concat(S3);
|
|
7241
|
+
_3.addEventListener("mouseenter", (e6) => Y_(e6.clientX, e6.clientY, x3, C3, "Click to explore")), _3.addEventListener("mousemove", (e6) => Y_(e6.clientX, e6.clientY, x3, C3, "Click to explore")), _3.addEventListener("mouseleave", X_), _3.addEventListener("click", (t4) => {
|
|
7232
7242
|
var r4, i4, a4;
|
|
7233
|
-
|
|
7243
|
+
X_(), fv(e5.name, "inner"), uv(t4, e5, "inner", te2, v2, y2, b2);
|
|
7234
7244
|
let o4 = (r4 = w_[e5.name.toLowerCase()]) == null ? "\u2605" : r4, s4 = Math.floor((e5.longitude % 360 + 360) % 360 / 30), c4 = y2 ? "".concat(y2, "'s ").concat(o4, " ").concat(X(e5.name), " \xB7 ").concat((i4 = E_[s4]) == null ? "" : i4) : "".concat(o4, " ").concat(X(e5.name), " \xB7 ").concat((a4 = E_[s4]) == null ? "" : a4, " (natal)");
|
|
7235
|
-
|
|
7245
|
+
W_ == null || W_(c4), n2(e5, "inner", te2);
|
|
7236
7246
|
}), s3.appendChild(_3);
|
|
7237
7247
|
}
|
|
7238
7248
|
let Ze2 = "__biWheelClickOutside__", Qe2 = document[Ze2];
|
|
7239
7249
|
Qe2 && document.removeEventListener("click", Qe2, false);
|
|
7240
7250
|
let $e2 = (e5) => {
|
|
7241
7251
|
let t3 = e5.target;
|
|
7242
|
-
!t3.closest(".hit-region") && !t3.closest("#bi-info-drawer") && (
|
|
7252
|
+
!t3.closest(".hit-region") && !t3.closest("#bi-info-drawer") && (gv(), lv());
|
|
7243
7253
|
};
|
|
7244
7254
|
document[Ze2] = $e2, document.addEventListener("click", $e2, false);
|
|
7245
7255
|
let et2 = (e5) => {
|
|
7246
|
-
e5.key === "Escape" && (
|
|
7256
|
+
e5.key === "Escape" && (gv(), lv());
|
|
7247
7257
|
};
|
|
7248
7258
|
document.removeEventListener("keydown", window.__biWheelEscHandler, false), window.__biWheelEscHandler = et2, document.addEventListener("keydown", et2, false);
|
|
7249
7259
|
}
|
|
7250
|
-
function
|
|
7260
|
+
function Ov(e4) {
|
|
7251
7261
|
let t2 = parseInt(e4.slice(1, 3), 16), n2 = parseInt(e4.slice(3, 5), 16), r2 = parseInt(e4.slice(5, 7), 16), i2 = 0.6;
|
|
7252
7262
|
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), ")");
|
|
7253
7263
|
}
|
|
7254
|
-
function
|
|
7264
|
+
function kv(e4, t2) {
|
|
7255
7265
|
e4 && (e4.setAttribute("tabindex", "0"), e4.setAttribute("role", "button"), e4.setAttribute("aria-label", t2), e4.addEventListener("keydown", (t3) => {
|
|
7256
7266
|
let n2 = t3;
|
|
7257
7267
|
(n2.key === "Enter" || n2.key === " ") && (n2.preventDefault(), e4.dispatchEvent(new MouseEvent("click", { bubbles: true, cancelable: true })));
|
|
7258
7268
|
}));
|
|
7259
7269
|
}
|
|
7260
|
-
|
|
7270
|
+
function Av(e4) {
|
|
7271
|
+
return e4.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
7272
|
+
}
|
|
7273
|
+
function jv(e4) {
|
|
7274
|
+
return e4.replace(/_/g, " ").replace(/\b\w/g, (e5) => e5.toUpperCase());
|
|
7275
|
+
}
|
|
7276
|
+
function Mv(e4) {
|
|
7277
|
+
let t2 = e4.filter((e5) => e5.items.length > 0).map((e5) => '<div class="legend-group"><span class="legend-group-title">'.concat(Av(e5.title), "</span>") + e5.items.map((e6) => '<span class="legend-item"><span class="legend-glyph">'.concat(Av(e6.glyph), "</span>").concat(Av(e6.label), "</span>")).join("") + "</div>").join("");
|
|
7278
|
+
return t2 ? '<details class="glyph-legend"><summary><span class="legend-spark">\u2726</span> Legend</summary><div class="legend-body">'.concat(t2, "</div></details>") : "";
|
|
7279
|
+
}
|
|
7280
|
+
var Nv = class {
|
|
7261
7281
|
constructor(e4) {
|
|
7262
7282
|
var t2, n2, r2, i2, a2, s2;
|
|
7263
7283
|
o(this, "config", void 0), o(this, "params", void 0), o(this, "dateInput", void 0), o(this, "timeInput", void 0), o(this, "refreshBtn", void 0), o(this, "locInput", void 0), o(this, "locDropdown", void 0), o(this, "summaryBar", void 0), o(this, "searchTimeout", null), o(this, "searchVersion", 0), o(this, "isSearching", false), this.config = e4, this.params = { date: ((t2 = e4.initialParams) == null ? void 0 : t2.date) || this.getTodayDate(), time: ((n2 = e4.initialParams) == null ? void 0 : n2.time) || "12:00", latitude: ((r2 = e4.initialParams) == null ? void 0 : r2.latitude) || null, longitude: ((i2 = e4.initialParams) == null ? void 0 : i2.longitude) || null, timezone: ((a2 = e4.initialParams) == null ? void 0 : a2.timezone) || null, locationName: ((s2 = e4.initialParams) == null ? void 0 : s2.locationName) || null }, this.render();
|
|
@@ -7380,30 +7400,20 @@ var Dv = class {
|
|
|
7380
7400
|
escHtml(e4) {
|
|
7381
7401
|
return e4.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
7382
7402
|
}
|
|
7383
|
-
},
|
|
7384
|
-
function
|
|
7385
|
-
return
|
|
7403
|
+
}, Pv = /* @__PURE__ */ new Set();
|
|
7404
|
+
function Fv(e4) {
|
|
7405
|
+
return Pv.has(e4);
|
|
7386
7406
|
}
|
|
7387
|
-
function
|
|
7388
|
-
|
|
7389
|
-
return localStorage.getItem(kv(e4)) === "1";
|
|
7390
|
-
} catch (e5) {
|
|
7391
|
-
return true;
|
|
7392
|
-
}
|
|
7393
|
-
}
|
|
7394
|
-
function jv(e4) {
|
|
7395
|
-
try {
|
|
7396
|
-
localStorage.setItem(kv(e4), "1");
|
|
7397
|
-
} catch (e5) {
|
|
7398
|
-
}
|
|
7407
|
+
function Iv(e4) {
|
|
7408
|
+
Pv.add(e4);
|
|
7399
7409
|
}
|
|
7400
|
-
var
|
|
7401
|
-
function
|
|
7410
|
+
var Lv = { "chart-wheel": { stripIcon: "\u2726", stripTitle: "Welcome to your Natal Chart", stripHints: ["Click any <strong>planet</strong> for a deep placement reading", "Click any <strong>aspect line</strong> for its dynamic interpretation", "Click any <strong>house cusp</strong> for house themes", "Use the <strong>date controls</strong> to move through time"], modalText: "Your birth chart is now rendered \u2014 an exact celestial snapshot of the sky at your moment of birth." }, "bi-wheel": { stripIcon: "\u2295", stripTitle: "Welcome to the Bi-Wheel", stripHints: ["Click any <strong>inner planet</strong> for natal placement depth", "Click any <strong>outer planet</strong> for transit or synastry meaning", "Click a <strong>cross-aspect line</strong> for inter-chart dynamics", "Use the <strong>date controls</strong> to advance transits"], modalText: "Two charts are now layered \u2014 the inner wheel is your natal chart; the outer ring shows the second chart (transits or another person's planets)." }, bodygraph: { stripIcon: "\u25C8", stripTitle: "Welcome to your Bodygraph", stripHints: ["Click any <strong>center</strong> (defined or undefined) for its meaning", "Click any <strong>channel</strong> to explore its life theme", "Click any <strong>gate number</strong> for its I Ching hexagram reading", "Click a <strong>planet row</strong> in the sidebar for its HD role"], modalText: "Your bodygraph is now rendered \u2014 a living map of the energy centres, channels, and gates that define your design." } }, Rv = '\n .oe-welcome-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: oklch(0% 0 0 / 0.55);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n animation: oe-fade-in 0.4s ease both;\n font-family: system-ui, sans-serif;\n }\n\n .oe-welcome-modal {\n background: oklch(11% 0.010 265);\n border: 1px solid var(--gold-glow, oklch(72% 0.12 80 / 0.20));\n border-radius: 16px;\n padding: 32px;\n width: 90%;\n max-width: 440px;\n box-shadow: 0 20px 40px oklch(0% 0 0 / 0.55), inset 0 1px 0 oklch(100% 0 0 / 0.06);\n animation: oe-modal-in 0.5s cubic-bezier(0.22, 1, 0.36, 1) both;\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n @keyframes oe-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @keyframes oe-modal-in {\n from { opacity: 0; transform: scale(0.95) translateY(10px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n }\n\n .oe-welcome-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 4px;\n }\n\n .oe-welcome-icon {\n font-size: 28px;\n color: var(--gold, oklch(72% 0.12 80));\n line-height: 1;\n text-shadow: 0 0 10px var(--gold-glow, oklch(72% 0.12 80 / 0.30));\n }\n\n .oe-welcome-title {\n font-size: 20px;\n font-weight: 600;\n color: var(--text, oklch(92% 0.006 265));\n margin: 0;\n letter-spacing: 0.02em;\n }\n\n .oe-welcome-text {\n font-size: 14.5px;\n line-height: 1.5;\n color: var(--text-secondary, oklch(68% 0.008 265));\n margin: 0;\n }\n\n .oe-welcome-hints {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin: 8px 0 12px 0;\n padding: 0;\n list-style: none;\n }\n\n .oe-welcome-hints li {\n font-size: 13.5px;\n line-height: 1.4;\n color: var(--text-secondary, oklch(68% 0.008 265));\n display: flex;\n align-items: flex-start;\n gap: 10px;\n opacity: 0;\n animation: oe-fade-in 0.4s ease forwards;\n }\n\n /* Stagger the hints */\n .oe-welcome-hints li:nth-child(1) { animation-delay: 0.15s; }\n .oe-welcome-hints li:nth-child(2) { animation-delay: 0.25s; }\n .oe-welcome-hints li:nth-child(3) { animation-delay: 0.35s; }\n .oe-welcome-hints li:nth-child(4) { animation-delay: 0.45s; }\n\n .oe-welcome-hints li::before {\n content: "\u2726";\n color: var(--gold-dim, oklch(52% 0.06 80));\n font-size: 12px;\n padding-top: 2px;\n }\n\n .oe-welcome-hints strong {\n color: var(--text, oklch(92% 0.006 265));\n font-weight: 600;\n }\n\n .oe-welcome-button {\n align-self: flex-end;\n background: var(--gold-subtle, oklch(72% 0.12 80 / 0.10));\n color: var(--gold, oklch(72% 0.12 80));\n border: 1px solid var(--gold-glow, oklch(72% 0.12 80 / 0.20));\n padding: 10px 24px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s ease, border-color 0.2s ease;\n margin-top: 4px;\n }\n\n .oe-welcome-button:hover {\n background: oklch(72% 0.12 80 / 0.18);\n border-color: oklch(72% 0.12 80 / 0.40);\n }\n\n .oe-welcome-button:focus-visible {\n outline: 2px solid var(--gold, oklch(72% 0.12 80));\n outline-offset: 2px;\n }\n\n .oe-welcome-backdrop.is-dismissing {\n animation: oe-fade-out 0.3s ease forwards;\n }\n\n .oe-welcome-backdrop.is-dismissing .oe-welcome-modal {\n animation: oe-modal-out 0.3s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n }\n\n @keyframes oe-fade-out {\n to { opacity: 0; }\n }\n\n @keyframes oe-modal-out {\n to { opacity: 0; transform: scale(0.95) translateY(10px); }\n }\n';
|
|
7411
|
+
function zv() {
|
|
7402
7412
|
if (document.getElementById("oe-first-run-styles")) return;
|
|
7403
7413
|
let e4 = document.createElement("style");
|
|
7404
|
-
e4.id = "oe-first-run-styles", e4.textContent =
|
|
7414
|
+
e4.id = "oe-first-run-styles", e4.textContent = Rv, document.head.appendChild(e4);
|
|
7405
7415
|
}
|
|
7406
|
-
function
|
|
7416
|
+
function Bv(e4, t2) {
|
|
7407
7417
|
let n2 = document.activeElement, r2 = document.createElement("div");
|
|
7408
7418
|
r2.className = "oe-welcome-backdrop";
|
|
7409
7419
|
let i2 = document.createElement("div");
|
|
@@ -7413,7 +7423,7 @@ function Fv(e4, t2) {
|
|
|
7413
7423
|
let o2 = i2.querySelector(".oe-welcome-button"), s2 = () => {
|
|
7414
7424
|
r2.classList.add("is-dismissing"), r2.addEventListener("animationend", () => {
|
|
7415
7425
|
r2.remove(), n2 == null || n2.focus();
|
|
7416
|
-
}, { once: true }),
|
|
7426
|
+
}, { once: true }), Iv(t2);
|
|
7417
7427
|
};
|
|
7418
7428
|
return o2.addEventListener("click", s2), r2.addEventListener("click", (e5) => {
|
|
7419
7429
|
e5.target === r2 && s2();
|
|
@@ -7421,14 +7431,27 @@ function Fv(e4, t2) {
|
|
|
7421
7431
|
e5.key === "Escape" && (e5.preventDefault(), s2()), e5.key === "Tab" && (e5.preventDefault(), o2.focus());
|
|
7422
7432
|
}), requestAnimationFrame(() => o2.focus()), r2;
|
|
7423
7433
|
}
|
|
7424
|
-
function
|
|
7425
|
-
if (
|
|
7426
|
-
let n2 =
|
|
7427
|
-
|
|
7428
|
-
let r2 =
|
|
7434
|
+
function Vv(e4, t2) {
|
|
7435
|
+
if (Fv(e4)) return;
|
|
7436
|
+
let n2 = Lv[e4];
|
|
7437
|
+
zv();
|
|
7438
|
+
let r2 = Bv(n2, e4);
|
|
7429
7439
|
document.body.appendChild(r2);
|
|
7430
7440
|
}
|
|
7431
|
-
function
|
|
7441
|
+
function Hv(e4) {
|
|
7442
|
+
var t2;
|
|
7443
|
+
if (!e4) return null;
|
|
7444
|
+
if (e4.structuredContent != null && typeof e4.structuredContent == "object") return e4.structuredContent;
|
|
7445
|
+
for (let n2 of (t2 = e4.content) == null ? [] : t2) {
|
|
7446
|
+
let e5 = n2 == null ? void 0 : n2.text;
|
|
7447
|
+
if (typeof e5 == "string" && e5.length > 0) try {
|
|
7448
|
+
return JSON.parse(e5);
|
|
7449
|
+
} catch (e6) {
|
|
7450
|
+
}
|
|
7451
|
+
}
|
|
7452
|
+
return null;
|
|
7453
|
+
}
|
|
7454
|
+
function Uv(e4, t2, n2 = []) {
|
|
7432
7455
|
var r2, i2;
|
|
7433
7456
|
if (!t2 || t2.querySelector("#btn-fullscreen")) return;
|
|
7434
7457
|
let a2 = document.createElement("button");
|
|
@@ -7511,14 +7534,14 @@ function Lv(e4, t2, n2 = []) {
|
|
|
7511
7534
|
}, 4e3);
|
|
7512
7535
|
}
|
|
7513
7536
|
}
|
|
7514
|
-
function
|
|
7537
|
+
function Wv(e4, t2) {
|
|
7515
7538
|
e4.ontoolcancelled = (e5) => {
|
|
7516
7539
|
var n2, r2, i2;
|
|
7517
7540
|
let a2 = (n2 = e5.reason) == null ? "Tool call was cancelled" : n2;
|
|
7518
|
-
console.warn("[AppChrome] Tool cancelled:", a2), (r2 = t2.statusFn) == null || r2.call(t2, null), !t2.loadingEl.hidden && t2.loadingEl.getAttribute("hidden") === null && (t2.loadingEl.setAttribute("hidden", ""), t2.contentEl.removeAttribute("hidden")), (i2 = t2.paramControls) == null || i2.setBusy(false),
|
|
7541
|
+
console.warn("[AppChrome] Tool cancelled:", a2), (r2 = t2.statusFn) == null || r2.call(t2, null), !t2.loadingEl.hidden && t2.loadingEl.getAttribute("hidden") === null && (t2.loadingEl.setAttribute("hidden", ""), t2.contentEl.removeAttribute("hidden")), (i2 = t2.paramControls) == null || i2.setBusy(false), Gv(a2);
|
|
7519
7542
|
};
|
|
7520
7543
|
}
|
|
7521
|
-
function
|
|
7544
|
+
function Gv(e4) {
|
|
7522
7545
|
var t2;
|
|
7523
7546
|
(t2 = document.getElementById("cancel-toast")) == null || t2.remove();
|
|
7524
7547
|
let n2 = document.createElement("div");
|
|
@@ -7526,7 +7549,7 @@ function zv(e4) {
|
|
|
7526
7549
|
n2.classList.remove("visible"), setTimeout(() => n2.remove(), 300);
|
|
7527
7550
|
}, 3e3);
|
|
7528
7551
|
}
|
|
7529
|
-
function
|
|
7552
|
+
function Kv(e4) {
|
|
7530
7553
|
var t2;
|
|
7531
7554
|
function n2(e5) {
|
|
7532
7555
|
if (!e5) return;
|
|
@@ -7539,130 +7562,149 @@ function Bv(e4) {
|
|
|
7539
7562
|
n2(e5);
|
|
7540
7563
|
});
|
|
7541
7564
|
}
|
|
7542
|
-
var
|
|
7543
|
-
function
|
|
7544
|
-
if (
|
|
7565
|
+
var qv = document.getElementById("chart-container"), Jv = document.getElementById("loading-state"), Yv = document.getElementById("mode-badge"), Xv = document.getElementById("chart-status"), Zv = document.getElementById("aspect-filter"), Qv = document.getElementById("chart-provenance"), $v = document.getElementById("bi-patterns-strip"), ey = document.getElementById("param-controls-container"), ty = new i_({ name: "Bi-Wheel Chart Explorer", version: "1.0.0" }), $ = null, ny = null, ry = false, iy = false, ay = "placidus", oy = "true";
|
|
7566
|
+
function sy(e4) {
|
|
7567
|
+
if (Xv) {
|
|
7545
7568
|
if (!e4) {
|
|
7546
|
-
|
|
7569
|
+
Xv.classList.remove("visible");
|
|
7547
7570
|
return;
|
|
7548
7571
|
}
|
|
7549
|
-
|
|
7572
|
+
Xv.textContent = "\xB7 ".concat(e4), Xv.classList.add("visible");
|
|
7550
7573
|
}
|
|
7551
7574
|
}
|
|
7552
|
-
|
|
7553
|
-
function
|
|
7554
|
-
|
|
7575
|
+
G_(sy);
|
|
7576
|
+
function cy() {
|
|
7577
|
+
Jv.hidden = false, qv.hidden = true, Yv.hidden = true, Qv && (Qv.hidden = true), $v && ($v.hidden = true, $v.innerHTML = "");
|
|
7555
7578
|
}
|
|
7556
|
-
function
|
|
7557
|
-
|
|
7579
|
+
function ly() {
|
|
7580
|
+
Jv.hidden = true, qv.hidden = false, qv.classList.remove("refreshing"), Yv.hidden = false, Qv && (Qv.hidden = false);
|
|
7558
7581
|
}
|
|
7559
|
-
function
|
|
7560
|
-
if (!$ ||
|
|
7561
|
-
|
|
7582
|
+
function uy() {
|
|
7583
|
+
if (!$ || qv.hidden) {
|
|
7584
|
+
cy();
|
|
7562
7585
|
return;
|
|
7563
7586
|
}
|
|
7564
|
-
|
|
7587
|
+
qv.classList.add("refreshing");
|
|
7565
7588
|
}
|
|
7566
|
-
function
|
|
7567
|
-
|
|
7589
|
+
function dy() {
|
|
7590
|
+
qv.classList.remove("refreshing"), qv.classList.remove("chart-rendered"), qv.offsetWidth, qv.classList.add("chart-rendered");
|
|
7568
7591
|
}
|
|
7569
|
-
function
|
|
7570
|
-
|
|
7592
|
+
function fy(e4, t2) {
|
|
7593
|
+
Jv.hidden = true, Qv && (Qv.hidden = true);
|
|
7571
7594
|
let n2 = t2 ? '<button class="error-retry-btn" id="error-retry-btn">\u21BA Try again</button>' : "";
|
|
7572
|
-
if (
|
|
7595
|
+
if (qv.innerHTML = '\n <div class="error-state">\n <div class="error-icon">\u26A0\uFE0F</div>\n <p class="error-msg">'.concat(py(e4), "</p>\n ").concat(n2, "\n </div>"), t2) {
|
|
7573
7596
|
var r2;
|
|
7574
7597
|
(r2 = document.getElementById("error-retry-btn")) == null || r2.addEventListener("click", t2);
|
|
7575
7598
|
}
|
|
7576
|
-
|
|
7599
|
+
qv.hidden = false;
|
|
7577
7600
|
}
|
|
7578
|
-
function
|
|
7601
|
+
function py(e4) {
|
|
7579
7602
|
return e4.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
7580
7603
|
}
|
|
7581
|
-
async function
|
|
7604
|
+
async function my(e4) {
|
|
7582
7605
|
try {
|
|
7583
|
-
(await
|
|
7606
|
+
(await ty.sendMessage({ role: "user", content: [{ type: "text", text: e4 }] })).isError && console.error("[BiWheel] Host rejected sendMessage");
|
|
7584
7607
|
} catch (e5) {
|
|
7585
7608
|
console.error("[BiWheel] sendMessage failed:", e5);
|
|
7586
7609
|
}
|
|
7587
7610
|
}
|
|
7588
|
-
function
|
|
7589
|
-
|
|
7590
|
-
|
|
7591
|
-
|
|
7592
|
-
|
|
7593
|
-
|
|
7594
|
-
|
|
7595
|
-
|
|
7596
|
-
|
|
7597
|
-
|
|
7598
|
-
|
|
7599
|
-
|
|
7600
|
-
|
|
7601
|
-
|
|
7602
|
-
|
|
7603
|
-
|
|
7604
|
-
|
|
7605
|
-
let
|
|
7606
|
-
|
|
7607
|
-
|
|
7608
|
-
|
|
7609
|
-
|
|
7610
|
-
|
|
7611
|
+
function hy(e4) {
|
|
7612
|
+
let t2 = Hv(e4);
|
|
7613
|
+
return t2 && "inner" in t2 && "outer" in t2 ? t2 : null;
|
|
7614
|
+
}
|
|
7615
|
+
var gy = [{ label: "Tight", mult: 0.55 }, { label: "Standard", mult: 1 }, { label: "Wide", mult: 1.6 }], _y = true, vy = 1;
|
|
7616
|
+
function yy() {
|
|
7617
|
+
var e4, t2, n2;
|
|
7618
|
+
if (!Zv) return;
|
|
7619
|
+
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" }[(e4 = $ == null ? void 0 : $.mode) == null ? "synastry" : e4]) == 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 = (() => {
|
|
7620
|
+
var e5, t3;
|
|
7621
|
+
let n3 = /* @__PURE__ */ new Set();
|
|
7622
|
+
for (let r3 of [...(e5 = $ == null ? void 0 : $.inner) == null ? [] : e5, ...(t3 = $ == null ? void 0 : $.outer) == null ? [] : t3]) r3 && typeof r3 == "object" && "name" in r3 && n3.add(String(r3.name).toLowerCase());
|
|
7623
|
+
return n3.has("north_node") && n3.has("true_node");
|
|
7624
|
+
})();
|
|
7625
|
+
z_(oy);
|
|
7626
|
+
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(oy === "mean" ? " active" : "", '" data-node="mean" title="Mean lunar node (averaged orbit)">Mean</button>\n <button class="orb-preset-btn node-btn').concat(oy === "true" ? " active" : "", '" data-node="true" title="True (osculating) lunar node">True</button>\n </div>') : "";
|
|
7627
|
+
_y = true, Zv.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(gy.map((e5) => '<button class="orb-preset-btn'.concat(e5.mult === vy ? " active" : "", '" data-mult="').concat(e5.mult, '" title="').concat(e5.label, ' orbs">').concat(e5.label, "</button>")).join(""), '\n </div>\n <div class="asp-section">\n <span class="asp-section-label">Houses</span>\n ').concat(i2.map((e5) => '<button class="orb-preset-btn house-btn'.concat(e5.key === ay ? " active" : "", '" data-hs="').concat(e5.key, '" title="').concat(e5.label, ' houses">').concat(e5.label, "</button>")).join(""), "\n </div>").concat(o2, "\n </div>\n ");
|
|
7628
|
+
let s2 = [...V_($ == null ? void 0 : $.inner), ...V_($ == null ? void 0 : $.outer)], c2 = /* @__PURE__ */ new Set(), l2 = [];
|
|
7629
|
+
for (let e5 of s2) {
|
|
7630
|
+
let t3 = e5.name.toLowerCase();
|
|
7631
|
+
if (c2.has(t3)) continue;
|
|
7632
|
+
c2.add(t3);
|
|
7633
|
+
let n3 = w_[t3];
|
|
7634
|
+
n3 && l2.push({ glyph: n3, label: jv(e5.name) });
|
|
7635
|
+
}
|
|
7636
|
+
let u2 = [...new Set(((n2 = $ == null ? void 0 : $.cross_aspects) == null ? [] : n2).map((e5) => {
|
|
7637
|
+
var t3;
|
|
7638
|
+
return ((t3 = e5.type) == null ? "" : t3).toLowerCase();
|
|
7639
|
+
}).filter(Boolean))].map((e5) => {
|
|
7640
|
+
var t3;
|
|
7641
|
+
return { glyph: (t3 = D_[e5]) == null ? "" : t3, label: jv(e5) };
|
|
7642
|
+
}).filter((e5) => e5.glyph);
|
|
7643
|
+
Zv.insertAdjacentHTML("beforeend", Mv([{ title: "Bodies", items: l2 }, { title: "Aspects", items: u2 }])), Zv.removeAttribute("hidden");
|
|
7644
|
+
let d2 = document.getElementById("aspect-vis-toggle");
|
|
7645
|
+
d2 == null || d2.addEventListener("click", () => {
|
|
7646
|
+
_y = !_y, _v(_y), d2.classList.toggle("active", _y), d2.querySelector(".toggle-icon").textContent = _y ? "\u2295" : "\u2296";
|
|
7647
|
+
}), Zv.querySelectorAll(".orb-preset-btn[data-mult]").forEach((e5) => {
|
|
7611
7648
|
e5.addEventListener("click", () => {
|
|
7612
7649
|
var t3;
|
|
7613
7650
|
let n3 = parseFloat((t3 = e5.dataset.mult) == null ? "1" : t3);
|
|
7614
|
-
n3 !==
|
|
7651
|
+
n3 !== vy && (vy = n3, Zv.querySelectorAll(".orb-preset-btn[data-mult]").forEach((e6) => e6.classList.toggle("active", e6.dataset.mult === String(n3))), $ && by($, n3));
|
|
7615
7652
|
});
|
|
7616
|
-
}),
|
|
7653
|
+
}), Zv.querySelectorAll(".house-btn").forEach((e5) => {
|
|
7617
7654
|
e5.addEventListener("click", () => {
|
|
7618
7655
|
var t3;
|
|
7619
7656
|
let n3 = (t3 = e5.dataset.hs) == null ? "placidus" : t3;
|
|
7620
|
-
n3 ===
|
|
7657
|
+
n3 === ay || !$ || (ay = n3, Zv.querySelectorAll(".house-btn").forEach((e6) => e6.classList.toggle("active", e6.dataset.hs === n3)), Ry(n3));
|
|
7658
|
+
});
|
|
7659
|
+
}), Zv.querySelectorAll(".node-btn").forEach((e5) => {
|
|
7660
|
+
e5.addEventListener("click", () => {
|
|
7661
|
+
let t3 = e5.dataset.node === "mean" ? "mean" : "true";
|
|
7662
|
+
t3 === oy || !$ || (oy = t3, z_(t3), Zv.querySelectorAll(".node-btn").forEach((e6) => e6.classList.toggle("active", e6.dataset.node === t3)), by($, vy));
|
|
7621
7663
|
});
|
|
7622
7664
|
});
|
|
7623
7665
|
}
|
|
7624
|
-
function
|
|
7666
|
+
function by(e4, t2) {
|
|
7625
7667
|
var n2, r2, i2, a2;
|
|
7626
|
-
let o2 =
|
|
7627
|
-
|
|
7668
|
+
let o2 = V_(e4.inner), s2 = V_(e4.outer), c2 = U_(o2, s2, t2), l2 = { ...e4, cross_aspects: c2 };
|
|
7669
|
+
Dv(qv, l2, zy, By, ky, Ny()), _y || _v(false);
|
|
7628
7670
|
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;
|
|
7629
|
-
|
|
7671
|
+
Ly(xv(c2), o2, s2, u2);
|
|
7630
7672
|
}
|
|
7631
|
-
var
|
|
7632
|
-
function
|
|
7633
|
-
|
|
7673
|
+
var xy = null;
|
|
7674
|
+
function Sy(e4) {
|
|
7675
|
+
xy = e4, e4 ? qv.setAttribute("data-focus", e4) : qv.removeAttribute("data-focus"), Yv.querySelectorAll(".mode-badge-name").forEach((t2) => {
|
|
7634
7676
|
let n2 = t2.dataset.focus;
|
|
7635
7677
|
t2.classList.toggle("focused", n2 === e4);
|
|
7636
|
-
}), $ &&
|
|
7678
|
+
}), $ && Oy($, e4);
|
|
7637
7679
|
}
|
|
7638
|
-
function
|
|
7680
|
+
function Cy(e4) {
|
|
7639
7681
|
var t2, n2, r2, i2, a2, o2, s2;
|
|
7640
7682
|
let c2 = (t2 = e4.mode) == null ? "synastry" : t2, l2 = (n2 = (r2 = e4._birth_params_inner) == null ? void 0 : r2.location) == null ? "Person 1" : n2, u2 = (i2 = (a2 = e4._birth_params_outer) == null ? void 0 : a2.location) == null ? c2 === "transit" ? "Transits" : "Person 2" : i2;
|
|
7641
|
-
|
|
7683
|
+
xy = null, qv.removeAttribute("data-focus");
|
|
7642
7684
|
let d2 = "";
|
|
7643
7685
|
if (c2 === "transit" && (o2 = e4._birth_params_outer) != null && o2.datetime) try {
|
|
7644
7686
|
let t3 = new Date(e4._birth_params_outer.datetime);
|
|
7645
|
-
isNaN(t3.getTime()) || (d2 = '<span class="mode-badge-date">'.concat(
|
|
7687
|
+
isNaN(t3.getTime()) || (d2 = '<span class="mode-badge-date">'.concat(py(t3.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" })), "</span>"));
|
|
7646
7688
|
} catch (e5) {
|
|
7647
7689
|
}
|
|
7648
|
-
|
|
7690
|
+
Yv.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(py(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(py(u2), "\n </button>\n ").concat(d2), Yv.querySelectorAll(".mode-badge-name").forEach((e5) => {
|
|
7649
7691
|
e5.addEventListener("click", () => {
|
|
7650
7692
|
let t3 = e5.dataset.focus;
|
|
7651
|
-
|
|
7693
|
+
Sy(xy === t3 ? null : t3);
|
|
7652
7694
|
});
|
|
7653
|
-
}), (s2 =
|
|
7654
|
-
|
|
7695
|
+
}), (s2 = Yv.querySelector(".mode-badge-swap")) == null || s2.addEventListener("click", () => {
|
|
7696
|
+
Sy(xy === "inner" ? "outer" : "inner");
|
|
7655
7697
|
});
|
|
7656
7698
|
}
|
|
7657
|
-
var
|
|
7658
|
-
function
|
|
7699
|
+
var wy = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"], Ty = { sun: "\u2609", moon: "\u263D", mercury: "\u263F", venus: "\u2640", mars: "\u2642", jupiter: "\u2643", saturn: "\u2644", uranus: "\u2645", neptune: "\u2646", pluto: "\u2647", asc: "AC", mc: "MC" };
|
|
7700
|
+
function Ey(e4, t2) {
|
|
7659
7701
|
var n2, r2;
|
|
7660
7702
|
let i2 = e4.find((e5) => e5.name.toLowerCase() === t2);
|
|
7661
7703
|
if (!i2) return "\u2014";
|
|
7662
7704
|
let a2 = Math.floor((i2.longitude % 360 + 360) % 360 / 30), o2 = Math.floor(i2.longitude % 30);
|
|
7663
|
-
return "".concat((n2 =
|
|
7705
|
+
return "".concat((n2 = Ty[t2]) == null ? t2 : n2, " ").concat(o2, "\xB0 ").concat((r2 = wy[a2]) == null ? "" : r2);
|
|
7664
7706
|
}
|
|
7665
|
-
function
|
|
7707
|
+
function Dy(e4) {
|
|
7666
7708
|
try {
|
|
7667
7709
|
let t2 = new Date(e4);
|
|
7668
7710
|
return isNaN(t2.getTime()) ? e4 : t2.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" }) + " \xB7 " + t2.toLocaleTimeString("en-US", { hour: "numeric", minute: "2-digit", hour12: true });
|
|
@@ -7670,22 +7712,22 @@ function by(e4) {
|
|
|
7670
7712
|
return e4;
|
|
7671
7713
|
}
|
|
7672
7714
|
}
|
|
7673
|
-
function
|
|
7715
|
+
function Oy(e4, t2) {
|
|
7674
7716
|
var n2, r2, i2, a2, o2;
|
|
7675
|
-
if (!
|
|
7676
|
-
let s2 = t2 == null ? "inner" : t2, c2 = s2 === "inner" ? e4.inner : e4.outer, l2 = s2 === "inner" ? e4._birth_params_inner : e4._birth_params_outer, u2 = (n2 = e4.mode) == null ? "synastry" : n2, d2 = (r2 = l2 == null ? void 0 : l2.location) == null ? s2 === "inner" ? "Inner chart" : u2 === "transit" ? "Transits" : "Outer chart" : r2, f2 = l2 != null && l2.datetime ?
|
|
7717
|
+
if (!Qv) return;
|
|
7718
|
+
let s2 = t2 == null ? "inner" : t2, c2 = s2 === "inner" ? e4.inner : e4.outer, l2 = s2 === "inner" ? e4._birth_params_inner : e4._birth_params_outer, u2 = (n2 = e4.mode) == null ? "synastry" : n2, d2 = (r2 = l2 == null ? void 0 : l2.location) == null ? s2 === "inner" ? "Inner chart" : u2 === "transit" ? "Transits" : "Outer chart" : r2, f2 = l2 != null && l2.datetime ? Dy(l2.datetime) : null, p2 = (i2 = l2 == null ? void 0 : l2.timezone) == null ? null : i2, m2 = s2 === "inner" ? e4.inner_houses : (a2 = e4.outer_houses) == null ? [] : a2, h2 = (o2 = e4.house_system) == null ? m2.length > 0 ? "Placidus" : null : o2, g2 = Ey(c2, "sun"), _2 = Ey(c2, "moon"), v2 = Ey(c2, "asc");
|
|
7677
7719
|
if (v2 === "AC \u2014" && m2.length > 0) {
|
|
7678
7720
|
let e5 = m2.find((e6) => e6.number === 1);
|
|
7679
7721
|
if (e5) {
|
|
7680
7722
|
var y2;
|
|
7681
7723
|
let t3 = Math.floor((e5.cusp_lon % 360 + 360) % 360 / 30);
|
|
7682
|
-
v2 = "AC ".concat(Math.floor(e5.cusp_lon % 30), "\xB0 ").concat((y2 =
|
|
7724
|
+
v2 = "AC ".concat(Math.floor(e5.cusp_lon % 30), "\xB0 ").concat((y2 = wy[t3]) == null ? "" : y2);
|
|
7683
7725
|
}
|
|
7684
7726
|
}
|
|
7685
7727
|
let b2 = s2 === "outer" && u2 === "transit" ? "Transit" : s2 === "outer" ? "Synastry" : "Natal";
|
|
7686
|
-
|
|
7728
|
+
Qv.innerHTML = '\n <div class="prov-name">'.concat(py(d2), '\n <span class="prov-mode-tag">').concat(py(b2), '</span>\n </div>\n <div class="prov-trio">\n <span class="prov-planet">').concat(py(g2), '</span>\n <span class="prov-sep">\xB7</span>\n <span class="prov-planet">').concat(py(_2), '</span>\n <span class="prov-sep">\xB7</span>\n <span class="prov-planet">').concat(py(v2), "</span>\n </div>\n ").concat(f2 ? '<div class="prov-meta">'.concat(py(f2)).concat(p2 ? ' <span class="prov-tz">'.concat(py(p2), "</span>") : "", "</div>") : "", "\n ").concat(h2 ? '<div class="prov-meta">'.concat(py(h2), " houses</div>") : "", "\n "), Qv.hidden = false;
|
|
7687
7729
|
}
|
|
7688
|
-
async function
|
|
7730
|
+
async function ky(e4) {
|
|
7689
7731
|
var t2;
|
|
7690
7732
|
let n2 = (t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2, r2 = "";
|
|
7691
7733
|
if (e4.type === "planet") {
|
|
@@ -7711,31 +7753,31 @@ async function Sy(e4) {
|
|
|
7711
7753
|
let t3 = e4.data, i3 = (m2 = t3.planets) == null ? [] : m2, a3 = n2 === "transit" ? "natal" : "inner", o3 = n2 === "transit" ? "transit" : "outer", s3 = i3.length > 0 ? i3.map((e5) => "".concat(e5.name, " (").concat(e5.wheel === "inner" ? a3 : o3, ")")).join(", ") : "the involved planets";
|
|
7712
7754
|
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" : "", ".");
|
|
7713
7755
|
}
|
|
7714
|
-
r2 && await
|
|
7756
|
+
r2 && await my(r2);
|
|
7715
7757
|
}
|
|
7716
|
-
async function
|
|
7758
|
+
async function Ay() {
|
|
7717
7759
|
var e4, t2, n2, r2, i2, a2, o2, s2;
|
|
7718
7760
|
if (!$) return;
|
|
7719
7761
|
let c2 = $, l2 = (e4 = c2.mode) == null ? "synastry" : e4, 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((e5) => " \u2022 ".concat(e5.planet1, " ").concat(e5.type, " ").concat(e5.planet2, " (").concat(e5.orb.toFixed(1), "\xB0").concat(e5.applying === void 0 ? "" : ", ".concat(e5.applying ? "applying" : "separating"), ")")).join("\n") || " \u2022 No cross-aspects within orb";
|
|
7720
|
-
await
|
|
7762
|
+
await my(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."));
|
|
7721
7763
|
}
|
|
7722
|
-
async function
|
|
7764
|
+
async function jy() {
|
|
7723
7765
|
var e4, t2, n2, r2, i2, a2;
|
|
7724
7766
|
if (!$) return;
|
|
7725
7767
|
let o2 = $, s2 = (e4 = o2.mode) == null ? "synastry" : e4, 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((e5) => "".concat(e5.planet1, " ").concat(e5.type, " ").concat(e5.planet2, " (").concat(e5.orb.toFixed(1), "\xB0)")).join(", ") || "none detected";
|
|
7726
|
-
await
|
|
7768
|
+
await my(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."));
|
|
7727
7769
|
}
|
|
7728
|
-
async function
|
|
7729
|
-
if (
|
|
7770
|
+
async function My(e4) {
|
|
7771
|
+
if (ry) try {
|
|
7730
7772
|
var t2;
|
|
7731
|
-
await
|
|
7773
|
+
await ty.updateModelContext({ content: [{ type: "text", text: "User selected ".concat(e4.type, ": ").concat(JSON.stringify(e4.data, null, 2), "\nMode: ").concat((t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2) }] });
|
|
7732
7774
|
} catch (e5) {
|
|
7733
7775
|
}
|
|
7734
7776
|
}
|
|
7735
|
-
function
|
|
7736
|
-
if (
|
|
7777
|
+
function Ny() {
|
|
7778
|
+
if (iy) return async (e4) => {
|
|
7737
7779
|
var t2;
|
|
7738
|
-
let n2 = await
|
|
7780
|
+
let n2 = await ty.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: e4 } }] });
|
|
7739
7781
|
if (n2.isError) {
|
|
7740
7782
|
var r2, i2;
|
|
7741
7783
|
throw Error((r2 = (i2 = n2.error) == null ? void 0 : i2.message) == null ? "Sampling failed" : r2);
|
|
@@ -7745,130 +7787,130 @@ function Ey() {
|
|
|
7745
7787
|
throw Error("Unexpected sampling response format");
|
|
7746
7788
|
};
|
|
7747
7789
|
}
|
|
7748
|
-
function
|
|
7790
|
+
function Py(e4) {
|
|
7749
7791
|
var t2, n2, r2, i2, a2, o2, s2;
|
|
7750
|
-
$ = e4, clearTimeout(
|
|
7751
|
-
let c2 =
|
|
7752
|
-
|
|
7792
|
+
$ = e4, clearTimeout(Vy), Cy(e4), Dv(qv, e4, zy, By, ky, Ny()), yy(), Oy(e4, xy);
|
|
7793
|
+
let c2 = V_(e4.inner), l2 = V_(e4.outer), u2 = (n2 = (r2 = (i2 = ((t2 = e4.inner_houses) == null ? [] : t2)[0]) == null ? void 0 : i2.cusp_lon) == null ? e4.ascendant : r2) == null ? 0 : n2;
|
|
7794
|
+
Ly(xv((a2 = e4.cross_aspects) == null ? [] : a2), c2, l2, u2), e4.house_system && (ay = e4.house_system);
|
|
7753
7795
|
let d2 = document.getElementById("bi-action-bar");
|
|
7754
7796
|
if (!d2) {
|
|
7755
7797
|
d2 = document.createElement("div"), d2.id = "bi-action-bar", d2.className = "hd-action-bar";
|
|
7756
7798
|
let e5 = document.querySelector("#fs-bottom-bar [data-column='right']");
|
|
7757
7799
|
if (e5) e5.appendChild(d2);
|
|
7758
7800
|
else {
|
|
7759
|
-
let e6 = document.getElementById("app"), t3 =
|
|
7801
|
+
let e6 = document.getElementById("app"), t3 = Yv.parentElement === e6 ? Yv : null;
|
|
7760
7802
|
e6 == null || e6.insertBefore(d2, t3);
|
|
7761
7803
|
}
|
|
7762
7804
|
}
|
|
7763
|
-
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
|
|
7805
|
+
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 Ay()), (s2 = d2.querySelector("#bi-questions-btn")) == null || s2.addEventListener("click", () => void jy()), ly(), dy(), Vv("bi-wheel", qv);
|
|
7764
7806
|
}
|
|
7765
|
-
var
|
|
7766
|
-
function
|
|
7767
|
-
if (
|
|
7807
|
+
var Fy = null, Iy = { "Cross Trine": "#52a8e0", "Cross T-Square": "#e08a52", "Cross Stellium": "#9a7fd4" };
|
|
7808
|
+
function Ly(e4, t2, n2, r2) {
|
|
7809
|
+
if (!$v) return;
|
|
7768
7810
|
if (e4.length === 0) {
|
|
7769
|
-
|
|
7811
|
+
$v.hidden = true, $v.innerHTML = "";
|
|
7770
7812
|
return;
|
|
7771
7813
|
}
|
|
7772
|
-
|
|
7814
|
+
Fy = null, $v.innerHTML = '\n <span class="patterns-label">Cross-Patterns:</span>\n '.concat(e4.map((e5, t3) => {
|
|
7773
7815
|
var n3;
|
|
7774
|
-
let r3 = (n3 =
|
|
7816
|
+
let r3 = (n3 = Iy[e5.name]) == null ? "#888" : n3;
|
|
7775
7817
|
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(e5.description, '">\n ').concat(e5.name, '\n <span class="pattern-pill-detail">').concat(e5.description, "</span>\n </button>");
|
|
7776
|
-
}).join(""), "\n "),
|
|
7818
|
+
}).join(""), "\n "), $v.removeAttribute("hidden");
|
|
7777
7819
|
let i2 = document.createElement("button");
|
|
7778
|
-
i2.className = "pattern-ask-claude-btn", i2.textContent = "\u2728 Ask Claude", i2.style.display = "none",
|
|
7820
|
+
i2.className = "pattern-ask-claude-btn", i2.textContent = "\u2728 Ask Claude", i2.style.display = "none", $v.appendChild(i2), i2.addEventListener("click", () => {
|
|
7779
7821
|
var t3;
|
|
7780
|
-
let n3 =
|
|
7822
|
+
let n3 = Fy;
|
|
7781
7823
|
if (n3 === null) return;
|
|
7782
7824
|
let r3 = e4[n3];
|
|
7783
|
-
r3 && (i2.disabled = true, i2.textContent = "\u23F3 Sending\u2026",
|
|
7825
|
+
r3 && (i2.disabled = true, i2.textContent = "\u23F3 Sending\u2026", ky({ type: "pattern", data: { name: r3.name, planets: r3.planets, description: (t3 = r3.description) == null ? "" : t3 } }).then(() => {
|
|
7784
7826
|
i2.textContent = "\u2713 Sent", setTimeout(() => {
|
|
7785
7827
|
i2.textContent = "\u2728 Ask Claude", i2.disabled = false;
|
|
7786
7828
|
}, 2500);
|
|
7787
7829
|
}).catch(() => {
|
|
7788
7830
|
i2.textContent = "\u26A0 Failed", i2.disabled = false;
|
|
7789
7831
|
}));
|
|
7790
|
-
}),
|
|
7832
|
+
}), $v.querySelectorAll(".pattern-pill").forEach((a2) => {
|
|
7791
7833
|
a2.addEventListener("click", () => {
|
|
7792
7834
|
var o2, s2;
|
|
7793
7835
|
let c2 = parseInt((o2 = a2.dataset.idx) == null ? "-1" : o2, 10), l2 = e4[c2];
|
|
7794
7836
|
if (!l2) return;
|
|
7795
7837
|
let u2 = (s2 = a2.dataset.color) == null ? "#888" : s2;
|
|
7796
|
-
if (
|
|
7797
|
-
|
|
7838
|
+
if (Fy === c2) {
|
|
7839
|
+
Fy = null, a2.classList.remove("active"), a2.style.background = "transparent", a2.style.color = u2, a2.style.borderColor = u2, gv(), Tv(), i2.style.display = "none";
|
|
7798
7840
|
return;
|
|
7799
7841
|
}
|
|
7800
|
-
|
|
7842
|
+
Fy = c2, $v.querySelectorAll(".pattern-pill").forEach((e5) => {
|
|
7801
7843
|
var t3;
|
|
7802
7844
|
e5.classList.remove("active");
|
|
7803
7845
|
let n3 = (t3 = e5.dataset.color) == null ? "#888" : t3;
|
|
7804
7846
|
e5.style.color = n3, e5.style.borderColor = n3, e5.style.background = "transparent";
|
|
7805
|
-
}), a2.classList.add("active"), a2.style.background = u2, a2.style.color = "#fff", a2.style.borderColor = u2,
|
|
7847
|
+
}), a2.classList.add("active"), a2.style.background = u2, a2.style.color = "#fff", a2.style.borderColor = u2, Ev(l2), Tv(), wv(l2, t2, n2, r2), i2.style.display = "", i2.textContent = "\u2728 Ask Claude", i2.disabled = false;
|
|
7806
7848
|
});
|
|
7807
7849
|
});
|
|
7808
7850
|
}
|
|
7809
|
-
async function
|
|
7851
|
+
async function Ry(e4) {
|
|
7810
7852
|
if (!$) return;
|
|
7811
7853
|
let t2 = $;
|
|
7812
|
-
|
|
7854
|
+
uy();
|
|
7813
7855
|
try {
|
|
7814
7856
|
var n2, r2, i2, a2, o2, s2, c2, l2, u2, d2;
|
|
7815
|
-
let f2 = new Promise((e5, t3) => setTimeout(() => t3(Error("House system recalculate timed out")), 3e4)), p2 =
|
|
7816
|
-
p2 ?
|
|
7857
|
+
let f2 = new Promise((e5, t3) => setTimeout(() => t3(Error("House system recalculate timed out")), 3e4)), p2 = hy(await Promise.race([ty.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: e4 } }), f2]));
|
|
7858
|
+
p2 ? Py(p2) : $ && ly();
|
|
7817
7859
|
} catch (e5) {
|
|
7818
|
-
console.error("[BiWheel] House system recalculate failed:", e5), $ &&
|
|
7860
|
+
console.error("[BiWheel] House system recalculate failed:", e5), $ && ly();
|
|
7819
7861
|
}
|
|
7820
7862
|
}
|
|
7821
|
-
function
|
|
7863
|
+
function zy(e4, t2, n2) {
|
|
7822
7864
|
var r2, i2, a2, o2, s2;
|
|
7823
7865
|
let c2 = Math.floor((e4.longitude % 360 + 360) % 360 / 30), l2 = (r2 = (i2 = e4.sign) == null ? ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"][c2] : i2) == null ? "Unknown" : r2;
|
|
7824
|
-
|
|
7866
|
+
My({ type: "planet", data: { planet_name: e4.name, wheel: t2, longitude: e4.longitude, sign: l2, position: "".concat(Math.floor(e4.longitude % 30), "\xB0 ").concat(l2), house: (a2 = e4.house) == null ? null : a2, retrograde: (o2 = e4.retrograde) == null ? false : o2, mode: (s2 = $ == null ? void 0 : $.mode) == null ? "synastry" : s2, cross_aspects: n2.filter((n3) => t2 === "inner" && n3.planet1 === e4.name || t2 === "outer" && n3.planet2 === e4.name).slice(0, 5).map((e5) => ({ type: e5.type, partner: t2 === "inner" ? e5.planet2 : e5.planet1, orb: e5.orb, applying: e5.applying, orb_label: e5.orb <= 1 ? "exact" : e5.orb <= 3 ? "tight" : "wide" })) } });
|
|
7825
7867
|
}
|
|
7826
|
-
function
|
|
7868
|
+
function By(e4) {
|
|
7827
7869
|
var t2;
|
|
7828
7870
|
let n2 = $ == null ? void 0 : $.inner.find((t3) => t3.name === e4.planet1), r2 = $ == null ? void 0 : $.outer.find((t3) => t3.name === e4.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"];
|
|
7829
|
-
|
|
7871
|
+
My({ type: "cross_aspect", data: { planet1: e4.planet1, wheel1: e4.wheel1, planet2: e4.planet2, wheel2: e4.wheel2, aspect_type: e4.type, orb: e4.orb, applying: e4.applying, planet1_sign: isNaN(i2) ? null : o2[i2], planet2_sign: isNaN(a2) ? null : o2[a2], mode: (t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2 } });
|
|
7830
7872
|
}
|
|
7831
|
-
|
|
7832
|
-
clearTimeout(
|
|
7833
|
-
let t2 =
|
|
7873
|
+
ty.ontoolresult = (e4) => {
|
|
7874
|
+
clearTimeout(Vy);
|
|
7875
|
+
let t2 = hy(e4);
|
|
7834
7876
|
if (!t2) {
|
|
7835
|
-
|
|
7877
|
+
fy("Ask your AI assistant to generate a bi-wheel chart to get started.");
|
|
7836
7878
|
return;
|
|
7837
7879
|
}
|
|
7838
|
-
if (!
|
|
7880
|
+
if (!ny) {
|
|
7839
7881
|
var n2, r2, i2, a2;
|
|
7840
7882
|
let e5 = (n2 = t2._birth_params_outer) == null ? {} : n2, o2 = (r2 = e5.datetime) == null ? "" : r2, s2 = (i2 = e5.location) == null ? "" : i2, c2 = (a2 = e5.timezone) == null ? "" : a2, l2 = e5.latitude, u2 = e5.longitude, d2 = "", f2 = "12:00";
|
|
7841
7883
|
if (o2 && o2.includes("T")) {
|
|
7842
7884
|
let e6 = o2.split("T");
|
|
7843
7885
|
d2 = e6[0], f2 = e6[1].substring(0, 5);
|
|
7844
7886
|
}
|
|
7845
|
-
|
|
7846
|
-
|
|
7887
|
+
ny = new Nv({ app: ty, container: ey, 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", onRefresh: async (e6) => {
|
|
7888
|
+
ny == null || ny.setBusy(true), uy(), ey.setAttribute("hidden", "");
|
|
7847
7889
|
try {
|
|
7848
7890
|
var n3, r3, i3, a3, o3;
|
|
7849
|
-
let s3 = "".concat(e6.date, "T").concat(e6.time, ":00"), c3 = new Promise((e7, t3) => setTimeout(() => t3(Error("Bi-wheel recalculate timed out after 30s")), 3e4)), l3 =
|
|
7850
|
-
l3 ?
|
|
7891
|
+
let s3 = "".concat(e6.date, "T").concat(e6.time, ":00"), c3 = new Promise((e7, t3) => setTimeout(() => t3(Error("Bi-wheel recalculate timed out after 30s")), 3e4)), l3 = hy(await Promise.race([ty.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(e6.timezone ? "" : "Z"), person2_latitude: e6.latitude, person2_longitude: e6.longitude, person2_timezone: e6.timezone, person2_name: e6.locationName } }), c3]));
|
|
7892
|
+
l3 ? Py(l3) : $ && ly();
|
|
7851
7893
|
} catch (e7) {
|
|
7852
|
-
console.error("[BiWheel] Recalculate failed or timed out:", e7), $ &&
|
|
7894
|
+
console.error("[BiWheel] Recalculate failed or timed out:", e7), $ && ly();
|
|
7853
7895
|
} finally {
|
|
7854
|
-
|
|
7896
|
+
ny == null || ny.setBusy(false), ey.removeAttribute("hidden");
|
|
7855
7897
|
}
|
|
7856
7898
|
} });
|
|
7857
7899
|
}
|
|
7858
|
-
|
|
7900
|
+
Py(t2), ey.removeAttribute("hidden");
|
|
7859
7901
|
};
|
|
7860
|
-
var
|
|
7861
|
-
|
|
7862
|
-
|
|
7863
|
-
|
|
7864
|
-
}, 3e4),
|
|
7902
|
+
var Vy = setTimeout(() => {
|
|
7903
|
+
qv.hidden && fy("Chart data is taking longer than expected.", () => {
|
|
7904
|
+
cy(), Vy = setTimeout(() => {
|
|
7905
|
+
qv.hidden && fy("Still no response from the server. Please close and re-open the chart.");
|
|
7906
|
+
}, 3e4), ty.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the bi-wheel chart." }] });
|
|
7865
7907
|
});
|
|
7866
7908
|
}, 3e4);
|
|
7867
|
-
|
|
7909
|
+
cy(), Wv(ty, { loadingEl: Jv, contentEl: qv, statusFn: sy, paramControls: ny }), (async () => {
|
|
7868
7910
|
try {
|
|
7869
|
-
await
|
|
7870
|
-
let e4 =
|
|
7871
|
-
|
|
7911
|
+
await ty.connect();
|
|
7912
|
+
let e4 = ty.getHostCapabilities();
|
|
7913
|
+
ry = !!(e4 != null && e4.modelContext), iy = !!(e4 != null && e4.sampling), Uv(ty, document.getElementById("pan-zoom-controls"), ["mode-badge", "aspect-filter", "param-controls-container", "chart-provenance", "bi-patterns-strip", "bi-action-bar"]), Kv(ty);
|
|
7872
7914
|
} catch (e4) {
|
|
7873
7915
|
console.error("[BiWheel] connect() failed:", e4);
|
|
7874
7916
|
}
|