@openephemeris/mcp-server 4.6.0 → 4.8.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.
@@ -1,42 +1,42 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
3
  <head>
4
- <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; font-src data:; connect-src 'none'" />
5
- <meta charset="UTF-8" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <meta name="color-scheme" content="dark light" />
8
- <!-- CSP is injected at build time by shared/singlefile-plugin.ts (the dev
9
- server needs external src/ references that a strict CSP would block). -->
10
- <title>Chart Wheel Explorer</title>
4
+ <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; font-src data:; connect-src 'none'" />
5
+ <meta charset="UTF-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <meta name="color-scheme" content="dark light" />
8
+ <!-- CSP is injected at build time by shared/singlefile-plugin.ts (the dev
9
+ server needs external src/ references that a strict CSP would block). -->
10
+ <title>Chart Wheel Explorer</title>
11
11
 
12
12
 
13
- <style>:root{--bg:#010203;--surface:#040609;--surface-2:#0b0d13;--border:#13161d;--border-strong:#242932;--text:#e2e4e9;--text-secondary:#777a80;--gold:#cc9c42;--gold-dim:#7b6540;--gold-glow:rgba(204,156,66,.2);--gold-subtle:rgba(204,156,66,.1);--on-gold:#0d0802;--success:#1da871;--error:#c53443;--radius:10px;--radius-sm:6px;--radius-pill:99px;--shadow:0 4px 20px rgba(0,0,0,.45);--shadow-md:0 8px 40px rgba(0,0,0,.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 0 2px var(--gold-glow), 0 6px 24px rgba(0,0,0,.5);--planet-sun:#e9ab2b;--planet-moon:#abb8d2;--planet-mercury:#37b880;--planet-venus:#de73bd;--planet-mars:#dd4d57;--planet-jupiter:#9886ed;--planet-saturn:#589194;--planet-uranus:#24c1c9;--planet-neptune:#2f8adc;--planet-pluto:#a97cc9;--aspect-conjunction:#ffa94d;--aspect-opposition:#ff6b8a;--aspect-trine:#ffd166;--aspect-square:#ff6b8a;--aspect-sextile:#38bdf8;--color-fire:#ec6d3d;--color-earth:#779e4b;--color-air:#17a9cb;--color-water:#8678c9;--color-cardinal:#d9525a;--color-fixed:#cc9c42;--color-mutable:#1da871}@supports (color:color(display-p3 0 0 0)){:root{--bg:color(display-p3 .00515318 .00655345 .0110262);--surface:color(display-p3 .0181758 .0222118 .0344746);--surface-2:color(display-p3 .0438795 .0516065 .0708656);--border:color(display-p3 .0763929 .0859556 .109705);--border-strong:color(display-p3 .146313 .159736 .192938);--text:color(display-p3 .889546 .895785 .910689);--text-secondary:color(display-p3 .470023 .47923 .50135);--gold:color(display-p3 .76996 .617341 .321369);--gold-dim:color(display-p3 .469305 .400291 .270966);--gold-glow:color(display-p3 .76996 .617341 .321369/.2);--gold-subtle:color(display-p3 .76996 .617341 .321369/.1);--on-gold:color(display-p3 .0492866 .0328715 .0111297);--success:color(display-p3 .313719 .651039 .459895);--error:color(display-p3 .710345 .252818 .279408);--shadow:0 4px 20px color(display-p3 0 0 0/.45);--shadow-md:0 8px 40px color(display-p3 0 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 0 2px var(--gold-glow), 0 6px 24px color(display-p3 0 0 0/.5);--planet-sun:color(display-p3 .877131 .680603 .28424);--planet-moon:color(display-p3 .679472 .718322 .813586);--planet-mercury:color(display-p3 .376022 .713332 .518194);--planet-venus:color(display-p3 .815343 .471375 .72873);--planet-mars:color(display-p3 .803557 .340931 .357065);--planet-jupiter:color(display-p3 .584642 .526796 .904819);--planet-saturn:color(display-p3 .398313 .564522 .578019);--planet-uranus:color(display-p3 .364235 .746318 .77845);--planet-neptune:color(display-p3 .290256 .532943 .838196);--planet-pluto:color(display-p3 .635092 .494812 .769187);--color-fire:color(display-p3 .864679 .454605 .289251);--color-earth:color(display-p3 .496575 .613452 .334223);--color-air:color(display-p3 .308318 .651825 .781829);--color-water:color(display-p3 .515326 .47381 .767317);--color-cardinal:color(display-p3 .790049 .355864 .367143);--color-fixed:color(display-p3 .76996 .617341 .321369);--color-mutable:color(display-p3 .313719 .651039 .459895)}}@supports (color:lab(0% 0 0)){:root{--bg:lab(.455387% .00626594 -.517511);--surface:lab(1.54195% -.000223517 -1.4246);--surface-2:lab(3.66055% -.0193194 -3.00652);--border:lab(7.15581% -.0557452 -5.11242);--border-strong:lab(16.3845% -.109613 -6.65551);--text:lab(90.6942% -.142396 -2.26941);--text-secondary:lab(51.2352% -.205308 -3.76425);--gold:lab(67.5798% 11.9379 52.333);--gold-dim:lab(44.394% 5.21129 24.4453);--gold-glow:lab(67.5798% 11.9379 52.333/.2);--gold-subtle:lab(67.5798% 11.9379 52.333/.1);--on-gold:lab(2.4863% .883393 2.81807);--success:lab(61.2436% -46.7762 18.3644);--error:lab(45.8893% 57.7361 27.393);--shadow:0 4px 20px lab(0% 0 0/.45);--shadow-md:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 0 2px var(--gold-glow), 0 6px 24px lab(0% 0 0/.5);--planet-sun:lab(74.5017% 15.8159 68.8514);--planet-moon:lab(74.277% -.405759 -14.8565);--planet-mercury:lab(67.0478% -46.5952 18.3141);--planet-venus:lab(62.9358% 49.4917 -19.8999);--planet-mars:lab(54.0218% 57.6814 26.7913);--planet-jupiter:lab(60.9189% 25.1968 -50.641);--planet-saturn:lab(56.5081% -18.8848 -7.8149);--planet-uranus:lab(71.0008% -37.5682 -15.4301);--planet-neptune:lab(55.2086% -4.9496 -50.4575);--planet-pluto:lab(58.8593% 28.4679 -33.3654);--color-fire:lab(61.5466% 48.3829 50.2676);--color-earth:lab(60.647% -24.5491 38.2386);--color-air:lab(63.473% -27.3149 -28.2614);--color-water:lab(54.4132% 19.4196 -40.6625);--color-cardinal:lab(54.1324% 54.4527 25.0799);--color-fixed:lab(67.5798% 11.9379 52.333);--color-mutable:lab(61.2436% -46.7762 18.3644)}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;height:100%}body{background:var(--bg);color:var(--text);background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.035'/%3E%3C/svg%3E");font-family:Geist,Space Grotesk,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:1.5;overflow-x:hidden}#app{flex-direction:column;display:flex;position:relative}#loading-state{color:var(--text-secondary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:14px;display:flex}#loading-state[hidden]{display:none}#loading-state p{letter-spacing:.05em;text-transform:uppercase;font-size:12px}.spinner{border:2px solid var(--border-strong);border-top-color:var(--gold);border-radius:50%;width:32px;height:32px;animation:1.1s cubic-bezier(.4,0,.6,1) infinite spin}@keyframes spin{to{transform:rotate(360deg)}}#chart-container{aspect-ratio:1;z-index:0;justify-content:center;align-items:center;width:100%;max-height:520px;padding:8px;display:flex;position:relative;overflow:hidden}#chart-container[hidden]{display:none}#chart-container svg{-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;height:100%;display:block;overflow:hidden}.info-panel,.overview-tbl td{-webkit-user-select:text;-moz-user-select:text;user-select:text}#chart-info{background:var(--surface);border-top:1px solid var(--border);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:5px;padding:6px 12px;display:flex}#chart-info[hidden]{display:none!important}.info-chip{color:var(--text-secondary);border-radius:var(--radius-pill);white-space:nowrap;letter-spacing:.03em;background:#13161c;background:color(display-p3 .0777944 .086043 .106387);background:lab(7.16788% -.0827834 -4.39059);align-items:center;gap:3px;padding:2px 8px;font-size:10px;font-weight:500;line-height:1.6;display:inline-flex}.info-chip.sect{color:var(--gold);background:var(--gold-subtle);font-weight:600}.hit-region{cursor:pointer;fill:transparent;stroke:transparent;transition:fill .15s,stroke .15s,opacity .2s}.hit-region:hover{fill:var(--gold-subtle);stroke:var(--gold-dim);stroke-width:1px;stroke-opacity:.5}.hit-region.planet-hit{rx:12px;ry:12px}.hit-region.planet-hit:not(.dim):hover{filter:drop-shadow(0 0 6px var(--gold-glow))}.hit-region:focus-visible{outline:2px solid var(--gold);outline-offset:2px;fill:var(--gold-subtle)}.hit-region.dim{opacity:.12}.hit-region.aspect-hit{stroke-width:13px}.hit-region.sign-hit:hover{fill:rgba(204,156,66,.06);fill:color(display-p3 .76996 .617341 .321369/.06);fill:lab(67.5798% 11.9379 52.333/.06);stroke:none}.info-panel{background:var(--surface-2);border:1px solid var(--border-strong);width:100%;box-shadow:0 8px 40px rgba(0,0,0,.6), 0 0 0 1px var(--border-strong);opacity:0;pointer-events:none;z-index:2;border-radius:10px;max-height:0;padding:0 16px;transition:max-height .26s cubic-bezier(.16,1,.3,1),opacity .2s,padding .2s;position:relative;overflow:hidden}@supports (color:color(display-p3 0 0 0)){.info-panel{box-shadow:0 8px 40px color(display-p3 0 0 0/.6), 0 0 0 1px var(--border-strong)}}@supports (color:lab(0% 0 0)){.info-panel{box-shadow:0 8px 40px lab(0% 0 0/.6), 0 0 0 1px var(--border-strong)}}.info-panel:before{content:"";background:var(--border-strong);border-radius:2px;flex-shrink:0;width:36px;height:4px;margin:0 auto 10px;display:block}.info-panel.visible{opacity:1;pointer-events:all;max-height:520px;padding:14px 16px 12px}.info-header{align-items:flex-start;gap:10px;margin-bottom:12px;display:flex}.info-glyph{text-align:center;flex-shrink:0;width:34px;font-size:28px;line-height:1}.info-title{color:var(--text);flex:1;font-size:13px;font-weight:700}.info-name-row{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.info-pos{color:var(--text-secondary);margin-top:2px;font-family:JetBrains Mono,Courier New,monospace;font-size:11px;font-weight:400}.retro{color:var(--error);font-style:normal}.info-close{cursor:pointer;color:var(--text-secondary);background:0 0;border:none;border-radius:4px;flex-shrink:0;padding:2px 4px;font-size:15px;line-height:1;transition:color .12s}.info-close:hover{color:var(--text)}.aspects-title{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);margin-bottom:6px;font-size:10px;font-weight:700}.aspects-list{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex-direction:column;gap:4px;max-height:140px;display:flex;overflow-y:auto}.aspects-list::-webkit-scrollbar{width:3px}.aspects-list::-webkit-scrollbar-track{background:0 0}.aspects-list::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:3px}.aspect-row{align-items:center;gap:7px;padding:3px 0;font-size:12px;display:flex}.aspect-dot{border-radius:50%;flex-shrink:0;width:7px;height:7px}.aspect-sym{text-align:center;flex-shrink:0;width:16px;font-size:14px}.aspect-other{color:var(--text);flex:1}.aspect-meta{color:var(--text-secondary);white-space:nowrap;font-family:JetBrains Mono,monospace;font-size:11px}.no-aspects{color:var(--text-secondary);padding:4px 0;font-size:11px;font-style:italic}.info-hint{color:var(--gold-dim);letter-spacing:.03em;text-align:center;margin-top:10px;font-size:10px}.ask-claude-btn{border-radius:var(--radius-sm);width:100%;color:var(--gold);letter-spacing:.04em;cursor:pointer;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);justify-content:center;align-items:center;gap:6px;margin-top:12px;padding:9px 16px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:12px;font-weight:600;transition:background .16s,border-color .16s,box-shadow .16s;display:flex}.ask-claude-btn:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65);box-shadow:0 0 0 3px rgba(204,156,66,.12);box-shadow:0 0 0 3px color(display-p3 .76996 .617341 .321369/.12);box-shadow:0 0 0 3px lab(67.5798% 11.9379 52.333/.12)}.ask-claude-btn:disabled{opacity:.5;cursor:not-allowed}.ask-claude-btn.sending{color:var(--gold-dim);opacity:.8;cursor:wait;pointer-events:none;background:rgba(204,156,66,.08);background:color(display-p3 .76996 .617341 .321369/.08);background:lab(67.5798% 11.9379 52.333/.08);border-color:rgba(204,156,66,.25);border-color:color(display-p3 .76996 .617341 .321369/.25);border-color:lab(67.5798% 11.9379 52.333/.25)}.ask-claude-btn.sent{color:var(--success);pointer-events:none;background:rgba(29,168,113,.15);background:color(display-p3 .313719 .651039 .459895/.15);background:lab(61.2436% -46.7762 18.3644/.15);border-color:rgba(29,168,113,.5);border-color:color(display-p3 .313719 .651039 .459895/.5);border-color:lab(61.2436% -46.7762 18.3644/.5)}.ask-claude-btn.error{color:var(--error);background:rgba(197,52,67,.15);background:color(display-p3 .710345 .252818 .279408/.15);background:lab(45.8893% 57.7361 27.393/.15);border-color:rgba(197,52,67,.5);border-color:color(display-p3 .710345 .252818 .279408/.5);border-color:lab(45.8893% 57.7361 27.393/.5)}.chart-status{min-height:0;max-height:0;color:var(--gold);letter-spacing:.04em;opacity:0;background:var(--surface);border-top:1px solid var(--border);padding:0 14px;font-size:11px;font-weight:500;transition:max-height .24s cubic-bezier(.16,1,.3,1),padding .24s cubic-bezier(.16,1,.3,1),opacity .24s;overflow:hidden}.chart-status[data-active]{opacity:1;max-height:32px;padding:6px 14px}.aspect-pair-row{justify-content:space-between;align-items:center;gap:8px;padding:6px 0;display:flex}.aspect-pair-planet{flex:1;align-items:center;gap:6px;display:flex}.aspect-pair-glyph{text-align:center;flex-shrink:0;width:24px;font-size:18px;line-height:1}.aspect-pair-name{color:var(--text);font-size:12px;font-weight:600}.aspect-pair-pos{color:var(--text-secondary);margin-top:1px;font-family:JetBrains Mono,monospace;font-size:10px}.aspect-pair-sym{text-align:center;flex-shrink:0;width:24px;font-size:20px}.pattern-ask-claude-btn{border-radius:var(--radius-pill);color:var(--gold);letter-spacing:.04em;cursor:pointer;background:rgba(204,156,66,.1);background:color(display-p3 .76996 .617341 .321369/.1);background:lab(67.5798% 11.9379 52.333/.1);border:1px solid rgba(204,156,66,.35);border:1px solid color(display-p3 .76996 .617341 .321369/.35);border:1px solid lab(67.5798% 11.9379 52.333/.35);flex-shrink:0;margin-left:6px;padding:3px 10px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:10px;font-weight:600;transition:background .15s,border-color .15s,box-shadow .15s}.pattern-ask-claude-btn:hover{background:rgba(204,156,66,.18);background:color(display-p3 .76996 .617341 .321369/.18);background:lab(67.5798% 11.9379 52.333/.18);border-color:rgba(204,156,66,.6);border-color:color(display-p3 .76996 .617341 .321369/.6);border-color:lab(67.5798% 11.9379 52.333/.6);box-shadow:0 0 0 2px rgba(204,156,66,.1);box-shadow:0 0 0 2px color(display-p3 .76996 .617341 .321369/.1);box-shadow:0 0 0 2px lab(67.5798% 11.9379 52.333/.1)}.pattern-ask-claude-btn:disabled{opacity:.45;cursor:default}.dignity-badge{border-radius:var(--radius-pill);white-space:nowrap;align-items:center;gap:3px;padding:1px 7px;font-size:10px;font-weight:600;line-height:1.6;display:inline-flex}.dignity-domicile{color:#4bc98f;color:color(display-p3 .438181 .776546 .577613);color:lab(72.8515% -46.4433 18.2719);background:rgba(29,168,113,.15);background:color(display-p3 .313719 .651039 .459895/.15);background:lab(61.2436% -46.7762 18.3644/.15);border:1px solid rgba(29,168,113,.4);border:1px solid color(display-p3 .313719 .651039 .459895/.4);border:1px solid lab(61.2436% -46.7762 18.3644/.4)}.dignity-exaltation{color:#e6b55d;color:color(display-p3 .872302 .716587 .419329);color:lab(76.8879% 11.458 50.9953);background:rgba(204,156,66,.15);background:color(display-p3 .76996 .617341 .321369/.15);background:lab(67.5798% 11.9379 52.333/.15);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4)}.dignity-detriment{color:#e17174;color:color(display-p3 .827266 .46738 .465289);color:lab(61.4259% 44.7499 19.9857);background:rgba(197,52,67,.12);background:color(display-p3 .710345 .252818 .279408/.12);background:lab(45.8893% 57.7361 27.393/.12);border:1px solid rgba(197,52,67,.35);border:1px solid color(display-p3 .710345 .252818 .279408/.35);border:1px solid lab(45.8893% 57.7361 27.393/.35)}.dignity-fall{color:#7a869f;color:color(display-p3 .488637 .525017 .615022);color:lab(55.7075% -.240654 -14.7889);background:rgba(88,99,123,.12);background:color(display-p3 .353624 .387759 .473149/.12);background:lab(41.7762% -.0450611 -14.7162/.12);border:1px solid rgba(88,99,123,.3);border:1px solid color(display-p3 .353624 .387759 .473149/.3);border:1px solid lab(41.7762% -.0450611 -14.7162/.3)}#tally-panel{border-top:1px solid var(--border);background:var(--surface);flex-shrink:0;align-items:center;gap:8px;padding:5px 12px;display:flex}.tally-section{flex-direction:column;gap:3px;display:flex}.tally-row{align-items:center;gap:6px;display:flex}.tally-item{white-space:nowrap;letter-spacing:.02em;border-radius:4px;padding:1px 6px;font-size:10px;font-weight:600}.tally-item.fire{color:var(--color-fire);background:rgba(236,109,61,.12);background:color(display-p3 .864679 .454605 .289251/.12);background:lab(61.5466% 48.3829 50.2676/.12)}.tally-item.earth{color:var(--color-earth);background:rgba(119,158,75,.12);background:color(display-p3 .496575 .613452 .334223/.12);background:lab(60.647% -24.5491 38.2386/.12)}.tally-item.air{color:var(--color-air);background:rgba(23,169,203,.12);background:color(display-p3 .308318 .651825 .781829/.12);background:lab(63.473% -27.3149 -28.2614/.12)}.tally-item.water{color:var(--color-water);background:rgba(134,120,201,.12);background:color(display-p3 .515326 .47381 .767317/.12);background:lab(54.4132% 19.4196 -40.6625/.12)}.tally-item.cardinal{color:var(--color-cardinal);background:rgba(217,82,90,.1);background:color(display-p3 .790049 .355864 .367143/.1);background:lab(54.1324% 54.4527 25.0799/.1)}.tally-item.fixed{color:var(--color-fixed);background:rgba(204,156,66,.1);background:color(display-p3 .76996 .617341 .321369/.1);background:lab(67.5798% 11.9379 52.333/.1)}.tally-item.mutable{color:var(--color-mutable);background:rgba(29,168,113,.1);background:color(display-p3 .313719 .651039 .459895/.1);background:lab(61.2436% -46.7762 18.3644/.1)}.tally-bar-row{padding:2px 0}.tally-bar{background:var(--border);border-radius:2px;width:96px;height:3px;display:flex;overflow:hidden}.tally-bar-fill{height:100%;transition:width .5s cubic-bezier(.16,1,.3,1)}.tally-bar-fill.fire{background:var(--color-fire)}.tally-bar-fill.earth{background:var(--color-earth)}.tally-bar-fill.air{background:var(--color-air)}.tally-bar-fill.water{background:var(--color-water)}.tally-divider{background:var(--border-strong);flex-shrink:0;width:1px;height:26px}.tally-item[data-interactive]{cursor:pointer;transition:opacity .14s,box-shadow .14s,background .14s}.tally-item[data-interactive]:hover,.tally-item[data-interactive].active{opacity:1;box-shadow:0 0 0 2px}.tally-planets{flex-wrap:wrap;gap:3px;padding:2px 0 0;display:flex}.tally-planet-chip{color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:rgba(255,255,255,.05);background:color(display-p3 1 1 1/.05);background:lab(100% 0 0/.05);border-radius:3px;padding:0 4px;font-size:9px;font-weight:500;transition:color .12s,background .12s}.tally-planet-chip:hover{color:var(--gold);background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12)}#dignity-panel{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:6px;padding:4px 12px;display:flex}.dignity-chip{cursor:pointer;white-space:nowrap;border-radius:4px;align-items:center;gap:3px;padding:1px 7px;font-size:10px;font-weight:600;transition:opacity .14s,box-shadow .14s;display:inline-flex}.dignity-chip:hover{opacity:1;box-shadow:0 0 0 2px}.dignity-chip.active{box-shadow:0 0 0 2px}#overview-table{border-top:1px solid var(--border);background:var(--surface);flex-shrink:0}.overview-header{align-items:center;display:flex}.overview-header .overview-toggle{flex:auto;width:auto}.overview-copy{border:1px solid var(--border);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em;border-radius:var(--radius-sm,6px);cursor:pointer;background:0 0;flex-shrink:0;margin-right:8px;padding:3px 10px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:10px;font-weight:700;transition:color .14s,border-color .14s}.overview-copy:hover,.overview-copy.copied{color:var(--gold);border-color:var(--gold)}.overview-toggle{width:100%;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.1em;cursor:pointer;background:0 0;border:none;align-items:center;gap:6px;padding:6px 12px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:10px;font-weight:700;transition:color .14s;display:flex}.overview-toggle:hover{color:var(--gold)}.overview-chevron{font-size:8px;transition:transform .2s}.overview-toggle[aria-expanded=true] .overview-chevron{transform:rotate(90deg)}.overview-body{grid-template-rows:0fr;transition:grid-template-rows .28s cubic-bezier(.16,1,.3,1);display:grid;overflow:hidden}.overview-body>*{min-height:0}.overview-body.open{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;grid-template-rows:1fr;max-height:300px;overflow-x:hidden;overflow-y:auto}.overview-tbl{border-collapse:collapse;width:100%;font-size:11px}.overview-tbl th{text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary);text-align:left;border-bottom:1px solid var(--border);background:var(--surface);padding:3px 8px;font-size:9px;font-weight:700;position:-webkit-sticky;position:sticky;top:0}.overview-tbl td{color:var(--text);border-bottom:1px solid rgba(255,255,255,.04);border-bottom:1px solid color(display-p3 1 1 1/.04);border-bottom:1px solid lab(100% 0 0/.04);padding:4px 8px}.overview-tbl tr{cursor:pointer;transition:background .12s}.overview-tbl tbody tr:hover{background:rgba(204,156,66,.06);background:color(display-p3 .76996 .617341 .321369/.06);background:lab(67.5798% 11.9379 52.333/.06)}.overview-tbl tbody tr.active-row{background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12)}.overview-tbl tbody tr.extended-row{opacity:.72}.overview-tbl tbody tr.extended-row td:first-child:after{content:" ·";color:var(--text-secondary);font-size:8px}.overview-tbl .planet-sym{text-align:center;width:20px;font-family:serif;font-size:14px;display:inline-block}.overview-tbl .retro-mark{color:#e05252;margin-left:2px;font-size:9px}#patterns-strip{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:5px;padding:5px 12px;display:flex}.patterns-label{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);white-space:nowrap;margin-right:2px;font-size:9px;font-weight:700}.pattern-pill{border-radius:var(--radius-pill);cursor:pointer;white-space:nowrap;opacity:.75;background:0 0;border:1px solid;align-items:center;gap:4px;padding:5px 9px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:10px;font-weight:600;transition:opacity .14s,box-shadow .14s;display:inline-flex}.pattern-pill:hover{opacity:1;box-shadow:0 0 0 2px currentColor / .2}.pattern-pill.active{color:#010203;color:color(display-p3 .00515318 .00655345 .0110262);color:lab(.455387% .00626594 -.517511);opacity:1;border-color:transparent;box-shadow:0 2px 10px rgba(0,0,0,.3);box-shadow:0 2px 10px color(display-p3 0 0 0/.3);box-shadow:0 2px 10px lab(0% 0 0/.3)}#aspect-filter{border-top:1px solid var(--border);scrollbar-width:none;flex-shrink:0;align-items:center;gap:4px;padding:4px 12px;display:flex;overflow-x:auto}#aspect-filter::-webkit-scrollbar{display:none}#aspect-filter[hidden]{display:none!important}#controls-panel{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:6px;padding:8px 12px;display:flex}.controls-label{color:var(--text-secondary);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;margin-right:2px;font-size:10px;font-weight:700}.control-btn{border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:0 0;padding:6px 10px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:11px;transition:background .12s,color .12s,border-color .12s}.control-btn:hover{background:var(--gold-subtle);color:var(--gold);border-color:rgba(204,156,66,.4);border-color:color(display-p3 .76996 .617341 .321369/.4);border-color:lab(67.5798% 11.9379 52.333/.4)}.control-btn.active{color:var(--gold);background:rgba(204,156,66,.18);background:color(display-p3 .76996 .617341 .321369/.18);background:lab(67.5798% 11.9379 52.333/.18);border-color:rgba(204,156,66,.6);border-color:color(display-p3 .76996 .617341 .321369/.6);border-color:lab(67.5798% 11.9379 52.333/.6);font-weight:600}.controls-divider{background:var(--border-strong);flex-shrink:0;width:1px;height:18px;margin:0 4px}.error-state{text-align:center;color:var(--text-secondary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px;display:flex}.error-state .error-icon{opacity:.6;margin-bottom:4px;font-size:28px}.error-retry-btn{border:1px solid var(--border,rgba(128,128,160,.3));color:var(--gold,var(--accent-warm,var(--text,inherit)));font:inherit;letter-spacing:.02em;cursor:pointer;background:0 0;border-radius:999px;margin-top:4px;padding:7px 20px;font-size:11px;font-weight:600;transition:background .18s,border-color .18s}.error-retry-btn:hover{background:rgba(128,128,160,.12)}.info-drawer{background:var(--surface-2,#080b11);border:1px solid var(--border-strong,#242933);width:100%;box-shadow:0 8px 40px rgba(0,0,0,.65), 0 0 0 1px var(--border-strong,#242933);opacity:0;pointer-events:none;border-radius:10px;max-height:0;padding:14px 16px 12px;transition:max-height .26s cubic-bezier(.16,1,.3,1),opacity .2s,padding .2s;position:relative;overflow:hidden}@supports (color:color(display-p3 0 0 0)){.info-drawer{background:var(--surface-2,color(display-p3 .0345774 .0431759 .0653236));border:1px solid var(--border-strong,color(display-p3 .144788 .159634 .196542));box-shadow:0 8px 40px color(display-p3 0 0 0/.65), 0 0 0 1px var(--border-strong,color(display-p3 .144788 .159634 .196542))}}@supports (color:lab(0% 0 0)){.info-drawer{background:var(--surface-2,lab(3.00584% .0228807 -3.15676));border:1px solid var(--border-strong,lab(16.3713% -.0768304 -7.37782));box-shadow:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong,lab(16.3713% -.0768304 -7.37782))}}.info-drawer:before{content:"";background:var(--border-strong,#242933);border-radius:2px;flex-shrink:0;width:36px;height:4px;margin:0 auto 10px;display:block}@supports (color:color(display-p3 0 0 0)){.info-drawer:before{background:var(--border-strong,color(display-p3 .144788 .159634 .196542))}}@supports (color:lab(0% 0 0)){.info-drawer:before{background:var(--border-strong,lab(16.3713% -.0768304 -7.37782))}}.info-drawer.open{opacity:1;pointer-events:all;max-height:500px;padding:14px 16px 12px}.hd-action-bar{z-index:2;background:var(--bg);flex-wrap:wrap;gap:8px;padding:10px 16px 6px;display:flex;position:relative}.action-btn{border:1px solid var(--gold-glow);background:var(--gold-subtle);color:var(--gold);letter-spacing:.02em;cursor:pointer;white-space:nowrap;border-radius:8px;align-items:center;gap:6px;padding:7px 16px;font-size:12px;font-weight:600;transition:background .2s,border-color .2s;display:inline-flex}.action-btn:hover{background:rgba(204,156,66,.15);background:color(display-p3 .76996 .617341 .321369/.15);background:lab(67.5798% 11.9379 52.333/.15);border-color:rgba(204,156,66,.45);border-color:color(display-p3 .76996 .617341 .321369/.45);border-color:lab(67.5798% 11.9379 52.333/.45)}.action-btn:active{background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2)}.action-btn--primary{background:rgba(204,156,66,.18);background:color(display-p3 .76996 .617341 .321369/.18);background:lab(67.5798% 11.9379 52.333/.18);border-color:rgba(204,156,66,.5);border-color:color(display-p3 .76996 .617341 .321369/.5);border-color:lab(67.5798% 11.9379 52.333/.5)}.action-btn--primary:hover{background:rgba(204,156,66,.25);background:color(display-p3 .76996 .617341 .321369/.25);background:lab(67.5798% 11.9379 52.333/.25);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65)}.pan-zoom-controls{z-index:800;flex-direction:column;gap:6px;display:flex;position:absolute;bottom:12px;right:12px}.pan-zoom-controls[hidden]{display:none!important}.pan-btn{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);border-radius:var(--radius-sm);cursor:pointer;width:40px;height:40px;box-shadow:var(--shadow-md);justify-content:center;align-items:center;font-family:inherit;font-size:18px;transition:all .15s;display:flex}.pan-btn.reset{width:auto;padding:0 10px;font-size:11px;font-weight:500}.pan-btn:hover{background:var(--surface);border-color:var(--gold-dim);color:var(--gold)}.pan-btn:active{transform:scale(.95)}.pan-btn--fullscreen{width:40px;height:40px}body.is-fullscreen{height:100vh;overflow:hidden}body.is-fullscreen #app{flex-direction:column;gap:0;width:100vw;height:100vh;padding:0;display:flex;overflow:hidden}body.is-fullscreen #chart-container{flex:1;justify-content:center;align-items:center;min-height:0;padding:16px 24px 0;display:flex;overflow:hidden}body.is-fullscreen #chart-container>svg{width:auto;max-width:100%;height:100%;max-height:100%}body.is-fullscreen #chart-status{display:none}body.is-fullscreen #loading-state{flex:1;height:auto;min-height:0}body.is-fullscreen .pan-zoom-controls{top:16px;right:16px}#fs-bottom-bar{border-top:1px solid var(--border);background:#020306;background:color(display-p3 .0100648 .0127997 .0215356);background:lab(.889429% .0122339 -1.01076);flex-shrink:0;grid-template-rows:1fr;grid-template-columns:220px 1fr 220px;height:240px;min-height:180px;max-height:280px;display:grid}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex-direction:column;gap:4px;padding:10px 14px 12px;display:flex;overflow-x:hidden;overflow-y:auto}#fs-bottom-bar [data-column=left]{border-right:1px solid var(--border)}#fs-bottom-bar [data-column=center]{pointer-events:none}#fs-bottom-bar [data-column=right]{border-left:1px solid var(--border);overflow-y:auto}#fs-bottom-bar [data-column]>*+*{border-top:1px solid var(--border);margin-top:4px;padding-top:8px}#fs-bottom-bar .cw-action-bar,#fs-bottom-bar .hd-action-bar{flex-direction:column;padding:8px 0 0}#fs-bottom-bar .action-btn{justify-content:center;width:100%}.cancel-toast{background:var(--surface-2,#1e1e2e);border:1px solid var(--border-strong,#444);color:var(--text-secondary);border-radius:var(--radius-sm,6px);opacity:0;z-index:9999;pointer-events:none;box-shadow:var(--shadow-md,0 4px 12px rgba(0,0,0,.3));padding:8px 16px;font-family:inherit;font-size:12px;transition:opacity .3s,transform .3s;position:fixed;bottom:20px;left:50%;transform:translate(-50%)translateY(20px)}.cancel-toast.visible{opacity:1;transform:translate(-50%)translateY(0)}.oe-loader{width:64px;height:64px;stroke:var(--gold);stroke-width:2px;fill:none;stroke-dasharray:200;stroke-dashoffset:200px;filter:drop-shadow(0 0 4px var(--gold-glow));animation:2.5s cubic-bezier(.16,1,.3,1) infinite oe-draw}@keyframes oe-draw{0%{stroke-dashoffset:200px;stroke-opacity:.1}50%{stroke-dashoffset:0;stroke-opacity:1;filter:drop-shadow(0 0 8px var(--gold))}to{stroke-dashoffset:-200px;stroke-opacity:.1}}#aspect-filter{padding:0}.asp-panel{flex-wrap:wrap;align-items:center;gap:6px 16px;padding:6px 0;display:flex}.asp-section{align-items:center;gap:6px;display:flex}.asp-section-label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);white-space:nowrap;font-size:10px;font-weight:700}.aspect-toggle-btn,.orb-preset-btn{border:1.5px solid var(--border-strong);color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border-radius:20px;padding:4px 10px;font-size:11px;font-weight:600;transition:background .15s,color .15s,border-color .15s}.aspect-toggle-btn:hover,.orb-preset-btn:hover{border-color:var(--gold-dim);color:var(--text)}.aspect-toggle-btn.active{background:var(--gold);border-color:var(--gold);color:var(--on-gold)}.orb-preset-btn.active{background:var(--surface-2);border-color:var(--gold);color:var(--gold)}.glyph-legend{margin-top:8px;font-size:11px}.glyph-legend>summary{cursor:pointer;border:1px solid var(--border);color:var(--text-secondary);-webkit-user-select:none;-moz-user-select:none;user-select:none;border-radius:999px;align-items:center;gap:5px;padding:4px 10px;list-style:none;display:inline-flex}.glyph-legend>summary::-webkit-details-marker{display:none}.glyph-legend>summary:hover{color:var(--text);border-color:var(--gold-dim)}.glyph-legend[open]>summary{color:var(--text)}.glyph-legend .legend-spark{color:var(--gold)}.legend-body{flex-direction:column;gap:10px;padding:10px 2px 2px;display:flex}.legend-group{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.legend-group-title{text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary);width:100%;font-size:9px}.legend-item{color:var(--text-secondary);align-items:center;gap:4px;display:inline-flex}.legend-glyph{color:var(--text);text-align:center;min-width:16px;font-size:14px}.chart-layer{opacity:1;transform-origin:310px 310px;animation:.5s cubic-bezier(.16,1,.3,1) both svgLayerAssemble;animation-delay:calc(var(--layer-index,0) * 80ms);transform:scale(1)}@keyframes svgLayerAssemble{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.tooltip{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;border-radius:var(--radius,10px);pointer-events:none;z-index:1000;opacity:0;background:rgba(12,12,22,.97);border:1px solid rgba(60,58,80,.8);max-width:240px;padding:8px 12px;font-size:12px;transition:opacity .12s;position:fixed;box-shadow:0 8px 32px rgba(0,0,0,.55),inset 0 .5px rgba(255,255,255,.04)}.tooltip.visible{opacity:1}.tooltip-title{color:#e8e8f4;margin-bottom:2px;font-weight:700}.tooltip-detail{color:#9090b0;line-height:1.4}.tooltip-hint{color:#a08840;letter-spacing:.03em;margin-top:4px;font-size:10px}:root[data-theme=light]{--aspect-conjunction:#b45d00;--aspect-opposition:#c9184f;--aspect-trine:#8f6a00;--aspect-square:#c9184f;--aspect-sextile:#0c6e94;--bg:#f7f5f1;--surface:#fff;--surface-2:#f1eee9;--border:#dbd7d0;--border-strong:#bdb6ac;--text:#101215;--text-secondary:#4f5359;--gold:#825700;--gold-dim:#6d4b00;--gold-glow:rgba(130,87,0,.25);--gold-subtle:rgba(130,87,0,.1);--on-gold:#fcf4e6;--success:#007145;--error:#b1002b;--shadow:0 4px 20px rgba(0,0,0,.1);--shadow-md:0 8px 32px rgba(0,0,0,.14), 0 0 0 1px var(--border-strong)}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light]{--bg:color(display-p3 .967616 .959866 .945308);--surface:color(display-p3 1 1 1);--surface-2:color(display-p3 .943798 .93351 .914195);--border:color(display-p3 .855616 .842987 .819292);--border-strong:color(display-p3 .73602 .716348 .67952);--text:color(display-p3 .0633107 .0687189 .081922);--text-secondary:color(display-p3 .313002 .323251 .348016);--gold:color(display-p3 .49809 .342102 -.0880434);--gold-dim:color(display-p3 .414099 .299019 .034461);--gold-glow:color(display-p3 .49809 .342102 -.0880434/.25);--gold-subtle:color(display-p3 .49809 .342102 -.0880434/.1);--on-gold:color(display-p3 .983924 .957955 .909341);--success:color(display-p3 -.0793084 .456092 .255685);--error:color(display-p3 .642198 .101724 .18242);--shadow:0 4px 20px color(display-p3 0 0 0/.1);--shadow-md:0 8px 32px color(display-p3 0 0 0/.14), 0 0 0 1px var(--border-strong)}}@supports (color:lab(0% 0 0)){:root[data-theme=light]{--bg:lab(96.5376% .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)}}:root[data-theme=light],:root[data-theme=light] body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background-image:none}:root[data-theme=light] .hd-action-bar{background:var(--bg)}:root[data-theme=light] .info-chip{background:var(--surface-2);color:var(--text-secondary);border:1px solid var(--border)}:root[data-theme=light] .info-chip.sect{background:var(--gold-subtle);color:var(--gold);border-color:rgba(141,95,0,.3);border-color:color(display-p3 .542549 .371783 -.107551/.3);border-color:lab(44.1995% 17.0662 84.3373/.3)}:root[data-theme=light] .tooltip{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--text);border-color:var(--border-strong);background:rgba(255,255,255,.96);background:color(display-p3 1 1 1/.96);background:lab(100% 0 0/.96);box-shadow:0 8px 32px rgba(0,0,0,.18),inset 0 .5px rgba(255,255,255,.6);box-shadow:0 8px 32px color(display-p3 0 0 0/.18),inset 0 .5px color(display-p3 1 1 1/.6);box-shadow:0 8px 32px lab(0% 0 0/.18),inset 0 .5px lab(100% 0 0/.6)}:root[data-theme=light] .tooltip-title{color:var(--text)}:root[data-theme=light] .tooltip-detail{color:var(--text-secondary)}:root[data-theme=light] .tooltip-hint{color:var(--gold-dim)}:root[data-theme=light] .chart-status{background:rgba(247,245,241,.92);background:color(display-p3 .967616 .959866 .945308/.92);background:lab(96.5376% .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)}:root[data-theme=light] .hit-region:hover{fill:rgba(141,95,0,.1);fill:color(display-p3 .542549 .371783 -.107551/.1);fill:lab(44.1995% 17.0662 84.3373/.1);stroke:var(--gold-dim)}:root[data-theme=light] .hit-region.sign-hit:hover{fill:rgba(141,95,0,.07);fill:color(display-p3 .542549 .371783 -.107551/.07);fill:lab(44.1995% 17.0662 84.3373/.07)}:root[data-theme=light] .pan-btn{background:var(--surface)}:root[data-theme=light] .pan-btn:hover{background:var(--surface-2)}:root[data-theme=light] #fs-bottom-bar{background:#f7f5f1;background:color(display-p3 .967616 .959866 .945308);background:lab(96.5376% .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)}:root[data-theme=light] #fs-bottom-bar [data-column=left],:root[data-theme=light] #fs-bottom-bar [data-column=right]{background:#f1eeea;background:color(display-p3 .941472 .933762 .919279);background:lab(94.2176% .341028 2.25905)}:root[data-theme=light] #fs-bottom-bar [data-column=left]{border-right-color:#caced4;border-right-color:color(display-p3 .796183 .806346 .830691);border-right-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] #fs-bottom-bar [data-column=right]{border-left-color:#caced4;border-left-color:color(display-p3 .796183 .806346 .830691);border-left-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] #fs-bottom-bar [data-column]>*+*{border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}@media (max-width:480px){body,#app{padding:0}#pan-zoom-controls{flex-wrap:wrap;gap:5px}.pan-btn{background:color-mix(in oklab, var(--surface-2) 72%, transparent);-webkit-backdrop-filter:blur(6px);width:32px;min-width:32px;height:32px;min-height:32px;font-size:15px}.pan-btn.reset{width:32px;padding:0;font-size:0}.pan-btn.reset:before{content:"⟲";font-size:15px}#date-controls,.controls,.control-row{flex-wrap:wrap;gap:8px}#fs-bottom-bar{flex-wrap:wrap}#fs-bottom-bar [data-column]{border:0;flex:100%}}.param-controls{background:var(--surface);border-top:1px solid var(--border);flex-shrink:0;padding:6px 12px}.param-controls-grid{flex-wrap:wrap;align-items:center;gap:6px 10px;display:flex}.param-group{flex-direction:row;align-items:center;gap:6px;display:flex}.param-group label{text-transform:uppercase;color:var(--text-secondary);letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:700}.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);color-scheme:inherit;border-radius:var(--radius-sm);width:120px;height:24px;padding:3px 6px;font-family:inherit;font-size:11px}@media (prefers-reduced-motion:no-preference){.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{transition:border-color .15s}}.param-group input:focus{border-color:var(--gold-dim);outline:none}.loc-searching{border-color:var(--gold-dim)!important}@media (prefers-reduced-motion:no-preference){.loc-searching{animation:1s ease-in-out infinite alternate loc-pulse}}@keyframes loc-pulse{0%{border-color:var(--gold-dim)}to{border-color:rgba(204,156,66,.55);border-color:color(display-p3 .76996 .617341 .321369/.55);border-color:lab(67.5798% 11.9379 52.333/.55)}}.param-group-loc{flex:1;position:relative}.param-group-loc input{width:100%}.loc-suggestions{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius-sm);z-index:100;max-height:200px;margin-top:4px;position:absolute;top:100%;left:0;right:0;overflow-y:auto;box-shadow:0 4px 12px rgba(0,0,0,.35);box-shadow:0 4px 12px color(display-p3 0 0 0/.35);box-shadow:0 4px 12px lab(0% 0 0/.35)}.loc-item{color:var(--text);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid var(--border);padding:8px 10px;font-size:12px;overflow:hidden}.loc-item:last-child{border-bottom:none}@media (prefers-reduced-motion:no-preference){.loc-item{transition:background .1s,color .1s}}.loc-item:hover,.loc-item--active{background:var(--gold-subtle);color:var(--gold)}.loc-status{color:var(--text-secondary);letter-spacing:.01em;padding:8px 10px;font-size:11px;font-style:italic}.loc-status-error{color:#d76a5a;color:color(display-p3 .788241 .439621 .373983);color:lab(58.1265% 42.6447 29.9439);font-style:normal;font-weight:600}.param-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.param-cost-hint{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;font-size:10px}.param-btn-icon{border:1px solid var(--border-strong);color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;background:0 0;justify-content:center;align-items:center;width:24px;height:24px;display:flex}@media (prefers-reduced-motion:no-preference){.param-btn-icon{transition:background .15s,border-color .15s,color .15s}}.param-btn-icon:hover{background:var(--surface-2);color:var(--text);border-color:var(--gold-dim)}.param-btn-primary{color:var(--gold);border-radius:var(--radius-sm);cursor:pointer;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);height:24px;padding:3px 10px;font-family:inherit;font-size:10px;font-weight:600}@media (prefers-reduced-motion:no-preference){.param-btn-primary{transition:background .15s,border-color .15s}}.param-btn-primary:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65)}.param-btn-primary:disabled{opacity:.5;cursor:not-allowed}.param-extra-toggle{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;cursor:pointer;align-items:center;gap:5px;font-size:10px;display:flex}.param-extra-toggle input[type=checkbox]{width:13px;height:13px;accent-color:var(--gold,oklch(72% .12 80));cursor:pointer}.param-extra-toggle input[type=checkbox]:disabled{cursor:not-allowed}.param-extra-toggle input[type=checkbox]:disabled~span{opacity:.5}:root[data-theme=light] .param-group input[type=date],:root[data-theme=light] .param-group input[type=time],:root[data-theme=light] .param-group input[type=text]{border-color:var(--border-strong);color:var(--text);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167578 1.1277)}:root[data-theme=light] .loc-suggestions{border-color:var(--border-strong);background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167578 1.1277)}:root[data-theme=light] .param-btn-primary{background:rgba(160,112,0,.12);background:color(display-p3 .615135 .441554 -.0204711/.12);background:lab(51.2092% 16.2654 78.3504/.12);border-color:rgba(160,112,0,.4);border-color:color(display-p3 .615135 .441554 -.0204711/.4);border-color:lab(51.2092% 16.2654 78.3504/.4)}:root[data-theme=light] .param-btn-primary:hover:not(:disabled){background:rgba(160,112,0,.22);background:color(display-p3 .615135 .441554 -.0204711/.22);background:lab(51.2092% 16.2654 78.3504/.22);border-color:rgba(160,112,0,.65);border-color:color(display-p3 .615135 .441554 -.0204711/.65);border-color:lab(51.2092% 16.2654 78.3504/.65)}.param-summary-bar{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:2px 0;margin-bottom:4px;padding:3px 4px 5px;font-size:10px;line-height:1.3;display:flex}.param-summary-bar[hidden]{display:none}.summary-name{color:var(--gold,#d6a54d);letter-spacing:.01em;padding-right:2px;font-size:12px;font-weight:700}@supports (color:color(display-p3 0 0 0)){.summary-name{color:var(--gold,color(display-p3 .808073 .654274 .358094))}}@supports (color:lab(0% 0 0)){.summary-name{color:var(--gold,lab(71.071% 11.7474 51.7651))}}.summary-datetime{font-variant-numeric:tabular-nums;color:var(--text-secondary);align-items:baseline;gap:4px;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-size:11px;display:inline-flex}.summary-time-sep{color:var(--border-strong);opacity:.7;font-family:inherit;font-size:9px}.summary-loc{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:200px;padding-left:2px;font-size:11px;font-style:italic;overflow:hidden}.summary-sep{background:var(--border-strong);opacity:.5;vertical-align:middle;flex-shrink:0;width:1px;height:11px;margin:0 7px;display:inline-block}
13
+ <style>:root{--bg:#010203;--surface:#040609;--surface-2:#0b0d13;--border:#13161d;--border-strong:#242932;--text:#e2e4e9;--text-secondary:#777a80;--gold:#cc9c42;--gold-dim:#7b6540;--gold-glow:rgba(204,156,66,.2);--gold-subtle:rgba(204,156,66,.1);--on-gold:#0d0802;--success:#1da871;--error:#c53443;--radius:10px;--radius-sm:6px;--radius-pill:99px;--shadow:0 4px 20px rgba(0,0,0,.45);--shadow-md:0 8px 40px rgba(0,0,0,.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 0 2px var(--gold-glow), 0 6px 24px rgba(0,0,0,.5);--planet-sun:#e9ab2b;--planet-moon:#abb8d2;--planet-mercury:#37b880;--planet-venus:#de73bd;--planet-mars:#dd4d57;--planet-jupiter:#9886ed;--planet-saturn:#589194;--planet-uranus:#24c1c9;--planet-neptune:#2f8adc;--planet-pluto:#a97cc9;--aspect-conjunction:#ffa94d;--aspect-opposition:#ff6b8a;--aspect-trine:#ffd166;--aspect-square:#ff6b8a;--aspect-sextile:#38bdf8;--color-fire:#ec6d3d;--color-earth:#779e4b;--color-air:#17a9cb;--color-water:#8678c9;--color-cardinal:#d9525a;--color-fixed:#cc9c42;--color-mutable:#1da871}@supports (color:color(display-p3 0 0 0)){:root{--bg:color(display-p3 .00515318 .00655345 .0110262);--surface:color(display-p3 .0181758 .0222118 .0344746);--surface-2:color(display-p3 .0438795 .0516065 .0708656);--border:color(display-p3 .0763929 .0859556 .109705);--border-strong:color(display-p3 .146313 .159736 .192938);--text:color(display-p3 .889546 .895785 .910689);--text-secondary:color(display-p3 .470023 .47923 .50135);--gold:color(display-p3 .76996 .617341 .321369);--gold-dim:color(display-p3 .469305 .400291 .270966);--gold-glow:color(display-p3 .76996 .617341 .321369/.2);--gold-subtle:color(display-p3 .76996 .617341 .321369/.1);--on-gold:color(display-p3 .0492866 .0328715 .0111297);--success:color(display-p3 .313719 .651039 .459895);--error:color(display-p3 .710345 .252818 .279408);--shadow:0 4px 20px color(display-p3 0 0 0/.45);--shadow-md:0 8px 40px color(display-p3 0 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 0 2px var(--gold-glow), 0 6px 24px color(display-p3 0 0 0/.5);--planet-sun:color(display-p3 .877131 .680603 .28424);--planet-moon:color(display-p3 .679472 .718322 .813586);--planet-mercury:color(display-p3 .376022 .713332 .518194);--planet-venus:color(display-p3 .815343 .471375 .72873);--planet-mars:color(display-p3 .803557 .340931 .357065);--planet-jupiter:color(display-p3 .584642 .526796 .904819);--planet-saturn:color(display-p3 .398313 .564522 .578019);--planet-uranus:color(display-p3 .364235 .746318 .77845);--planet-neptune:color(display-p3 .290256 .532943 .838196);--planet-pluto:color(display-p3 .635092 .494812 .769187);--color-fire:color(display-p3 .864679 .454605 .289251);--color-earth:color(display-p3 .496575 .613452 .334223);--color-air:color(display-p3 .308318 .651825 .781829);--color-water:color(display-p3 .515326 .47381 .767317);--color-cardinal:color(display-p3 .790049 .355864 .367143);--color-fixed:color(display-p3 .76996 .617341 .321369);--color-mutable:color(display-p3 .313719 .651039 .459895)}}@supports (color:lab(0% 0 0)){:root{--bg:lab(.455387% .00626594 -.517511);--surface:lab(1.54195% -.000223517 -1.4246);--surface-2:lab(3.66055% -.0193194 -3.00652);--border:lab(7.15581% -.0557452 -5.11242);--border-strong:lab(16.3845% -.109598 -6.65552);--text:lab(90.6942% -.142366 -2.26941);--text-secondary:lab(51.2352% -.205308 -3.76425);--gold:lab(67.5798% 11.9379 52.333);--gold-dim:lab(44.394% 5.21132 24.4453);--gold-glow:lab(67.5798% 11.9379 52.333/.2);--gold-subtle:lab(67.5798% 11.9379 52.333/.1);--on-gold:lab(2.4863% .883393 2.81807);--success:lab(61.2436% -46.7762 18.3644);--error:lab(45.8893% 57.7361 27.393);--shadow:0 4px 20px lab(0% 0 0/.45);--shadow-md:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 0 2px var(--gold-glow), 0 6px 24px lab(0% 0 0/.5);--planet-sun:lab(74.5017% 15.8158 68.8514);--planet-moon:lab(74.277% -.405699 -14.8565);--planet-mercury:lab(67.0478% -46.5952 18.3141);--planet-venus:lab(62.9358% 49.4917 -19.8999);--planet-mars:lab(54.0218% 57.6814 26.7913);--planet-jupiter:lab(60.9189% 25.1968 -50.641);--planet-saturn:lab(56.5081% -18.8848 -7.81488);--planet-uranus:lab(71.0008% -37.5682 -15.4301);--planet-neptune:lab(55.2086% -4.94954 -50.4575);--planet-pluto:lab(58.8593% 28.4679 -33.3653);--color-fire:lab(61.5466% 48.3829 50.2676);--color-earth:lab(60.647% -24.5491 38.2386);--color-air:lab(63.473% -27.315 -28.2614);--color-water:lab(54.4132% 19.4196 -40.6625);--color-cardinal:lab(54.1324% 54.4527 25.0799);--color-fixed:lab(67.5798% 11.9379 52.333);--color-mutable:lab(61.2436% -46.7762 18.3644)}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;height:100%}body{background:var(--bg);color:var(--text);background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.035'/%3E%3C/svg%3E");font-family:Geist,Space Grotesk,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:1.5;overflow-x:hidden}#app{flex-direction:column;display:flex;position:relative}#loading-state{color:var(--text-secondary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:14px;display:flex}#loading-state[hidden]{display:none}#loading-state p{letter-spacing:.05em;text-transform:uppercase;font-size:12px}.spinner{border:2px solid var(--border-strong);border-top-color:var(--gold);border-radius:50%;width:32px;height:32px;animation:1.1s cubic-bezier(.4,0,.6,1) infinite spin}@keyframes spin{to{transform:rotate(360deg)}}#chart-container{aspect-ratio:1;z-index:0;justify-content:center;align-items:center;width:100%;max-height:520px;padding:8px;display:flex;position:relative;overflow:hidden}#chart-container[hidden]{display:none}#chart-container svg{-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;height:100%;display:block;overflow:hidden}.info-panel,.overview-tbl td{-webkit-user-select:text;-moz-user-select:text;user-select:text}#chart-info{background:var(--surface);border-top:1px solid var(--border);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:5px;padding:6px 12px;display:flex}#chart-info[hidden]{display:none!important}.info-chip{color:var(--text-secondary);border-radius:var(--radius-pill);white-space:nowrap;letter-spacing:.03em;background:#13161c;background:color(display-p3 .0777944 .086043 .106387);background:lab(7.16788% -.0827834 -4.39059);align-items:center;gap:3px;padding:2px 8px;font-size:10px;font-weight:500;line-height:1.6;display:inline-flex}.info-chip.sect{color:var(--gold);background:var(--gold-subtle);font-weight:600}.hit-region{cursor:pointer;fill:transparent;stroke:transparent;transition:fill .15s,stroke .15s,opacity .2s}.hit-region:hover{fill:var(--gold-subtle);stroke:var(--gold-dim);stroke-width:1px;stroke-opacity:.5}.hit-region.planet-hit{rx:12px;ry:12px}.hit-region.planet-hit:not(.dim):hover{filter:drop-shadow(0 0 6px var(--gold-glow))}.hit-region:focus-visible{outline:2px solid var(--gold);outline-offset:2px;fill:var(--gold-subtle)}.hit-region.dim{opacity:.12}.hit-region.aspect-hit{stroke-width:13px}.hit-region.sign-hit:hover{fill:rgba(204,156,66,.06);fill:color(display-p3 .76996 .617341 .321369/.06);fill:lab(67.5798% 11.9379 52.333/.06);stroke:none}.info-panel{background:var(--surface-2);border:1px solid var(--border-strong);width:100%;box-shadow:0 8px 40px rgba(0,0,0,.6), 0 0 0 1px var(--border-strong);opacity:0;pointer-events:none;z-index:2;border-radius:10px;max-height:0;padding:0 16px;transition:max-height .26s cubic-bezier(.16,1,.3,1),opacity .2s,padding .2s;position:relative;overflow:hidden}@supports (color:color(display-p3 0 0 0)){.info-panel{box-shadow:0 8px 40px color(display-p3 0 0 0/.6), 0 0 0 1px var(--border-strong)}}@supports (color:lab(0% 0 0)){.info-panel{box-shadow:0 8px 40px lab(0% 0 0/.6), 0 0 0 1px var(--border-strong)}}.info-panel:before{content:"";background:var(--border-strong);border-radius:2px;flex-shrink:0;width:36px;height:4px;margin:0 auto 10px;display:block}.info-panel.visible{opacity:1;pointer-events:all;max-height:520px;padding:14px 16px 12px}.info-header{align-items:flex-start;gap:10px;margin-bottom:12px;display:flex}.info-glyph{text-align:center;flex-shrink:0;width:34px;font-size:28px;line-height:1}.info-title{color:var(--text);flex:1;font-size:13px;font-weight:700}.info-name-row{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.info-pos{color:var(--text-secondary);margin-top:2px;font-family:JetBrains Mono,Courier New,monospace;font-size:11px;font-weight:400}.retro{color:var(--error);font-style:normal}.info-close{cursor:pointer;color:var(--text-secondary);background:0 0;border:none;border-radius:4px;flex-shrink:0;padding:2px 4px;font-size:15px;line-height:1;transition:color .12s}.info-close:hover{color:var(--text)}.aspects-title{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);margin-bottom:6px;font-size:10px;font-weight:700}.aspects-list{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex-direction:column;gap:4px;max-height:140px;display:flex;overflow-y:auto}.aspects-list::-webkit-scrollbar{width:3px}.aspects-list::-webkit-scrollbar-track{background:0 0}.aspects-list::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:3px}.aspect-row{align-items:center;gap:7px;padding:3px 0;font-size:12px;display:flex}.aspect-dot{border-radius:50%;flex-shrink:0;width:7px;height:7px}.aspect-sym{text-align:center;flex-shrink:0;width:16px;font-size:14px}.aspect-other{color:var(--text);flex:1}.aspect-meta{color:var(--text-secondary);white-space:nowrap;font-family:JetBrains Mono,monospace;font-size:11px}.no-aspects{color:var(--text-secondary);padding:4px 0;font-size:11px;font-style:italic}.info-hint{color:var(--gold-dim);letter-spacing:.03em;text-align:center;margin-top:10px;font-size:10px}.ask-claude-btn{border-radius:var(--radius-sm);width:100%;color:var(--gold);letter-spacing:.04em;cursor:pointer;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);justify-content:center;align-items:center;gap:6px;margin-top:12px;padding:9px 16px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:12px;font-weight:600;transition:background .16s,border-color .16s,box-shadow .16s;display:flex}.ask-claude-btn:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65);box-shadow:0 0 0 3px rgba(204,156,66,.12);box-shadow:0 0 0 3px color(display-p3 .76996 .617341 .321369/.12);box-shadow:0 0 0 3px lab(67.5798% 11.9379 52.333/.12)}.ask-claude-btn:disabled{opacity:.5;cursor:not-allowed}.ask-claude-btn.sending{color:var(--gold-dim);opacity:.8;cursor:wait;pointer-events:none;background:rgba(204,156,66,.08);background:color(display-p3 .76996 .617341 .321369/.08);background:lab(67.5798% 11.9379 52.333/.08);border-color:rgba(204,156,66,.25);border-color:color(display-p3 .76996 .617341 .321369/.25);border-color:lab(67.5798% 11.9379 52.333/.25)}.ask-claude-btn.sent{color:var(--success);pointer-events:none;background:rgba(29,168,113,.15);background:color(display-p3 .313719 .651039 .459895/.15);background:lab(61.2436% -46.7762 18.3644/.15);border-color:rgba(29,168,113,.5);border-color:color(display-p3 .313719 .651039 .459895/.5);border-color:lab(61.2436% -46.7762 18.3644/.5)}.ask-claude-btn.error{color:var(--error);background:rgba(197,52,67,.15);background:color(display-p3 .710345 .252818 .279408/.15);background:lab(45.8893% 57.7361 27.393/.15);border-color:rgba(197,52,67,.5);border-color:color(display-p3 .710345 .252818 .279408/.5);border-color:lab(45.8893% 57.7361 27.393/.5)}.chart-status{min-height:0;max-height:0;color:var(--gold);letter-spacing:.04em;opacity:0;background:var(--surface);border-top:1px solid var(--border);padding:0 14px;font-size:11px;font-weight:500;transition:max-height .24s cubic-bezier(.16,1,.3,1),padding .24s cubic-bezier(.16,1,.3,1),opacity .24s;overflow:hidden}.chart-status[data-active]{opacity:1;max-height:32px;padding:6px 14px}.aspect-pair-row{justify-content:space-between;align-items:center;gap:8px;padding:6px 0;display:flex}.aspect-pair-planet{flex:1;align-items:center;gap:6px;display:flex}.aspect-pair-glyph{text-align:center;flex-shrink:0;width:24px;font-size:18px;line-height:1}.aspect-pair-name{color:var(--text);font-size:12px;font-weight:600}.aspect-pair-pos{color:var(--text-secondary);margin-top:1px;font-family:JetBrains Mono,monospace;font-size:10px}.aspect-pair-sym{text-align:center;flex-shrink:0;width:24px;font-size:20px}.pattern-ask-claude-btn{border-radius:var(--radius-pill);color:var(--gold);letter-spacing:.04em;cursor:pointer;background:rgba(204,156,66,.1);background:color(display-p3 .76996 .617341 .321369/.1);background:lab(67.5798% 11.9379 52.333/.1);border:1px solid rgba(204,156,66,.35);border:1px solid color(display-p3 .76996 .617341 .321369/.35);border:1px solid lab(67.5798% 11.9379 52.333/.35);flex-shrink:0;margin-left:6px;padding:3px 10px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:10px;font-weight:600;transition:background .15s,border-color .15s,box-shadow .15s}.pattern-ask-claude-btn:hover{background:rgba(204,156,66,.18);background:color(display-p3 .76996 .617341 .321369/.18);background:lab(67.5798% 11.9379 52.333/.18);border-color:rgba(204,156,66,.6);border-color:color(display-p3 .76996 .617341 .321369/.6);border-color:lab(67.5798% 11.9379 52.333/.6);box-shadow:0 0 0 2px rgba(204,156,66,.1);box-shadow:0 0 0 2px color(display-p3 .76996 .617341 .321369/.1);box-shadow:0 0 0 2px lab(67.5798% 11.9379 52.333/.1)}.pattern-ask-claude-btn:disabled{opacity:.45;cursor:default}.dignity-badge{border-radius:var(--radius-pill);white-space:nowrap;align-items:center;gap:3px;padding:1px 7px;font-size:10px;font-weight:600;line-height:1.6;display:inline-flex}.dignity-domicile{color:#4bc98f;color:color(display-p3 .438181 .776546 .577613);color:lab(72.8515% -46.4433 18.272);background:rgba(29,168,113,.15);background:color(display-p3 .313719 .651039 .459895/.15);background:lab(61.2436% -46.7762 18.3644/.15);border:1px solid rgba(29,168,113,.4);border:1px solid color(display-p3 .313719 .651039 .459895/.4);border:1px solid lab(61.2436% -46.7762 18.3644/.4)}.dignity-exaltation{color:#e6b55d;color:color(display-p3 .872302 .716587 .419329);color:lab(76.888% 11.458 50.9953);background:rgba(204,156,66,.15);background:color(display-p3 .76996 .617341 .321369/.15);background:lab(67.5798% 11.9379 52.333/.15);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4)}.dignity-detriment{color:#e17174;color:color(display-p3 .827266 .46738 .465289);color:lab(61.4259% 44.7499 19.9857);background:rgba(197,52,67,.12);background:color(display-p3 .710345 .252818 .279408/.12);background:lab(45.8893% 57.7361 27.393/.12);border:1px solid rgba(197,52,67,.35);border:1px solid color(display-p3 .710345 .252818 .279408/.35);border:1px solid lab(45.8893% 57.7361 27.393/.35)}.dignity-fall{color:#7a869f;color:color(display-p3 .488637 .525017 .615022);color:lab(55.7075% -.240624 -14.7889);background:rgba(88,99,123,.12);background:color(display-p3 .353624 .387759 .473149/.12);background:lab(41.7762% -.0450611 -14.7162/.12);border:1px solid rgba(88,99,123,.3);border:1px solid color(display-p3 .353624 .387759 .473149/.3);border:1px solid lab(41.7762% -.0450611 -14.7162/.3)}#tally-panel{border-top:1px solid var(--border);background:var(--surface);flex-shrink:0;align-items:center;gap:8px;padding:5px 12px;display:flex}.tally-section{flex-direction:column;gap:3px;display:flex}.tally-row{align-items:center;gap:6px;display:flex}.tally-item{white-space:nowrap;letter-spacing:.02em;border-radius:4px;padding:1px 6px;font-size:10px;font-weight:600}.tally-item.fire{color:var(--color-fire);background:rgba(236,109,61,.12);background:color(display-p3 .864679 .454605 .289251/.12);background:lab(61.5466% 48.3829 50.2676/.12)}.tally-item.earth{color:var(--color-earth);background:rgba(119,158,75,.12);background:color(display-p3 .496575 .613452 .334223/.12);background:lab(60.647% -24.5491 38.2386/.12)}.tally-item.air{color:var(--color-air);background:rgba(23,169,203,.12);background:color(display-p3 .308318 .651825 .781829/.12);background:lab(63.473% -27.315 -28.2614/.12)}.tally-item.water{color:var(--color-water);background:rgba(134,120,201,.12);background:color(display-p3 .515326 .47381 .767317/.12);background:lab(54.4132% 19.4196 -40.6625/.12)}.tally-item.cardinal{color:var(--color-cardinal);background:rgba(217,82,90,.1);background:color(display-p3 .790049 .355864 .367143/.1);background:lab(54.1324% 54.4527 25.0799/.1)}.tally-item.fixed{color:var(--color-fixed);background:rgba(204,156,66,.1);background:color(display-p3 .76996 .617341 .321369/.1);background:lab(67.5798% 11.9379 52.333/.1)}.tally-item.mutable{color:var(--color-mutable);background:rgba(29,168,113,.1);background:color(display-p3 .313719 .651039 .459895/.1);background:lab(61.2436% -46.7762 18.3644/.1)}.tally-bar-row{padding:2px 0}.tally-bar{background:var(--border);border-radius:2px;width:96px;height:3px;display:flex;overflow:hidden}.tally-bar-fill{height:100%;transition:width .5s cubic-bezier(.16,1,.3,1)}.tally-bar-fill.fire{background:var(--color-fire)}.tally-bar-fill.earth{background:var(--color-earth)}.tally-bar-fill.air{background:var(--color-air)}.tally-bar-fill.water{background:var(--color-water)}.tally-divider{background:var(--border-strong);flex-shrink:0;width:1px;height:26px}.tally-item[data-interactive]{cursor:pointer;transition:opacity .14s,box-shadow .14s,background .14s}.tally-item[data-interactive]:hover,.tally-item[data-interactive].active{opacity:1;box-shadow:0 0 0 2px}.tally-planets{flex-wrap:wrap;gap:3px;padding:2px 0 0;display:flex}.tally-planet-chip{color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:rgba(255,255,255,.05);background:color(display-p3 1 1 1/.05);background:lab(100% 0 0/.05);border-radius:3px;padding:0 4px;font-size:9px;font-weight:500;transition:color .12s,background .12s}.tally-planet-chip:hover{color:var(--gold);background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12)}#dignity-panel{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:6px;padding:4px 12px;display:flex}.dignity-chip{cursor:pointer;white-space:nowrap;border-radius:4px;align-items:center;gap:3px;padding:1px 7px;font-size:10px;font-weight:600;transition:opacity .14s,box-shadow .14s;display:inline-flex}.dignity-chip:hover{opacity:1;box-shadow:0 0 0 2px}.dignity-chip.active{box-shadow:0 0 0 2px}#overview-table{border-top:1px solid var(--border);background:var(--surface);flex-shrink:0}.overview-header{align-items:center;display:flex}.overview-header .overview-toggle{flex:auto;width:auto}.overview-copy{border:1px solid var(--border);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em;border-radius:var(--radius-sm,6px);cursor:pointer;background:0 0;flex-shrink:0;margin-right:8px;padding:3px 10px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:10px;font-weight:700;transition:color .14s,border-color .14s}.overview-copy:hover,.overview-copy.copied{color:var(--gold);border-color:var(--gold)}.overview-toggle{width:100%;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.1em;cursor:pointer;background:0 0;border:none;align-items:center;gap:6px;padding:6px 12px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:10px;font-weight:700;transition:color .14s;display:flex}.overview-toggle:hover{color:var(--gold)}.overview-chevron{font-size:8px;transition:transform .2s}.overview-toggle[aria-expanded=true] .overview-chevron{transform:rotate(90deg)}.overview-body{grid-template-rows:0fr;transition:grid-template-rows .28s cubic-bezier(.16,1,.3,1);display:grid;overflow:hidden}.overview-body>*{min-height:0}.overview-body.open{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;grid-template-rows:1fr;max-height:300px;overflow-x:hidden;overflow-y:auto}.overview-tbl{border-collapse:collapse;width:100%;font-size:11px}.overview-tbl th{text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary);text-align:left;border-bottom:1px solid var(--border);background:var(--surface);padding:3px 8px;font-size:9px;font-weight:700;position:-webkit-sticky;position:sticky;top:0}.overview-tbl td{color:var(--text);border-bottom:1px solid rgba(255,255,255,.04);border-bottom:1px solid color(display-p3 1 1 1/.04);border-bottom:1px solid lab(100% 0 0/.04);padding:4px 8px}.overview-tbl tr{cursor:pointer;transition:background .12s}.overview-tbl tbody tr:hover{background:rgba(204,156,66,.06);background:color(display-p3 .76996 .617341 .321369/.06);background:lab(67.5798% 11.9379 52.333/.06)}.overview-tbl tbody tr.active-row{background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12)}.overview-tbl tbody tr.extended-row{opacity:.72}.overview-tbl tbody tr.extended-row td:first-child:after{content:" ·";color:var(--text-secondary);font-size:8px}.overview-tbl .planet-sym{text-align:center;width:20px;font-family:serif;font-size:14px;display:inline-block}.overview-tbl .retro-mark{color:#e05252;margin-left:2px;font-size:9px}#patterns-strip{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:5px;padding:5px 12px;display:flex}.patterns-label{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);white-space:nowrap;margin-right:2px;font-size:9px;font-weight:700}.pattern-pill{border-radius:var(--radius-pill);cursor:pointer;white-space:nowrap;opacity:.75;background:0 0;border:1px solid;align-items:center;gap:4px;padding:5px 9px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:10px;font-weight:600;transition:opacity .14s,box-shadow .14s;display:inline-flex}.pattern-pill:hover{opacity:1;box-shadow:0 0 0 2px currentColor / .2}.pattern-pill.active{color:#010203;color:color(display-p3 .00515318 .00655345 .0110262);color:lab(.455387% .00626594 -.517511);opacity:1;border-color:transparent;box-shadow:0 2px 10px rgba(0,0,0,.3);box-shadow:0 2px 10px color(display-p3 0 0 0/.3);box-shadow:0 2px 10px lab(0% 0 0/.3)}#aspect-filter{border-top:1px solid var(--border);scrollbar-width:none;flex-shrink:0;align-items:center;gap:4px;padding:4px 12px;display:flex;overflow-x:auto}#aspect-filter::-webkit-scrollbar{display:none}#aspect-filter[hidden]{display:none!important}#controls-panel{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:6px;padding:8px 12px;display:flex}.controls-label{color:var(--text-secondary);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;margin-right:2px;font-size:10px;font-weight:700}.control-btn{border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:0 0;padding:6px 10px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:11px;transition:background .12s,color .12s,border-color .12s}.control-btn:hover{background:var(--gold-subtle);color:var(--gold);border-color:rgba(204,156,66,.4);border-color:color(display-p3 .76996 .617341 .321369/.4);border-color:lab(67.5798% 11.9379 52.333/.4)}.control-btn.active{color:var(--gold);background:rgba(204,156,66,.18);background:color(display-p3 .76996 .617341 .321369/.18);background:lab(67.5798% 11.9379 52.333/.18);border-color:rgba(204,156,66,.6);border-color:color(display-p3 .76996 .617341 .321369/.6);border-color:lab(67.5798% 11.9379 52.333/.6);font-weight:600}.controls-divider{background:var(--border-strong);flex-shrink:0;width:1px;height:18px;margin:0 4px}.error-state{text-align:center;color:var(--text-secondary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:24px;display:flex}.error-state .error-icon{opacity:.6;margin-bottom:4px;font-size:28px}.error-retry-btn{border:1px solid var(--border,rgba(128,128,160,.3));color:var(--gold,var(--accent-warm,var(--text,inherit)));font:inherit;letter-spacing:.02em;cursor:pointer;background:0 0;border-radius:999px;margin-top:4px;padding:7px 20px;font-size:11px;font-weight:600;transition:background .18s,border-color .18s}.error-retry-btn:hover{background:rgba(128,128,160,.12)}.info-drawer{background:var(--surface-2,#080b11);border:1px solid var(--border-strong,#242933);width:100%;box-shadow:0 8px 40px rgba(0,0,0,.65), 0 0 0 1px var(--border-strong,#242933);opacity:0;pointer-events:none;border-radius:10px;max-height:0;padding:14px 16px 12px;transition:max-height .26s cubic-bezier(.16,1,.3,1),opacity .2s,padding .2s;position:relative;overflow:hidden}@supports (color:color(display-p3 0 0 0)){.info-drawer{background:var(--surface-2,color(display-p3 .0345774 .0431759 .0653236));border:1px solid var(--border-strong,color(display-p3 .144788 .159634 .196542));box-shadow:0 8px 40px color(display-p3 0 0 0/.65), 0 0 0 1px var(--border-strong,color(display-p3 .144788 .159634 .196542))}}@supports (color:lab(0% 0 0)){.info-drawer{background:var(--surface-2,lab(3.00584% .0228807 -3.15676));border:1px solid var(--border-strong,lab(16.3712% -.0768155 -7.37782));box-shadow:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong,lab(16.3712% -.0768155 -7.37782))}}.info-drawer:before{content:"";background:var(--border-strong,#242933);border-radius:2px;flex-shrink:0;width:36px;height:4px;margin:0 auto 10px;display:block}@supports (color:color(display-p3 0 0 0)){.info-drawer:before{background:var(--border-strong,color(display-p3 .144788 .159634 .196542))}}@supports (color:lab(0% 0 0)){.info-drawer:before{background:var(--border-strong,lab(16.3712% -.0768155 -7.37782))}}.info-drawer.open{opacity:1;pointer-events:all;max-height:500px;padding:14px 16px 12px}.hd-action-bar{z-index:2;background:var(--bg);flex-wrap:wrap;gap:8px;padding:10px 16px 6px;display:flex;position:relative}.action-btn{border:1px solid var(--gold-glow);background:var(--gold-subtle);color:var(--gold);letter-spacing:.02em;cursor:pointer;white-space:nowrap;border-radius:8px;align-items:center;gap:6px;padding:7px 16px;font-size:12px;font-weight:600;transition:background .2s,border-color .2s;display:inline-flex}.action-btn:hover{background:rgba(204,156,66,.15);background:color(display-p3 .76996 .617341 .321369/.15);background:lab(67.5798% 11.9379 52.333/.15);border-color:rgba(204,156,66,.45);border-color:color(display-p3 .76996 .617341 .321369/.45);border-color:lab(67.5798% 11.9379 52.333/.45)}.action-btn:active{background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2)}.action-btn--primary{background:rgba(204,156,66,.18);background:color(display-p3 .76996 .617341 .321369/.18);background:lab(67.5798% 11.9379 52.333/.18);border-color:rgba(204,156,66,.5);border-color:color(display-p3 .76996 .617341 .321369/.5);border-color:lab(67.5798% 11.9379 52.333/.5)}.action-btn--primary:hover{background:rgba(204,156,66,.25);background:color(display-p3 .76996 .617341 .321369/.25);background:lab(67.5798% 11.9379 52.333/.25);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65)}.pan-zoom-controls{z-index:800;flex-direction:column;gap:6px;display:flex;position:absolute;bottom:12px;right:12px}.pan-zoom-controls[hidden]{display:none!important}.pan-btn{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);border-radius:var(--radius-sm);cursor:pointer;width:40px;height:40px;box-shadow:var(--shadow-md);justify-content:center;align-items:center;font-family:inherit;font-size:18px;transition:all .15s;display:flex}.pan-btn.reset{width:auto;padding:0 10px;font-size:11px;font-weight:500}.pan-btn:hover{background:var(--surface);border-color:var(--gold-dim);color:var(--gold)}.pan-btn:active{transform:scale(.95)}.pan-btn--fullscreen{width:40px;height:40px}body.is-fullscreen{height:100vh;overflow:hidden}body.is-fullscreen #app{flex-direction:column;gap:0;width:100vw;height:100vh;padding:0;display:flex;overflow:hidden}body.is-fullscreen #chart-container{flex:1;justify-content:center;align-items:center;min-height:0;padding:16px 24px 0;display:flex;overflow:hidden}body.is-fullscreen #chart-container>svg{width:auto;max-width:100%;height:100%;max-height:100%}body.is-fullscreen #chart-status{display:none}body.is-fullscreen #loading-state{flex:1;height:auto;min-height:0}body.is-fullscreen .pan-zoom-controls{top:16px;right:16px}#fs-bottom-bar{border-top:1px solid var(--border);background:#020306;background:color(display-p3 .0100648 .0127997 .0215356);background:lab(.889429% .0122339 -1.01076);flex-shrink:0;grid-template-rows:1fr;grid-template-columns:220px 1fr 220px;height:240px;min-height:180px;max-height:280px;display:grid}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex-direction:column;gap:4px;padding:10px 14px 12px;display:flex;overflow-x:hidden;overflow-y:auto}#fs-bottom-bar [data-column=left]{border-right:1px solid var(--border)}#fs-bottom-bar [data-column=center]{pointer-events:none}#fs-bottom-bar [data-column=right]{border-left:1px solid var(--border);overflow-y:auto}#fs-bottom-bar [data-column]>*+*{border-top:1px solid var(--border);margin-top:4px;padding-top:8px}#fs-bottom-bar .cw-action-bar,#fs-bottom-bar .hd-action-bar{flex-direction:column;padding:8px 0 0}#fs-bottom-bar .action-btn{justify-content:center;width:100%}.cancel-toast{background:var(--surface-2,#1e1e2e);border:1px solid var(--border-strong,#444);color:var(--text-secondary);border-radius:var(--radius-sm,6px);opacity:0;z-index:9999;pointer-events:none;box-shadow:var(--shadow-md,0 4px 12px rgba(0,0,0,.3));padding:8px 16px;font-family:inherit;font-size:12px;transition:opacity .3s,transform .3s;position:fixed;bottom:20px;left:50%;transform:translate(-50%)translateY(20px)}.cancel-toast.visible{opacity:1;transform:translate(-50%)translateY(0)}.oe-loader{width:64px;height:64px;stroke:var(--gold);stroke-width:2px;fill:none;stroke-dasharray:200;stroke-dashoffset:200px;filter:drop-shadow(0 0 4px var(--gold-glow));animation:2.5s cubic-bezier(.16,1,.3,1) infinite oe-draw}@keyframes oe-draw{0%{stroke-dashoffset:200px;stroke-opacity:.1}50%{stroke-dashoffset:0;stroke-opacity:1;filter:drop-shadow(0 0 8px var(--gold))}to{stroke-dashoffset:-200px;stroke-opacity:.1}}#aspect-filter{padding:0}.asp-panel{flex-wrap:wrap;align-items:center;gap:6px 16px;padding:6px 0;display:flex}.asp-section{align-items:center;gap:6px;display:flex}.asp-section-label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);white-space:nowrap;font-size:10px;font-weight:700}.aspect-toggle-btn,.orb-preset-btn{border:1.5px solid var(--border-strong);color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border-radius:20px;padding:4px 10px;font-size:11px;font-weight:600;transition:background .15s,color .15s,border-color .15s}.aspect-toggle-btn:hover,.orb-preset-btn:hover{border-color:var(--gold-dim);color:var(--text)}.aspect-toggle-btn.active{background:var(--gold);border-color:var(--gold);color:var(--on-gold)}.orb-preset-btn.active{background:var(--surface-2);border-color:var(--gold);color:var(--gold)}.glyph-legend{margin-top:8px;font-size:11px}.glyph-legend>summary{cursor:pointer;border:1px solid var(--border);color:var(--text-secondary);-webkit-user-select:none;-moz-user-select:none;user-select:none;border-radius:999px;align-items:center;gap:5px;padding:4px 10px;list-style:none;display:inline-flex}.glyph-legend>summary::-webkit-details-marker{display:none}.glyph-legend>summary:hover{color:var(--text);border-color:var(--gold-dim)}.glyph-legend[open]>summary{color:var(--text)}.glyph-legend .legend-spark{color:var(--gold)}.legend-body{flex-direction:column;gap:10px;padding:10px 2px 2px;display:flex}.legend-group{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.legend-group-title{text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary);width:100%;font-size:9px}.legend-item{color:var(--text-secondary);align-items:center;gap:4px;display:inline-flex}.legend-glyph{color:var(--text);text-align:center;min-width:16px;font-size:14px}.chart-layer{opacity:1;transform-origin:310px 310px;animation:.5s cubic-bezier(.16,1,.3,1) both svgLayerAssemble;animation-delay:calc(var(--layer-index,0) * 80ms);transform:scale(1)}@keyframes svgLayerAssemble{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.tooltip{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;border-radius:var(--radius,10px);pointer-events:none;z-index:1000;opacity:0;background:rgba(12,12,22,.97);border:1px solid rgba(60,58,80,.8);max-width:240px;padding:8px 12px;font-size:12px;transition:opacity .12s;position:fixed;box-shadow:0 8px 32px rgba(0,0,0,.55),inset 0 .5px rgba(255,255,255,.04)}.tooltip.visible{opacity:1}.tooltip-title{color:#e8e8f4;margin-bottom:2px;font-weight:700}.tooltip-detail{color:#9090b0;line-height:1.4}.tooltip-hint{color:#a08840;letter-spacing:.03em;margin-top:4px;font-size:10px}:root[data-theme=light]{--aspect-conjunction:#b45d00;--aspect-opposition:#c9184f;--aspect-trine:#8f6a00;--aspect-square:#c9184f;--aspect-sextile:#0c6e94;--bg:#f7f5f1;--surface:#fff;--surface-2:#f1eee9;--border:#dbd7d0;--border-strong:#bdb6ac;--text:#101215;--text-secondary:#4f5359;--gold:#825700;--gold-dim:#6d4b00;--gold-glow:rgba(130,87,0,.25);--gold-subtle:rgba(130,87,0,.1);--on-gold:#fcf4e6;--success:#007145;--error:#b1002b;--shadow:0 4px 20px rgba(0,0,0,.1);--shadow-md:0 8px 32px rgba(0,0,0,.14), 0 0 0 1px var(--border-strong)}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light]{--bg:color(display-p3 .967616 .959866 .945308);--surface:color(display-p3 1 1 1);--surface-2:color(display-p3 .943798 .93351 .914195);--border:color(display-p3 .855616 .842987 .819292);--border-strong:color(display-p3 .73602 .716348 .67952);--text:color(display-p3 .0633107 .0687189 .081922);--text-secondary:color(display-p3 .313002 .323251 .348016);--gold:color(display-p3 .49809 .342102 -.0880434);--gold-dim:color(display-p3 .414099 .299019 .034461);--gold-glow:color(display-p3 .49809 .342102 -.0880434/.25);--gold-subtle:color(display-p3 .49809 .342102 -.0880434/.1);--on-gold:color(display-p3 .983924 .957955 .909341);--success:color(display-p3 -.0793084 .456092 .255685);--error:color(display-p3 .642198 .101724 .18242);--shadow:0 4px 20px color(display-p3 0 0 0/.1);--shadow-md:0 8px 32px color(display-p3 0 0 0/.14), 0 0 0 1px var(--border-strong)}}@supports (color:lab(0% 0 0)){:root[data-theme=light]{--bg:lab(96.5376% .34079 2.2589);--surface:lab(100% 0 0);--surface-2:lab(94.2232% .459701 3.01524);--border:lab(86.1085% .583261 3.77473);--border-strong:lab(74.5232% .975847 6.06879);--text:lab(5.23809% -.0738502 -2.43738);--text-secondary:lab(34.9842% -.210062 -4.49808);--gold:lab(40.7346% 15.7445 75.3139);--gold-dim:lab(35.0077% 11.3181 50.9422);--gold-glow:lab(40.7346% 15.7445 75.3139/.25);--gold-subtle:lab(40.7346% 15.7445 75.3139/.1);--on-gold:lab(96.574% 1.22041 7.58642);--success:lab(41.7514% -55.3249 21.5039);--error:lab(37.5238% 64.2774 32.6097);--shadow:0 4px 20px lab(0% 0 0/.1);--shadow-md:0 8px 32px lab(0% 0 0/.14), 0 0 0 1px var(--border-strong)}}:root[data-theme=light],:root[data-theme=light] body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background-image:none}:root[data-theme=light] .hd-action-bar{background:var(--bg)}:root[data-theme=light] .info-chip{background:var(--surface-2);color:var(--text-secondary);border:1px solid var(--border)}:root[data-theme=light] .info-chip.sect{background:var(--gold-subtle);color:var(--gold);border-color:rgba(141,95,0,.3);border-color:color(display-p3 .542549 .371783 -.107551/.3);border-color:lab(44.1995% 17.0662 84.3373/.3)}:root[data-theme=light] .tooltip{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--text);border-color:var(--border-strong);background:rgba(255,255,255,.96);background:color(display-p3 1 1 1/.96);background:lab(100% 0 0/.96);box-shadow:0 8px 32px rgba(0,0,0,.18),inset 0 .5px rgba(255,255,255,.6);box-shadow:0 8px 32px color(display-p3 0 0 0/.18),inset 0 .5px color(display-p3 1 1 1/.6);box-shadow:0 8px 32px lab(0% 0 0/.18),inset 0 .5px lab(100% 0 0/.6)}:root[data-theme=light] .tooltip-title{color:var(--text)}:root[data-theme=light] .tooltip-detail{color:var(--text-secondary)}:root[data-theme=light] .tooltip-hint{color:var(--gold-dim)}:root[data-theme=light] .chart-status{background:rgba(247,245,241,.92);background:color(display-p3 .967616 .959866 .945308/.92);background:lab(96.5376% .34079 2.2589/.92);border-color:rgba(141,95,0,.35);border-color:color(display-p3 .542549 .371783 -.107551/.35);border-color:lab(44.1995% 17.0662 84.3373/.35)}:root[data-theme=light] .hit-region:hover{fill:rgba(141,95,0,.1);fill:color(display-p3 .542549 .371783 -.107551/.1);fill:lab(44.1995% 17.0662 84.3373/.1);stroke:var(--gold-dim)}:root[data-theme=light] .hit-region.sign-hit:hover{fill:rgba(141,95,0,.07);fill:color(display-p3 .542549 .371783 -.107551/.07);fill:lab(44.1995% 17.0662 84.3373/.07)}:root[data-theme=light] .pan-btn{background:var(--surface)}:root[data-theme=light] .pan-btn:hover{background:var(--surface-2)}:root[data-theme=light] #fs-bottom-bar{background:#f7f5f1;background:color(display-p3 .967616 .959866 .945308);background:lab(96.5376% .34079 2.2589);border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] #fs-bottom-bar [data-column=left],:root[data-theme=light] #fs-bottom-bar [data-column=right]{background:#f1eeea;background:color(display-p3 .941472 .933762 .919279);background:lab(94.2176% .341028 2.25905)}:root[data-theme=light] #fs-bottom-bar [data-column=left]{border-right-color:#caced4;border-right-color:color(display-p3 .796183 .806346 .830691);border-right-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] #fs-bottom-bar [data-column=right]{border-left-color:#caced4;border-left-color:color(display-p3 .796183 .806346 .830691);border-left-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] #fs-bottom-bar [data-column]>*+*{border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}@media (max-width:480px){body,#app{padding:0}#pan-zoom-controls{flex-wrap:wrap;gap:5px}.pan-btn{background:color-mix(in oklab, var(--surface-2) 72%, transparent);-webkit-backdrop-filter:blur(6px);width:32px;min-width:32px;height:32px;min-height:32px;font-size:15px}.pan-btn.reset{width:32px;padding:0;font-size:0}.pan-btn.reset:before{content:"⟲";font-size:15px}#date-controls,.controls,.control-row{flex-wrap:wrap;gap:8px}#fs-bottom-bar{flex-wrap:wrap}#fs-bottom-bar [data-column]{border:0;flex:100%}}.param-controls{background:var(--surface);border-top:1px solid var(--border);flex-shrink:0;padding:6px 12px}.param-controls-grid{flex-wrap:wrap;align-items:center;gap:6px 10px;display:flex}.param-group{flex-direction:row;align-items:center;gap:6px;display:flex}.param-group label{text-transform:uppercase;color:var(--text-secondary);letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:700}.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);color-scheme:inherit;border-radius:var(--radius-sm);width:120px;height:24px;padding:3px 6px;font-family:inherit;font-size:11px}@media (prefers-reduced-motion:no-preference){.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{transition:border-color .15s}}.param-group input:focus{border-color:var(--gold-dim);outline:none}.loc-searching{border-color:var(--gold-dim)!important}@media (prefers-reduced-motion:no-preference){.loc-searching{animation:1s ease-in-out infinite alternate loc-pulse}}@keyframes loc-pulse{0%{border-color:var(--gold-dim)}to{border-color:rgba(204,156,66,.55);border-color:color(display-p3 .76996 .617341 .321369/.55);border-color:lab(67.5798% 11.9379 52.333/.55)}}.param-group-loc{flex:1;position:relative}.param-group-loc input{width:100%}.loc-suggestions{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius-sm);z-index:100;max-height:200px;margin-top:4px;position:absolute;top:100%;left:0;right:0;overflow-y:auto;box-shadow:0 4px 12px rgba(0,0,0,.35);box-shadow:0 4px 12px color(display-p3 0 0 0/.35);box-shadow:0 4px 12px lab(0% 0 0/.35)}.loc-item{color:var(--text);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid var(--border);padding:8px 10px;font-size:12px;overflow:hidden}.loc-item:last-child{border-bottom:none}@media (prefers-reduced-motion:no-preference){.loc-item{transition:background .1s,color .1s}}.loc-item:hover,.loc-item--active{background:var(--gold-subtle);color:var(--gold)}.loc-status{color:var(--text-secondary);letter-spacing:.01em;padding:8px 10px;font-size:11px;font-style:italic}.loc-status-error{color:#d76a5a;color:color(display-p3 .788241 .439621 .373983);color:lab(58.1265% 42.6447 29.9439);font-style:normal;font-weight:600}.param-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.param-cost-hint{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;font-size:10px}.param-btn-icon{border:1px solid var(--border-strong);color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;background:0 0;justify-content:center;align-items:center;width:24px;height:24px;display:flex}@media (prefers-reduced-motion:no-preference){.param-btn-icon{transition:background .15s,border-color .15s,color .15s}}.param-btn-icon:hover{background:var(--surface-2);color:var(--text);border-color:var(--gold-dim)}.param-btn-primary{color:var(--gold);border-radius:var(--radius-sm);cursor:pointer;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);height:24px;padding:3px 10px;font-family:inherit;font-size:10px;font-weight:600}@media (prefers-reduced-motion:no-preference){.param-btn-primary{transition:background .15s,border-color .15s}}.param-btn-primary:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65)}.param-btn-primary:disabled{opacity:.5;cursor:not-allowed}.param-extra-toggle{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;cursor:pointer;align-items:center;gap:5px;font-size:10px;display:flex}.param-extra-toggle input[type=checkbox]{width:13px;height:13px;accent-color:var(--gold,oklch(72% .12 80));cursor:pointer}.param-extra-toggle input[type=checkbox]:disabled{cursor:not-allowed}.param-extra-toggle input[type=checkbox]:disabled~span{opacity:.5}:root[data-theme=light] .param-group input[type=date],:root[data-theme=light] .param-group input[type=time],:root[data-theme=light] .param-group input[type=text]{border-color:var(--border-strong);color:var(--text);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167638 1.12768)}:root[data-theme=light] .loc-suggestions{border-color:var(--border-strong);background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167638 1.12768)}:root[data-theme=light] .param-btn-primary{background:rgba(160,112,0,.12);background:color(display-p3 .615135 .441554 -.0204711/.12);background:lab(51.2092% 16.2654 78.3504/.12);border-color:rgba(160,112,0,.4);border-color:color(display-p3 .615135 .441554 -.0204711/.4);border-color:lab(51.2092% 16.2654 78.3504/.4)}:root[data-theme=light] .param-btn-primary:hover:not(:disabled){background:rgba(160,112,0,.22);background:color(display-p3 .615135 .441554 -.0204711/.22);background:lab(51.2092% 16.2654 78.3504/.22);border-color:rgba(160,112,0,.65);border-color:color(display-p3 .615135 .441554 -.0204711/.65);border-color:lab(51.2092% 16.2654 78.3504/.65)}.param-summary-bar{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:2px 0;margin-bottom:4px;padding:3px 4px 5px;font-size:10px;line-height:1.3;display:flex}.param-summary-bar[hidden]{display:none}.summary-name{color:var(--gold,#d6a54d);letter-spacing:.01em;padding-right:2px;font-size:12px;font-weight:700}@supports (color:color(display-p3 0 0 0)){.summary-name{color:var(--gold,color(display-p3 .808073 .654274 .358094))}}@supports (color:lab(0% 0 0)){.summary-name{color:var(--gold,lab(71.071% 11.7474 51.7651))}}.summary-datetime{font-variant-numeric:tabular-nums;color:var(--text-secondary);align-items:baseline;gap:4px;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-size:11px;display:inline-flex}.summary-time-sep{color:var(--border-strong);opacity:.7;font-family:inherit;font-size:9px}.summary-loc{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:200px;padding-left:2px;font-size:11px;font-style:italic;overflow:hidden}.summary-sep{background:var(--border-strong);opacity:.5;vertical-align:middle;flex-shrink:0;width:1px;height:11px;margin:0 7px;display:inline-block}
14
14
  /*$vite$:1*/</style>
15
- </head>
16
- <body>
17
- <div id="app">
18
- <div id="loading-state">
19
- <svg class="oe-loader" viewBox="0 0 100 100"><circle cx="50" cy="50" r="45"/></svg>
20
- <p>Mapping the sky at your birth moment…</p>
21
- </div>
22
- <div id="chart-container" hidden>
23
- <div id="pan-zoom-controls" class="pan-zoom-controls" hidden>
24
- <button id="btn-zoom-in" class="pan-btn" aria-label="Zoom in">+</button>
25
- <button id="btn-zoom-out" class="pan-btn" aria-label="Zoom out">-</button>
26
- <button id="btn-reset-view" class="pan-btn reset" aria-label="Reset view">⟲ Reset</button>
27
- </div>
28
- </div>
29
- <div id="chart-info" hidden></div>
30
- <div id="chart-status" class="chart-status"></div>
31
- <!-- Element/Modality tally + Pattern strip share the bottom bar with controls -->
32
- <div id="overview-table" hidden></div>
33
- <div id="info-panel" class="info-panel"></div>
34
- <div id="patterns-strip" hidden></div>
35
- <div id="aspect-filter" hidden></div>
36
- <div id="param-controls-container" hidden></div>
37
- <div id="controls-panel" hidden></div>
38
- <div id="tooltip" class="tooltip" aria-live="polite"></div>
39
- </div>
15
+ </head>
16
+ <body>
17
+ <div id="app">
18
+ <div id="loading-state">
19
+ <svg class="oe-loader" viewBox="0 0 100 100"><circle cx="50" cy="50" r="45"/></svg>
20
+ <p>Mapping the sky at your birth moment…</p>
21
+ </div>
22
+ <div id="chart-container" hidden>
23
+ <div id="pan-zoom-controls" class="pan-zoom-controls" hidden>
24
+ <button id="btn-zoom-in" class="pan-btn" aria-label="Zoom in">+</button>
25
+ <button id="btn-zoom-out" class="pan-btn" aria-label="Zoom out">-</button>
26
+ <button id="btn-reset-view" class="pan-btn reset" aria-label="Reset view">⟲ Reset</button>
27
+ </div>
28
+ </div>
29
+ <div id="chart-info" hidden></div>
30
+ <div id="chart-status" class="chart-status"></div>
31
+ <!-- Element/Modality tally + Pattern strip share the bottom bar with controls -->
32
+ <div id="overview-table" hidden></div>
33
+ <div id="info-panel" class="info-panel"></div>
34
+ <div id="patterns-strip" hidden></div>
35
+ <div id="aspect-filter" hidden></div>
36
+ <div id="param-controls-container" hidden></div>
37
+ <div id="controls-panel" hidden></div>
38
+ <div id="tooltip" class="tooltip" aria-live="polite"></div>
39
+ </div>
40
40
  <script type="module">var e = Object.defineProperty, t = (t2, n2) => {
41
41
  let r2 = {};
42
42
  for (var i2 in t2) e(r2, i2, { get: t2[i2], enumerable: true });
@@ -7690,8 +7690,8 @@ function Cy(e5) {
7690
7690
  vy.ontoolresult = (e5) => {
7691
7691
  var t2;
7692
7692
  let n2 = ny(e5);
7693
- if (qy(), !n2 || !n2.planets) {
7694
- console.error("[ChartWheel] \u274C No chart data found in tool result"), Jy("Chart data could not be parsed from the server response.", Yy);
7693
+ if (Jy(), !n2 || !n2.planets) {
7694
+ console.error("[ChartWheel] \u274C No chart data found in tool result"), Yy("Chart data could not be parsed from the server response.", Xy);
7695
7695
  return;
7696
7696
  }
7697
7697
  if ($ = n2, yy = (t2 = n2.house_system) == null ? "placidus" : t2, !by) {
@@ -7718,9 +7718,9 @@ vy.ontoolresult = (e5) => {
7718
7718
  };
7719
7719
  function wy(e5) {
7720
7720
  var t2, n2, r2, i2, a2, o2, s2;
7721
- ky = null, ly.setAttribute("hidden", ""), uy.removeAttribute("hidden"), _y.removeAttribute("hidden"), py.removeAttribute("hidden"), zv(uy, e5, Ly, Ry, zy, Wy, Sy ? By() : void 0), mv(Cy), Hv(py, yy, Gy), Ty(e5), ty("chart-wheel", uy);
7721
+ Ay = null, ly.setAttribute("hidden", ""), uy.removeAttribute("hidden"), _y.removeAttribute("hidden"), py.removeAttribute("hidden"), zv(uy, e5, Ry, zy, By, Gy, Sy ? Vy() : void 0), mv(Cy), Hv(py, yy, Ky), Ey(e5), ty("chart-wheel", uy);
7722
7722
  let c2 = K_(e5.planets), l2 = (n2 = (r2 = (i2 = ((t2 = e5.houses) == null ? [] : t2)[0]) == null ? void 0 : i2.cusp_lon) == null ? e5.ascendant : r2) == null ? 0 : n2, u2 = (a2 = e5.aspects) == null ? [] : a2;
7723
- c2.length > 0 && Dy(c2, u2), Ay(cv(u2, c2), c2, l2), Fy();
7723
+ c2.length > 0 && Oy(c2, u2), jy(cv(u2, c2), c2, l2), Iy();
7724
7724
  let d2 = document.getElementById("cw-action-bar");
7725
7725
  if (!d2) {
7726
7726
  d2 = document.createElement("div"), d2.id = "cw-action-bar", d2.className = "hd-action-bar";
@@ -7731,9 +7731,12 @@ function wy(e5) {
7731
7731
  (f2 = document.getElementById("app")) == null || f2.prepend(d2);
7732
7732
  }
7733
7733
  }
7734
- d2.innerHTML = '\n <button class="action-btn action-btn--primary" id="cw-interpret-btn">\u2728 Interpret this chart</button>\n <button class="action-btn" id="cw-questions-btn">\u{1F52E} What should I ask?</button>\n ', (o2 = document.getElementById("cw-interpret-btn")) == null || o2.addEventListener("click", () => void Hy()), (s2 = document.getElementById("cw-questions-btn")) == null || s2.addEventListener("click", () => void Uy());
7734
+ d2.innerHTML = '\n <button class="action-btn action-btn--primary" id="cw-interpret-btn">\u2728 Interpret this chart</button>\n <button class="action-btn" id="cw-questions-btn">\u{1F52E} What should I ask?</button>\n ', (o2 = document.getElementById("cw-interpret-btn")) == null || o2.addEventListener("click", () => void Uy()), (s2 = document.getElementById("cw-questions-btn")) == null || s2.addEventListener("click", () => void Wy());
7735
7735
  }
7736
7736
  function Ty(e5) {
7737
+ return String(e5).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
7738
+ }
7739
+ function Ey(e5) {
7737
7740
  var t2, n2, r2, i2, a2, o2, s2, c2, l2, u2;
7738
7741
  if (!dy) return;
7739
7742
  let d2 = (t2 = e5._birth_params) == null ? {} : t2, f2 = (n2 = (r2 = (i2 = d2.datetime) == null ? e5.datetime : i2) == null ? e5.birth_datetime : r2) == null ? "" : n2, p2 = (a2 = (o2 = d2.location) == null ? e5.location : o2) == null ? "" : a2, m2 = (s2 = (c2 = d2.timezone) == null ? e5.timezone : c2) == null ? "" : s2, h2 = (l2 = d2.latitude) == null ? e5.latitude : l2, g2 = (u2 = d2.longitude) == null ? e5.longitude : u2;
@@ -7747,14 +7750,14 @@ function Ty(e5) {
7747
7750
  } catch (e6) {
7748
7751
  }
7749
7752
  let y2 = typeof h2 == "number" && typeof g2 == "number" ? "".concat(Math.abs(h2).toFixed(2), "\xB0").concat(h2 >= 0 ? "N" : "S", ", ").concat(Math.abs(g2).toFixed(2), "\xB0").concat(g2 >= 0 ? "E" : "W") : "", b2 = [];
7750
- if (ee2 && b2.push('<span class="info-chip" title="Birth datetime">\u{1F4C5} '.concat(ee2, "</span>")), p2 && b2.push('<span class="info-chip" title="Birth location">\u{1F4CD} '.concat(p2, "</span>")), y2 && !p2 && b2.push('<span class="info-chip" title="Coordinates">\u{1F4CD} '.concat(y2, "</span>")), m2 && b2.push('<span class="info-chip" title="Timezone">\u{1F550} '.concat(m2, "</span>")), v2 && b2.push('<span class="info-chip sect" title="Sect">'.concat(v2, "</span>")), b2.length === 0) {
7753
+ if (ee2 && b2.push('<span class="info-chip" title="Birth datetime">\u{1F4C5} '.concat(Ty(ee2), "</span>")), p2 && b2.push('<span class="info-chip" title="Birth location">\u{1F4CD} '.concat(Ty(p2), "</span>")), y2 && !p2 && b2.push('<span class="info-chip" title="Coordinates">\u{1F4CD} '.concat(Ty(y2), "</span>")), m2 && b2.push('<span class="info-chip" title="Timezone">\u{1F550} '.concat(Ty(m2), "</span>")), v2 && b2.push('<span class="info-chip sect" title="Sect">'.concat(Ty(v2), "</span>")), b2.length === 0) {
7751
7754
  dy.setAttribute("hidden", "");
7752
7755
  return;
7753
7756
  }
7754
7757
  dy.innerHTML = b2.join(""), dy.removeAttribute("hidden");
7755
7758
  }
7756
- var Ey = /* @__PURE__ */ new Set(["mean_lilith", "lilith", "true_lilith", "ceres", "juno", "vesta", "pallas", "pholus", "vertex", "part_of_fortune", "part of fortune", "eris", "sedna"]);
7757
- function Dy(e5, t2) {
7759
+ var Dy = /* @__PURE__ */ new Set(["mean_lilith", "lilith", "true_lilith", "ceres", "juno", "vesta", "pallas", "pholus", "vertex", "part_of_fortune", "part of fortune", "eris", "sedna"]);
7760
+ function Oy(e5, t2) {
7758
7761
  if (!gy || e5.length === 0) return;
7759
7762
  let n2 = ["sun", "moon", "mercury", "venus", "mars", "jupiter", "saturn", "uranus", "neptune", "pluto", "chiron", "north node", "south node", "true node"], r2 = [...e5].sort((e6, t3) => {
7760
7763
  let r3 = n2.indexOf(e6.name.toLowerCase()), i3 = n2.indexOf(t3.name.toLowerCase());
@@ -7766,7 +7769,7 @@ function Dy(e5, t2) {
7766
7769
  }
7767
7770
  let s2 = (e6) => e6.replace(/(^|\s|_)\w/g, (e7) => e7.toUpperCase()).replace(/_/g, " "), c2 = (e6) => ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"][Math.floor((e6 % 360 + 360) % 360 / 30)], l2 = r2.map((e6) => {
7768
7771
  var t3, n3, r3, a3;
7769
- let o3 = e6.name.toLowerCase(), l3 = (t3 = j_[o3]) == null ? "\u2605" : t3, u3 = (n3 = e6.sign) == null ? c2(e6.longitude) : n3, d3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 1 * 60), p3 = Ey.has(o3), m2 = e6.retrograde ? '<span class="retro-mark">\u211E</span>' : "", h2 = (r3 = i2[o3]) == null ? 0 : r3;
7772
+ let o3 = e6.name.toLowerCase(), l3 = (t3 = j_[o3]) == null ? "\u2605" : t3, u3 = (n3 = e6.sign) == null ? c2(e6.longitude) : n3, d3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 1 * 60), p3 = Dy.has(o3), m2 = e6.retrograde ? '<span class="retro-mark">\u211E</span>' : "", h2 = (r3 = i2[o3]) == null ? 0 : r3;
7770
7773
  return '<tr class="'.concat(p3 ? "extended-row" : "", '" data-planet="').concat(o3, '">\n <td><span class="planet-sym">').concat(l3, "</span> ").concat(s2(e6.name)).concat(m2, "</td>\n <td>").concat(d3, "\xB0 ").concat(u3, " ").concat(String(f3).padStart(2, "0"), "\u2032</td>\n <td>H").concat((a3 = e6.house) == null ? "\u2013" : a3, "</td>\n <td>").concat(h2 > 0 ? h2 : "\u2013", "</td>\n </tr>");
7771
7774
  }).join(""), u2 = "| Body | Sign | Degree | House | Retrograde |\n| --- | --- | --- | --- | --- |\n" + r2.map((e6) => {
7772
7775
  var t3;
@@ -7784,7 +7787,7 @@ function Dy(e5, t2) {
7784
7787
  d2.textContent = "Copy", d2.classList.remove("copied");
7785
7788
  }, 1600);
7786
7789
  } catch (e7) {
7787
- Oy("Copy unavailable");
7790
+ ky("Copy unavailable");
7788
7791
  }
7789
7792
  });
7790
7793
  let f2 = gy.querySelector(".overview-toggle"), p2 = gy.querySelector(".overview-body");
@@ -7803,7 +7806,7 @@ function Dy(e5, t2) {
7803
7806
  let t4 = document.querySelector("svg");
7804
7807
  t4 && (t4.querySelectorAll(".planet-glyph-group").forEach((e7) => {
7805
7808
  var t5;
7806
- let n4 = Ey.has((t5 = e7.dataset.planet) == null ? "" : t5);
7809
+ let n4 = Dy.has((t5 = e7.dataset.planet) == null ? "" : t5);
7807
7810
  e7.style.opacity = n4 ? "0.65" : "1";
7808
7811
  }), e6.classList.remove("active-row"));
7809
7812
  }), e6.addEventListener("click", () => {
@@ -7814,7 +7817,7 @@ function Dy(e5, t2) {
7814
7817
  }));
7815
7818
  });
7816
7819
  }
7817
- function Oy(e5) {
7820
+ function ky(e5) {
7818
7821
  var t2;
7819
7822
  (t2 = document.getElementById("copy-toast")) == null || t2.remove();
7820
7823
  let n2 = document.createElement("div");
@@ -7822,8 +7825,8 @@ function Oy(e5) {
7822
7825
  n2.classList.remove("visible"), setTimeout(() => n2.remove(), 300);
7823
7826
  }, 2500);
7824
7827
  }
7825
- var ky = null;
7826
- function Ay(e5, t2, n2) {
7828
+ var Ay = null;
7829
+ function jy(e5, t2, n2) {
7827
7830
  if (!my) return;
7828
7831
  if (e5.length === 0) {
7829
7832
  my.setAttribute("hidden", ""), my.innerHTML = "";
@@ -7838,10 +7841,10 @@ function Ay(e5, t2, n2) {
7838
7841
  let t3 = document.createElement("button");
7839
7842
  t3.className = "pattern-ask-claude-btn", t3.textContent = "\u2728 Ask Claude", t3.style.display = "none", my.appendChild(t3), t3.addEventListener("click", () => {
7840
7843
  var n3;
7841
- let r3 = ky;
7844
+ let r3 = Ay;
7842
7845
  if (r3 === null) return;
7843
7846
  let i2 = e5[r3];
7844
- t3.disabled = true, t3.textContent = "\u23F3 Sending\u2026", Wy({ type: "pattern", data: { name: i2.name, planets: i2.planets, description: (n3 = i2.description) == null ? "" : n3 } }).then(() => {
7847
+ t3.disabled = true, t3.textContent = "\u23F3 Sending\u2026", Gy({ type: "pattern", data: { name: i2.name, planets: i2.planets, description: (n3 = i2.description) == null ? "" : n3 } }).then(() => {
7845
7848
  t3.textContent = "\u2713 Sent", setTimeout(() => {
7846
7849
  t3.textContent = "\u2728 Ask Claude", t3.disabled = false;
7847
7850
  }, 2500);
@@ -7854,12 +7857,12 @@ function Ay(e5, t2, n2) {
7854
7857
  r3.addEventListener("click", () => {
7855
7858
  var i2;
7856
7859
  let a2 = Number(r3.dataset.idx), o2 = e5[a2], s2 = (i2 = r3.dataset.color) == null ? "#888" : i2, c2 = my.querySelector(".pattern-ask-claude-btn");
7857
- ky === a2 ? (ky = null, Mv(), c2 && (c2.style.display = "none"), my.querySelectorAll(".pattern-pill").forEach((e6) => {
7860
+ Ay === a2 ? (Ay = null, Mv(), c2 && (c2.style.display = "none"), my.querySelectorAll(".pattern-pill").forEach((e6) => {
7858
7861
  var t3;
7859
7862
  e6.classList.remove("active");
7860
7863
  let n3 = (t3 = e6.dataset.color) == null ? "#888" : t3;
7861
7864
  e6.style.color = n3, e6.style.borderColor = n3, e6.style.background = "transparent";
7862
- })) : (ky = a2, my.querySelectorAll(".pattern-pill").forEach((e6) => {
7865
+ })) : (Ay = a2, my.querySelectorAll(".pattern-pill").forEach((e6) => {
7863
7866
  var t3;
7864
7867
  e6.classList.remove("active");
7865
7868
  let n3 = (t3 = e6.dataset.color) == null ? "#888" : t3;
@@ -7868,8 +7871,8 @@ function Ay(e5, t2, n2) {
7868
7871
  });
7869
7872
  });
7870
7873
  }
7871
- var jy = [{ label: "Tight", maxOrb: 4 }, { label: "Standard", maxOrb: 8 }, { label: "Wide", maxOrb: 12 }], My = true, Ny = 8, Py = "true";
7872
- function Fy() {
7874
+ var My = [{ label: "Tight", maxOrb: 4 }, { label: "Standard", maxOrb: 8 }, { label: "Wide", maxOrb: 12 }], Ny = true, Py = 8, Fy = "true";
7875
+ function Iy() {
7873
7876
  var e5;
7874
7877
  if (!hy) return;
7875
7878
  let t2 = (() => {
@@ -7881,9 +7884,9 @@ function Fy() {
7881
7884
  let n3 = t3.some((e7) => e7 === "north node" || e7 === "north node (mean)" || e7 === "mean node"), r3 = t3.some((e7) => e7 === "true node" || e7 === "north node (true)");
7882
7885
  return n3 && r3;
7883
7886
  })();
7884
- W_(Py);
7885
- let n2 = t2 ? '\n <div class="asp-section">\n <span class="asp-section-label">Nodes</span>\n <button class="orb-preset-btn node-btn'.concat(Py === "mean" ? " active" : "", '" data-node="mean" title="Mean lunar node (averaged orbit)">Mean</button>\n <button class="orb-preset-btn node-btn').concat(Py === "true" ? " active" : "", '" data-node="true" title="True (osculating) lunar node">True</button>\n </div>') : "";
7886
- My = true, hy.innerHTML = '\n <div class="asp-panel">\n <div class="asp-section">\n <span class="asp-section-label">Aspects</span>\n <button class="aspect-toggle-btn active" id="cw-aspect-vis-toggle"\n title="Toggle all natal aspect lines">\n <span class="toggle-icon">\u2295</span> Natal aspects\n </button>\n </div>\n <div class="asp-section">\n <span class="asp-section-label">Orb</span>\n '.concat(jy.map((e6) => '<button class="orb-preset-btn'.concat(e6.maxOrb === Ny ? " active" : "", '" data-orb="').concat(e6.maxOrb, '" title="').concat(e6.label, ' orbs">').concat(e6.label, "</button>")).join(""), "\n </div>").concat(n2, "\n </div>\n ");
7887
+ W_(Fy);
7888
+ let n2 = t2 ? '\n <div class="asp-section">\n <span class="asp-section-label">Nodes</span>\n <button class="orb-preset-btn node-btn'.concat(Fy === "mean" ? " active" : "", '" data-node="mean" title="Mean lunar node (averaged orbit)">Mean</button>\n <button class="orb-preset-btn node-btn').concat(Fy === "true" ? " active" : "", '" data-node="true" title="True (osculating) lunar node">True</button>\n </div>') : "";
7889
+ Ny = true, hy.innerHTML = '\n <div class="asp-panel">\n <div class="asp-section">\n <span class="asp-section-label">Aspects</span>\n <button class="aspect-toggle-btn active" id="cw-aspect-vis-toggle"\n title="Toggle all natal aspect lines">\n <span class="toggle-icon">\u2295</span> Natal aspects\n </button>\n </div>\n <div class="asp-section">\n <span class="asp-section-label">Orb</span>\n '.concat(My.map((e6) => '<button class="orb-preset-btn'.concat(e6.maxOrb === Py ? " active" : "", '" data-orb="').concat(e6.maxOrb, '" title="').concat(e6.label, ' orbs">').concat(e6.label, "</button>")).join(""), "\n </div>").concat(n2, "\n </div>\n ");
7887
7890
  let r2 = K_($ == null ? void 0 : $.planets), i2 = /* @__PURE__ */ new Set(), a2 = [];
7888
7891
  for (let e6 of r2) {
7889
7892
  let t3 = e6.name.toLowerCase();
@@ -7902,21 +7905,21 @@ function Fy() {
7902
7905
  hy.insertAdjacentHTML("beforeend", Kv([{ title: "Bodies", items: a2 }, { title: "Aspects", items: o2 }])), hy.removeAttribute("hidden");
7903
7906
  let s2 = document.getElementById("cw-aspect-vis-toggle");
7904
7907
  s2 == null || s2.addEventListener("click", () => {
7905
- My = !My, Lv(My), s2.classList.toggle("active", My), s2.querySelector(".toggle-icon").textContent = My ? "\u2295" : "\u2296";
7908
+ Ny = !Ny, Lv(Ny), s2.classList.toggle("active", Ny), s2.querySelector(".toggle-icon").textContent = Ny ? "\u2295" : "\u2296";
7906
7909
  }), hy.querySelectorAll(".orb-preset-btn:not(.node-btn)").forEach((e6) => {
7907
7910
  e6.addEventListener("click", () => {
7908
7911
  var t3;
7909
7912
  let n3 = parseFloat((t3 = e6.dataset.orb) == null ? "8" : t3);
7910
- n3 !== Ny && (Ny = n3, hy.querySelectorAll(".orb-preset-btn:not(.node-btn)").forEach((e7) => e7.classList.toggle("active", e7.dataset.orb === String(n3))), Rv(n3));
7913
+ n3 !== Py && (Py = n3, hy.querySelectorAll(".orb-preset-btn:not(.node-btn)").forEach((e7) => e7.classList.toggle("active", e7.dataset.orb === String(n3))), Rv(n3));
7911
7914
  });
7912
7915
  }), hy.querySelectorAll(".node-btn").forEach((e6) => {
7913
7916
  e6.addEventListener("click", () => {
7914
7917
  let t3 = e6.dataset.node === "mean" ? "mean" : "true";
7915
- t3 === Py || !$ || (Py = t3, W_(t3), wy($));
7918
+ t3 === Fy || !$ || (Fy = t3, W_(t3), wy($));
7916
7919
  });
7917
7920
  });
7918
7921
  }
7919
- async function Iy(e5, t2) {
7922
+ async function Ly(e5, t2) {
7920
7923
  if (xy) try {
7921
7924
  let n2 = "[Chart Wheel] Selected ".concat(e5, " \u2014 ").concat(Object.entries(t2).filter(([, e6]) => e6 != null && e6 !== false && e6 !== "").map(([e6, t3]) => "".concat(e6, ": ").concat(t3)).join(", "));
7922
7925
  await vy.updateModelContext({ content: [{ type: "text", text: n2 }] });
@@ -7924,24 +7927,24 @@ async function Iy(e5, t2) {
7924
7927
  console.warn("[ChartWheel] \u26A0\uFE0F updateModelContext failed:", e6);
7925
7928
  }
7926
7929
  }
7927
- async function Ly(e5) {
7930
+ async function Ry(e5) {
7928
7931
  var t2, n2, r2, i2;
7929
- ky = null, my == null || my.querySelectorAll(".pattern-pill").forEach((e6) => {
7932
+ Ay = null, my == null || my.querySelectorAll(".pattern-pill").forEach((e6) => {
7930
7933
  var t3;
7931
7934
  e6.classList.remove("active");
7932
7935
  let n3 = (t3 = e6.dataset.color) == null ? "#888" : t3;
7933
7936
  e6.style.color = n3, e6.style.borderColor = n3, e6.style.background = "transparent";
7934
- }), await Iy("planet", { planet: e5.name, longitude: e5.longitude, sign: (t2 = e5.sign) == null ? null : t2, house: (n2 = e5.house) == null ? null : n2, retrograde: (r2 = e5.retrograde) == null ? false : r2, speed: (i2 = e5.speed) == null ? null : i2 });
7937
+ }), await Ly("planet", { planet: e5.name, longitude: e5.longitude, sign: (t2 = e5.sign) == null ? null : t2, house: (n2 = e5.house) == null ? null : n2, retrograde: (r2 = e5.retrograde) == null ? false : r2, speed: (i2 = e5.speed) == null ? null : i2 });
7935
7938
  }
7936
- async function Ry(e5) {
7939
+ async function zy(e5) {
7937
7940
  var t2, n2;
7938
- await Iy("house", { house_number: e5.number, sign: (t2 = e5.sign) == null ? null : t2, cusp_longitude: e5.cusp_lon, ruler: (n2 = e5.ruler) == null ? null : n2 });
7941
+ await Ly("house", { house_number: e5.number, sign: (t2 = e5.sign) == null ? null : t2, cusp_longitude: e5.cusp_lon, ruler: (n2 = e5.ruler) == null ? null : n2 });
7939
7942
  }
7940
- async function zy(e5) {
7943
+ async function By(e5) {
7941
7944
  var t2, n2, r2, i2;
7942
- await Iy("aspect", { planet1: e5.planet1, planet2: e5.planet2, aspect_type: (t2 = e5.type) == null ? null : t2, orb: (n2 = e5.orb) == null ? null : n2, applying: (r2 = e5.applying) == null ? null : r2, angle: (i2 = e5.angle) == null ? null : i2 });
7945
+ await Ly("aspect", { planet1: e5.planet1, planet2: e5.planet2, aspect_type: (t2 = e5.type) == null ? null : t2, orb: (n2 = e5.orb) == null ? null : n2, applying: (r2 = e5.applying) == null ? null : r2, angle: (i2 = e5.angle) == null ? null : i2 });
7943
7946
  }
7944
- function By() {
7947
+ function Vy() {
7945
7948
  return async (e5) => {
7946
7949
  try {
7947
7950
  var t2, n2;
@@ -7952,30 +7955,30 @@ function By() {
7952
7955
  }
7953
7956
  };
7954
7957
  }
7955
- async function Vy(e5) {
7958
+ async function Hy(e5) {
7956
7959
  try {
7957
7960
  (await vy.sendMessage({ role: "user", content: [{ type: "text", text: e5 }] })).isError && console.error("[ChartWheel] Host rejected sendMessage");
7958
7961
  } catch (e6) {
7959
7962
  console.error("[ChartWheel] sendMessage failed:", e6);
7960
7963
  }
7961
7964
  }
7962
- async function Hy() {
7965
+ async function Uy() {
7963
7966
  var e5, t2, n2, r2;
7964
7967
  if (!$) return;
7965
7968
  let i2 = $, a2 = (e5 = i2._birth_params) == null ? {} : e5, o2 = (t2 = (n2 = a2.name) == null ? a2.location : n2) == null ? "this person" : t2, s2 = K_(i2.planets), c2 = ((r2 = i2.aspects) == null ? [] : r2).filter((e6) => {
7966
7969
  var t3;
7967
7970
  return ["conjunction", "opposition", "trine", "square", "sextile"].includes((t3 = e6.type) == null ? "" : t3);
7968
7971
  }).slice(0, 8).map((e6) => " \u2022 ".concat(e6.planet1, " ").concat(e6.type, " ").concat(e6.planet2, " (").concat(Number(e6.orb).toFixed(1), "\xB0, ").concat(e6.applying ? "applying" : "separating", ")")).join("\n") || " \u2022 No major aspects found";
7969
- await Vy("Please give a complete natal chart interpretation for ".concat(o2, ".\n\nKey planet placements:\n").concat(s2.slice(0, 5).map((e6) => {
7972
+ await Hy("Please give a complete natal chart interpretation for ".concat(o2, ".\n\nKey planet placements:\n").concat(s2.slice(0, 5).map((e6) => {
7970
7973
  var t3;
7971
7974
  return " \u2022 ".concat(e6.name, " in ").concat((t3 = e6.sign) == null ? "?" : t3).concat(e6.house ? ", House ".concat(e6.house) : "").concat(e6.retrograde ? " \u211E" : "");
7972
7975
  }).join("\n"), "\n\nMajor aspects:\n").concat(c2, "\n\nCover: (1) Core identity and soul purpose (Sun, Moon, Ascendant), (2) The chart's dominant element, modality, and overall signature, (3) The most significant aspects and their psychological themes, (4) Key life areas of focus and challenge, (5) A practical synthesis \u2014 who is this person and what is their path?"));
7973
7976
  }
7974
- async function Uy() {
7977
+ async function Wy() {
7975
7978
  var e5, t2, n2, r2;
7976
7979
  if (!$) return;
7977
7980
  let i2 = $, a2 = (e5 = i2._birth_params) == null ? {} : e5;
7978
- await Vy("I'm exploring the natal chart for ".concat((t2 = (n2 = a2.name) == null ? a2.location : n2) == null ? "this chart" : t2, ". Key placements: ").concat(K_(i2.planets).slice(0, 4).map((e6) => {
7981
+ await Hy("I'm exploring the natal chart for ".concat((t2 = (n2 = a2.name) == null ? a2.location : n2) == null ? "this chart" : t2, ". Key placements: ").concat(K_(i2.planets).slice(0, 4).map((e6) => {
7979
7982
  var t3;
7980
7983
  return "".concat(e6.name, " in ").concat((t3 = e6.sign) == null ? "?" : t3).concat(e6.house ? " H".concat(e6.house) : "");
7981
7984
  }).join(", ") || "unknown placements", ". Major aspects: ").concat(((r2 = i2.aspects) == null ? [] : r2).filter((e6) => {
@@ -7983,7 +7986,7 @@ async function Uy() {
7983
7986
  return ["conjunction", "opposition", "trine", "square", "sextile"].includes((t3 = e6.type) == null ? "" : t3);
7984
7987
  }).slice(0, 5).map((e6) => "".concat(e6.planet1, " ").concat(e6.type, " ").concat(e6.planet2, " (").concat(Number(e6.orb).toFixed(1), "\xB0)")).join(", ") || "none detected", ".\n\nBased on this chart, please suggest 3-4 specific, insightful questions I could ask to understand this person more deeply \u2014 such as how particular placements manifest in real life, the most significant aspect dynamics, or how to integrate the chart's core tensions. Present each as a tappable question I can ask you."));
7985
7988
  }
7986
- async function Wy(e5) {
7989
+ async function Gy(e5) {
7987
7990
  let t2 = "";
7988
7991
  if (e5.type === "planet") {
7989
7992
  var n2;
@@ -8018,7 +8021,7 @@ async function Wy(e5) {
8018
8021
  throw console.error("[ChartWheel] \u274C sendMessage failed:", e6), e6;
8019
8022
  }
8020
8023
  }
8021
- async function Gy(e5) {
8024
+ async function Ky(e5) {
8022
8025
  if (!($ != null && $._birth_params)) {
8023
8026
  Uv(py, yy);
8024
8027
  return;
@@ -8031,21 +8034,21 @@ async function Gy(e5) {
8031
8034
  console.error("[Chart] Recalculate failed:", e6), Uv(py, yy);
8032
8035
  }
8033
8036
  }
8034
- var Ky;
8035
- function qy() {
8036
- Ky && (clearTimeout(Ky), Ky = void 0);
8037
+ var qy;
8038
+ function Jy() {
8039
+ qy && (clearTimeout(qy), qy = void 0);
8037
8040
  }
8038
- function Jy(e5, t2) {
8039
- qy(), ly.setAttribute("hidden", ""), iy({ container: uy, message: e5, onRetry: t2 });
8041
+ function Yy(e5, t2) {
8042
+ Jy(), ly.setAttribute("hidden", ""), iy({ container: uy, message: e5, onRetry: t2 });
8040
8043
  }
8041
- function Yy() {
8042
- qy(), uy.setAttribute("hidden", ""), ly.removeAttribute("hidden"), Ky = setTimeout(() => {
8043
- Jy("The chart didn't load. Tap to try again.", Yy);
8044
+ function Xy() {
8045
+ Jy(), uy.setAttribute("hidden", ""), ly.removeAttribute("hidden"), qy = setTimeout(() => {
8046
+ Yy("The chart didn't load. Tap to try again.", Xy);
8044
8047
  }, 3e4), vy.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the chart wheel." }] }).catch(() => {
8045
8048
  });
8046
8049
  }
8047
- oy(vy, { loadingEl: ly, contentEl: uy, statusFn: Cy, paramControls: () => by }), Ky = setTimeout(() => {
8048
- Jy("Chart data is taking longer than expected.", Yy);
8050
+ oy(vy, { loadingEl: ly, contentEl: uy, statusFn: Cy, paramControls: () => by }), qy = setTimeout(() => {
8051
+ Yy("Chart data is taking longer than expected.", Xy);
8049
8052
  }, 3e4), (async () => {
8050
8053
  try {
8051
8054
  await vy.connect();
@@ -8054,9 +8057,9 @@ oy(vy, { loadingEl: ly, contentEl: uy, statusFn: Cy, paramControls: () => by }),
8054
8057
  $ && wy($);
8055
8058
  }), $ && wy($);
8056
8059
  } catch (e5) {
8057
- console.error("[ChartWheel] \u274C app.connect() FAILED:", e5), Jy("The chart didn't load. Tap to try again.", Yy);
8060
+ console.error("[ChartWheel] \u274C app.connect() FAILED:", e5), Yy("The chart didn't load. Tap to try again.", Xy);
8058
8061
  }
8059
8062
  })();
8060
8063
  </script>
8061
- </body>
8062
- </html>
8064
+ </body>
8065
+ </html>