@openephemeris/mcp-server 4.18.0 → 4.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/index.js +8 -110
  3. package/dist/server-sse.js +7 -114
  4. package/dist/tools/apps/bazi-app.d.ts +1 -1
  5. package/dist/tools/apps/bazi-app.js +3 -2
  6. package/dist/tools/apps/bi-wheel-app.d.ts +1 -1
  7. package/dist/tools/apps/bi-wheel-app.js +3 -2
  8. package/dist/tools/apps/bodygraph-app.d.ts +7 -4
  9. package/dist/tools/apps/bodygraph-app.js +13 -5
  10. package/dist/tools/apps/chart-wheel-app.d.ts +1 -1
  11. package/dist/tools/apps/chart-wheel-app.js +3 -2
  12. package/dist/tools/apps/moon-phase-app.d.ts +1 -1
  13. package/dist/tools/apps/moon-phase-app.js +3 -2
  14. package/dist/tools/apps/transit-timeline-app.d.ts +1 -1
  15. package/dist/tools/apps/transit-timeline-app.js +3 -2
  16. package/dist/tools/apps/ui-resource.d.ts +43 -0
  17. package/dist/tools/apps/ui-resource.js +66 -0
  18. package/dist/tools/apps/ui-resources.d.ts +22 -0
  19. package/dist/tools/apps/ui-resources.js +105 -0
  20. package/dist/tools/apps/vedic-chart-app.d.ts +1 -1
  21. package/dist/tools/apps/vedic-chart-app.js +3 -2
  22. package/dist/tools/specialized/comparative.js +25 -23
  23. package/dist/tools/specialized/hd_cycles.js +22 -23
  24. package/dist/tools/specialized/progressed.js +5 -2
  25. package/dist/tools/specialized/relocation.js +5 -2
  26. package/dist/tools/visual.d.ts +15 -0
  27. package/dist/tools/visual.js +22 -0
  28. package/dist/ui/bazi.html +893 -856
  29. package/dist/ui/bi-wheel.html +555 -518
  30. package/dist/ui/bodygraph.html +433 -337
  31. package/dist/ui/chart-wheel.html +632 -595
  32. package/dist/ui/moon-phase.html +190 -155
  33. package/dist/ui/transit-timeline.html +865 -830
  34. package/dist/ui/vedic-chart.html +252 -215
  35. package/package.json +2 -1
@@ -1,7 +1,7 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
3
  <head>
4
- <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; font-src data:; connect-src 'none'" />
4
+ <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; font-src data: https:; connect-src 'none'" />
5
5
  <meta charset="UTF-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <meta name="color-scheme" content="dark light" />
@@ -10,7 +10,7 @@
10
10
  <title>Vedic Chart Explorer</title>
11
11
 
12
12
 
13
- <style>:root{--bg:#010102;--surface:#030408;--surface-2:#080b11;--border:#13161d;--border-strong:#242933;--text:#e2e4e9;--text-secondary:#a1a5ab;--muted:#84868b;--gold:#cc9c42;--gold-dim:#7b6540;--gold-glow:rgba(204,156,66,.2);--gold-subtle:rgba(204,156,66,.1);--success:#1da871;--error:#c53443;--radius:10px;--radius-sm:6px;--radius-pill:99px;--shadow-md:0 8px 40px rgba(0,0,0,.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px rgba(204,156,66,.15), 0 0 0 1px rgba(204,156,66,.2)}@supports (color:color(display-p3 0 0 0)){:root{--bg:color(display-p3 .00306656 .00431968 .00888397);--surface:color(display-p3 .013072 .016989 .0298495);--surface-2:color(display-p3 .0345774 .0431759 .0653236);--border:color(display-p3 .0763929 .0859556 .109705);--border-strong:color(display-p3 .144788 .159634 .196542);--text:color(display-p3 .889546 .895785 .910689);--text-secondary:color(display-p3 .635245 .644982 .668335);--muted:color(display-p3 .518127 .525635 .543633);--gold:color(display-p3 .76996 .617341 .321369);--gold-dim:color(display-p3 .469305 .400291 .270966);--gold-glow:color(display-p3 .76996 .617341 .321369/.2);--gold-subtle:color(display-p3 .76996 .617341 .321369/.1);--success:color(display-p3 .313719 .651039 .459895);--error:color(display-p3 .710345 .252818 .279408);--shadow-md:0 8px 40px color(display-p3 0 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px color(display-p3 .76996 .617341 .321369/.15), 0 0 0 1px color(display-p3 .76996 .617341 .321369/.2)}}@supports (color:lab(0% 0 0)){:root{--bg:lab(.302122% .0219196 -.522962);--surface:lab(1.18159% .0276566 -1.4848);--surface-2:lab(3.00584% .0228807 -3.15676);--border:lab(7.15581% -.0557452 -5.11242);--border-strong:lab(16.3712% -.0768155 -7.37782);--text:lab(90.6942% -.142366 -2.26941);--text-secondary:lab(67.4758% -.215352 -3.76978);--muted:lab(55.8848% -.174642 -3.01716);--gold:lab(67.5798% 11.9379 52.333);--gold-dim:lab(44.394% 5.21132 24.4453);--gold-glow:lab(67.5798% 11.9379 52.333/.2);--gold-subtle:lab(67.5798% 11.9379 52.333/.1);--success:lab(61.2436% -46.7762 18.3644);--error:lab(45.8893% 57.7361 27.393);--shadow-md:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px lab(67.5798% 11.9379 52.333/.15), 0 0 0 1px lab(67.5798% 11.9379 52.333/.2)}}:root[data-theme=light]{--bg:#f4f5f8;--surface:#fbfcfe;--surface-2:#eceef3;--border:#d5d7dd;--border-strong:#babec6;--text:#181b1f;--text-secondary:#4a4d54;--muted:#606369;--gold:#8a6000;--gold-dim:#967c4f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light]{--bg:color(display-p3 .956515 .960735 .970805);--surface:color(display-p3 .98376 .986943 .994535);--surface-2:color(display-p3 .928401 .934691 .949715);--border:color(display-p3 .836244 .844458 .864107);--border-strong:color(display-p3 .731542 .743532 .772301);--text:color(display-p3 .096883 .103987 .12134);--text-secondary:color(display-p3 .291758 .301882 .326359);--muted:color(display-p3 .379924 .388781 .410092);--gold:color(display-p3 .524671 .380491 .0387678);--gold-dim:color(display-p3 .572756 .489268 .332751)}}@supports (color:lab(0% 0 0)){:root[data-theme=light]{--bg:lab(96.503% -.0977516 -1.51461);--surface:lab(98.8273% -.0742674 -1.13657);--surface-2:lab(94.1743% -.142753 -2.26963);--border:lab(86.0453% -.183702 -3.02233);--border-strong:lab(76.7468% -.254452 -4.52154);--text:lab(9.4703% -.119448 -3.722);--text-secondary:lab(32.6639% -.205323 -4.4957);--muted:lab(41.9548% -.197023 -3.7598);--gold:lab(44.2758% 13.6718 62.9124);--gold-dim:lab(53.685% 6.10271 28.558)}}:root[data-theme=light] body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*,:before,:after{box-sizing:border-box;margin:0;padding:0}[hidden]{display:none!important}html,body{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background:var(--bg);height:100%;color:var(--text);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;gap:8px;min-height:0;padding:8px 12px;display:flex}#loading-state{min-height:300px;color:var(--muted);flex-direction:column;justify-content:center;align-items:center;gap:14px;display:flex}#loading-state p{letter-spacing:.06em;text-transform:uppercase;font-size:11px}.oe-loader{width:64px;height:64px;stroke:var(--gold);stroke-width:2px;fill:none;stroke-dasharray:200;stroke-dashoffset:200px;filter:drop-shadow(0 0 4px var(--gold-glow));animation:2.5s cubic-bezier(.16,1,.3,1) infinite oe-draw}@keyframes oe-draw{0%{stroke-dashoffset:200px;stroke-opacity:.1}50%{stroke-dashoffset:0;stroke-opacity:1;filter:drop-shadow(0 0 8px var(--gold))}to{stroke-dashoffset:-200px;stroke-opacity:.1}}.vedic-header{justify-content:space-between;align-items:center;width:100%;max-width:640px;margin:0 auto;padding:2px 2px 0;display:flex}.vedic-title{letter-spacing:.02em;color:var(--text);font-size:14px;font-weight:700}.vedic-ayanamsa-badge{letter-spacing:.04em;color:var(--gold);background:var(--gold-subtle);border:1px solid var(--gold-glow);border-radius:var(--radius-pill);padding:3px 10px;font-size:10px;font-weight:600}#vedic-container{border-radius:var(--radius);border:1px solid var(--border-strong);width:100%;max-width:640px;box-shadow:var(--shadow-gold);background:#010102;background:color(display-p3 .00306656 .00431968 .00888397);background:lab(.302122% .0219196 -.522962);margin:0 auto;transition:box-shadow .3s;position:relative;overflow:visible}#vedic-container:hover{box-shadow:0 0 40px rgba(204,156,66,.22),0 0 0 1px rgba(204,156,66,.3);box-shadow:0 0 40px color(display-p3 .76996 .617341 .321369/.22),0 0 0 1px color(display-p3 .76996 .617341 .321369/.3);box-shadow:0 0 40px lab(67.5798% 11.9379 52.333/.22),0 0 0 1px lab(67.5798% 11.9379 52.333/.3)}#vedic-container svg{aspect-ratio:1;width:100%;height:auto;max-height:min(62vh,560px);display:block}.vedic-cell{cursor:pointer;transition:filter .16s}.vedic-cell:hover{filter:brightness(1.18)drop-shadow(0 0 6px rgba(204,156,66,.35));filter:brightness(1.18)drop-shadow(0 0 6px color(display-p3 .76996 .617341 .321369/.35));filter:brightness(1.18)drop-shadow(0 0 6px lab(67.5798% 11.9379 52.333/.35));outline:none}.vedic-cell:focus-visible{filter:brightness(1.18)drop-shadow(0 0 6px rgba(204,156,66,.35));filter:brightness(1.18)drop-shadow(0 0 6px color(display-p3 .76996 .617341 .321369/.35));filter:brightness(1.18)drop-shadow(0 0 6px lab(67.5798% 11.9379 52.333/.35));outline:none}.vedic-cell:focus-visible{outline:2px solid var(--gold);outline-offset:-3px}#info-panel{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius);grid-template-columns:1fr 1fr;gap:6px 12px;width:100%;max-width:640px;max-height:220px;margin:0 auto;padding:10px 14px;display:grid;overflow-y:auto}.info-row{flex-direction:column;gap:1px;display:flex}.info-label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-size:9px;font-weight:700}.info-value{color:var(--text);font-size:12px;font-weight:500}@media (max-width:420px){#app{gap:8px;padding:8px}#info-panel{grid-template-columns:1fr}}.error-state{min-height:200px;color:var(--muted);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:24px;display:flex}.error-icon{opacity:.5;font-size:24px}.error-retry-btn{border:1px solid var(--border-strong);color:var(--gold);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(122,128,141,.12);background:color(display-p3 .483965 .502358 .546955/.12);background:lab(53.5049% -.313222 -7.47857/.12)}.chart-status{-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-radius:var(--radius-pill);color:var(--gold);letter-spacing:.04em;z-index:900;opacity:0;pointer-events:none;background:rgba(5,7,13,.92);background:color(display-p3 .0216592 .0280553 .0483601/.92);background:lab(1.95095% .0425801 -2.41514/.92);border:1px solid rgba(204,156,66,.35);border:1px solid color(display-p3 .76996 .617341 .321369/.35);border:1px solid lab(67.5798% 11.9379 52.333/.35);max-height:0;padding:5px 18px;font-size:11px;font-weight:600;transition:max-height .24s cubic-bezier(.16,1,.3,1),opacity .24s,transform .24s cubic-bezier(.16,1,.3,1);position:fixed;top:10px;left:50%;overflow:hidden;transform:translate(-50%)translateY(-10px);box-shadow:0 4px 20px rgba(0,0,0,.5),0 0 0 1px rgba(204,156,66,.08);box-shadow:0 4px 20px color(display-p3 0 0 0/.5),0 0 0 1px color(display-p3 .76996 .617341 .321369/.08);box-shadow:0 4px 20px lab(0% 0 0/.5),0 0 0 1px lab(67.5798% 11.9379 52.333/.08)}.chart-status.visible{opacity:1;max-height:44px;transform:translate(-50%)translateY(0)}.vedic-popup{background:var(--surface-2);border:1px solid var(--border-strong);z-index:1000;opacity:0;pointer-events:none;border-radius:12px;width:min(320px,92vw);padding:14px 16px 12px;transition:opacity .2s cubic-bezier(.16,1,.3,1);position:fixed;box-shadow:0 12px 48px rgba(0,0,0,.7),0 0 0 1px rgba(204,156,66,.15);box-shadow:0 12px 48px color(display-p3 0 0 0/.7),0 0 0 1px color(display-p3 .76996 .617341 .321369/.15);box-shadow:0 12px 48px lab(0% 0 0/.7),0 0 0 1px lab(67.5798% 11.9379 52.333/.15)}.vedic-popup.visible{opacity:1;pointer-events:all}.vedic-popup-header{align-items:flex-start;gap:10px;display:flex}.vedic-popup-title{color:var(--text);flex:1;font-size:13px;font-weight:700}.vedic-popup-sub{color:var(--text-secondary);margin-top:2px;font-size:11px;font-weight:400}.vedic-popup-close{cursor:pointer;color:var(--muted);background:0 0;border:none;border-radius:4px;flex-shrink:0;padding:2px 4px;font-size:15px;line-height:1;transition:color .12s}.vedic-popup-close:hover{color:var(--text)}.ask-claude-btn{border-radius:var(--radius-sm);width:100%;color:var(--gold);font:inherit;letter-spacing:.04em;cursor:pointer;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);justify-content:center;align-items:center;gap:6px;margin-top:12px;padding:9px 16px;font-size:12px;font-weight:600;transition:background .16s,border-color .16s,box-shadow .16s;display:flex}.ask-claude-btn:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65);box-shadow:0 0 0 3px rgba(204,156,66,.12);box-shadow:0 0 0 3px color(display-p3 .76996 .617341 .321369/.12);box-shadow:0 0 0 3px lab(67.5798% 11.9379 52.333/.12)}.ask-claude-btn:disabled{opacity:.45;cursor:not-allowed}.ask-claude-btn.sending{opacity:.8;cursor:wait;pointer-events:none}.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)}.vedic-action-bar{flex-wrap:wrap;gap:8px;padding:10px 16px 6px;display:flex}.action-btn{color:var(--gold);letter-spacing:.02em;cursor:pointer;white-space:nowrap;background:rgba(204,156,66,.08);background:color(display-p3 .76996 .617341 .321369/.08);background:lab(67.5798% 11.9379 52.333/.08);border:1px solid rgba(204,156,66,.3);border:1px solid color(display-p3 .76996 .617341 .321369/.3);border:1px solid lab(67.5798% 11.9379 52.333/.3);border-radius:8px;align-items:center;gap:6px;padding:7px 16px;font-size:12px;font-weight:600;transition:background .2s,border-color .2s,transform .1s;display:inline-flex}.action-btn:hover{background:rgba(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,.5);border-color:color(display-p3 .76996 .617341 .321369/.5);border-color:lab(67.5798% 11.9379 52.333/.5);transform:translateY(-1px)}.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);transform:translateY(0)}.action-btn--primary{background:linear-gradient(135deg,rgba(204,156,66,.2),rgba(166,117,55,.25));background:linear-gradient(135deg,color(display-p3 .76996 .617341 .321369/.2),color(display-p3 .622862 .466276 .257278/.25));background:linear-gradient(135deg,lab(67.5798% 11.9379 52.333/.2),lab(53.4364% 15.3976 41.3855/.25));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:linear-gradient(135deg,rgba(204,156,66,.3),rgba(166,117,55,.35));background:linear-gradient(135deg,color(display-p3 .76996 .617341 .321369/.3),color(display-p3 .622862 .466276 .257278/.35));background:linear-gradient(135deg,lab(67.5798% 11.9379 52.333/.3),lab(53.4364% 15.3976 41.3855/.35))}.tooltip{-webkit-backdrop-filter:blur(14px)saturate(1.6);backdrop-filter:blur(14px)saturate(1.6);border:1px solid var(--border-strong);border-radius:var(--radius);pointer-events:none;z-index:1000;opacity:0;background:rgba(7,9,14,.92);background:color(display-p3 .0286832 .0352525 .0537785/.92);background:lab(2.44746% .00379235 -2.33402/.92);max-width:220px;padding:8px 12px;font-size:12px;transition:opacity .12s;position:fixed;box-shadow:0 8px 32px rgba(0,0,0,.55);box-shadow:0 8px 32px color(display-p3 0 0 0/.55);box-shadow:0 8px 32px lab(0% 0 0/.55)}.tooltip.visible{opacity:1}.tooltip-title{color:var(--text);margin-bottom:2px;font-weight:700}.tooltip-detail{color:var(--text-secondary);line-height:1.4}.tooltip-hint{color:var(--gold-dim);letter-spacing:.03em;margin-top:4px;font-size:10px}.pan-zoom-controls{z-index:800;flex-direction:column;gap:6px;display:flex;position:absolute;bottom:12px;right:12px}.pan-zoom-controls[hidden]{display:none!important}.pan-btn{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);border-radius:var(--radius-sm);cursor:pointer;width:36px;height:36px;box-shadow:var(--shadow-md);justify-content:center;align-items:center;font-family:inherit;font-size:18px;transition:all .15s;display:flex}.pan-btn.reset{width:auto;padding:0 10px;font-size:11px;font-weight:500}.pan-btn:hover{background:var(--surface);border-color:var(--gold-dim);color:var(--gold)}.pan-btn:active{transform:scale(.95)}.pan-btn--fullscreen{width:36px;height:36px}@media (max-width:480px){.pan-zoom-controls{gap:5px}.pan-btn,.pan-btn--fullscreen{background:color-mix(in oklab, var(--surface-2) 72%, transparent);-webkit-backdrop-filter:blur(6px);width:32px;height:32px;font-size:15px}.pan-btn.reset{width:32px;padding:0;font-size:0}.pan-btn.reset:before{content:"⟲";font-size:15px}}body.is-fullscreen{height:100vh;overflow:hidden}body.is-fullscreen #app{flex-direction:column;gap:0;width:100vw;max-width:100%;height:100vh;padding:0;display:flex;overflow:hidden}body.is-fullscreen #vedic-container{min-height:0;max-width:unset;width:100%;height:auto;box-shadow:none;background:0 0;border:none;flex:1;justify-content:center;align-items:center;margin:0;padding:16px 24px 0;display:flex}body.is-fullscreen #loading-state{flex:1;height:auto;min-height:0}body.is-fullscreen #vedic-container svg{width:auto;max-width:100%;height:100%;max-height:100%}body.is-fullscreen .pan-zoom-controls{top:16px;bottom:auto;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]{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)}#fs-bottom-bar [data-column]>*+*{border-top:1px solid var(--border);margin-top:4px;padding-top:8px}#fs-bottom-bar .vedic-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);border:1px solid var(--border-strong);color:var(--text-secondary);border-radius:var(--radius-sm);opacity:0;z-index:9999;pointer-events:none;box-shadow:var(--shadow-md);padding:8px 16px;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)}:root[data-theme=light] #vedic-container{background:var(--surface)}:root[data-theme=light] .chart-status,:root[data-theme=light] .tooltip{background:rgba(251,252,254,.92);background:color(display-p3 .98376 .986943 .994535/.92);background:lab(98.8273% -.0742674 -1.13657/.92)}:root[data-theme=light] #fs-bottom-bar{background:var(--surface-2)}:root[data-theme=light] .vedic-popup{background:var(--surface);border-color:var(--border-strong)}:root[data-theme=light] #info-panel{background:var(--surface);border-color:var(--border)}
13
+ <style>:root{--bg:#010102;--surface:#030408;--surface-2:#080b11;--border:#13161d;--border-strong:#242933;--text:#e2e4e9;--text-secondary:#a1a5ab;--muted:#84868b;--gold:#cc9c42;--gold-dim:#7b6540;--gold-glow:rgba(204,156,66,.2);--gold-subtle:rgba(204,156,66,.1);--success:#1da871;--error:#c53443;--radius:10px;--radius-sm:6px;--radius-pill:99px;--oe-shadow-md:0 8px 40px rgba(0,0,0,.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px rgba(204,156,66,.15), 0 0 0 1px rgba(204,156,66,.2);--font-ui:var(--font-sans,system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif);--font-code:var(--font-mono,ui-monospace, "SFMono-Regular", "Cascadia Mono", Menlo, Consolas, monospace);--oe-page-bg:var(--color-background-primary,var(--bg));--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@supports (color:color(display-p3 0 0 0)){:root{--bg:color(display-p3 .00306656 .00431968 .00888397);--surface:color(display-p3 .013072 .016989 .0298495);--surface-2:color(display-p3 .0345774 .0431759 .0653236);--border:color(display-p3 .0763929 .0859556 .109705);--border-strong:color(display-p3 .144788 .159634 .196542);--text:color(display-p3 .889546 .895785 .910689);--text-secondary:color(display-p3 .635245 .644982 .668335);--muted:color(display-p3 .518127 .525635 .543633);--gold:color(display-p3 .76996 .617341 .321369);--gold-dim:color(display-p3 .469305 .400291 .270966);--gold-glow:color(display-p3 .76996 .617341 .321369/.2);--gold-subtle:color(display-p3 .76996 .617341 .321369/.1);--success:color(display-p3 .313719 .651039 .459895);--error:color(display-p3 .710345 .252818 .279408);--oe-shadow-md:0 8px 40px color(display-p3 0 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px color(display-p3 .76996 .617341 .321369/.15), 0 0 0 1px color(display-p3 .76996 .617341 .321369/.2)}}@supports (color:lab(0% 0 0)){:root{--bg:lab(.302122% .0219196 -.522962);--surface:lab(1.18159% .0276566 -1.4848);--surface-2:lab(3.00584% .0228807 -3.15676);--border:lab(7.15581% -.0557452 -5.11242);--border-strong:lab(16.3712% -.0768155 -7.37782);--text:lab(90.6942% -.142366 -2.26941);--text-secondary:lab(67.4758% -.215352 -3.76978);--muted:lab(55.8848% -.174642 -3.01716);--gold:lab(67.5798% 11.9379 52.333);--gold-dim:lab(44.394% 5.21132 24.4453);--gold-glow:lab(67.5798% 11.9379 52.333/.2);--gold-subtle:lab(67.5798% 11.9379 52.333/.1);--success:lab(61.2436% -46.7762 18.3644);--error:lab(45.8893% 57.7361 27.393);--oe-shadow-md:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px lab(67.5798% 11.9379 52.333/.15), 0 0 0 1px lab(67.5798% 11.9379 52.333/.2)}}:root[data-theme=light]{--bg:#f4f5f8;--surface:#fbfcfe;--surface-2:#eceef3;--border:#d5d7dd;--border-strong:#babec6;--text:#181b1f;--text-secondary:#4a4d54;--muted:#606369;--gold:#8a6000;--gold-dim:#967c4f;--gold-glow:rgba(141,95,0,.25);--gold-subtle:rgba(141,95,0,.07);--success:#007145;--error:#b1002b;--oe-shadow-md:0 4px 24px rgba(0,0,0,.12), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 16px rgba(141,95,0,.18), 0 0 0 1px rgba(141,95,0,.22);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light]{--bg:color(display-p3 .956515 .960735 .970805);--surface:color(display-p3 .98376 .986943 .994535);--surface-2:color(display-p3 .928401 .934691 .949715);--border:color(display-p3 .836244 .844458 .864107);--border-strong:color(display-p3 .731542 .743532 .772301);--text:color(display-p3 .096883 .103987 .12134);--text-secondary:color(display-p3 .291758 .301882 .326359);--muted:color(display-p3 .379924 .388781 .410092);--gold:color(display-p3 .524671 .380491 .0387678);--gold-dim:color(display-p3 .572756 .489268 .332751);--gold-glow:color(display-p3 .542549 .371783 -.107551/.25);--gold-subtle:color(display-p3 .542549 .371783 -.107551/.07);--success:color(display-p3 -.0793084 .456092 .255685);--error:color(display-p3 .642198 .101724 .18242);--oe-shadow-md:0 4px 24px color(display-p3 0 0 0/.12), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 16px color(display-p3 .542549 .371783 -.107551/.18), 0 0 0 1px color(display-p3 .542549 .371783 -.107551/.22)}}@supports (color:lab(0% 0 0)){:root[data-theme=light]{--bg:lab(96.503% -.0977516 -1.51461);--surface:lab(98.8273% -.0742674 -1.13657);--surface-2:lab(94.1743% -.142753 -2.26963);--border:lab(86.0453% -.183702 -3.02233);--border-strong:lab(76.7468% -.254452 -4.52154);--text:lab(9.4703% -.119448 -3.722);--text-secondary:lab(32.6639% -.205323 -4.4957);--muted:lab(41.9548% -.197023 -3.7598);--gold:lab(44.2758% 13.6718 62.9124);--gold-dim:lab(53.685% 6.10271 28.558);--gold-glow:lab(44.1995% 17.0662 84.3373/.25);--gold-subtle:lab(44.1995% 17.0662 84.3373/.07);--success:lab(41.7514% -55.3249 21.5039);--error:lab(37.5238% 64.2774 32.6097);--oe-shadow-md:0 4px 24px lab(0% 0 0/.12), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 16px lab(44.1995% 17.0662 84.3373/.18), 0 0 0 1px lab(44.1995% 17.0662 84.3373/.22)}}:root{--safe-top:0px;--safe-right:0px;--safe-bottom:0px;--safe-left:0px;--oe-host-h:var(--host-height,var(--host-max-height,640px));--oe-chart-max:clamp(260px, calc(var(--oe-host-h) * .72), 560px);--oe-chart-max-lg:clamp(280px, calc(var(--oe-host-h) * .8), 720px);--oe-drawer-max:clamp(160px, calc(var(--oe-host-h) * .4), 360px);--oe-scroll-max:clamp(240px, calc(var(--oe-host-h) * .7), 560px)}html,body{font-family:var(--font-ui)}body{background-color:var(--oe-page-bg)}.oe-pannable{touch-action:pan-y}body.is-fullscreen .oe-pannable{touch-action:none}.pan-zoom-controls [hidden],.pan-btn[hidden]{display:none!important}.fs-hint-banner{top:calc(12px + var(--safe-top));z-index:9999;border-radius:var(--radius-pill);border:1px solid color-mix(in oklab, var(--gold) 35%, transparent);background:color-mix(in oklab, var(--surface-2) 92%, transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);max-width:calc(100% - 32px);color:var(--text);font:600 11px/1.4 var(--font-ui);letter-spacing:.04em;white-space:nowrap;text-overflow:ellipsis;pointer-events:none;opacity:0;padding:6px 16px;transition:opacity .3s;position:fixed;left:50%;overflow:hidden;transform:translate(-50%)}.fs-hint-banner.visible{opacity:1}@media (prefers-reduced-motion:reduce){.fs-hint-banner{transition:none}}body.is-fullscreen{height:100vh;height:100dvh;overflow:hidden}body.is-fullscreen #app{width:100%;max-width:none;height:100%;min-height:0;padding:var(--safe-top) var(--safe-right) var(--safe-bottom) var(--safe-left);flex-direction:column;gap:0;margin:0;display:flex;overflow:hidden}body.is-fullscreen #app:has(>#fs-bottom-bar){padding-bottom:0}body.is-fullscreen #app .oe-stage{aspect-ratio:auto;width:100%;max-width:none;height:auto;min-height:0;max-height:none;box-shadow:none;background:0 0;border:0;border-radius:0;flex:auto;justify-content:center;align-items:center;margin:0;padding:16px 24px 8px;display:flex;overflow:hidden}body.is-fullscreen #app .oe-stage>svg{width:auto;max-width:100%;height:100%;max-height:100%}body.is-fullscreen #app .oe-stage--doc{width:100%;max-width:880px;padding:20px 24px calc(16px + var(--safe-bottom));flex-direction:column;justify-content:flex-start;align-items:stretch;margin:0 auto;display:flex;overflow-y:auto}body.is-fullscreen #app #loading-state{flex:1;height:auto;min-height:0}body.is-fullscreen #app .pan-zoom-controls{top:calc(54px + var(--safe-top));right:calc(12px + var(--safe-right));bottom:auto}body .oe-info-button{top:calc(12px + var(--safe-top));right:calc(12px + var(--safe-right))}#app #fs-bottom-bar{height:clamp(170px, calc(var(--oe-host-h) * .3), 280px);padding-bottom:var(--safe-bottom);border-top:1px solid var(--border);background:var(--surface);flex-shrink:0;grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(200px,260px) minmax(0,1fr) minmax(200px,260px);display:grid}:root[data-safe-bottom] #app #fs-bottom-bar{height:calc(clamp(170px, calc(var(--oe-host-h) * .3), 280px) + var(--safe-bottom));grid-template-columns:minmax(0,1fr) minmax(0,1fr)}:root[data-safe-bottom] #fs-bottom-bar [data-column=center]{display:none}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex-direction:column;gap:4px;min-height:0;padding:10px 14px 12px;display:flex;overflow-x:hidden;overflow-y:auto}#fs-bottom-bar [data-column=left]{border-right:1px solid var(--border)}#fs-bottom-bar [data-column=right]{border-left:1px solid var(--border)}#fs-bottom-bar [data-column=center]{pointer-events:none}#fs-bottom-bar [data-column]>*+*{border-top:1px solid var(--border);margin-top:4px;padding-top:8px}#fs-bottom-bar [class$=-action-bar],#fs-bottom-bar [class*=-action-bar\ ]{flex-direction:column;padding:8px 0 0}#fs-bottom-bar .action-btn{justify-content:center;width:100%}@media (max-width:640px){#app #fs-bottom-bar,:root[data-safe-bottom] #app #fs-bottom-bar{height:auto;max-height:42%;display:block;overflow-y:auto}#fs-bottom-bar [data-column=center]{display:none}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{border:0;min-height:auto;overflow:visible}#fs-bottom-bar [data-column=right]{border-top:1px solid var(--border)}body.is-fullscreen #app .oe-stage{padding:8px}}body.is-pip{overflow:hidden}body.is-pip #app{gap:6px;padding:6px 8px}body.is-pip .oe-pip-hide,body.is-pip #param-controls-container,body.is-pip #chart-status,body.is-pip .oe-info-button{display:none!important}body.is-pip #app .pan-zoom-controls{top:6px;right:6px}:root[data-theme=light] body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*,:before,:after{box-sizing:border-box;margin:0;padding:0}[hidden]{display:none!important}html,body{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background:var(--oe-page-bg);height:100%;color:var(--text);font-family:var(--font-ui);font-size:13px;line-height:1.5;overflow-x:hidden}#app{flex-direction:column;gap:8px;min-height:0;padding:8px 12px;display:flex}#loading-state{min-height:300px;color:var(--muted);flex-direction:column;justify-content:center;align-items:center;gap:14px;display:flex}#loading-state p{letter-spacing:.06em;text-transform:uppercase;font-size:11px}.oe-loader{width:64px;height:64px;stroke:var(--gold);stroke-width:2px;fill:none;stroke-dasharray:200;stroke-dashoffset:200px;filter:drop-shadow(0 0 4px var(--gold-glow));animation:2.5s cubic-bezier(.16,1,.3,1) infinite oe-draw}@keyframes oe-draw{0%{stroke-dashoffset:200px;stroke-opacity:.1}50%{stroke-dashoffset:0;stroke-opacity:1;filter:drop-shadow(0 0 8px var(--gold))}to{stroke-dashoffset:-200px;stroke-opacity:.1}}.vedic-header{justify-content:space-between;align-items:center;width:100%;max-width:640px;margin:0 auto;padding:2px 2px 0;display:flex}.vedic-title{letter-spacing:.02em;color:var(--text);font-size:14px;font-weight:700}.vedic-ayanamsa-badge{letter-spacing:.04em;color:var(--gold);background:var(--gold-subtle);border:1px solid var(--gold-glow);border-radius:var(--radius-pill);padding:3px 10px;font-size:10px;font-weight:600}#vedic-container{border-radius:var(--radius);width:100%;max-width:640px;margin:0 auto;position:relative;overflow:visible}#vedic-container svg{width:100%;height:auto;max-height:var(--oe-chart-max);aspect-ratio:1;display:block}.vedic-cell{cursor:pointer;transition:filter .16s}.vedic-cell:hover{filter:brightness(1.18)drop-shadow(0 0 6px rgba(204,156,66,.35));filter:brightness(1.18)drop-shadow(0 0 6px color(display-p3 .76996 .617341 .321369/.35));filter:brightness(1.18)drop-shadow(0 0 6px lab(67.5798% 11.9379 52.333/.35));outline:none}.vedic-cell:focus-visible{filter:brightness(1.18)drop-shadow(0 0 6px rgba(204,156,66,.35));filter:brightness(1.18)drop-shadow(0 0 6px color(display-p3 .76996 .617341 .321369/.35));filter:brightness(1.18)drop-shadow(0 0 6px lab(67.5798% 11.9379 52.333/.35));outline:none}.vedic-cell:focus-visible{outline:2px solid var(--gold);outline-offset:-3px}#info-panel{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius);grid-template-columns:1fr 1fr;gap:6px 12px;width:100%;max-width:640px;max-height:220px;margin:0 auto;padding:10px 14px;display:grid;overflow-y:auto}.info-row{flex-direction:column;gap:1px;display:flex}.info-label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-size:9px;font-weight:700}.info-value{color:var(--text);font-size:12px;font-weight:500}@media (max-width:420px){#app{gap:8px;padding:8px}#info-panel{grid-template-columns:1fr}}.error-state{min-height:200px;color:var(--muted);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:24px;display:flex}.error-icon{opacity:.5;font-size:24px}.error-retry-btn{border:1px solid var(--border-strong);color:var(--gold);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(122,128,141,.12);background:color(display-p3 .483965 .502358 .546955/.12);background:lab(53.5049% -.313222 -7.47857/.12)}.chart-status{-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-radius:var(--radius-pill);color:var(--gold);letter-spacing:.04em;z-index:900;opacity:0;pointer-events:none;background:rgba(5,7,13,.92);background:color(display-p3 .0216592 .0280553 .0483601/.92);background:lab(1.95095% .0425801 -2.41514/.92);border:1px solid rgba(204,156,66,.35);border:1px solid color(display-p3 .76996 .617341 .321369/.35);border:1px solid lab(67.5798% 11.9379 52.333/.35);max-height:0;padding:5px 18px;font-size:11px;font-weight:600;transition:max-height .24s cubic-bezier(.16,1,.3,1),opacity .24s,transform .24s cubic-bezier(.16,1,.3,1);position:fixed;top:10px;left:50%;overflow:hidden;transform:translate(-50%)translateY(-10px);box-shadow:0 4px 20px rgba(0,0,0,.5),0 0 0 1px rgba(204,156,66,.08);box-shadow:0 4px 20px color(display-p3 0 0 0/.5),0 0 0 1px color(display-p3 .76996 .617341 .321369/.08);box-shadow:0 4px 20px lab(0% 0 0/.5),0 0 0 1px lab(67.5798% 11.9379 52.333/.08)}.chart-status.visible{opacity:1;max-height:44px;transform:translate(-50%)translateY(0)}.vedic-popup{background:var(--surface-2);border:1px solid var(--border-strong);z-index:1000;opacity:0;pointer-events:none;border-radius:12px;width:min(320px,92vw);padding:14px 16px 12px;transition:opacity .2s cubic-bezier(.16,1,.3,1);position:fixed;box-shadow:0 12px 48px rgba(0,0,0,.7),0 0 0 1px rgba(204,156,66,.15);box-shadow:0 12px 48px color(display-p3 0 0 0/.7),0 0 0 1px color(display-p3 .76996 .617341 .321369/.15);box-shadow:0 12px 48px lab(0% 0 0/.7),0 0 0 1px lab(67.5798% 11.9379 52.333/.15)}.vedic-popup.visible{opacity:1;pointer-events:all}.vedic-popup-header{align-items:flex-start;gap:10px;display:flex}.vedic-popup-title{color:var(--text);flex:1;font-size:13px;font-weight:700}.vedic-popup-sub{color:var(--text-secondary);margin-top:2px;font-size:11px;font-weight:400}.vedic-popup-close{cursor:pointer;color:var(--muted);background:0 0;border:none;border-radius:4px;flex-shrink:0;padding:2px 4px;font-size:15px;line-height:1;transition:color .12s}.vedic-popup-close:hover{color:var(--text)}.ask-claude-btn{border-radius:var(--radius-sm);width:100%;color:var(--gold);font:inherit;letter-spacing:.04em;cursor:pointer;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);justify-content:center;align-items:center;gap:6px;margin-top:12px;padding:9px 16px;font-size:12px;font-weight:600;transition:background .16s,border-color .16s,box-shadow .16s;display:flex}.ask-claude-btn:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65);box-shadow:0 0 0 3px rgba(204,156,66,.12);box-shadow:0 0 0 3px color(display-p3 .76996 .617341 .321369/.12);box-shadow:0 0 0 3px lab(67.5798% 11.9379 52.333/.12)}.ask-claude-btn:disabled{opacity:.45;cursor:not-allowed}.ask-claude-btn.sending{opacity:.8;cursor:wait;pointer-events:none}.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)}.vedic-action-bar{flex-wrap:wrap;gap:8px;padding:10px 16px 6px;display:flex}.action-btn{color:var(--gold);letter-spacing:.02em;cursor:pointer;white-space:nowrap;background:rgba(204,156,66,.08);background:color(display-p3 .76996 .617341 .321369/.08);background:lab(67.5798% 11.9379 52.333/.08);border:1px solid rgba(204,156,66,.3);border:1px solid color(display-p3 .76996 .617341 .321369/.3);border:1px solid lab(67.5798% 11.9379 52.333/.3);border-radius:8px;align-items:center;gap:6px;padding:7px 16px;font-size:12px;font-weight:600;transition:background .2s,border-color .2s,transform .1s;display:inline-flex}.action-btn:hover{background:rgba(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,.5);border-color:color(display-p3 .76996 .617341 .321369/.5);border-color:lab(67.5798% 11.9379 52.333/.5);transform:translateY(-1px)}.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);transform:translateY(0)}.action-btn--primary{background:linear-gradient(135deg,rgba(204,156,66,.2),rgba(166,117,55,.25));background:linear-gradient(135deg,color(display-p3 .76996 .617341 .321369/.2),color(display-p3 .622862 .466276 .257278/.25));background:linear-gradient(135deg,lab(67.5798% 11.9379 52.333/.2),lab(53.4364% 15.3976 41.3855/.25));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:linear-gradient(135deg,rgba(204,156,66,.3),rgba(166,117,55,.35));background:linear-gradient(135deg,color(display-p3 .76996 .617341 .321369/.3),color(display-p3 .622862 .466276 .257278/.35));background:linear-gradient(135deg,lab(67.5798% 11.9379 52.333/.3),lab(53.4364% 15.3976 41.3855/.35))}.tooltip{-webkit-backdrop-filter:blur(14px)saturate(1.6);backdrop-filter:blur(14px)saturate(1.6);border:1px solid var(--border-strong);border-radius:var(--radius);pointer-events:none;z-index:1000;opacity:0;background:rgba(7,9,14,.92);background:color(display-p3 .0286832 .0352525 .0537785/.92);background:lab(2.44746% .00379235 -2.33402/.92);max-width:220px;padding:8px 12px;font-size:12px;transition:opacity .12s;position:fixed;box-shadow:0 8px 32px rgba(0,0,0,.55);box-shadow:0 8px 32px color(display-p3 0 0 0/.55);box-shadow:0 8px 32px lab(0% 0 0/.55)}.tooltip.visible{opacity:1}.tooltip-title{color:var(--text);margin-bottom:2px;font-weight:700}.tooltip-detail{color:var(--text-secondary);line-height:1.4}.tooltip-hint{color:var(--gold-dim);letter-spacing:.03em;margin-top:4px;font-size:10px}.pan-zoom-controls{z-index:800;flex-direction:column;gap:6px;display:flex;position:absolute;bottom:12px;right:12px}.pan-zoom-controls[hidden]{display:none!important}.pan-btn{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);border-radius:var(--radius-sm);cursor:pointer;width:36px;height:36px;box-shadow:var(--oe-shadow-md);justify-content:center;align-items:center;font-family:inherit;font-size:18px;transition:all .15s;display:flex}.pan-btn.reset{width:auto;padding:0 10px;font-size:11px;font-weight:500}.pan-btn:hover{background:var(--surface);border-color:var(--gold-dim);color:var(--gold)}.pan-btn:active{transform:scale(.95)}.pan-btn--fullscreen{width:36px;height:36px}@media (max-width:480px){.pan-zoom-controls{gap:5px}.pan-btn,.pan-btn--fullscreen{background:color-mix(in oklab, var(--surface-2) 72%, transparent);-webkit-backdrop-filter:blur(6px);width:32px;height:32px;font-size:15px}.pan-btn.reset{width:32px;padding:0;font-size:0}.pan-btn.reset:before{content:"⟲";font-size:15px}}.cancel-toast{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text-secondary);border-radius:var(--radius-sm);opacity:0;z-index:9999;pointer-events:none;box-shadow:var(--oe-shadow-md);padding:8px 16px;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)}:root[data-theme=light] .chart-status,:root[data-theme=light] .tooltip{background:rgba(251,252,254,.92);background:color(display-p3 .98376 .986943 .994535/.92);background:lab(98.8273% -.0742674 -1.13657/.92)}:root[data-theme=light] .vedic-popup{background:var(--surface);border-color:var(--border-strong)}:root[data-theme=light] #info-panel{background:var(--surface);border-color:var(--border)}
14
14
  /*$vite$:1*/</style>
15
15
  </head>
16
16
  <body>
@@ -20,7 +20,7 @@
20
20
  <p>Casting your Jyotish chart…</p>
21
21
  </div>
22
22
  <div id="chart-status" class="chart-status" aria-live="polite"></div>
23
- <div id="vedic-container" hidden>
23
+ <div id="vedic-container" class="oe-stage" hidden>
24
24
  <div id="pan-zoom-controls" class="pan-zoom-controls" hidden>
25
25
  <button id="btn-zoom-in" class="pan-btn" aria-label="Zoom in">+</button>
26
26
  <button id="btn-zoom-out" class="pan-btn" aria-label="Zoom out">-</button>
@@ -126,7 +126,7 @@ var l = /* @__PURE__ */ Symbol("zod_brand"), u = class extends Error {
126
126
  function p(e4) {
127
127
  return e4 && Object.assign(f, e4), f;
128
128
  }
129
- var ee = t({ BIGINT_FORMAT_RANGES: () => je, Class: () => $e, NUMBER_FORMAT_RANGES: () => Ae, aborted: () => ze, allowsEval: () => ye, assert: () => re, assertEqual: () => te, assertIs: () => h, assertNever: () => ne, assertNotEqual: () => m, assignProp: () => le, base64ToUint8Array: () => qe, base64urlToUint8Array: () => Ye, cached: () => ie, captureStackTrace: () => _e, cleanEnum: () => Ke, cleanRegex: () => oe, clone: () => De, cloneDef: () => de, createTransparentProxy: () => Oe, defineLazy: () => b, esc: () => he, escapeRegex: () => Ee, extend: () => Pe, finalizeIssue: () => He, floatSafeRemainder: () => y, getElementAtPath: () => fe, getEnumValues: () => g, getLengthableOrigin: () => We, getParsedType: () => Ce, getSizableOrigin: () => Ue, hexToUint8Array: () => Ze, isObject: () => ve, isPlainObject: () => be, issue: () => Ge, joinValues: () => _, jsonStringifyReplacer: () => v, merge: () => Ie, mergeDefs: () => ue, normalizeParams: () => x, nullish: () => ae, numKeys: () => Se, objectClone: () => ce, omit: () => Ne, optionalKeys: () => ke, parsedType: () => C, partial: () => Le, pick: () => Me, prefixIssues: () => Be, primitiveTypes: () => Te, promiseAllObject: () => pe, propertyKeyTypes: () => we, randomString: () => me, required: () => Re, safeExtend: () => Fe, shallowClone: () => xe, slugify: () => ge, stringifyPrimitive: () => S, uint8ArrayToBase64: () => Je, uint8ArrayToBase64url: () => Xe, uint8ArrayToHex: () => Qe, unwrapMessage: () => Ve });
129
+ var ee = t({ BIGINT_FORMAT_RANGES: () => je, Class: () => $e, NUMBER_FORMAT_RANGES: () => Ae, aborted: () => ze, allowsEval: () => ye, assert: () => re, assertEqual: () => te, assertIs: () => h, assertNever: () => ne, assertNotEqual: () => m, assignProp: () => le, base64ToUint8Array: () => qe, base64urlToUint8Array: () => Ye, cached: () => ie, captureStackTrace: () => _e, cleanEnum: () => Ke, cleanRegex: () => oe, clone: () => De, cloneDef: () => de, createTransparentProxy: () => Oe, defineLazy: () => b, esc: () => he, escapeRegex: () => Ee, extend: () => Pe, finalizeIssue: () => He, floatSafeRemainder: () => se, getElementAtPath: () => fe, getEnumValues: () => g, getLengthableOrigin: () => We, getParsedType: () => Ce, getSizableOrigin: () => Ue, hexToUint8Array: () => Ze, isObject: () => ve, isPlainObject: () => be, issue: () => Ge, joinValues: () => _, jsonStringifyReplacer: () => v, merge: () => Ie, mergeDefs: () => ue, normalizeParams: () => x, nullish: () => ae, numKeys: () => Se, objectClone: () => ce, omit: () => Ne, optionalKeys: () => ke, parsedType: () => C, partial: () => Le, pick: () => Me, prefixIssues: () => Be, primitiveTypes: () => Te, promiseAllObject: () => pe, propertyKeyTypes: () => we, randomString: () => me, required: () => Re, safeExtend: () => Fe, shallowClone: () => xe, slugify: () => ge, stringifyPrimitive: () => S, uint8ArrayToBase64: () => Je, uint8ArrayToBase64url: () => Xe, uint8ArrayToHex: () => Qe, unwrapMessage: () => Ve });
130
130
  function te(e4) {
131
131
  return e4;
132
132
  }
@@ -166,7 +166,7 @@ function oe(e4) {
166
166
  let t2 = +!!e4.startsWith("^"), n2 = e4.endsWith("$") ? e4.length - 1 : e4.length;
167
167
  return e4.slice(t2, n2);
168
168
  }
169
- function y(e4, t2) {
169
+ function se(e4, t2) {
170
170
  let n2 = (e4.toString().split(".")[1] || "").length, r2 = t2.toString(), i2 = (r2.split(".")[1] || "").length;
171
171
  if (i2 === 0 && /\d?e-\d?/.test(r2)) {
172
172
  let e5 = r2.match(/\d?e-(\d?)/);
@@ -175,11 +175,11 @@ function y(e4, t2) {
175
175
  let a2 = n2 > i2 ? n2 : i2;
176
176
  return Number.parseInt(e4.toFixed(a2).replace(".", "")) % Number.parseInt(t2.toFixed(a2).replace(".", "")) / 10 ** a2;
177
177
  }
178
- var se = /* @__PURE__ */ Symbol("evaluating");
178
+ var y = /* @__PURE__ */ Symbol("evaluating");
179
179
  function b(e4, t2, n2) {
180
180
  let r2;
181
181
  Object.defineProperty(e4, t2, { get() {
182
- if (r2 !== se) return r2 === void 0 && (r2 = se, r2 = n2()), r2;
182
+ if (r2 !== y) return r2 === void 0 && (r2 = y, r2 = n2()), r2;
183
183
  }, set(n3) {
184
184
  Object.defineProperty(e4, t2, { value: n3 });
185
185
  }, configurable: true });
@@ -630,7 +630,7 @@ var On = /^[0-9a-fA-F]{32}$/, kn = En(22, "=="), An = Dn(22), jn = /^[0-9a-fA-F]
630
630
  (n2 = e5._zod.bag).multipleOf != null || (n2.multipleOf = t2.value);
631
631
  }), e4._zod.check = (n2) => {
632
632
  if (typeof n2.value != typeof t2.value) throw Error("Cannot mix number and bigint in multiple_of check.");
633
- (typeof n2.value == "bigint" ? n2.value % t2.value === BigInt(0) : y(n2.value, t2.value) === 0) || n2.issues.push({ origin: typeof n2.value, code: "not_multiple_of", divisor: t2.value, input: n2.value, inst: e4, continue: !t2.abort });
633
+ (typeof n2.value == "bigint" ? n2.value % t2.value === BigInt(0) : se(n2.value, t2.value) === 0) || n2.issues.push({ origin: typeof n2.value, code: "not_multiple_of", divisor: t2.value, input: n2.value, inst: e4, continue: !t2.abort });
634
634
  };
635
635
  }), qn = c("$ZodCheckNumberFormat", (e4, t2) => {
636
636
  var n2;
@@ -2447,22 +2447,22 @@ var Aa = () => {
2447
2447
  }
2448
2448
  if (t3.origin === "number") return "\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ".concat(n4, " \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ").concat(t3.inclusive ? "\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-".concat(t3.minimum) : "\u05D2\u05D3\u05D5\u05DC \u05DE-".concat(t3.minimum));
2449
2449
  if (t3.origin === "array" || t3.origin === "set") {
2450
- var oe2, y2;
2450
+ var oe2, se2;
2451
2451
  let r4 = t3.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA";
2452
- return t3.minimum === 1 && t3.inclusive ? "\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ".concat(n4, " ").concat(r4, " \u05DC\u05D4\u05DB\u05D9\u05DC ").concat((t3.origin, "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3")) : "\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ".concat(n4, " ").concat(r4, " \u05DC\u05D4\u05DB\u05D9\u05DC ").concat(t3.inclusive ? "".concat(t3.minimum, " ").concat((oe2 = e5 == null ? void 0 : e5.unit) == null ? "" : oe2, " \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8") : "\u05D9\u05D5\u05EA\u05E8 \u05DE-".concat(t3.minimum, " ").concat((y2 = e5 == null ? void 0 : e5.unit) == null ? "" : y2)).trim();
2452
+ return t3.minimum === 1 && t3.inclusive ? "\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ".concat(n4, " ").concat(r4, " \u05DC\u05D4\u05DB\u05D9\u05DC ").concat((t3.origin, "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3")) : "\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ".concat(n4, " ").concat(r4, " \u05DC\u05D4\u05DB\u05D9\u05DC ").concat(t3.inclusive ? "".concat(t3.minimum, " ").concat((oe2 = e5 == null ? void 0 : e5.unit) == null ? "" : oe2, " \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8") : "\u05D9\u05D5\u05EA\u05E8 \u05DE-".concat(t3.minimum, " ").concat((se2 = e5 == null ? void 0 : e5.unit) == null ? "" : se2)).trim();
2453
2453
  }
2454
2454
  let r3 = t3.inclusive ? ">=" : ">", s3 = a2((g2 = t3.origin) == null ? "value" : g2);
2455
2455
  return e5 != null && e5.unit ? "".concat(e5.shortLabel, " \u05DE\u05D3\u05D9: ").concat(n4, " ").concat(s3, " ").concat(r3).concat(t3.minimum.toString(), " ").concat(e5.unit) : "".concat((v2 = e5 == null ? void 0 : e5.shortLabel) == null ? "\u05E7\u05D8\u05DF" : v2, " \u05DE\u05D3\u05D9: ").concat(n4, " ").concat(s3, " ").concat(r3).concat(t3.minimum.toString());
2456
2456
  }
2457
2457
  case "invalid_format": {
2458
- var se2, b2;
2458
+ var y2, b2;
2459
2459
  let e5 = t3;
2460
2460
  if (e5.format === "starts_with") return '\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 "'.concat(e5.prefix, '"');
2461
2461
  if (e5.format === "ends_with") return '\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 "'.concat(e5.suffix, '"');
2462
2462
  if (e5.format === "includes") return '\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC "'.concat(e5.includes, '"');
2463
2463
  if (e5.format === "regex") return "\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ".concat(e5.pattern);
2464
2464
  let n4 = s2[e5.format];
2465
- return "".concat((se2 = n4 == null ? void 0 : n4.label) == null ? e5.format : se2, " \u05DC\u05D0 ").concat(((b2 = n4 == null ? void 0 : n4.gender) == null ? "m" : b2) === "f" ? "\u05EA\u05E7\u05D9\u05E0\u05D4" : "\u05EA\u05E7\u05D9\u05DF");
2465
+ return "".concat((y2 = n4 == null ? void 0 : n4.label) == null ? e5.format : y2, " \u05DC\u05D0 ").concat(((b2 = n4 == null ? void 0 : n4.gender) == null ? "m" : b2) === "f" ? "\u05EA\u05E7\u05D9\u05E0\u05D4" : "\u05EA\u05E7\u05D9\u05DF");
2466
2466
  }
2467
2467
  case "not_multiple_of":
2468
2468
  return "\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ".concat(t3.divisor);
@@ -6329,7 +6329,15 @@ async function Qg(e4, t2, n2 = "") {
6329
6329
  }
6330
6330
  return r2.value;
6331
6331
  }
6332
- var $g = class e3 extends wg {
6332
+ function $g(e4, t2 = document.documentElement) {
6333
+ for (let [n2, r2] of Object.entries(e4)) r2 !== void 0 && t2.style.setProperty(n2, r2);
6334
+ }
6335
+ function e_(e4) {
6336
+ if (document.getElementById("__mcp-host-fonts")) return;
6337
+ let t2 = document.createElement("style");
6338
+ t2.id = "__mcp-host-fonts", t2.textContent = e4, document.head.appendChild(t2);
6339
+ }
6340
+ var t_ = class e3 extends wg {
6333
6341
  _assertInitialized(e4) {
6334
6342
  var t2;
6335
6343
  if (this._initializedSent) return;
@@ -6561,40 +6569,40 @@ var $g = class e3 extends wg {
6561
6569
  }
6562
6570
  }
6563
6571
  };
6564
- o($g, "ONE_SHOT_EVENTS", /* @__PURE__ */ new Set(["toolinput", "toolinputpartial", "toolresult", "toolcancelled"]));
6565
- var e_ = null;
6566
- function t_(e4) {
6567
- e_ = e4;
6568
- }
6572
+ o(t_, "ONE_SHOT_EVENTS", /* @__PURE__ */ new Set(["toolinput", "toolinputpartial", "toolresult", "toolcancelled"]));
6569
6573
  var n_ = null;
6570
6574
  function r_(e4) {
6571
6575
  n_ = e4;
6572
6576
  }
6573
6577
  var i_ = null;
6574
- function a_() {
6575
- return i_ || (i_ = document.getElementById("tooltip")), i_;
6578
+ function a_(e4) {
6579
+ i_ = e4;
6576
6580
  }
6577
- function o_(e4, t2, n2, r2, i2) {
6578
- let a2 = a_();
6581
+ var o_ = null;
6582
+ function s_() {
6583
+ return o_ || (o_ = document.getElementById("tooltip")), o_;
6584
+ }
6585
+ function c_(e4, t2, n2, r2, i2) {
6586
+ let a2 = s_();
6579
6587
  if (!a2) return;
6580
- a2.innerHTML = '\n <div class="tooltip-title">'.concat(p_(n2), '</div>\n <div class="tooltip-detail">').concat(p_(r2), "</div>\n ").concat(i2 ? '<div class="tooltip-hint">'.concat(p_(i2), "</div>") : "", "\n ");
6588
+ a2.innerHTML = '\n <div class="tooltip-title">'.concat(h_(n2), '</div>\n <div class="tooltip-detail">').concat(h_(r2), "</div>\n ").concat(i2 ? '<div class="tooltip-hint">'.concat(h_(i2), "</div>") : "", "\n ");
6581
6589
  let o2 = a2.getBoundingClientRect(), s2 = o2.width || 220, c2 = o2.height || 70, l2 = e4 + 14, u2 = t2 + 10;
6582
6590
  l2 + s2 > window.innerWidth && (l2 = e4 - s2 - 8), u2 + c2 > window.innerHeight && (u2 = t2 - c2 - 8), a2.style.left = "".concat(l2, "px"), a2.style.top = "".concat(u2, "px"), a2.classList.add("visible");
6583
6591
  }
6584
- function s_() {
6592
+ function l_() {
6585
6593
  var e4;
6586
- (e4 = a_()) == null || e4.classList.remove("visible");
6594
+ (e4 = s_()) == null || e4.classList.remove("visible");
6587
6595
  }
6588
- var c_ = null;
6589
- function l_() {
6590
- return c_ || (c_ = document.createElement("div"), c_.id = "vedic-popup-panel", c_.className = "vedic-popup", document.body.appendChild(c_)), c_;
6596
+ var u_ = null;
6597
+ function d_() {
6598
+ return u_ || (u_ = document.createElement("div"), u_.id = "vedic-popup-panel", u_.className = "vedic-popup", document.body.appendChild(u_)), u_;
6591
6599
  }
6592
- function u_() {
6593
- c_ == null || c_.classList.remove("visible"), n_ == null || n_(null);
6600
+ function f_() {
6601
+ u_ == null || u_.classList.remove("visible"), i_ == null || i_(null);
6594
6602
  }
6595
- function d_(e4, t2, n2, r2) {
6603
+ function p_(e4, t2, n2, r2) {
6596
6604
  var i2;
6597
- let a2 = e_ ? '<button class="ask-claude-btn" id="vedic-ask-claude-btn">Interpret</button>' : "", o2 = '\n <div class="vedic-popup-header">\n <div class="vedic-popup-title">\n <strong>'.concat(p_(t2), '</strong>\n <div class="vedic-popup-sub">').concat(p_(n2), '</div>\n </div>\n <button class="vedic-popup-close" id="vedic-popup-close">\u2715</button>\n </div>\n ').concat(a2, "\n "), s2 = l_();
6605
+ let a2 = n_ ? '<button class="ask-claude-btn" id="vedic-ask-claude-btn">Interpret</button>' : "", o2 = '\n <div class="vedic-popup-header">\n <div class="vedic-popup-title">\n <strong>'.concat(h_(t2), '</strong>\n <div class="vedic-popup-sub">').concat(h_(n2), '</div>\n </div>\n <button class="vedic-popup-close" id="vedic-popup-close">\u2715</button>\n </div>\n ').concat(a2, "\n "), s2 = d_();
6598
6606
  s2.innerHTML = o2, s2.classList.add("visible"), requestAnimationFrame(() => {
6599
6607
  let t3 = s2.getBoundingClientRect(), n3 = s2.offsetParent, r3, i3, a3, o3;
6600
6608
  if (n3) {
@@ -6603,14 +6611,14 @@ function d_(e4, t2, n2, r2) {
6603
6611
  } else r3 = window.innerWidth, i3 = window.innerHeight, a3 = 0, o3 = 0;
6604
6612
  let c2 = e4.clientX - a3 + 14, l2 = e4.clientY - o3 + 14;
6605
6613
  c2 + t3.width > r3 - 14 && (c2 = e4.clientX - a3 - t3.width - 14), l2 + t3.height > i3 - 14 && (l2 = e4.clientY - o3 - t3.height - 14), c2 = Math.max(14, c2), l2 = Math.max(14, l2), s2.style.left = "".concat(c2, "px"), s2.style.top = "".concat(l2, "px");
6606
- }), (i2 = document.getElementById("vedic-popup-close")) == null || i2.addEventListener("click", u_), f_(s2, r2);
6614
+ }), (i2 = document.getElementById("vedic-popup-close")) == null || i2.addEventListener("click", f_), m_(s2, r2);
6607
6615
  }
6608
- function f_(e4, t2) {
6616
+ function m_(e4, t2) {
6609
6617
  var n2;
6610
6618
  (n2 = e4.querySelector("#vedic-ask-claude-btn")) == null || n2.addEventListener("click", () => {
6611
- if (!e_) return;
6619
+ if (!n_) return;
6612
6620
  let n3 = e4.querySelector("#vedic-ask-claude-btn");
6613
- !n3 || n3.disabled || (n3.disabled = true, n3.textContent = "Sending\u2026", n3.classList.add("sending"), e_(t2).then(() => {
6621
+ !n3 || n3.disabled || (n3.disabled = true, n3.textContent = "Sending\u2026", n3.classList.add("sending"), n_(t2).then(() => {
6614
6622
  n3.textContent = "Sent", n3.classList.remove("sending"), n3.classList.add("sent"), setTimeout(() => {
6615
6623
  n3.textContent = "Interpret", n3.classList.remove("sent"), n3.disabled = false;
6616
6624
  }, 2500);
@@ -6619,69 +6627,71 @@ function f_(e4, t2) {
6619
6627
  }));
6620
6628
  });
6621
6629
  }
6622
- function p_(e4) {
6630
+ function h_(e4) {
6623
6631
  return e4.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
6624
6632
  }
6625
- var m_ = { Aries: "initiation & courage", Taurus: "stability & resource", Gemini: "communication & duality", Cancer: "nurture & emotional memory", Leo: "sovereignty & self-expression", Virgo: "refinement & service", Libra: "balance & relationship", Scorpio: "transformation & depth", Sagittarius: "expansion & meaning", Capricorn: "structure & discipline", Aquarius: "vision & detachment", Pisces: "dissolution & compassion" };
6626
- function h_(e4, t2) {
6633
+ var g_ = { Aries: "initiation & courage", Taurus: "stability & resource", Gemini: "communication & duality", Cancer: "nurture & emotional memory", Leo: "sovereignty & self-expression", Virgo: "refinement & service", Libra: "balance & relationship", Scorpio: "transformation & depth", Sagittarius: "expansion & meaning", Capricorn: "structure & discipline", Aquarius: "vision & detachment", Pisces: "dissolution & compassion" };
6634
+ function __(e4, t2) {
6627
6635
  var n2, r2, i2, a2, o2, s2;
6628
6636
  let c2 = document.getElementById(t2), l2 = c2 == null ? void 0 : c2.querySelector("#btn-zoom-in"), u2 = c2 == null ? void 0 : c2.querySelector("#btn-zoom-out"), d2 = c2 == null ? void 0 : c2.querySelector("#btn-reset-view");
6629
6637
  c2 && (c2.hidden = false);
6630
6638
  let f2 = (n2 = (r2 = e4.getAttribute("viewBox")) == null ? void 0 : r2.split(/[\s,]+/).map(Number)) == null ? [0, 0, 500, 500] : n2, p2 = (i2 = f2[0]) == null ? 0 : i2, ee2 = (a2 = f2[1]) == null ? 0 : a2, te2 = (o2 = f2[2]) == null ? 500 : o2, m2 = (s2 = f2[3]) == null ? 500 : s2, h2 = te2 / 5, ne2 = te2 * 2, re2 = p2, g2 = ee2, _2 = te2, v2 = m2;
6631
- e4.style.touchAction = "none";
6632
- let ie2 = () => e4.setAttribute("viewBox", "".concat(re2, " ").concat(g2, " ").concat(_2, " ").concat(v2)), ae2 = (e5, t3, n3) => {
6639
+ e4.classList.add("oe-pannable");
6640
+ let ie2 = () => document.body.classList.contains("is-fullscreen"), ae2 = () => e4.setAttribute("viewBox", "".concat(re2, " ").concat(g2, " ").concat(_2, " ").concat(v2)), oe2 = (e5, t3, n3) => {
6633
6641
  t3 === void 0 && (t3 = re2 + _2 / 2), n3 === void 0 && (n3 = g2 + v2 / 2);
6634
6642
  let r3 = _2 * e5;
6635
- r3 < h2 && (r3 = h2), r3 > ne2 && (r3 = ne2), r3 !== _2 && (e5 = r3 / _2, re2 = t3 - (t3 - re2) * e5, g2 = n3 - (n3 - g2) * e5, _2 = r3, v2 *= e5, ie2());
6643
+ r3 < h2 && (r3 = h2), r3 > ne2 && (r3 = ne2), r3 !== _2 && (e5 = r3 / _2, re2 = t3 - (t3 - re2) * e5, g2 = n3 - (n3 - g2) * e5, _2 = r3, v2 *= e5, ae2());
6636
6644
  };
6637
- l2 == null || l2.addEventListener("click", () => ae2(0.8)), u2 == null || u2.addEventListener("click", () => ae2(1.25)), d2 == null || d2.addEventListener("click", () => {
6638
- re2 = p2, g2 = ee2, _2 = te2, v2 = m2, ie2();
6645
+ l2 == null || l2.addEventListener("click", () => oe2(0.8)), u2 == null || u2.addEventListener("click", () => oe2(1.25)), d2 == null || d2.addEventListener("click", () => {
6646
+ re2 = p2, g2 = ee2, _2 = te2, v2 = m2, ae2();
6639
6647
  });
6640
- let oe2 = (t3, n3) => {
6648
+ let se2 = (t3, n3) => {
6641
6649
  let r3 = e4.getBoundingClientRect();
6642
6650
  return { x: re2 + (t3 - r3.left) / r3.width * _2, y: g2 + (n3 - r3.top) / r3.height * v2 };
6643
6651
  };
6644
6652
  e4.addEventListener("wheel", (e5) => {
6653
+ if (!ie2() && !e5.ctrlKey && !e5.metaKey) return;
6645
6654
  e5.preventDefault();
6646
- let t3 = Math.exp((e5.deltaY < 0 ? -1 : 1) * 0.1), n3 = oe2(e5.clientX, e5.clientY);
6647
- ae2(t3, n3.x, n3.y);
6655
+ let t3 = Math.exp((e5.deltaY < 0 ? -1 : 1) * 0.1), n3 = se2(e5.clientX, e5.clientY);
6656
+ oe2(t3, n3.x, n3.y);
6648
6657
  }, { passive: false });
6649
- let y2 = /* @__PURE__ */ new Map(), se2 = null, b2 = () => {
6658
+ let y2 = /* @__PURE__ */ new Map(), b2 = null, ce2 = () => {
6650
6659
  let [e5, t3] = [...y2.values()];
6651
6660
  return { dist: Math.hypot(e5.x - t3.x, e5.y - t3.y), midX: (e5.x + t3.x) / 2, midY: (e5.y + t3.y) / 2 };
6652
- }, ce2 = (t3, n3) => {
6661
+ }, le2 = (t3, n3) => {
6653
6662
  let r3 = e4.getBoundingClientRect();
6654
- re2 -= t3 / r3.width * _2, g2 -= n3 / r3.height * v2, ie2();
6663
+ re2 -= t3 / r3.width * _2, g2 -= n3 / r3.height * v2, ae2();
6655
6664
  };
6656
6665
  e4.addEventListener("pointerdown", (t3) => {
6666
+ if (t3.pointerType === "touch" && !ie2()) return;
6657
6667
  let n3 = t3.target, r3 = !!(n3.closest && (n3.closest('[class*="-hit"]') || n3.closest('[class*="-activation"]') || n3.closest(".variable-arrow") || n3.closest("button")));
6658
- y2.set(t3.pointerId, { x: t3.clientX, y: t3.clientY, interactive: r3 }), r3 || (e4.setPointerCapture(t3.pointerId), e4.style.cursor = "grabbing"), y2.size === 2 && (se2 = b2());
6668
+ y2.set(t3.pointerId, { x: t3.clientX, y: t3.clientY, interactive: r3 }), r3 || (e4.setPointerCapture(t3.pointerId), e4.style.cursor = "grabbing"), y2.size === 2 && (b2 = ce2());
6659
6669
  }), e4.addEventListener("pointermove", (e5) => {
6660
6670
  let t3 = y2.get(e5.pointerId);
6661
- if (t3) if (y2.set(e5.pointerId, { x: e5.clientX, y: e5.clientY, interactive: t3.interactive }), y2.size >= 2 && se2) {
6662
- let e6 = b2();
6663
- if (se2.dist > 0 && e6.dist > 0) {
6664
- let t4 = oe2(e6.midX, e6.midY);
6665
- ae2(se2.dist / e6.dist, t4.x, t4.y);
6666
- }
6667
- ce2(e6.midX - se2.midX, e6.midY - se2.midY), se2 = e6;
6668
- } else y2.size === 1 && !t3.interactive && ce2(e5.clientX - t3.x, e5.clientY - t3.y);
6671
+ if (t3) if (y2.set(e5.pointerId, { x: e5.clientX, y: e5.clientY, interactive: t3.interactive }), y2.size >= 2 && b2) {
6672
+ let e6 = ce2();
6673
+ if (b2.dist > 0 && e6.dist > 0) {
6674
+ let t4 = se2(e6.midX, e6.midY);
6675
+ oe2(b2.dist / e6.dist, t4.x, t4.y);
6676
+ }
6677
+ le2(e6.midX - b2.midX, e6.midY - b2.midY), b2 = e6;
6678
+ } else y2.size === 1 && !t3.interactive && le2(e5.clientX - t3.x, e5.clientY - t3.y);
6669
6679
  });
6670
- let le2 = (t3) => {
6671
- y2.delete(t3.pointerId) && (e4.hasPointerCapture(t3.pointerId) && e4.releasePointerCapture(t3.pointerId), se2 = y2.size >= 2 ? b2() : null, y2.size === 0 && (e4.style.cursor = "default"));
6680
+ let ue2 = (t3) => {
6681
+ y2.delete(t3.pointerId) && (e4.hasPointerCapture(t3.pointerId) && e4.releasePointerCapture(t3.pointerId), b2 = y2.size >= 2 ? ce2() : null, y2.size === 0 && (e4.style.cursor = "default"));
6672
6682
  };
6673
- e4.addEventListener("pointerup", le2), e4.addEventListener("pointercancel", le2);
6683
+ e4.addEventListener("pointerup", ue2), e4.addEventListener("pointercancel", ue2);
6674
6684
  }
6675
- function g_(e4, t2, n2, r2) {
6685
+ function v_(e4, t2, n2, r2) {
6676
6686
  var i2, a2;
6677
- t_((i2 = r2.onAskClaude) == null ? null : i2);
6687
+ r_((i2 = r2.onAskClaude) == null ? null : i2);
6678
6688
  let o2 = e4.querySelector("#pan-zoom-controls");
6679
6689
  e4.innerHTML = "", o2 && e4.appendChild(o2);
6680
6690
  let s2 = document.createElement("div");
6681
6691
  s2.style.cssText = "width:100%;height:100%;", s2.innerHTML = t2;
6682
6692
  let c2 = s2.querySelector("svg");
6683
6693
  if (!c2) return console.error("[wire-go-svg] No <svg> element found in payload"), null;
6684
- c2.setAttribute("width", "100%"), c2.setAttribute("height", "100%"), c2.setAttribute("role", "group"), c2.setAttribute("aria-label", "Vedic Jyotish Rashi Chart"), c2.addEventListener("click", (e5) => e5.stopPropagation()), e4.appendChild(c2), h_(c2, "pan-zoom-controls");
6694
+ c2.setAttribute("width", "100%"), c2.setAttribute("height", "100%"), c2.setAttribute("role", "group"), c2.setAttribute("aria-label", "Vedic Jyotish Rashi Chart"), c2.addEventListener("click", (e5) => e5.stopPropagation()), e4.appendChild(c2), __(c2, "pan-zoom-controls");
6685
6695
  let l2 = /* @__PURE__ */ new Map();
6686
6696
  for (let e5 of (a2 = n2.planets) == null ? [] : a2) {
6687
6697
  var u2;
@@ -6700,10 +6710,10 @@ function g_(e4, t2, n2, r2) {
6700
6710
  var t3, n3, r3;
6701
6711
  let i3 = d2(e5.target);
6702
6712
  if (!i3) return;
6703
- let a3 = (t3 = i3.getAttribute("data-sign")) == null ? "" : t3, o3 = i3.getAttribute("data-lagna") === "true", s3 = (n3 = l2.get(a3)) == null ? [] : n3, c3 = s3.length ? s3.map((e6) => "".concat(e6.planet, " ").concat(e6.rashi_degree.toFixed(1), "\xB0").concat(e6.is_retrograde ? " \u211E" : "")).join(", ") : "Unoccupied", u3 = (r3 = m_[a3]) == null ? "" : r3;
6704
- o_(e5.clientX, e5.clientY, "".concat(a3).concat(o3 ? " \u2014 Lagna" : ""), c3, u3 ? "".concat(u3, " \xB7 click to interpret") : "Click to interpret");
6713
+ let a3 = (t3 = i3.getAttribute("data-sign")) == null ? "" : t3, o3 = i3.getAttribute("data-lagna") === "true", s3 = (n3 = l2.get(a3)) == null ? [] : n3, c3 = s3.length ? s3.map((e6) => "".concat(e6.planet, " ").concat(e6.rashi_degree.toFixed(1), "\xB0").concat(e6.is_retrograde ? " \u211E" : "")).join(", ") : "Unoccupied", u3 = (r3 = g_[a3]) == null ? "" : r3;
6714
+ c_(e5.clientX, e5.clientY, "".concat(a3).concat(o3 ? " \u2014 Lagna" : ""), c3, u3 ? "".concat(u3, " \xB7 click to interpret") : "Click to interpret");
6705
6715
  }), c2.addEventListener("mouseout", (e5) => {
6706
- d2(e5.target) && s_();
6716
+ d2(e5.target) && l_();
6707
6717
  }), c2.addEventListener("click", (e5) => {
6708
6718
  var t3, n3;
6709
6719
  let i3 = d2(e5.target);
@@ -6711,7 +6721,7 @@ function g_(e4, t2, n2, r2) {
6711
6721
  let a3 = (t3 = i3.getAttribute("data-sign")) == null ? "" : t3, o3 = i3.getAttribute("data-lagna") === "true", s3 = (n3 = l2.get(a3)) == null ? [] : n3;
6712
6722
  if (r2.onSignClick(a3, o3, s3), r2.onAskClaude) {
6713
6723
  let t4 = s3.length ? s3.map((e6) => "".concat(e6.planet, " ").concat(e6.rashi_degree.toFixed(1), "\xB0")).join(", ") : "Unoccupied rashi";
6714
- d_(e5, "".concat(a3).concat(o3 ? " \u2014 Lagna" : ""), t4, { type: "sign", data: { sign: a3, is_lagna: o3, planets: s3.map((e6) => e6.planet) } });
6724
+ p_(e5, "".concat(a3).concat(o3 ? " \u2014 Lagna" : ""), t4, { type: "sign", data: { sign: a3, is_lagna: o3, planets: s3.map((e6) => e6.planet) } });
6715
6725
  }
6716
6726
  }), c2.querySelectorAll("[data-sign]").forEach((e5) => {
6717
6727
  var t3;
@@ -6725,13 +6735,13 @@ function g_(e4, t2, n2, r2) {
6725
6735
  });
6726
6736
  }), c2;
6727
6737
  }
6728
- var __ = { "chart-wheel": { stripIcon: "\u2726", stripTitle: "About the Natal Chart", stripHints: ["Click any <strong>planet</strong> for a deep placement reading", "Click any <strong>aspect line</strong> for its dynamic interpretation", "Click any <strong>house cusp</strong> for house themes", "Use the <strong>date controls</strong> to move through time"], modalText: "This wheel is an exact celestial snapshot of the sky at a given moment and place \u2014 every planet, house, and aspect line is clickable." }, "bi-wheel": { stripIcon: "\u2295", stripTitle: "About the Bi-Wheel", stripHints: ["Click any <strong>inner planet</strong> for natal placement depth", "Click any <strong>outer planet</strong> for transit or synastry meaning", "Click a <strong>cross-aspect line</strong> for inter-chart dynamics", "Use the <strong>date controls</strong> to advance transits"], modalText: "Two charts are layered here \u2014 the inner wheel is the natal chart; the outer ring shows the second chart (transits or another person's planets)." }, bodygraph: { stripIcon: "\u25C8", stripTitle: "About the Bodygraph", stripHints: ["Click any <strong>center</strong> (defined or undefined) for its meaning", "Click any <strong>channel</strong> to explore its life theme", "Click any <strong>gate number</strong> for its I Ching hexagram reading", "Click a <strong>planet row</strong> in the sidebar for its HD role"], modalText: "The bodygraph is a living map of the energy centres, channels, and gates that define a Human Design chart." }, "vedic-chart": { stripIcon: "\u{1F549}", stripTitle: "About the Jyotish Chart", stripHints: ["Click any <strong>rashi cell</strong> for its themes and any planets placed there", "The <strong>diagonal mark</strong> shows the Lagna (Ascendant) rashi", "Use the <strong>action bar</strong> for a full chart interpretation", "Click <strong>Moon &amp; Nakshatra</strong> for lunar mansion detail"], modalText: "This is a Vedic birth chart rendered as a South Indian Rashi grid \u2014 sidereal planetary placements by fixed sign." }, "transit-timeline": { stripIcon: "\u2604", stripTitle: "About the Transit Timeline", stripHints: ["Each entry is an <strong>exact transit hit</strong> \u2014 a transiting planet contacting a natal point", "Events are <strong>grouped by month</strong> in chronological order", "The <strong>\u211E marker</strong> flags a retrograde crossing", "Click any transit for a focused <strong>interpretation</strong>"], modalText: "This timeline lists upcoming transits to the natal chart \u2014 the exact dates outer-planet energies activate each placement." }, "moon-phase": { stripIcon: "\u263E", stripTitle: "About the Moon Phase Dial", stripHints: ["Click the <strong>Moon</strong> for its phase interpretation", "Click the <strong>Void-of-Course</strong> card when the Moon is VOC", "Use the <strong>date control</strong> to move the sky to any moment"], modalText: "The dial shows the Moon's live illumination, phase, sign, and void-of-course status for the selected moment." }, bazi: { stripIcon: "\u56DB", stripTitle: "About the BaZi Chart", stripHints: ["Click any <strong>pillar</strong> (Year, Month, Day, Hour) for its interpretation", "The <strong>Day Master</strong> is the core identity element", "The <strong>Wu Xing bar</strong> shows the Five Element balance"], modalText: "This BaZi (Four Pillars of Destiny) chart maps the Heavenly Stems and Earthly Branches present at a given moment of birth." } }, v_ = '\n .oe-welcome-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: oklch(0% 0 0 / 0.55);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n animation: oe-fade-in 0.4s ease both;\n font-family: system-ui, sans-serif;\n }\n\n .oe-welcome-modal {\n /* Themed, not hardcoded: the title/text/hints below all resolve through\n var(--text\u2026), so a fixed dark surface here meant that once the light\n palette became reachable the modal rendered near-black text on a\n near-black card \u2014 1.09:1, effectively invisible. The fallback is the\n previous literal, and every app\'s dark --surface is oklch(11-12%), so\n dark rendering is unchanged. */\n background: var(--surface, oklch(11% 0.010 265));\n border: 1px solid var(--gold-glow, oklch(72% 0.12 80 / 0.20));\n border-radius: 16px;\n padding: 32px;\n width: 90%;\n max-width: 440px;\n box-shadow: 0 20px 40px oklch(0% 0 0 / 0.55), inset 0 1px 0 oklch(100% 0 0 / 0.06);\n animation: oe-modal-in 0.5s cubic-bezier(0.22, 1, 0.36, 1) both;\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n @keyframes oe-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @keyframes oe-modal-in {\n from { opacity: 0; transform: scale(0.95) translateY(10px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n }\n\n .oe-welcome-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 4px;\n }\n\n .oe-welcome-icon {\n font-size: 28px;\n color: var(--gold, oklch(72% 0.12 80));\n line-height: 1;\n text-shadow: 0 0 10px var(--gold-glow, oklch(72% 0.12 80 / 0.30));\n }\n\n .oe-welcome-title {\n font-size: 20px;\n font-weight: 600;\n color: var(--text, oklch(92% 0.006 265));\n margin: 0;\n letter-spacing: 0.02em;\n }\n\n .oe-welcome-text {\n font-size: 14.5px;\n line-height: 1.5;\n color: var(--text-secondary, oklch(68% 0.008 265));\n margin: 0;\n }\n\n .oe-welcome-hints {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin: 8px 0 12px 0;\n padding: 0;\n list-style: none;\n }\n\n .oe-welcome-hints li {\n font-size: 13.5px;\n line-height: 1.4;\n color: var(--text-secondary, oklch(68% 0.008 265));\n display: flex;\n align-items: flex-start;\n gap: 10px;\n opacity: 0;\n animation: oe-fade-in 0.4s ease forwards;\n }\n\n /* Stagger the hints */\n .oe-welcome-hints li:nth-child(1) { animation-delay: 0.15s; }\n .oe-welcome-hints li:nth-child(2) { animation-delay: 0.25s; }\n .oe-welcome-hints li:nth-child(3) { animation-delay: 0.35s; }\n .oe-welcome-hints li:nth-child(4) { animation-delay: 0.45s; }\n\n .oe-welcome-hints li::before {\n content: "\u2726";\n color: var(--gold-dim, oklch(52% 0.06 80));\n font-size: 12px;\n padding-top: 2px;\n }\n\n .oe-welcome-hints strong {\n color: var(--text, oklch(92% 0.006 265));\n font-weight: 600;\n }\n\n .oe-welcome-button {\n align-self: flex-end;\n background: var(--gold-subtle, oklch(72% 0.12 80 / 0.10));\n color: var(--gold, oklch(72% 0.12 80));\n border: 1px solid var(--gold-glow, oklch(72% 0.12 80 / 0.20));\n padding: 10px 24px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s ease, border-color 0.2s ease;\n margin-top: 4px;\n }\n\n .oe-welcome-button:hover {\n background: oklch(72% 0.12 80 / 0.18);\n border-color: oklch(72% 0.12 80 / 0.40);\n }\n\n .oe-welcome-button:focus-visible {\n outline: 2px solid var(--gold, oklch(72% 0.12 80));\n outline-offset: 2px;\n }\n\n .oe-welcome-backdrop.is-dismissing {\n animation: oe-fade-out 0.3s ease forwards;\n }\n\n .oe-welcome-backdrop.is-dismissing .oe-welcome-modal {\n animation: oe-modal-out 0.3s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n }\n\n @keyframes oe-fade-out {\n to { opacity: 0; }\n }\n\n @keyframes oe-modal-out {\n to { opacity: 0; transform: scale(0.95) translateY(10px); }\n }\n';
6729
- function y_() {
6738
+ var y_ = { "chart-wheel": { stripIcon: "\u2726", stripTitle: "About the Natal Chart", stripHints: ["Click any <strong>planet</strong> for a deep placement reading", "Click any <strong>aspect line</strong> for its dynamic interpretation", "Click any <strong>house cusp</strong> for house themes", "Use the <strong>date controls</strong> to move through time"], modalText: "This wheel is an exact celestial snapshot of the sky at a given moment and place \u2014 every planet, house, and aspect line is clickable." }, "bi-wheel": { stripIcon: "\u2295", stripTitle: "About the Bi-Wheel", stripHints: ["Click any <strong>inner planet</strong> for natal placement depth", "Click any <strong>outer planet</strong> for transit or synastry meaning", "Click a <strong>cross-aspect line</strong> for inter-chart dynamics", "Use the <strong>date controls</strong> to advance transits"], modalText: "Two charts are layered here \u2014 the inner wheel is the natal chart; the outer ring shows the second chart (transits or another person's planets)." }, bodygraph: { stripIcon: "\u25C8", stripTitle: "About the Bodygraph", stripHints: ["Click any <strong>center</strong> (defined or undefined) for its meaning", "Click any <strong>channel</strong> to explore its life theme", "Click any <strong>gate number</strong> for its I Ching hexagram reading", "Click a <strong>planet row</strong> in the sidebar for its HD role"], modalText: "The bodygraph is a living map of the energy centres, channels, and gates that define a Human Design chart." }, "vedic-chart": { stripIcon: "\u{1F549}", stripTitle: "About the Jyotish Chart", stripHints: ["Click any <strong>rashi cell</strong> for its themes and any planets placed there", "The <strong>diagonal mark</strong> shows the Lagna (Ascendant) rashi", "Use the <strong>action bar</strong> for a full chart interpretation", "Click <strong>Moon &amp; Nakshatra</strong> for lunar mansion detail"], modalText: "This is a Vedic birth chart rendered as a South Indian Rashi grid \u2014 sidereal planetary placements by fixed sign." }, "transit-timeline": { stripIcon: "\u2604", stripTitle: "About the Transit Timeline", stripHints: ["Each entry is an <strong>exact transit hit</strong> \u2014 a transiting planet contacting a natal point", "Events are <strong>grouped by month</strong> in chronological order", "The <strong>\u211E marker</strong> flags a retrograde crossing", "Click any transit for a focused <strong>interpretation</strong>"], modalText: "This timeline lists upcoming transits to the natal chart \u2014 the exact dates outer-planet energies activate each placement." }, "moon-phase": { stripIcon: "\u263E", stripTitle: "About the Moon Phase Dial", stripHints: ["Click the <strong>Moon</strong> for its phase interpretation", "Click the <strong>Void-of-Course</strong> card when the Moon is VOC", "Use the <strong>date control</strong> to move the sky to any moment"], modalText: "The dial shows the Moon's live illumination, phase, sign, and void-of-course status for the selected moment." }, bazi: { stripIcon: "\u56DB", stripTitle: "About the BaZi Chart", stripHints: ["Click any <strong>pillar</strong> (Year, Month, Day, Hour) for its interpretation", "The <strong>Day Master</strong> is the core identity element", "The <strong>Wu Xing bar</strong> shows the Five Element balance"], modalText: "This BaZi (Four Pillars of Destiny) chart maps the Heavenly Stems and Earthly Branches present at a given moment of birth." } }, b_ = '\n .oe-welcome-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: oklch(0% 0 0 / 0.55);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n animation: oe-fade-in 0.4s ease both;\n font-family: system-ui, sans-serif;\n }\n\n .oe-welcome-modal {\n /* Themed, not hardcoded: the title/text/hints below all resolve through\n var(--text\u2026), so a fixed dark surface here meant that once the light\n palette became reachable the modal rendered near-black text on a\n near-black card \u2014 1.09:1, effectively invisible. The fallback is the\n previous literal, and every app\'s dark --surface is oklch(11-12%), so\n dark rendering is unchanged. */\n background: var(--surface, oklch(11% 0.010 265));\n border: 1px solid var(--gold-glow, oklch(72% 0.12 80 / 0.20));\n border-radius: 16px;\n padding: 32px;\n width: 90%;\n max-width: 440px;\n box-shadow: 0 20px 40px oklch(0% 0 0 / 0.55), inset 0 1px 0 oklch(100% 0 0 / 0.06);\n animation: oe-modal-in 0.5s cubic-bezier(0.22, 1, 0.36, 1) both;\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n @keyframes oe-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @keyframes oe-modal-in {\n from { opacity: 0; transform: scale(0.95) translateY(10px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n }\n\n .oe-welcome-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 4px;\n }\n\n .oe-welcome-icon {\n font-size: 28px;\n color: var(--gold, oklch(72% 0.12 80));\n line-height: 1;\n text-shadow: 0 0 10px var(--gold-glow, oklch(72% 0.12 80 / 0.30));\n }\n\n .oe-welcome-title {\n font-size: 20px;\n font-weight: 600;\n color: var(--text, oklch(92% 0.006 265));\n margin: 0;\n letter-spacing: 0.02em;\n }\n\n .oe-welcome-text {\n font-size: 14.5px;\n line-height: 1.5;\n color: var(--text-secondary, oklch(68% 0.008 265));\n margin: 0;\n }\n\n .oe-welcome-hints {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin: 8px 0 12px 0;\n padding: 0;\n list-style: none;\n }\n\n .oe-welcome-hints li {\n font-size: 13.5px;\n line-height: 1.4;\n color: var(--text-secondary, oklch(68% 0.008 265));\n display: flex;\n align-items: flex-start;\n gap: 10px;\n opacity: 0;\n animation: oe-fade-in 0.4s ease forwards;\n }\n\n /* Stagger the hints */\n .oe-welcome-hints li:nth-child(1) { animation-delay: 0.15s; }\n .oe-welcome-hints li:nth-child(2) { animation-delay: 0.25s; }\n .oe-welcome-hints li:nth-child(3) { animation-delay: 0.35s; }\n .oe-welcome-hints li:nth-child(4) { animation-delay: 0.45s; }\n\n .oe-welcome-hints li::before {\n content: "\u2726";\n color: var(--gold-dim, oklch(52% 0.06 80));\n font-size: 12px;\n padding-top: 2px;\n }\n\n .oe-welcome-hints strong {\n color: var(--text, oklch(92% 0.006 265));\n font-weight: 600;\n }\n\n .oe-welcome-button {\n align-self: flex-end;\n background: var(--gold-subtle, oklch(72% 0.12 80 / 0.10));\n color: var(--gold, oklch(72% 0.12 80));\n border: 1px solid var(--gold-glow, oklch(72% 0.12 80 / 0.20));\n padding: 10px 24px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s ease, border-color 0.2s ease;\n margin-top: 4px;\n }\n\n .oe-welcome-button:hover {\n background: oklch(72% 0.12 80 / 0.18);\n border-color: oklch(72% 0.12 80 / 0.40);\n }\n\n .oe-welcome-button:focus-visible {\n outline: 2px solid var(--gold, oklch(72% 0.12 80));\n outline-offset: 2px;\n }\n\n .oe-welcome-backdrop.is-dismissing {\n animation: oe-fade-out 0.3s ease forwards;\n }\n\n .oe-welcome-backdrop.is-dismissing .oe-welcome-modal {\n animation: oe-modal-out 0.3s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n }\n\n @keyframes oe-fade-out {\n to { opacity: 0; }\n }\n\n @keyframes oe-modal-out {\n to { opacity: 0; transform: scale(0.95) translateY(10px); }\n }\n';
6739
+ function x_() {
6730
6740
  if (document.getElementById("oe-first-run-styles")) return;
6731
6741
  let e4 = document.createElement("style");
6732
- e4.id = "oe-first-run-styles", e4.textContent = v_, document.head.appendChild(e4);
6742
+ e4.id = "oe-first-run-styles", e4.textContent = b_, document.head.appendChild(e4);
6733
6743
  }
6734
- function b_(e4) {
6744
+ function S_(e4) {
6735
6745
  let t2 = document.activeElement, n2 = document.createElement("div");
6736
6746
  n2.className = "oe-welcome-backdrop";
6737
6747
  let r2 = document.createElement("div");
@@ -6749,24 +6759,24 @@ function b_(e4) {
6749
6759
  e5.key === "Escape" && (e5.preventDefault(), o2()), e5.key === "Tab" && (e5.preventDefault(), a2.focus());
6750
6760
  }), requestAnimationFrame(() => a2.focus()), n2;
6751
6761
  }
6752
- function x_(e4) {
6753
- y_();
6754
- let t2 = b_(__[e4]);
6762
+ function C_(e4) {
6763
+ x_();
6764
+ let t2 = S_(y_[e4]);
6755
6765
  document.body.appendChild(t2);
6756
6766
  }
6757
- var S_ = "\n .oe-info-button {\n position: fixed;\n top: 12px;\n right: 12px;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n background: var(--surface-2, oklch(16% 0.010 265));\n border: 1px solid var(--border-strong, oklch(30% 0.010 265));\n color: var(--text-secondary, oklch(68% 0.008 265));\n font: 600 14px/1 Georgia, serif;\n font-style: italic;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 9998;\n transition: all 150ms ease;\n }\n\n .oe-info-button:hover {\n background: var(--surface, oklch(11% 0.010 265));\n border-color: var(--gold-dim, oklch(52% 0.06 80));\n color: var(--gold, oklch(72% 0.12 80));\n }\n\n .oe-info-button:focus-visible {\n outline: 2px solid var(--gold, oklch(72% 0.12 80));\n outline-offset: 2px;\n }\n";
6758
- function C_() {
6767
+ var w_ = "\n .oe-info-button {\n position: fixed;\n top: 12px;\n right: 12px;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n background: var(--surface-2, oklch(16% 0.010 265));\n border: 1px solid var(--border-strong, oklch(30% 0.010 265));\n color: var(--text-secondary, oklch(68% 0.008 265));\n font: 600 14px/1 Georgia, serif;\n font-style: italic;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 9998;\n transition: all 150ms ease;\n }\n\n .oe-info-button:hover {\n background: var(--surface, oklch(11% 0.010 265));\n border-color: var(--gold-dim, oklch(52% 0.06 80));\n color: var(--gold, oklch(72% 0.12 80));\n }\n\n .oe-info-button:focus-visible {\n outline: 2px solid var(--gold, oklch(72% 0.12 80));\n outline-offset: 2px;\n }\n";
6768
+ function T_() {
6759
6769
  if (document.getElementById("oe-info-button-styles")) return;
6760
6770
  let e4 = document.createElement("style");
6761
- e4.id = "oe-info-button-styles", e4.textContent = S_, document.head.appendChild(e4);
6771
+ e4.id = "oe-info-button-styles", e4.textContent = w_, document.head.appendChild(e4);
6762
6772
  }
6763
- function w_(e4) {
6773
+ function E_(e4) {
6764
6774
  if (document.getElementById("oe-info-button")) return;
6765
- C_();
6775
+ T_();
6766
6776
  let t2 = document.createElement("button");
6767
- t2.id = "oe-info-button", t2.className = "oe-info-button", t2.setAttribute("aria-label", "About this chart"), t2.title = "About this chart", t2.textContent = "i", t2.addEventListener("click", () => x_(e4)), document.body.appendChild(t2);
6777
+ t2.id = "oe-info-button", t2.className = "oe-info-button", t2.setAttribute("aria-label", "About this chart"), t2.title = "About this chart", t2.textContent = "i", t2.addEventListener("click", () => C_(e4)), document.body.appendChild(t2);
6768
6778
  }
6769
- function T_(e4) {
6779
+ function D_(e4) {
6770
6780
  var t2;
6771
6781
  if (!e4) return null;
6772
6782
  if (e4.structuredContent != null && typeof e4.structuredContent == "object") return e4.structuredContent;
@@ -6779,50 +6789,63 @@ function T_(e4) {
6779
6789
  }
6780
6790
  return null;
6781
6791
  }
6782
- function E_(e4) {
6792
+ function O_(e4) {
6783
6793
  return e4.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
6784
6794
  }
6785
- function D_(e4) {
6786
- let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e4, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(E_(i2), "</button>") : "";
6787
- if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(E_(n2), "</p>") + a2 + "</div>", t2.removeAttribute("hidden"), r2) {
6795
+ function k_(e4) {
6796
+ let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e4, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(O_(i2), "</button>") : "";
6797
+ if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(O_(n2), "</p>") + a2 + "</div>", t2.removeAttribute("hidden"), r2) {
6788
6798
  var o2;
6789
6799
  (o2 = t2.querySelector(".error-retry-btn")) == null || o2.addEventListener("click", r2);
6790
6800
  }
6791
6801
  }
6792
- var O_;
6793
- function k_() {
6794
- return O_ ? O_ === "dark" : window.matchMedia("(prefers-color-scheme: dark)").matches;
6802
+ var A_;
6803
+ function j_() {
6804
+ return A_ ? A_ === "dark" : window.matchMedia("(prefers-color-scheme: dark)").matches;
6795
6805
  }
6796
- function A_(e4 = k_()) {
6806
+ function M_(e4 = j_()) {
6797
6807
  let t2 = e4 ? "dark" : "light";
6798
6808
  return document.documentElement.setAttribute("data-theme", t2), t2;
6799
6809
  }
6800
- function j_(e4) {
6801
- A_();
6810
+ function N_(e4) {
6811
+ M_();
6802
6812
  try {
6803
6813
  window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (t2) => {
6804
- O_ || e4 == null || e4(A_(t2.matches));
6814
+ A_ || e4 == null || e4(M_(t2.matches));
6805
6815
  });
6806
6816
  } catch (e5) {
6807
6817
  }
6808
6818
  }
6809
- function M_(e4, t2) {
6819
+ function P_(e4, t2) {
6810
6820
  var n2, r2;
6811
6821
  let i2 = (e5) => {
6812
6822
  let n3 = e5 == null ? void 0 : e5.theme;
6813
6823
  if (n3 !== "light" && n3 !== "dark") return;
6814
- O_ = n3;
6815
- let r3 = document.documentElement.getAttribute("data-theme"), i3 = A_(n3 === "dark");
6824
+ A_ = n3;
6825
+ let r3 = document.documentElement.getAttribute("data-theme"), i3 = M_(n3 === "dark");
6816
6826
  i3 !== r3 && (t2 == null || t2(i3));
6817
6827
  };
6818
6828
  (n2 = e4.addEventListener) == null || n2.call(e4, "hostcontextchanged", i2), i2((r2 = e4.getHostContext) == null ? void 0 : r2.call(e4));
6819
6829
  }
6820
- function N_(e4, t2, n2 = []) {
6821
- var r2, i2;
6830
+ var F_ = ["inline", "fullscreen"];
6831
+ function I_(e4) {
6832
+ var t2;
6833
+ return (t2 = e4.getHostContext) == null ? void 0 : t2.call(e4);
6834
+ }
6835
+ function L_(e4) {
6836
+ var t2;
6837
+ let n2 = (t2 = I_(e4)) == null ? void 0 : t2.availableDisplayModes;
6838
+ return Array.isArray(n2) ? n2 : [];
6839
+ }
6840
+ var R_ = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">\n <polyline points="5,1 1,1 1,5"/>\n <polyline points="11,1 15,1 15,5"/>\n <polyline points="5,15 1,15 1,11"/>\n <polyline points="11,15 15,15 15,11"/>\n </svg>', z_ = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">\n <polyline points="1,5 5,5 5,1"/>\n <polyline points="15,5 11,5 11,1"/>\n <polyline points="1,11 5,11 5,15"/>\n <polyline points="15,11 11,11 11,15"/>\n </svg>', B_ = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round" aria-hidden="true">\n <rect x="1" y="2.5" width="14" height="11" rx="1.5"/>\n <rect x="8" y="8" width="5.5" height="4" rx="0.8" fill="currentColor" stroke="none"/>\n </svg>', V_ = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">\n <rect x="1" y="2.5" width="14" height="11" rx="1.5"/>\n <polyline points="6,6 10,10"/>\n <polyline points="6,9.5 6,6 9.5,6"/>\n </svg>';
6841
+ function H_(e4, t2, n2 = [], r2 = {}) {
6842
+ var i2;
6822
6843
  if (!t2 || t2.querySelector("#btn-fullscreen")) return;
6823
6844
  let a2 = document.createElement("button");
6824
- a2.id = "btn-fullscreen", a2.className = "pan-btn pan-btn--fullscreen", a2.setAttribute("aria-label", "Toggle fullscreen"), a2.innerHTML = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\n <polyline points="5,1 1,1 1,5"/>\n <polyline points="11,1 15,1 15,5"/>\n <polyline points="5,15 1,15 1,11"/>\n <polyline points="11,15 15,15 15,11"/>\n </svg>';
6825
- let o2 = a2.innerHTML, s2 = ["param-controls", "aspect-filter", "controls-panel", "mode-badge"];
6845
+ a2.id = "btn-fullscreen", a2.type = "button", a2.className = "pan-btn pan-btn--fullscreen", a2.innerHTML = R_, a2.hidden = true;
6846
+ let o2 = null;
6847
+ r2.pip && (o2 = document.createElement("button"), o2.id = "btn-pip", o2.type = "button", o2.className = "pan-btn pan-btn--pip", o2.innerHTML = B_, o2.hidden = true);
6848
+ let s2 = ["param-controls", "aspect-filter", "controls-panel", "mode-badge"];
6826
6849
  function c2() {
6827
6850
  if (document.getElementById("fs-bottom-bar") || !n2.length) return;
6828
6851
  let e5 = document.getElementById("app");
@@ -6855,59 +6878,59 @@ function N_(e4, t2, n2 = []) {
6855
6878
  }
6856
6879
  e5.remove();
6857
6880
  }
6858
- function u2(e5) {
6859
- let t3 = e5 === "fullscreen", n3 = document.body.classList.contains("is-fullscreen");
6860
- document.body.classList.toggle("is-fullscreen", t3), a2.innerHTML = t3 ? '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\n <polyline points="1,5 5,5 5,1"/>\n <polyline points="15,5 11,5 11,1"/>\n <polyline points="1,11 5,11 5,15"/>\n <polyline points="15,11 11,11 11,15"/>\n </svg>' : o2, a2.setAttribute("aria-label", t3 ? "Exit fullscreen (Esc)" : "Toggle fullscreen"), a2.title = t3 ? "Press Esc or click to exit fullscreen" : "Enter fullscreen", t3 && !n3 && (c2(), f2()), !t3 && n3 && l2();
6881
+ let u2 = "inline";
6882
+ function d2(t3) {
6883
+ let n3 = u2 === "fullscreen", r3 = t3 === "fullscreen";
6884
+ u2 = t3, document.body.classList.toggle("is-fullscreen", r3), document.body.classList.toggle("is-pip", t3 === "pip"), document.documentElement.setAttribute("data-display-mode", t3), a2.innerHTML = r3 ? z_ : R_;
6885
+ let i3 = r3 ? "Exit fullscreen" : "Enter fullscreen";
6886
+ if (a2.setAttribute("aria-label", i3), a2.title = r3 ? "Exit fullscreen (Esc)" : i3, o2) {
6887
+ let e5 = t3 === "pip";
6888
+ o2.innerHTML = e5 ? V_ : B_;
6889
+ let n4 = e5 ? "Return to the conversation" : "Pop out (picture-in-picture)";
6890
+ o2.setAttribute("aria-label", n4), o2.title = n4;
6891
+ }
6892
+ r3 && !n3 && (c2(), U_(e4)), !r3 && n3 && l2();
6861
6893
  }
6862
- a2.addEventListener("click", async () => {
6863
- try {
6864
- var t3, n3, r3, i3;
6865
- let a3 = (t3 = e4.getHostContext) == null ? void 0 : t3.call(e4), o3 = (n3 = a3 == null ? void 0 : a3.displayMode) == null ? "inline" : n3, s3 = (r3 = a3 == null ? void 0 : a3.availableDisplayModes) == null ? [] : r3, c3 = o3 === "inline" ? "fullscreen" : "inline";
6866
- if (s3.length > 0 && !s3.includes(c3)) {
6867
- console.warn('[AppChrome] Display mode "'.concat(c3, '" not available. Available: ').concat(s3.join(", ")));
6868
- return;
6869
- }
6870
- let l3 = await e4.requestDisplayMode({ mode: c3 });
6871
- u2((i3 = l3 == null ? void 0 : l3.mode) == null ? "inline" : i3);
6894
+ function f2() {
6895
+ var n3, r3;
6896
+ let i3 = L_(e4);
6897
+ a2.hidden = !i3.includes("fullscreen"), o2 && (o2.hidden = !i3.includes("pip")), (!a2.hidden || o2 && !o2.hidden) && (t2.hidden = false);
6898
+ let s3 = (n3 = (r3 = I_(e4)) == null ? void 0 : r3.displayMode) == null ? "inline" : n3;
6899
+ s3 !== u2 && d2(s3);
6900
+ }
6901
+ async function p2(t3) {
6902
+ if (!(t3 !== "inline" && !L_(e4).includes(t3))) try {
6903
+ var n3;
6904
+ let r3 = await e4.requestDisplayMode({ mode: t3 });
6905
+ d2((n3 = r3 == null ? void 0 : r3.mode) == null ? u2 : n3);
6872
6906
  } catch (e5) {
6873
6907
  console.warn("[AppChrome] requestDisplayMode failed:", e5);
6874
6908
  }
6875
- }), document.addEventListener("keydown", async (t3) => {
6876
- if (t3.key === "Escape" && document.body.classList.contains("is-fullscreen")) {
6877
- t3.preventDefault();
6878
- try {
6879
- var n3;
6880
- let t4 = await e4.requestDisplayMode({ mode: "inline" });
6881
- u2((n3 = t4 == null ? void 0 : t4.mode) == null ? "inline" : n3);
6882
- } catch (e5) {
6883
- console.warn("[AppChrome] Escape fullscreen failed:", e5);
6884
- }
6885
- }
6886
- }), (r2 = e4.addEventListener) == null || r2.call(e4, "hostcontextchanged", (e5) => {
6887
- var t3;
6888
- u2((t3 = e5 == null ? void 0 : e5.displayMode) == null ? "inline" : t3);
6889
- });
6890
- let d2 = (i2 = e4.getHostContext) == null ? void 0 : i2.call(e4);
6891
- d2 != null && d2.displayMode && u2(d2.displayMode), t2.insertBefore(a2, t2.firstChild), t2.removeAttribute("hidden");
6892
- function f2() {
6893
- let e5 = document.getElementById("fs-hint-banner");
6894
- e5 && e5.remove();
6895
- let t3 = document.createElement("div");
6896
- t3.id = "fs-hint-banner", Object.assign(t3.style, { position: "fixed", top: "12px", left: "50%", transform: "translateX(-50%)", background: "oklch(14% 0.012 265 / 0.90)", backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)", border: "1px solid oklch(72% 0.12 80 / 0.3)", borderRadius: "20px", padding: "6px 16px", fontSize: "11px", fontWeight: "600", color: "oklch(80% 0.08 80)", letterSpacing: "0.04em", zIndex: "9999", pointerEvents: "none", opacity: "0", transition: "opacity 300ms ease", whiteSpace: "nowrap" }), t3.textContent = "Esc \u2014 exit fullscreen & return to chat", document.body.appendChild(t3), requestAnimationFrame(() => {
6897
- t3.style.opacity = "1";
6898
- }), setTimeout(() => {
6899
- t3.style.opacity = "0", setTimeout(() => t3.remove(), 350);
6900
- }, 4e3);
6901
6909
  }
6910
+ a2.addEventListener("click", () => {
6911
+ p2(u2 === "fullscreen" ? "inline" : "fullscreen");
6912
+ }), o2 == null || o2.addEventListener("click", () => {
6913
+ p2(u2 === "pip" ? "inline" : "pip");
6914
+ }), document.addEventListener("keydown", (e5) => {
6915
+ e5.key !== "Escape" || u2 !== "fullscreen" || (e5.preventDefault(), p2("inline"));
6916
+ }), (i2 = e4.addEventListener) == null || i2.call(e4, "hostcontextchanged", f2), o2 && t2.insertBefore(o2, t2.firstChild), t2.insertBefore(a2, t2.firstChild), d2("inline"), f2();
6902
6917
  }
6903
- function P_(e4, t2) {
6918
+ function U_(e4) {
6919
+ var t2, n2;
6920
+ (t2 = document.getElementById("fs-hint-banner")) == null || t2.remove();
6921
+ let r2 = (n2 = I_(e4)) == null ? void 0 : n2.deviceCapabilities, i2 = !!(r2 != null && r2.touch) && (r2 == null ? void 0 : r2.hover) === false, a2 = document.createElement("div");
6922
+ a2.id = "fs-hint-banner", a2.className = "fs-hint-banner", a2.setAttribute("role", "status"), a2.textContent = i2 ? "Tap the collapse button to return to the chat" : "Esc \u2014 exit fullscreen & return to chat", document.body.appendChild(a2), requestAnimationFrame(() => a2.classList.add("visible")), setTimeout(() => {
6923
+ a2.classList.remove("visible"), setTimeout(() => a2.remove(), 350);
6924
+ }, 4e3);
6925
+ }
6926
+ function W_(e4, t2) {
6904
6927
  e4.ontoolcancelled = (e5) => {
6905
6928
  var n2, r2, i2;
6906
6929
  let a2 = (n2 = e5.reason) == null ? "Tool call was cancelled" : n2;
6907
- console.warn("[AppChrome] Tool cancelled:", a2), (r2 = t2.statusFn) == null || r2.call(t2, null), !t2.loadingEl.hidden && t2.loadingEl.getAttribute("hidden") === null && (t2.loadingEl.setAttribute("hidden", ""), t2.contentEl.removeAttribute("hidden")), (i2 = t2.paramControls) == null || (i2 = i2.call(t2)) == null || i2.setBusy(false), F_(a2);
6930
+ console.warn("[AppChrome] Tool cancelled:", a2), (r2 = t2.statusFn) == null || r2.call(t2, null), !t2.loadingEl.hidden && t2.loadingEl.getAttribute("hidden") === null && (t2.loadingEl.setAttribute("hidden", ""), t2.contentEl.removeAttribute("hidden")), (i2 = t2.paramControls) == null || (i2 = i2.call(t2)) == null || i2.setBusy(false), G_(a2);
6908
6931
  };
6909
6932
  }
6910
- function F_(e4) {
6933
+ function G_(e4) {
6911
6934
  var t2;
6912
6935
  (t2 = document.getElementById("cancel-toast")) == null || t2.remove();
6913
6936
  let n2 = document.createElement("div");
@@ -6915,23 +6938,37 @@ function F_(e4) {
6915
6938
  n2.classList.remove("visible"), setTimeout(() => n2.remove(), 300);
6916
6939
  }, 3e3);
6917
6940
  }
6918
- function I_(e4) {
6941
+ function K_(e4) {
6919
6942
  var t2;
6920
- function n2(e5) {
6921
- if (!e5) return;
6922
- let t3 = e5.containerDimensions;
6923
- if (!t3) return;
6924
- let n3 = document.documentElement;
6925
- t3.width && n3.style.setProperty("--host-width", "".concat(t3.width, "px")), t3.maxWidth && n3.style.setProperty("--host-max-width", "".concat(t3.maxWidth, "px")), t3.height && n3.style.setProperty("--host-height", "".concat(t3.height, "px")), t3.maxHeight && n3.style.setProperty("--host-max-height", "".concat(t3.maxHeight, "px"));
6926
- }
6927
- n2((t2 = e4.getHostContext) == null ? void 0 : t2.call(e4)), e4.addEventListener("hostcontextchanged", (e5) => {
6928
- n2(e5);
6929
- });
6930
- }
6931
- var L_ = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?(?:\.\d+)?$/;
6932
- function R_(e4, t2) {
6943
+ let n2 = document.documentElement, r2 = (e5, t3) => {
6944
+ typeof t3 == "number" && Number.isFinite(t3) && t3 > 0 ? n2.style.setProperty(e5, "".concat(t3, "px")) : n2.style.removeProperty(e5);
6945
+ }, i2 = (e5, t3) => {
6946
+ t3 === void 0 ? n2.removeAttribute(e5) : n2.setAttribute(e5, t3 ? "true" : "false");
6947
+ };
6948
+ function a2() {
6949
+ var t3, a3, o2;
6950
+ let s2 = I_(e4);
6951
+ if (!s2) return;
6952
+ let c2 = (t3 = s2.containerDimensions) == null ? {} : t3;
6953
+ r2("--host-width", c2.width), r2("--host-max-width", c2.maxWidth), r2("--host-height", c2.height), r2("--host-max-height", c2.maxHeight);
6954
+ let l2 = (a3 = s2.safeAreaInsets) == null ? {} : a3;
6955
+ for (let e5 of ["top", "right", "bottom", "left"]) {
6956
+ let t4 = l2[e5];
6957
+ n2.style.setProperty("--safe-".concat(e5), typeof t4 == "number" && t4 > 0 ? "".concat(t4, "px") : "0px");
6958
+ }
6959
+ let u2 = l2.bottom;
6960
+ n2.toggleAttribute("data-safe-bottom", typeof u2 == "number" && u2 > 0), typeof s2.platform == "string" && n2.setAttribute("data-platform", s2.platform);
6961
+ let d2 = s2.deviceCapabilities;
6962
+ i2("data-touch", d2 == null ? void 0 : d2.touch), i2("data-hover", d2 == null ? void 0 : d2.hover);
6963
+ let f2 = s2.styles;
6964
+ f2 != null && f2.variables && $g(f2.variables, n2), !(f2 == null || (o2 = f2.css) == null) && o2.fonts && e_(f2.css.fonts);
6965
+ }
6966
+ a2(), (t2 = e4.addEventListener) == null || t2.call(e4, "hostcontextchanged", a2);
6967
+ }
6968
+ var q_ = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?(?:\.\d+)?$/;
6969
+ function J_(e4, t2) {
6933
6970
  if (!e4) return null;
6934
- let n2 = L_.exec(e4.trim());
6971
+ let n2 = q_.exec(e4.trim());
6935
6972
  if (n2) {
6936
6973
  let [, e5, t3, r3, i2, a2, o2] = n2, s2 = new Date(Date.UTC(+e5, t3 - 1, +r3, +i2, +a2, o2 ? +o2 : 0));
6937
6974
  return isNaN(s2.getTime()) ? null : { date: s2, timeZone: "UTC" };
@@ -6939,44 +6976,44 @@ function R_(e4, t2) {
6939
6976
  let r2 = new Date(e4);
6940
6977
  return isNaN(r2.getTime()) ? null : { date: r2, timeZone: t2 || "UTC" };
6941
6978
  }
6942
- function z_(e4) {
6979
+ function Y_(e4) {
6943
6980
  var t2;
6944
6981
  if (!e4) return "";
6945
6982
  let n2 = [], r2 = (t2 = e4.location) == null ? void 0 : t2.trim();
6946
6983
  if (r2 ? n2.push(r2) : typeof e4.latitude == "number" && typeof e4.longitude == "number" && n2.push("".concat(e4.latitude.toFixed(2), ", ").concat(e4.longitude.toFixed(2))), e4.datetime) {
6947
- let t3 = /^\d{4}-\d{2}-\d{2}/.test(e4.datetime.trim()) ? R_(e4.datetime, e4.timezone) : null;
6984
+ let t3 = /^\d{4}-\d{2}-\d{2}/.test(e4.datetime.trim()) ? J_(e4.datetime, e4.timezone) : null;
6948
6985
  t3 ? n2.push(t3.date.toLocaleString("en-US", { timeZone: t3.timeZone, day: "numeric", month: "short", year: "numeric", hour: "numeric", minute: "2-digit" })) : n2.push(e4.datetime);
6949
6986
  }
6950
6987
  return n2.join(" \xB7 ");
6951
6988
  }
6952
- function B_(e4, t2, n2 = "Chart") {
6953
- let r2 = z_(t2);
6989
+ function X_(e4, t2, n2 = "Chart") {
6990
+ let r2 = Y_(t2);
6954
6991
  return r2 ? "".concat(n2, ": ").concat(r2, "\n\n").concat(e4) : e4;
6955
6992
  }
6956
- var V_ = document.getElementById("loading-state"), H_ = document.getElementById("vedic-container"), U_ = document.getElementById("info-panel"), W_ = document.getElementById("chart-status"), G_ = new $g({ name: "Vedic Chart Explorer", version: "1.0.0" }), $ = null, K_ = "dark", q_ = false;
6957
- function J_() {
6958
- return A_();
6993
+ var Z_ = document.getElementById("loading-state"), Q_ = document.getElementById("vedic-container"), $_ = document.getElementById("info-panel"), ev = document.getElementById("chart-status"), tv = new t_({ name: "Vedic Chart Explorer", version: "1.0.0" }, { availableDisplayModes: F_ }), $ = null, nv = "dark", rv = false;
6994
+ function iv() {
6995
+ return M_();
6959
6996
  }
6960
- j_((e4) => void av(e4));
6961
- function Y_(e4) {
6962
- if (W_) {
6997
+ N_((e4) => void hv(e4));
6998
+ function av(e4) {
6999
+ if (ev) {
6963
7000
  if (!e4) {
6964
- W_.classList.remove("visible");
7001
+ ev.classList.remove("visible");
6965
7002
  return;
6966
7003
  }
6967
- W_.textContent = "\xB7 ".concat(e4), W_.classList.add("visible");
7004
+ ev.textContent = "\xB7 ".concat(e4), ev.classList.add("visible");
6968
7005
  }
6969
7006
  }
6970
- r_(Y_);
6971
- async function X_(e4) {
6972
- e4 = B_(e4, $ == null ? void 0 : $._birth_params, "Vedic chart");
7007
+ a_(av);
7008
+ async function ov(e4) {
7009
+ e4 = X_(e4, $ == null ? void 0 : $._birth_params, "Vedic chart");
6973
7010
  try {
6974
- (await G_.sendMessage({ role: "user", content: [{ type: "text", text: e4 }] })).isError && console.error("[VedicChart] Host rejected sendMessage");
7011
+ (await tv.sendMessage({ role: "user", content: [{ type: "text", text: e4 }] })).isError && console.error("[VedicChart] Host rejected sendMessage");
6975
7012
  } catch (e5) {
6976
7013
  console.error("[VedicChart] sendMessage failed:", e5);
6977
7014
  }
6978
7015
  }
6979
- async function Z_(e4) {
7016
+ async function sv(e4) {
6980
7017
  var t2, n2;
6981
7018
  if (!$) return;
6982
7019
  let r2 = (t2 = $.lagna) == null ? "unknown" : t2, i2 = (n2 = $.ayanamsa) == null ? "Lahiri" : n2;
@@ -6986,12 +7023,12 @@ async function Z_(e4) {
6986
7023
  var t4, n4, r3, i3;
6987
7024
  return "".concat(e5.planet, " ").concat(e5.rashi_degree.toFixed(1), "\xB0").concat(e5.is_retrograde ? " (retrograde)" : "", " \u2014 Nakshatra ").concat((t4 = (n4 = e5.nakshatra) == null ? void 0 : n4.name) == null ? "" : t4, " pada ").concat((r3 = (i3 = e5.nakshatra) == null ? void 0 : i3.pada) == null ? "" : r3);
6988
7025
  }).join("; ");
6989
- await X_("Interpret the rashi ".concat(t3, " in this Vedic (Jyotish) chart \u2014 Ayanamsa: ").concat(i2, ", Lagna: ").concat(r2, ".\n\n") + (n3 ? "This is the Lagna (Ascendant) rashi. " : "") + (s3 ? "Planets placed here: ".concat(s3, ".\n\n") : "This rashi is unoccupied.\n\n") + "Please explain the themes of this rashi".concat(n3 ? " as the Lagna" : "", ", and interpret each placed planet's sidereal sign, nakshatra, and pada in the context of this birth chart."));
7026
+ await ov("Interpret the rashi ".concat(t3, " in this Vedic (Jyotish) chart \u2014 Ayanamsa: ").concat(i2, ", Lagna: ").concat(r2, ".\n\n") + (n3 ? "This is the Lagna (Ascendant) rashi. " : "") + (s3 ? "Planets placed here: ".concat(s3, ".\n\n") : "This rashi is unoccupied.\n\n") + "Please explain the themes of this rashi".concat(n3 ? " as the Lagna" : "", ", and interpret each placed planet's sidereal sign, nakshatra, and pada in the context of this birth chart."));
6990
7027
  return;
6991
7028
  }
6992
7029
  if (e4.type === "overview") {
6993
7030
  var s2;
6994
- await X_("Vedic chart \u2014 Ayanamsa: ".concat(i2, ". Lagna: ").concat(r2, ". Planets: ").concat(((s2 = $.planets) == null ? [] : s2).map((e5) => {
7031
+ await ov("Vedic chart \u2014 Ayanamsa: ".concat(i2, ". Lagna: ").concat(r2, ". Planets: ").concat(((s2 = $.planets) == null ? [] : s2).map((e5) => {
6995
7032
  var t3, n3, r3, i3;
6996
7033
  return "".concat(e5.planet, " in ").concat(e5.rashi_western, " ").concat(e5.rashi_degree.toFixed(1), "\xB0 (").concat((t3 = (n3 = e5.nakshatra) == null ? void 0 : n3.name) == null ? "" : t3, " pada ").concat((r3 = (i3 = e5.nakshatra) == null ? void 0 : i3.pada) == null ? "" : r3, ")").concat(e5.is_retrograde ? " \u211E" : "");
6997
7034
  }).join(", "), ".\n\nPlease give a comprehensive interpretation of this Jyotish birth chart, covering the Lagna, chart lord, key planetary placements, and overall life themes."));
@@ -7000,87 +7037,87 @@ async function Z_(e4) {
7000
7037
  if (e4.type === "moon") {
7001
7038
  var c2, l2, u2, d2;
7002
7039
  let e5 = ((c2 = $.planets) == null ? [] : c2).find((e6) => e6.planet === "Moon");
7003
- await X_(e5 ? "Focus on the Moon in ".concat(e5.rashi_western, " (").concat(e5.rashi, "), ").concat(e5.rashi_degree.toFixed(2), "\xB0, in Nakshatra ").concat((l2 = e5.nakshatra) == null ? void 0 : l2.name, " (lord: ").concat((u2 = e5.nakshatra) == null ? void 0 : u2.lord, ", pada: ").concat((d2 = e5.nakshatra) == null ? void 0 : d2.pada, "). Interpret the Moon's placement for emotional nature, mind, mother, and public life. Include the Nakshatra's influence.") : "Interpret the Moon's placement in this Vedic chart, including Nakshatra detail.");
7040
+ await ov(e5 ? "Focus on the Moon in ".concat(e5.rashi_western, " (").concat(e5.rashi, "), ").concat(e5.rashi_degree.toFixed(2), "\xB0, in Nakshatra ").concat((l2 = e5.nakshatra) == null ? void 0 : l2.name, " (lord: ").concat((u2 = e5.nakshatra) == null ? void 0 : u2.lord, ", pada: ").concat((d2 = e5.nakshatra) == null ? void 0 : d2.pada, "). Interpret the Moon's placement for emotional nature, mind, mother, and public life. Include the Nakshatra's influence.") : "Interpret the Moon's placement in this Vedic chart, including Nakshatra detail.");
7004
7041
  return;
7005
7042
  }
7006
7043
  }
7007
- function Q_(e4, t2, n2) {
7044
+ function cv(e4, t2, n2) {
7008
7045
  var r2;
7009
- let i2 = (r2 = m_[e4]) == null ? "" : r2;
7010
- Y_("".concat(e4).concat(t2 ? " \xB7 Lagna" : "").concat(i2 ? " \xB7 " + i2 : ""));
7046
+ let i2 = (r2 = g_[e4]) == null ? "" : r2;
7047
+ av("".concat(e4).concat(t2 ? " \xB7 Lagna" : "").concat(i2 ? " \xB7 " + i2 : ""));
7011
7048
  }
7012
- function $_(e4) {
7049
+ function lv(e4) {
7013
7050
  return '\n <div class="vedic-header">\n <span class="vedic-title">Jyotish Rashi Chart</span>\n <span class="vedic-ayanamsa-badge">'.concat(e4.ayanamsa || "Lahiri", "</span>\n </div>\n ");
7014
7051
  }
7015
- function ev(e4) {
7052
+ function uv(e4) {
7016
7053
  var t2, n2, r2, i2, a2, o2;
7017
- $ = e4, V_.setAttribute("hidden", ""), H_.removeAttribute("hidden");
7054
+ $ = e4, Z_.setAttribute("hidden", ""), Q_.removeAttribute("hidden");
7018
7055
  let s2 = e4._svg;
7019
7056
  if (!s2) {
7020
- rv("Vedic chart render unavailable \u2014 the server did not return an SVG.", iv);
7057
+ pv("Vedic chart render unavailable \u2014 the server did not return an SVG.", mv);
7021
7058
  return;
7022
7059
  }
7023
7060
  let c2 = document.getElementById("vedic-header-wrap");
7024
7061
  if (!c2) {
7025
7062
  var l2;
7026
- c2 = document.createElement("div"), c2.id = "vedic-header-wrap", (l2 = H_.parentElement) == null || l2.insertBefore(c2, H_);
7063
+ c2 = document.createElement("div"), c2.id = "vedic-header-wrap", (l2 = Q_.parentElement) == null || l2.insertBefore(c2, Q_);
7027
7064
  }
7028
- c2.innerHTML = $_(e4), g_(H_, s2, e4, { onSignClick: Q_, onAskClaude: Z_ });
7065
+ c2.innerHTML = lv(e4), v_(Q_, s2, e4, { onSignClick: cv, onAskClaude: sv });
7029
7066
  let u2 = document.getElementById("vedic-action-bar");
7030
7067
  if (!u2) {
7031
7068
  var d2;
7032
7069
  u2 = document.createElement("div"), u2.id = "vedic-action-bar", u2.className = "vedic-action-bar";
7033
7070
  let e5 = document.querySelector("#fs-bottom-bar [data-column='right']");
7034
- e5 ? e5.appendChild(u2) : (d2 = H_.parentElement) == null || d2.insertBefore(u2, H_);
7071
+ e5 ? e5.appendChild(u2) : (d2 = Q_.parentElement) == null || d2.insertBefore(u2, Q_);
7035
7072
  }
7036
- u2.innerHTML = '\n <button class="action-btn action-btn--primary" id="vedic-interpret-btn">\u2726 Interpret this chart</button>\n <button class="action-btn" id="vedic-lagna-btn">Lagna &amp; Ascendant</button>\n <button class="action-btn" id="vedic-moon-btn">Moon &amp; Nakshatra</button>\n ', (t2 = u2.querySelector("#vedic-interpret-btn")) == null || t2.addEventListener("click", () => void Z_({ type: "overview", data: {} })), (n2 = u2.querySelector("#vedic-lagna-btn")) == null || n2.addEventListener("click", () => void Z_({ type: "sign", data: { sign: e4.lagna, is_lagna: true } })), (r2 = u2.querySelector("#vedic-moon-btn")) == null || r2.addEventListener("click", () => void Z_({ type: "moon", data: {} }));
7073
+ u2.innerHTML = '\n <button class="action-btn action-btn--primary" id="vedic-interpret-btn">\u2726 Interpret this chart</button>\n <button class="action-btn" id="vedic-lagna-btn">Lagna &amp; Ascendant</button>\n <button class="action-btn" id="vedic-moon-btn">Moon &amp; Nakshatra</button>\n ', (t2 = u2.querySelector("#vedic-interpret-btn")) == null || t2.addEventListener("click", () => void sv({ type: "overview", data: {} })), (n2 = u2.querySelector("#vedic-lagna-btn")) == null || n2.addEventListener("click", () => void sv({ type: "sign", data: { sign: e4.lagna, is_lagna: true } })), (r2 = u2.querySelector("#vedic-moon-btn")) == null || r2.addEventListener("click", () => void sv({ type: "moon", data: {} }));
7037
7074
  let f2 = ((i2 = e4.planets) == null ? [] : i2).map((e5) => '<div class="info-row"><span class="info-label">'.concat(e5.planet, '</span><span class="info-value">').concat(e5.rashi_western, " ").concat(e5.rashi_degree.toFixed(1), "\xB0").concat(e5.is_retrograde ? " \u211E" : "", "</span></div>")).join("");
7038
- U_.innerHTML = '\n <div class="info-row"><span class="info-label">Lagna</span><span class="info-value">'.concat((a2 = e4.lagna) == null ? "\u2014" : a2, '</span></div>\n <div class="info-row"><span class="info-label">Ayanamsa</span><span class="info-value">').concat((o2 = e4.ayanamsa) == null ? "Lahiri" : o2, "</span></div>\n ").concat(f2, "\n "), U_.removeAttribute("hidden"), w_("vedic-chart");
7075
+ $_.innerHTML = '\n <div class="info-row"><span class="info-label">Lagna</span><span class="info-value">'.concat((a2 = e4.lagna) == null ? "\u2014" : a2, '</span></div>\n <div class="info-row"><span class="info-label">Ayanamsa</span><span class="info-value">').concat((o2 = e4.ayanamsa) == null ? "Lahiri" : o2, "</span></div>\n ").concat(f2, "\n "), $_.removeAttribute("hidden"), E_("vedic-chart");
7039
7076
  }
7040
- var tv;
7041
- function nv() {
7042
- tv && (clearTimeout(tv), tv = void 0);
7077
+ var dv;
7078
+ function fv() {
7079
+ dv && (clearTimeout(dv), dv = void 0);
7043
7080
  }
7044
- function rv(e4, t2) {
7045
- nv(), V_.setAttribute("hidden", ""), D_({ container: H_, message: e4, onRetry: t2 });
7081
+ function pv(e4, t2) {
7082
+ fv(), Z_.setAttribute("hidden", ""), k_({ container: Q_, message: e4, onRetry: t2 });
7046
7083
  }
7047
- function iv() {
7048
- nv(), H_.setAttribute("hidden", ""), V_.removeAttribute("hidden"), tv = setTimeout(() => {
7049
- rv("The Vedic chart didn't load. Tap to try again.", iv);
7050
- }, 3e4), G_.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the Vedic chart." }] }).catch(() => {
7084
+ function mv() {
7085
+ fv(), Q_.setAttribute("hidden", ""), Z_.removeAttribute("hidden"), dv = setTimeout(() => {
7086
+ pv("The Vedic chart didn't load. Tap to try again.", mv);
7087
+ }, 3e4), tv.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the Vedic chart." }] }).catch(() => {
7051
7088
  });
7052
7089
  }
7053
- async function av(e4) {
7054
- if (!(e4 === K_ || q_ || !($ != null && $._birth_params))) {
7055
- q_ = true, K_ = e4;
7090
+ async function hv(e4) {
7091
+ if (!(e4 === nv || rv || !($ != null && $._birth_params))) {
7092
+ rv = true, nv = e4;
7056
7093
  try {
7057
7094
  var t2, n2, r2, i2;
7058
- let a2 = $._birth_params, o2 = T_(await G_.callServerTool({ name: "vedic_chart_recalculate", arguments: { datetime: a2.datetime, latitude: (t2 = a2.latitude) == null ? void 0 : t2, longitude: (n2 = a2.longitude) == null ? void 0 : n2, ayanamsa: (r2 = a2.ayanamsa) == null ? void 0 : r2, theme: e4, ...$._render_token ? { render_token: $._render_token } : {} } }));
7059
- o2 && ((i2 = o2.planets) != null && i2.length || o2._svg) && ev(o2);
7095
+ let a2 = $._birth_params, o2 = D_(await tv.callServerTool({ name: "vedic_chart_recalculate", arguments: { datetime: a2.datetime, latitude: (t2 = a2.latitude) == null ? void 0 : t2, longitude: (n2 = a2.longitude) == null ? void 0 : n2, ayanamsa: (r2 = a2.ayanamsa) == null ? void 0 : r2, theme: e4, ...$._render_token ? { render_token: $._render_token } : {} } }));
7096
+ o2 && ((i2 = o2.planets) != null && i2.length || o2._svg) && uv(o2);
7060
7097
  } catch (e5) {
7061
7098
  console.error("[VedicChart] Theme re-fetch failed:", e5);
7062
7099
  } finally {
7063
- q_ = false;
7100
+ rv = false;
7064
7101
  }
7065
7102
  }
7066
7103
  }
7067
- G_.ontoolresult = (e4) => {
7068
- nv();
7104
+ tv.ontoolresult = (e4) => {
7105
+ fv();
7069
7106
  try {
7070
- let t2 = T_(e4);
7071
- if (((t2 == null ? void 0 : t2._theme) === "light" || (t2 == null ? void 0 : t2._theme) === "dark") && (K_ = t2._theme), !t2 || !t2.planets) {
7072
- rv("Vedic chart data could not be parsed from the server response.", iv);
7107
+ let t2 = D_(e4);
7108
+ if (((t2 == null ? void 0 : t2._theme) === "light" || (t2 == null ? void 0 : t2._theme) === "dark") && (nv = t2._theme), !t2 || !t2.planets) {
7109
+ pv("Vedic chart data could not be parsed from the server response.", mv);
7073
7110
  return;
7074
7111
  }
7075
- ev(t2), av(J_());
7112
+ uv(t2), hv(iv());
7076
7113
  } catch (e5) {
7077
- rv("An error occurred while rendering the Vedic chart.", iv), console.error("[VedicChart] Render error:", e5);
7114
+ pv("An error occurred while rendering the Vedic chart.", mv), console.error("[VedicChart] Render error:", e5);
7078
7115
  }
7079
- }, P_(G_, { loadingEl: V_, contentEl: H_, statusFn: Y_, paramControls: null }), tv = setTimeout(() => {
7080
- rv("Vedic chart data is taking longer than expected.", iv);
7116
+ }, W_(tv, { loadingEl: Z_, contentEl: Q_, statusFn: av, paramControls: null }), dv = setTimeout(() => {
7117
+ pv("Vedic chart data is taking longer than expected.", mv);
7081
7118
  }, 3e4), (async () => {
7082
7119
  try {
7083
- await G_.connect(), N_(G_, document.getElementById("pan-zoom-controls"), ["info-panel", "vedic-action-bar"]), I_(G_), M_(G_, (e4) => void av(e4));
7120
+ await tv.connect(), H_(tv, document.getElementById("pan-zoom-controls"), ["info-panel", "vedic-action-bar"]), K_(tv), P_(tv, (e4) => void hv(e4));
7084
7121
  } catch (e4) {
7085
7122
  console.error("[VedicChart] connect() failed:", e4);
7086
7123
  }