@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>Human Design Bodygraph 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);--hd-head:#855dd7;--hd-ajna:#3a61c4;--hd-throat:#94582a;--hd-g:#c99f00;--hd-heart:#cc272e;--hd-spleen:#3d9028;--hd-sp:#cb5a1a;--hd-sacral:#cc243d;--hd-root:#6f3600;--ch-personality:#79a1fc;--ch-design:#ac7d1b;--ch-both:#cc9c42;--ch-inactive:#1f2228;--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);--hd-head:color(display-p3 .496597 .372031 .817324);--hd-ajna:color(display-p3 .26389 .378111 .742207);--hd-throat:color(display-p3 .548969 .355242 .201432);--hd-g:color(display-p3 .777513 .62422 -.00225984);--hd-heart:color(display-p3 .737101 .219083 .211834);--hd-spleen:color(display-p3 .328385 .55681 .222852);--hd-sp:color(display-p3 .739686 .377576 .178173);--hd-sacral:color(display-p3 .735577 .213396 .258614);--hd-root:color(display-p3 .406873 .223096 .0609673);--ch-personality:color(display-p3 .508025 .628538 .962447);--ch-design:color(display-p3 .645333 .49681 .196492);--ch-both:color(display-p3 .76996 .617341 .321369);--ch-inactive:color(display-p3 .122731 .131518 .153019);--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);--hd-head:lab(48.5159% 37.0934 -58.1781);--hd-ajna:lab(42.6654% 12.3084 -56.648);--hd-throat:lab(43.8304% 22.8021 36.6207);--hd-g:lab(67.813% 9.5214 93.33);--hd-heart:lab(45.7636% 63.3818 40.1799);--hd-spleen:lab(53.0764% -40.8778 44.314);--hd-sp:lab(52.4466% 43.5944 55.3775);--hd-sacral:lab(45.6635% 64.2059 31.2074);--hd-root:lab(29.855% 23.6799 41.1297);--ch-personality:lab(66.4233% 5.15938 -50.1959);--ch-design:lab(55.9353% 12.6865 55.2442);--ch-both:lab(67.5798% 11.9379 52.333);--ch-inactive:lab(12.9398% -.133917 -4.46223);--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}:root[data-theme=light] #bodygraph-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)}*,: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);background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.030'/%3E%3C/svg%3E");font-family:Geist,Space Grotesk,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:1.5;overflow-x:hidden}#app{flex-direction:column;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}.spinner{border:2px solid var(--border-strong);border-top-color:var(--gold);border-radius:50%;width:32px;height:32px;animation:1.1s cubic-bezier(.4,0,.6,1) infinite spin}@keyframes spin{to{transform:rotate(360deg)}}#bodygraph-container{border-radius:var(--radius);border:1px solid var(--border-strong);width:100%;max-width:680px;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}#bodygraph-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)}#bodygraph-container svg{width:100%;height:auto;max-height:min(62vh,560px);display:block}.center-group{cursor:pointer;transition:filter .16s}.center-group:hover{filter:brightness(1.2)drop-shadow(0 0 6px rgba(204,156,66,.35));filter:brightness(1.2)drop-shadow(0 0 6px color(display-p3 .76996 .617341 .321369/.35));filter:brightness(1.2)drop-shadow(0 0 6px lab(67.5798% 11.9379 52.333/.35))}.channel-line{cursor:pointer}.channel-line:hover .channel-vis{filter:drop-shadow(0 0 4px var(--gold-glow));stroke:var(--gold)!important;stroke-width:5px!important}.gate-badge{cursor:pointer}.gate-badge:hover circle{stroke:var(--gold)!important;stroke-opacity:1!important}.gate-badge:hover text{fill:var(--gold)!important}#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:680px;margin:0 auto;padding:10px 14px;display:grid}.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}.info-connection{flex-direction:column;grid-column:1/-1;gap:14px;display:flex}.info-subject-header{letter-spacing:.08em;text-transform:uppercase;color:var(--gold,var(--text));border-bottom:1px solid var(--border-strong);margin-bottom:2px;padding-bottom:4px;font-size:10px;font-weight:700}.info-subject-grid{grid-template-columns:1fr 1fr;gap:6px 12px;display:grid}.channel-legend{flex-wrap:wrap;justify-content:center;gap:12px;width:100%;max-width:680px;margin:0 auto;padding:4px 0;display:flex}.legend-item{color:var(--text-secondary);letter-spacing:.04em;align-items:center;gap:5px;font-size:9px;font-weight:500;display:flex}.legend-swatch{border-radius:2px;flex-shrink:0;width:18px;height:3px}#controls-panel{background:0 0;width:100%;max-width:680px;margin:0 auto;padding:4px 0}.controls-row{align-items:center;gap:6px;display:flex}.controls-label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);flex-shrink:0;font-size:9px;font-weight:700}.controls-value{color:var(--text-secondary);font-size:11px}.chart-hint{text-align:center;letter-spacing:.04em;width:100%;max-width:680px;color:var(--muted);margin:0 auto;padding:4px 0 2px;font-size:10px}.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,rgba(128,128,160,.3));color:var(--accent,var(--text,inherit));font:inherit;letter-spacing:.02em;cursor:pointer;background:0 0;border-radius:999px;margin-top:4px;padding:7px 20px;font-size:11px;font-weight:600;transition:background .18s,border-color .18s}.error-retry-btn:hover{background:rgba(128,128,160,.12)}@media (max-width:420px){#app{gap:8px;padding:8px}#info-panel{grid-template-columns:1fr}}#bodygraph-container.is-loading{opacity:.55;pointer-events:none;cursor:wait;transition:opacity .15s}.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)}@keyframes gold-pulse{0%,to{border-color:rgba(204,156,66,.35);border-color:color(display-p3 .76996 .617341 .321369/.35);border-color:lab(67.5798% 11.9379 52.333/.35)}50%{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)}}.hd-popup{background:var(--surface-2);border:1px solid var(--border-strong);z-index:1000;opacity:0;pointer-events:none;border-radius:12px;width:min(340px,92vw);padding:14px 16px 12px;transition:opacity .2s cubic-bezier(.16,1,.3,1),transform .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)}.hd-popup.visible{opacity:1;pointer-events:all}.hd-popup-header{align-items:flex-start;gap:10px;display:flex}.hd-popup-icon{color:var(--gold);text-align:center;flex-shrink:0;min-width:28px;font-size:18px;font-weight:700;line-height:1}.hd-popup-title{color:var(--text);flex:1;font-size:13px;font-weight:700}.hd-popup-sub{color:var(--text-secondary);letter-spacing:.01em;margin-top:2px;font-size:11px;font-weight:400}.hd-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}.hd-popup-close:hover{color:var(--text)}.hd-popup-body{border-top:1px solid var(--border);flex-direction:column;gap:6px;margin-top:10px;padding-top:10px;display:flex}.hd-popup-row{align-items:baseline;gap:8px;font-size:11px;line-height:1.45;display:flex}.hd-popup-label{letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary);flex-shrink:0;min-width:56px;padding-top:1px;font-size:9px;font-weight:700}.hd-popup-val{color:var(--text);font-weight:500}.hd-popup-gates{flex-wrap:wrap;gap:4px;font-weight:500;display:flex}.hd-popup-gate-chip{border:1px solid var(--border-strong);border-radius:var(--radius-pill,99px);background:var(--surface);color:var(--text);white-space:nowrap;padding:1px 7px;font-size:10px;display:inline-block}.hd-popup-note{color:var(--text-secondary);letter-spacing:.01em;margin-top:4px;font-size:10px;font-style:italic;line-height:1.5}.hd-detail-panel{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex:1;min-height:0;padding:2px 0 8px;overflow-y:auto}.hd-detail-panel .hd-popup-header{border-bottom:1px solid var(--border);margin-bottom:8px;padding-bottom:8px}.hd-detail-panel .hd-popup-close{opacity:.5}.hd-detail-panel .hd-popup-close:hover{opacity:1;color:var(--text)}.ask-claude-btn{border-radius:var(--radius-sm);width:100%;color:var(--gold);letter-spacing:.04em;cursor:pointer;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);justify-content:center;align-items:center;gap:6px;margin-top:12px;padding:9px 16px;font-family:Geist,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:12px;font-weight:600;transition:background .16s,border-color .16s,box-shadow .16s;display:flex}.ask-claude-btn:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65);box-shadow:0 0 0 3px rgba(204,156,66,.12);box-shadow:0 0 0 3px color(display-p3 .76996 .617341 .321369/.12);box-shadow:0 0 0 3px lab(67.5798% 11.9379 52.333/.12)}.ask-claude-btn:disabled{opacity:.45;cursor:not-allowed}.ask-claude-btn.sending{color:var(--gold-dim);opacity:.8;cursor:wait;pointer-events:none;background:rgba(204,156,66,.08);background:color(display-p3 .76996 .617341 .321369/.08);background:lab(67.5798% 11.9379 52.333/.08);border-color:rgba(204,156,66,.25);border-color:color(display-p3 .76996 .617341 .321369/.25);border-color:lab(67.5798% 11.9379 52.333/.25)}.ask-claude-btn.sent{color:var(--success);pointer-events:none;background:rgba(29,168,113,.15);background:color(display-p3 .313719 .651039 .459895/.15);background:lab(61.2436% -46.7762 18.3644/.15);border-color:rgba(29,168,113,.5);border-color:color(display-p3 .313719 .651039 .459895/.5);border-color:lab(61.2436% -46.7762 18.3644/.5)}.ask-claude-btn.error{color:var(--error);cursor:pointer;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)}.interactive-text{cursor:pointer;transition:color .15s,text-shadow .15s;position:relative}.interactive-text:hover{color:var(--gold);text-shadow:0 0 8px rgba(204,156,66,.4);text-shadow:0 0 8px color(display-p3 .76996 .617341 .321369/.4);text-shadow:0 0 8px lab(67.5798% 11.9379 52.333/.4)}.interactive-text:focus{color:var(--gold);text-shadow:0 0 8px rgba(204,156,66,.6);text-shadow:0 0 8px color(display-p3 .76996 .617341 .321369/.6);text-shadow:0 0 8px lab(67.5798% 11.9379 52.333/.6);outline:none}.planet-activation,.variable-arrow{outline:none;transition:opacity .15s}.planet-activation:hover,.variable-arrow:hover{opacity:.7}.planet-activation:focus-visible{outline:2px solid var(--gold);outline-offset:4px}.variable-arrow:focus-visible{outline:2px solid var(--gold);outline-offset:4px}.center-group:focus-visible{outline:2px solid var(--gold);outline-offset:4px}.gate-badge:focus-visible{outline:2px solid var(--gold);outline-offset:4px}.channel:focus-visible{outline:2px solid var(--gold);outline-offset:4px}[data-gate]:focus-visible{outline:2px solid var(--gold);outline-offset:4px}[data-channel]:focus-visible{outline:2px solid var(--gold);outline-offset:4px}[data-center]:focus-visible{outline:2px solid var(--gold);outline-offset:4px}.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:240px;padding:8px 12px;font-size:12px;transition:opacity .12s;position:fixed;box-shadow:0 8px 32px rgba(0,0,0,.55),inset 0 .5px rgba(255,255,255,.04);box-shadow:0 8px 32px color(display-p3 0 0 0/.55),inset 0 .5px color(display-p3 1 1 1/.04);box-shadow:0 8px 32px lab(0% 0 0/.55),inset 0 .5px lab(100% 0 0/.04)}.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}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 #bodygraph-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 #bodygraph-container svg{width:auto;max-width:100%;height:100%;max-height:100%}body.is-fullscreen .pan-zoom-controls{top:16px;right:16px}#fs-bottom-bar{border-top:1px solid var(--border);background:#020306;background:color(display-p3 .0100648 .0127997 .0215356);background:lab(.889429% .0122339 -1.01076);flex-shrink:0;grid-template-rows:1fr;grid-template-columns:220px 1fr 220px;height:240px;min-height:180px;max-height:280px;display:grid}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex-direction:column;gap:4px;padding:10px 14px 12px;display:flex;overflow-x:hidden;overflow-y:auto}#fs-bottom-bar [data-column=left]{border-right:1px solid var(--border)}#fs-bottom-bar [data-column=center]{pointer-events:none}#fs-bottom-bar [data-column=right]{border-left:1px solid var(--border);overflow-y:auto}#fs-bottom-bar [data-column]>*+*{border-top:1px solid var(--border);margin-top:4px;padding-top:8px}#fs-bottom-bar .hd-action-bar{flex-direction:column;padding:8px 0 0}#fs-bottom-bar .action-btn{justify-content:center;width:100%}.cancel-toast{background:var(--surface-2,#1e1e2e);border:1px solid var(--border-strong,#444);color:var(--text-muted,#aaa);border-radius:var(--radius-sm,6px);opacity:0;z-index:9999;pointer-events:none;box-shadow:var(--shadow-md,0 4px 12px rgba(0,0,0,.3));padding:8px 16px;font-family:inherit;font-size:12px;transition:opacity .3s,transform .3s;position:fixed;bottom:20px;left:50%;transform:translate(-50%)translateY(20px)}.cancel-toast.visible{opacity:1;transform:translate(-50%)translateY(0)}.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}}.info-drawer{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius);width:100%;box-shadow:var(--shadow-md);opacity:0;pointer-events:none;max-height:0;padding:14px 16px 12px;transition:max-height .26s cubic-bezier(.16,1,.3,1),opacity .2s,padding .2s;position:relative;overflow:hidden}.info-drawer:before{content:"";background:var(--border-strong);border-radius:2px;flex-shrink:0;width:36px;height:4px;margin:0 auto 10px;display:block}.info-drawer.open{opacity:1;pointer-events:all;max-height:500px;padding:14px 16px 12px}.hd-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(212,175,55,.08);border:1px solid rgba(212,175,55,.3);border-radius:8px;align-items:center;gap:6px;padding:7px 16px;font-size:12px;font-weight:600;transition:background .2s,border-color .2s,transform .1s;display:inline-flex}.action-btn:hover{background:rgba(212,175,55,.15);border-color:rgba(212,175,55,.5);transform:translateY(-1px)}.action-btn:active{background:rgba(212,175,55,.2);transform:translateY(0)}.action-btn--primary{color:var(--gold);background:linear-gradient(135deg,rgba(212,175,55,.2),rgba(180,140,30,.25));border-color:rgba(212,175,55,.5)}.action-btn--primary:hover{background:linear-gradient(135deg,rgba(212,175,55,.3),rgba(180,140,30,.35));border-color:rgba(212,175,55,.7)}:root[data-theme=light]{--bg:#f7f5f1;--surface:#fff;--surface-2:#f1eee9;--border:#dbd7d0;--border-strong:#bdb6ac;--text:#101215;--text-secondary:#4f5359;--muted:#6c6f73;--gold:#8d5f00;--gold-dim:#6d4b00;--gold-glow:rgba(141,95,0,.25);--gold-subtle:rgba(141,95,0,.1);--success:#007145;--error:#b1002b;--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)}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light]{--bg:color(display-p3 .967616 .959866 .945308);--surface:color(display-p3 1 1 1);--surface-2:color(display-p3 .943798 .93351 .914195);--border:color(display-p3 .855616 .842987 .819292);--border-strong:color(display-p3 .73602 .716348 .67952);--text:color(display-p3 .0633107 .0687189 .081922);--text-secondary:color(display-p3 .313002 .323251 .348016);--muted:color(display-p3 .426318 .433563 .450948);--gold:color(display-p3 .542549 .371783 -.107551);--gold-dim:color(display-p3 .414099 .299019 .034461);--gold-glow:color(display-p3 .542549 .371783 -.107551/.25);--gold-subtle:color(display-p3 .542549 .371783 -.107551/.1);--success:color(display-p3 -.0793084 .456092 .255685);--error:color(display-p3 .642198 .101724 .18242);--shadow-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.5376% .34079 2.2589);--surface:lab(100% 0 0);--surface-2:lab(94.2232% .459701 3.01524);--border:lab(86.1085% .583261 3.77473);--border-strong:lab(74.5232% .975847 6.06879);--text:lab(5.23809% -.0738502 -2.43738);--text-secondary:lab(34.9842% -.210062 -4.49808);--muted:lab(46.6045% -.170052 -3.01461);--gold:lab(44.1995% 17.0662 84.3373);--gold-dim:lab(35.0077% 11.3181 50.9422);--gold-glow:lab(44.1995% 17.0662 84.3373/.25);--gold-subtle:lab(44.1995% 17.0662 84.3373/.1);--success:lab(41.7514% -55.3249 21.5039);--error:lab(37.5238% 64.2774 32.6097);--shadow-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[data-theme=light] body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background-image:none}:root[data-theme=light] #bodygraph-container{border-color:var(--border-strong);background:#fff;background:color(display-p3 1 1 1);background:lab(100% 0 0)}:root[data-theme=light] .chart-status{background:rgba(247,245,241,.92);background:color(display-p3 .967616 .959866 .945308/.92);background:lab(96.5376% .34079 2.2589/.92);border-color:rgba(141,95,0,.35);border-color:color(display-p3 .542549 .371783 -.107551/.35);border-color:lab(44.1995% 17.0662 84.3373/.35)}:root[data-theme=light] .tooltip{border-color:var(--border-strong);background:rgba(255,255,255,.96);background:color(display-p3 1 1 1/.96);background:lab(100% 0 0/.96)}:root[data-theme=light] #info-panel{background:var(--surface);border-color:var(--border)}:root[data-theme=light] .hd-popup{background:var(--surface);border-color:var(--border-strong);box-shadow:0 12px 48px rgba(0,0,0,.18), 0 0 0 1px var(--border-strong)}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light] .hd-popup{box-shadow:0 12px 48px color(display-p3 0 0 0/.18), 0 0 0 1px var(--border-strong)}}@supports (color:lab(0% 0 0)){:root[data-theme=light] .hd-popup{box-shadow:0 12px 48px lab(0% 0 0/.18), 0 0 0 1px var(--border-strong)}}:root[data-theme=light] #fs-bottom-bar{background:#f7f5f1;background:color(display-p3 .967616 .959866 .945308);background:lab(96.5376% .34079 2.2589);border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] #fs-bottom-bar [data-column=left],:root[data-theme=light] #fs-bottom-bar [data-column=right]{background:#f1eeea;background:color(display-p3 .941472 .933762 .919279);background:lab(94.2176% .341028 2.25905)}:root[data-theme=light] #fs-bottom-bar [data-column=left]{border-right-color:#caced4;border-right-color:color(display-p3 .796183 .806346 .830691);border-right-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] #fs-bottom-bar [data-column=right]{border-left-color:#caced4;border-left-color:color(display-p3 .796183 .806346 .830691);border-left-color:lab(82.5562% -.22167 -3.77336)}:root[data-theme=light] #fs-bottom-bar [data-column]>*+*{border-top-color:#caced4;border-top-color:color(display-p3 .796183 .806346 .830691);border-top-color:lab(82.5562% -.22167 -3.77336)}svg.has-highlight [data-center],svg.has-highlight [data-channel],svg.has-highlight [data-gate]{opacity:.45;transition:opacity .2s,filter .2s}svg.has-highlight [data-highlighted=true]{opacity:1;filter:drop-shadow(0 0 4px rgba(212,160,23,.55))}svg.has-highlight [data-highlighted-primary=true]{opacity:1;filter:drop-shadow(0 0 8px rgba(212,160,23,.95))}svg.has-highlight [data-highlighted-primary=true] path,svg.has-highlight [data-highlighted-primary=true] circle,svg.has-highlight [data-highlighted-primary=true] polygon,svg.has-highlight [data-highlighted-primary=true] rect{stroke-width:calc(var(--stroke-w,1.5) * 1.4)}@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}}.hd-disclaimer{max-width:680px;color:var(--text-secondary);text-align:center;margin:4px auto 0;font-size:10px;line-height:1.5}.action-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}body.layout-mandala #bodygraph-container,body.layout-mandala #info-panel,body.layout-mandala .channel-legend,body.layout-mandala #controls-panel,body.layout-mandala .chart-hint,body.layout-mandala .hd-disclaimer{max-width:760px}body.layout-mandala #bodygraph-container svg{max-height:min(72vh,720px)}.param-controls{background:var(--surface);border-top:1px solid var(--border);flex-shrink:0;padding:6px 12px}.param-controls-grid{flex-wrap:wrap;align-items:center;gap:6px 10px;display:flex}.param-group{flex-direction:row;align-items:center;gap:6px;display:flex}.param-group label{text-transform:uppercase;color:var(--text-secondary);letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:700}.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);color-scheme:inherit;border-radius:var(--radius-sm);width:120px;height:24px;padding:3px 6px;font-family:inherit;font-size:11px}@media (prefers-reduced-motion:no-preference){.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{transition:border-color .15s}}.param-group input:focus{border-color:var(--gold-dim);outline:none}.loc-searching{border-color:var(--gold-dim)!important}@media (prefers-reduced-motion:no-preference){.loc-searching{animation:1s ease-in-out infinite alternate loc-pulse}}@keyframes loc-pulse{0%{border-color:var(--gold-dim)}to{border-color:rgba(204,156,66,.55);border-color:color(display-p3 .76996 .617341 .321369/.55);border-color:lab(67.5798% 11.9379 52.333/.55)}}.param-group-loc{flex:1;position:relative}.param-group-loc input{width:100%}.loc-suggestions{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius-sm);z-index:100;max-height:200px;margin-top:4px;position:absolute;top:100%;left:0;right:0;overflow-y:auto;box-shadow:0 4px 12px rgba(0,0,0,.35);box-shadow:0 4px 12px color(display-p3 0 0 0/.35);box-shadow:0 4px 12px lab(0% 0 0/.35)}.loc-item{color:var(--text);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid var(--border);padding:8px 10px;font-size:12px;overflow:hidden}.loc-item:last-child{border-bottom:none}@media (prefers-reduced-motion:no-preference){.loc-item{transition:background .1s,color .1s}}.loc-item:hover,.loc-item--active{background:var(--gold-subtle);color:var(--gold)}.loc-status{color:var(--text-secondary);letter-spacing:.01em;padding:8px 10px;font-size:11px;font-style:italic}.loc-status-error{color:#d76a5a;color:color(display-p3 .788241 .439621 .373983);color:lab(58.1265% 42.6447 29.9439);font-style:normal;font-weight:600}.param-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.param-cost-hint{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;font-size:10px}.param-btn-icon{border:1px solid var(--border-strong);color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;background:0 0;justify-content:center;align-items:center;width:24px;height:24px;display:flex}@media (prefers-reduced-motion:no-preference){.param-btn-icon{transition:background .15s,border-color .15s,color .15s}}.param-btn-icon:hover{background:var(--surface-2);color:var(--text);border-color:var(--gold-dim)}.param-btn-primary{color:var(--gold);border-radius:var(--radius-sm);cursor:pointer;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);height:24px;padding:3px 10px;font-family:inherit;font-size:10px;font-weight:600}@media (prefers-reduced-motion:no-preference){.param-btn-primary{transition:background .15s,border-color .15s}}.param-btn-primary:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65)}.param-btn-primary:disabled{opacity:.5;cursor:not-allowed}.param-extra-toggle{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;cursor:pointer;align-items:center;gap:5px;font-size:10px;display:flex}.param-extra-toggle input[type=checkbox]{width:13px;height:13px;accent-color:var(--gold,oklch(72% .12 80));cursor:pointer}.param-extra-toggle input[type=checkbox]:disabled{cursor:not-allowed}.param-extra-toggle input[type=checkbox]:disabled~span{opacity:.5}:root[data-theme=light] .param-group input[type=date],:root[data-theme=light] .param-group input[type=time],:root[data-theme=light] .param-group input[type=text]{border-color:var(--border-strong);color:var(--text);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167638 1.12768)}:root[data-theme=light] .loc-suggestions{border-color:var(--border-strong);background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167638 1.12768)}:root[data-theme=light] .param-btn-primary{background:rgba(160,112,0,.12);background:color(display-p3 .615135 .441554 -.0204711/.12);background:lab(51.2092% 16.2654 78.3504/.12);border-color:rgba(160,112,0,.4);border-color:color(display-p3 .615135 .441554 -.0204711/.4);border-color:lab(51.2092% 16.2654 78.3504/.4)}:root[data-theme=light] .param-btn-primary:hover:not(:disabled){background:rgba(160,112,0,.22);background:color(display-p3 .615135 .441554 -.0204711/.22);background:lab(51.2092% 16.2654 78.3504/.22);border-color:rgba(160,112,0,.65);border-color:color(display-p3 .615135 .441554 -.0204711/.65);border-color:lab(51.2092% 16.2654 78.3504/.65)}.param-summary-bar{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:2px 0;margin-bottom:4px;padding:3px 4px 5px;font-size:10px;line-height:1.3;display:flex}.param-summary-bar[hidden]{display:none}.summary-name{color:var(--gold,#d6a54d);letter-spacing:.01em;padding-right:2px;font-size:12px;font-weight:700}@supports (color:color(display-p3 0 0 0)){.summary-name{color:var(--gold,color(display-p3 .808073 .654274 .358094))}}@supports (color:lab(0% 0 0)){.summary-name{color:var(--gold,lab(71.071% 11.7474 51.7651))}}.summary-datetime{font-variant-numeric:tabular-nums;color:var(--text-secondary);align-items:baseline;gap:4px;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-size:11px;display:inline-flex}.summary-time-sep{color:var(--border-strong);opacity:.7;font-family:inherit;font-size:9px}.summary-loc{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:200px;padding-left:2px;font-size:11px;font-style:italic;overflow:hidden}.summary-sep{background:var(--border-strong);opacity:.5;vertical-align:middle;flex-shrink:0;width:1px;height:11px;margin:0 7px;display:inline-block}
13
+ <style>:root{--bg:#010102;--surface:#030408;--surface-2:#080b11;--border:#13161d;--border-strong:#242933;--text:#e2e4e9;--text-secondary:#a1a5ab;--muted:#84868b;--gold:#cc9c42;--gold-dim:#7b6540;--gold-glow:rgba(204,156,66,.2);--gold-subtle:rgba(204,156,66,.1);--success:#1da871;--error:#c53443;--radius:10px;--radius-sm:6px;--radius-pill:99px;--oe-shadow-md:0 8px 40px rgba(0,0,0,.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px rgba(204,156,66,.15), 0 0 0 1px rgba(204,156,66,.2);--font-ui:var(--font-sans,system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif);--font-code:var(--font-mono,ui-monospace, "SFMono-Regular", "Cascadia Mono", Menlo, Consolas, monospace);--oe-page-bg:var(--color-background-primary,var(--bg));--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@supports (color:color(display-p3 0 0 0)){:root{--bg:color(display-p3 .00306656 .00431968 .00888397);--surface:color(display-p3 .013072 .016989 .0298495);--surface-2:color(display-p3 .0345774 .0431759 .0653236);--border:color(display-p3 .0763929 .0859556 .109705);--border-strong:color(display-p3 .144788 .159634 .196542);--text:color(display-p3 .889546 .895785 .910689);--text-secondary:color(display-p3 .635245 .644982 .668335);--muted:color(display-p3 .518127 .525635 .543633);--gold:color(display-p3 .76996 .617341 .321369);--gold-dim:color(display-p3 .469305 .400291 .270966);--gold-glow:color(display-p3 .76996 .617341 .321369/.2);--gold-subtle:color(display-p3 .76996 .617341 .321369/.1);--success:color(display-p3 .313719 .651039 .459895);--error:color(display-p3 .710345 .252818 .279408);--oe-shadow-md:0 8px 40px color(display-p3 0 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px color(display-p3 .76996 .617341 .321369/.15), 0 0 0 1px color(display-p3 .76996 .617341 .321369/.2)}}@supports (color:lab(0% 0 0)){:root{--bg:lab(.302122% .0219196 -.522962);--surface:lab(1.18159% .0276566 -1.4848);--surface-2:lab(3.00584% .0228807 -3.15676);--border:lab(7.15581% -.0557452 -5.11242);--border-strong:lab(16.3712% -.0768155 -7.37782);--text:lab(90.6942% -.142366 -2.26941);--text-secondary:lab(67.4758% -.215352 -3.76978);--muted:lab(55.8848% -.174642 -3.01716);--gold:lab(67.5798% 11.9379 52.333);--gold-dim:lab(44.394% 5.21132 24.4453);--gold-glow:lab(67.5798% 11.9379 52.333/.2);--gold-subtle:lab(67.5798% 11.9379 52.333/.1);--success:lab(61.2436% -46.7762 18.3644);--error:lab(45.8893% 57.7361 27.393);--oe-shadow-md:0 8px 40px lab(0% 0 0/.65), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 28px lab(67.5798% 11.9379 52.333/.15), 0 0 0 1px lab(67.5798% 11.9379 52.333/.2)}}:root[data-theme=light]{--bg:#f4f5f8;--surface:#fbfcfe;--surface-2:#eceef3;--border:#d5d7dd;--border-strong:#babec6;--text:#181b1f;--text-secondary:#4a4d54;--muted:#606369;--gold:#8a6000;--gold-dim:#967c4f;--gold-glow:rgba(141,95,0,.25);--gold-subtle:rgba(141,95,0,.07);--success:#007145;--error:#b1002b;--oe-shadow-md:0 4px 24px rgba(0,0,0,.12), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 16px rgba(141,95,0,.18), 0 0 0 1px rgba(141,95,0,.22);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light]{--bg:color(display-p3 .956515 .960735 .970805);--surface:color(display-p3 .98376 .986943 .994535);--surface-2:color(display-p3 .928401 .934691 .949715);--border:color(display-p3 .836244 .844458 .864107);--border-strong:color(display-p3 .731542 .743532 .772301);--text:color(display-p3 .096883 .103987 .12134);--text-secondary:color(display-p3 .291758 .301882 .326359);--muted:color(display-p3 .379924 .388781 .410092);--gold:color(display-p3 .524671 .380491 .0387678);--gold-dim:color(display-p3 .572756 .489268 .332751);--gold-glow:color(display-p3 .542549 .371783 -.107551/.25);--gold-subtle:color(display-p3 .542549 .371783 -.107551/.07);--success:color(display-p3 -.0793084 .456092 .255685);--error:color(display-p3 .642198 .101724 .18242);--oe-shadow-md:0 4px 24px color(display-p3 0 0 0/.12), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 16px color(display-p3 .542549 .371783 -.107551/.18), 0 0 0 1px color(display-p3 .542549 .371783 -.107551/.22)}}@supports (color:lab(0% 0 0)){:root[data-theme=light]{--bg:lab(96.503% -.0977516 -1.51461);--surface:lab(98.8273% -.0742674 -1.13657);--surface-2:lab(94.1743% -.142753 -2.26963);--border:lab(86.0453% -.183702 -3.02233);--border-strong:lab(76.7468% -.254452 -4.52154);--text:lab(9.4703% -.119448 -3.722);--text-secondary:lab(32.6639% -.205323 -4.4957);--muted:lab(41.9548% -.197023 -3.7598);--gold:lab(44.2758% 13.6718 62.9124);--gold-dim:lab(53.685% 6.10271 28.558);--gold-glow:lab(44.1995% 17.0662 84.3373/.25);--gold-subtle:lab(44.1995% 17.0662 84.3373/.07);--success:lab(41.7514% -55.3249 21.5039);--error:lab(37.5238% 64.2774 32.6097);--oe-shadow-md:0 4px 24px lab(0% 0 0/.12), 0 0 0 1px var(--border-strong);--shadow-gold:0 0 16px lab(44.1995% 17.0662 84.3373/.18), 0 0 0 1px lab(44.1995% 17.0662 84.3373/.22)}}:root{--safe-top:0px;--safe-right:0px;--safe-bottom:0px;--safe-left:0px;--oe-host-h:var(--host-height,var(--host-max-height,640px));--oe-chart-max:clamp(260px, calc(var(--oe-host-h) * .72), 560px);--oe-chart-max-lg:clamp(280px, calc(var(--oe-host-h) * .8), 720px);--oe-drawer-max:clamp(160px, calc(var(--oe-host-h) * .4), 360px);--oe-scroll-max:clamp(240px, calc(var(--oe-host-h) * .7), 560px)}html,body{font-family:var(--font-ui)}body{background-color:var(--oe-page-bg)}.oe-pannable{touch-action:pan-y}body.is-fullscreen .oe-pannable{touch-action:none}.pan-zoom-controls [hidden],.pan-btn[hidden]{display:none!important}.fs-hint-banner{top:calc(12px + var(--safe-top));z-index:9999;border-radius:var(--radius-pill);border:1px solid color-mix(in oklab, var(--gold) 35%, transparent);background:color-mix(in oklab, var(--surface-2) 92%, transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);max-width:calc(100% - 32px);color:var(--text);font:600 11px/1.4 var(--font-ui);letter-spacing:.04em;white-space:nowrap;text-overflow:ellipsis;pointer-events:none;opacity:0;padding:6px 16px;transition:opacity .3s;position:fixed;left:50%;overflow:hidden;transform:translate(-50%)}.fs-hint-banner.visible{opacity:1}@media (prefers-reduced-motion:reduce){.fs-hint-banner{transition:none}}body.is-fullscreen{height:100vh;height:100dvh;overflow:hidden}body.is-fullscreen #app{width:100%;max-width:none;height:100%;min-height:0;padding:var(--safe-top) var(--safe-right) var(--safe-bottom) var(--safe-left);flex-direction:column;gap:0;margin:0;display:flex;overflow:hidden}body.is-fullscreen #app:has(>#fs-bottom-bar){padding-bottom:0}body.is-fullscreen #app .oe-stage{aspect-ratio:auto;width:100%;max-width:none;height:auto;min-height:0;max-height:none;box-shadow:none;background:0 0;border:0;border-radius:0;flex:auto;justify-content:center;align-items:center;margin:0;padding:16px 24px 8px;display:flex;overflow:hidden}body.is-fullscreen #app .oe-stage>svg{width:auto;max-width:100%;height:100%;max-height:100%}body.is-fullscreen #app .oe-stage--doc{width:100%;max-width:880px;padding:20px 24px calc(16px + var(--safe-bottom));flex-direction:column;justify-content:flex-start;align-items:stretch;margin:0 auto;display:flex;overflow-y:auto}body.is-fullscreen #app #loading-state{flex:1;height:auto;min-height:0}body.is-fullscreen #app .pan-zoom-controls{top:calc(54px + var(--safe-top));right:calc(12px + var(--safe-right));bottom:auto}body .oe-info-button{top:calc(12px + var(--safe-top));right:calc(12px + var(--safe-right))}#app #fs-bottom-bar{height:clamp(170px, calc(var(--oe-host-h) * .3), 280px);padding-bottom:var(--safe-bottom);border-top:1px solid var(--border);background:var(--surface);flex-shrink:0;grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(200px,260px) minmax(0,1fr) minmax(200px,260px);display:grid}:root[data-safe-bottom] #app #fs-bottom-bar{height:calc(clamp(170px, calc(var(--oe-host-h) * .3), 280px) + var(--safe-bottom));grid-template-columns:minmax(0,1fr) minmax(0,1fr)}:root[data-safe-bottom] #fs-bottom-bar [data-column=center]{display:none}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex-direction:column;gap:4px;min-height:0;padding:10px 14px 12px;display:flex;overflow-x:hidden;overflow-y:auto}#fs-bottom-bar [data-column=left]{border-right:1px solid var(--border)}#fs-bottom-bar [data-column=right]{border-left:1px solid var(--border)}#fs-bottom-bar [data-column=center]{pointer-events:none}#fs-bottom-bar [data-column]>*+*{border-top:1px solid var(--border);margin-top:4px;padding-top:8px}#fs-bottom-bar [class$=-action-bar],#fs-bottom-bar [class*=-action-bar\ ]{flex-direction:column;padding:8px 0 0}#fs-bottom-bar .action-btn{justify-content:center;width:100%}@media (max-width:640px){#app #fs-bottom-bar,:root[data-safe-bottom] #app #fs-bottom-bar{height:auto;max-height:42%;display:block;overflow-y:auto}#fs-bottom-bar [data-column=center]{display:none}#fs-bottom-bar [data-column=left],#fs-bottom-bar [data-column=right]{border:0;min-height:auto;overflow:visible}#fs-bottom-bar [data-column=right]{border-top:1px solid var(--border)}body.is-fullscreen #app .oe-stage{padding:8px}}body.is-pip{overflow:hidden}body.is-pip #app{gap:6px;padding:6px 8px}body.is-pip .oe-pip-hide,body.is-pip #param-controls-container,body.is-pip #chart-status,body.is-pip .oe-info-button{display:none!important}body.is-pip #app .pan-zoom-controls{top:6px;right:6px}:root{--hd-head:#855dd7;--hd-ajna:#3a61c4;--hd-throat:#94582a;--hd-g:#c99f00;--hd-heart:#cc272e;--hd-spleen:#3d9028;--hd-sp:#cb5a1a;--hd-sacral:#cc243d;--hd-root:#6f3600;--ch-personality:#79a1fc;--ch-design:#ac7d1b;--ch-both:#cc9c42;--ch-inactive:#1f2228}@supports (color:color(display-p3 0 0 0)){:root{--hd-head:color(display-p3 .496597 .372031 .817324);--hd-ajna:color(display-p3 .26389 .378111 .742207);--hd-throat:color(display-p3 .548969 .355242 .201432);--hd-g:color(display-p3 .777513 .62422 -.00225984);--hd-heart:color(display-p3 .737101 .219083 .211834);--hd-spleen:color(display-p3 .328385 .55681 .222852);--hd-sp:color(display-p3 .739686 .377576 .178173);--hd-sacral:color(display-p3 .735577 .213396 .258614);--hd-root:color(display-p3 .406873 .223096 .0609673);--ch-personality:color(display-p3 .508025 .628538 .962447);--ch-design:color(display-p3 .645333 .49681 .196492);--ch-both:color(display-p3 .76996 .617341 .321369);--ch-inactive:color(display-p3 .122731 .131518 .153019)}}@supports (color:lab(0% 0 0)){:root{--hd-head:lab(48.5159% 37.0934 -58.1781);--hd-ajna:lab(42.6654% 12.3084 -56.648);--hd-throat:lab(43.8304% 22.8021 36.6207);--hd-g:lab(67.813% 9.5214 93.33);--hd-heart:lab(45.7636% 63.3818 40.1799);--hd-spleen:lab(53.0764% -40.8778 44.314);--hd-sp:lab(52.4466% 43.5944 55.3775);--hd-sacral:lab(45.6635% 64.2059 31.2074);--hd-root:lab(29.855% 23.6799 41.1297);--ch-personality:lab(66.4233% 5.15938 -50.1959);--ch-design:lab(55.9353% 12.6865 55.2442);--ch-both:lab(67.5798% 11.9379 52.333);--ch-inactive:lab(12.9398% -.133917 -4.46223)}}:root[data-theme=light] body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}: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)}*,: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}.spinner{border:2px solid var(--border-strong);border-top-color:var(--gold);border-radius:50%;width:32px;height:32px;animation:1.1s cubic-bezier(.4,0,.6,1) infinite spin}@keyframes spin{to{transform:rotate(360deg)}}#bodygraph-container{border-radius:var(--radius);width:100%;max-width:680px;margin:0 auto;position:relative;overflow:visible}#bodygraph-container svg{width:100%;height:auto;max-height:var(--oe-chart-max-lg);display:block}#bodygraph-container svg .center[data-center]{transition:filter .16s}#bodygraph-container svg .center[data-center]:hover{filter:brightness(1.12)drop-shadow(0 0 6px rgba(204,156,66,.45));filter:brightness(1.12)drop-shadow(0 0 6px color(display-p3 .76996 .617341 .321369/.45));filter:brightness(1.12)drop-shadow(0 0 6px lab(67.5798% 11.9379 52.333/.45))}#bodygraph-container svg .channel[data-channel]{transition:filter .16s}#bodygraph-container svg .channel[data-channel]:hover{filter:brightness(1.25) drop-shadow(0 0 4px var(--gold-glow))}#bodygraph-container svg .gate[data-gate]:hover .gate-mark{transform:scale(1.22)}@media (prefers-reduced-motion:reduce){#bodygraph-container svg .gate[data-gate]:hover .gate-mark{transform:none}}#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:680px;margin:0 auto;padding:10px 14px;display:grid}.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}.info-connection{flex-direction:column;grid-column:1/-1;gap:14px;display:flex}.info-subject-header{letter-spacing:.08em;text-transform:uppercase;color:var(--gold,var(--text));border-bottom:1px solid var(--border-strong);margin-bottom:2px;padding-bottom:4px;font-size:10px;font-weight:700}.info-subject-grid{grid-template-columns:1fr 1fr;gap:6px 12px;display:grid}.channel-legend{flex-wrap:wrap;justify-content:center;gap:12px;width:100%;max-width:680px;margin:0 auto;padding:4px 0;display:flex}.legend-item{color:var(--text-secondary);letter-spacing:.04em;align-items:center;gap:5px;font-size:9px;font-weight:500;display:flex}.legend-swatch{border-radius:2px;flex-shrink:0;width:18px;height:3px}#controls-panel{background:0 0;width:100%;max-width:680px;margin:0 auto;padding:4px 0}.controls-row{align-items:center;gap:6px;display:flex}.controls-label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);flex-shrink:0;font-size:9px;font-weight:700}.controls-value{color:var(--text-secondary);font-size:11px}.chart-hint{text-align:center;letter-spacing:.04em;width:100%;max-width:680px;color:var(--muted);margin:0 auto;padding:4px 0 2px;font-size:10px}.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,rgba(128,128,160,.3));color:var(--accent,var(--text,inherit));font:inherit;letter-spacing:.02em;cursor:pointer;background:0 0;border-radius:999px;margin-top:4px;padding:7px 20px;font-size:11px;font-weight:600;transition:background .18s,border-color .18s}.error-retry-btn:hover{background:rgba(128,128,160,.12)}@media (max-width:420px){#app{gap:8px;padding:8px}#info-panel{grid-template-columns:1fr}}#bodygraph-container.is-loading{opacity:.55;pointer-events:none;cursor:wait;transition:opacity .15s}.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)}@keyframes gold-pulse{0%,to{border-color:rgba(204,156,66,.35);border-color:color(display-p3 .76996 .617341 .321369/.35);border-color:lab(67.5798% 11.9379 52.333/.35)}50%{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)}}.hd-popup{background:var(--surface-2);border:1px solid var(--border-strong);z-index:1000;opacity:0;pointer-events:none;border-radius:12px;width:min(340px,92vw);padding:14px 16px 12px;transition:opacity .2s cubic-bezier(.16,1,.3,1),transform .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)}.hd-popup.visible{opacity:1;pointer-events:all}.hd-popup-header{align-items:flex-start;gap:10px;display:flex}.hd-popup-icon{color:var(--gold);text-align:center;flex-shrink:0;min-width:28px;font-size:18px;font-weight:700;line-height:1}.hd-popup-title{color:var(--text);flex:1;font-size:13px;font-weight:700}.hd-popup-sub{color:var(--text-secondary);letter-spacing:.01em;margin-top:2px;font-size:11px;font-weight:400}.hd-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}.hd-popup-close:hover{color:var(--text)}.hd-popup-body{border-top:1px solid var(--border);flex-direction:column;gap:6px;margin-top:10px;padding-top:10px;display:flex}.hd-popup-row{align-items:baseline;gap:8px;font-size:11px;line-height:1.45;display:flex}.hd-popup-label{letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary);flex-shrink:0;min-width:56px;padding-top:1px;font-size:9px;font-weight:700}.hd-popup-val{color:var(--text);font-weight:500}.hd-popup-gates{flex-wrap:wrap;gap:4px;font-weight:500;display:flex}.hd-popup-gate-chip{border:1px solid var(--border-strong);border-radius:var(--radius-pill,99px);background:var(--surface);color:var(--text);white-space:nowrap;padding:1px 7px;font-size:10px;display:inline-block}.hd-popup-note{color:var(--text-secondary);letter-spacing:.01em;margin-top:4px;font-size:10px;font-style:italic;line-height:1.5}.hd-detail-panel{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent;flex:1;min-height:0;padding:2px 0 8px;overflow-y:auto}.hd-detail-panel .hd-popup-header{border-bottom:1px solid var(--border);margin-bottom:8px;padding-bottom:8px}.hd-detail-panel .hd-popup-close{opacity:.5}.hd-detail-panel .hd-popup-close:hover{opacity:1;color:var(--text)}.ask-claude-btn{border-radius:var(--radius-sm);width:100%;color:var(--gold);font-family:var(--font-ui);letter-spacing:.04em;cursor:pointer;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);justify-content:center;align-items:center;gap:6px;margin-top:12px;padding:9px 16px;font-size:12px;font-weight:600;transition:background .16s,border-color .16s,box-shadow .16s;display:flex}.ask-claude-btn:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65);box-shadow:0 0 0 3px rgba(204,156,66,.12);box-shadow:0 0 0 3px color(display-p3 .76996 .617341 .321369/.12);box-shadow:0 0 0 3px lab(67.5798% 11.9379 52.333/.12)}.ask-claude-btn:disabled{opacity:.45;cursor:not-allowed}.ask-claude-btn.sending{color:var(--gold-dim);opacity:.8;cursor:wait;pointer-events:none;background:rgba(204,156,66,.08);background:color(display-p3 .76996 .617341 .321369/.08);background:lab(67.5798% 11.9379 52.333/.08);border-color:rgba(204,156,66,.25);border-color:color(display-p3 .76996 .617341 .321369/.25);border-color:lab(67.5798% 11.9379 52.333/.25)}.ask-claude-btn.sent{color:var(--success);pointer-events:none;background:rgba(29,168,113,.15);background:color(display-p3 .313719 .651039 .459895/.15);background:lab(61.2436% -46.7762 18.3644/.15);border-color:rgba(29,168,113,.5);border-color:color(display-p3 .313719 .651039 .459895/.5);border-color:lab(61.2436% -46.7762 18.3644/.5)}.ask-claude-btn.error{color:var(--error);cursor:pointer;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)}.interactive-text{cursor:pointer;transition:color .15s,text-shadow .15s;position:relative}.interactive-text:hover{color:var(--gold);text-shadow:0 0 8px rgba(204,156,66,.4);text-shadow:0 0 8px color(display-p3 .76996 .617341 .321369/.4);text-shadow:0 0 8px lab(67.5798% 11.9379 52.333/.4)}.interactive-text:focus{color:var(--gold);text-shadow:0 0 8px rgba(204,156,66,.6);text-shadow:0 0 8px color(display-p3 .76996 .617341 .321369/.6);text-shadow:0 0 8px lab(67.5798% 11.9379 52.333/.6);outline:none}.planet-activation,.variable-arrow{outline:none;transition:opacity .15s}.planet-activation:hover,.variable-arrow:hover{opacity:.7}.planet-activation:focus-visible{outline:2px solid var(--gold);outline-offset:4px}.variable-arrow:focus-visible{outline:2px solid var(--gold);outline-offset:4px}[data-gate]:focus-visible{outline:2px solid var(--gold);outline-offset:4px}[data-channel]:focus-visible{outline:2px solid var(--gold);outline-offset:4px}[data-center]:focus-visible{outline:2px solid var(--gold);outline-offset:4px}.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:240px;padding:8px 12px;font-size:12px;transition:opacity .12s;position:fixed;box-shadow:0 8px 32px rgba(0,0,0,.55),inset 0 .5px rgba(255,255,255,.04);box-shadow:0 8px 32px color(display-p3 0 0 0/.55),inset 0 .5px color(display-p3 1 1 1/.04);box-shadow:0 8px 32px lab(0% 0 0/.55),inset 0 .5px lab(100% 0 0/.04)}.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}.cancel-toast{background:var(--surface-2,#1e1e2e);border:1px solid var(--border-strong,#444);color:var(--text-muted,#aaa);border-radius:var(--radius-sm,6px);opacity:0;z-index:9999;pointer-events:none;box-shadow:var(--oe-shadow-md,0 4px 12px rgba(0,0,0,.3));padding:8px 16px;font-family:inherit;font-size:12px;transition:opacity .3s,transform .3s;position:fixed;bottom:20px;left:50%;transform:translate(-50%)translateY(20px)}.cancel-toast.visible{opacity:1;transform:translate(-50%)translateY(0)}.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}}.info-drawer{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius);width:100%;box-shadow:var(--oe-shadow-md);opacity:0;pointer-events:none;max-height:0;padding:14px 16px 12px;transition:max-height .26s cubic-bezier(.16,1,.3,1),opacity .2s,padding .2s;position:relative;overflow:hidden}.info-drawer:before{content:"";background:var(--border-strong);border-radius:2px;flex-shrink:0;width:36px;height:4px;margin:0 auto 10px;display:block}.info-drawer.open{opacity:1;pointer-events:all;max-height:500px;padding:14px 16px 12px}.hd-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(212,175,55,.08);border:1px solid rgba(212,175,55,.3);border-radius:8px;align-items:center;gap:6px;padding:7px 16px;font-size:12px;font-weight:600;transition:background .2s,border-color .2s,transform .1s;display:inline-flex}.action-btn:hover{background:rgba(212,175,55,.15);border-color:rgba(212,175,55,.5);transform:translateY(-1px)}.action-btn:active{background:rgba(212,175,55,.2);transform:translateY(0)}.action-btn--primary{color:var(--gold);background:linear-gradient(135deg,rgba(212,175,55,.2),rgba(180,140,30,.25));border-color:rgba(212,175,55,.5)}.action-btn--primary:hover{background:linear-gradient(135deg,rgba(212,175,55,.3),rgba(180,140,30,.35));border-color:rgba(212,175,55,.7)}:root[data-theme=light]{--bg:#f7f5f1;--surface:#fff;--surface-2:#f1eee9;--border:#dbd7d0;--border-strong:#bdb6ac;--text:#101215;--text-secondary:#4f5359;--muted:#6c6f73;--gold:#8d5f00;--gold-dim:#6d4b00;--gold-glow:rgba(141,95,0,.25);--gold-subtle:rgba(141,95,0,.1);--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)}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light]{--bg:color(display-p3 .967616 .959866 .945308);--surface:color(display-p3 1 1 1);--surface-2:color(display-p3 .943798 .93351 .914195);--border:color(display-p3 .855616 .842987 .819292);--border-strong:color(display-p3 .73602 .716348 .67952);--text:color(display-p3 .0633107 .0687189 .081922);--text-secondary:color(display-p3 .313002 .323251 .348016);--muted:color(display-p3 .426318 .433563 .450948);--gold:color(display-p3 .542549 .371783 -.107551);--gold-dim:color(display-p3 .414099 .299019 .034461);--gold-glow:color(display-p3 .542549 .371783 -.107551/.25);--gold-subtle:color(display-p3 .542549 .371783 -.107551/.1);--success:color(display-p3 -.0793084 .456092 .255685);--error:color(display-p3 .642198 .101724 .18242);--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.5376% .34079 2.2589);--surface:lab(100% 0 0);--surface-2:lab(94.2232% .459701 3.01524);--border:lab(86.1085% .583261 3.77473);--border-strong:lab(74.5232% .975847 6.06879);--text:lab(5.23809% -.0738502 -2.43738);--text-secondary:lab(34.9842% -.210062 -4.49808);--muted:lab(46.6045% -.170052 -3.01461);--gold:lab(44.1995% 17.0662 84.3373);--gold-dim:lab(35.0077% 11.3181 50.9422);--gold-glow:lab(44.1995% 17.0662 84.3373/.25);--gold-subtle:lab(44.1995% 17.0662 84.3373/.1);--success:lab(41.7514% -55.3249 21.5039);--error:lab(37.5238% 64.2774 32.6097);--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[data-theme=light] body{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background-image:none}:root[data-theme=light] .chart-status{background:rgba(247,245,241,.92);background:color(display-p3 .967616 .959866 .945308/.92);background:lab(96.5376% .34079 2.2589/.92);border-color:rgba(141,95,0,.35);border-color:color(display-p3 .542549 .371783 -.107551/.35);border-color:lab(44.1995% 17.0662 84.3373/.35)}:root[data-theme=light] .tooltip{border-color:var(--border-strong);background:rgba(255,255,255,.96);background:color(display-p3 1 1 1/.96);background:lab(100% 0 0/.96)}:root[data-theme=light] #info-panel{background:var(--surface);border-color:var(--border)}:root[data-theme=light] .hd-popup{background:var(--surface);border-color:var(--border-strong);box-shadow:0 12px 48px rgba(0,0,0,.18), 0 0 0 1px var(--border-strong)}@supports (color:color(display-p3 0 0 0)){:root[data-theme=light] .hd-popup{box-shadow:0 12px 48px color(display-p3 0 0 0/.18), 0 0 0 1px var(--border-strong)}}@supports (color:lab(0% 0 0)){:root[data-theme=light] .hd-popup{box-shadow:0 12px 48px lab(0% 0 0/.18), 0 0 0 1px var(--border-strong)}}svg.has-highlight [data-center],svg.has-highlight [data-channel],svg.has-highlight [data-gate]{opacity:.45;transition:opacity .2s,filter .2s}svg.has-highlight [data-highlighted=true]{opacity:1;filter:drop-shadow(0 0 4px rgba(212,160,23,.55))}svg.has-highlight [data-highlighted-primary=true]{opacity:1;filter:drop-shadow(0 0 8px rgba(212,160,23,.95))}svg.has-highlight [data-highlighted-primary=true] path,svg.has-highlight [data-highlighted-primary=true] circle,svg.has-highlight [data-highlighted-primary=true] polygon,svg.has-highlight [data-highlighted-primary=true] rect{stroke-width:calc(var(--stroke-w,1.5) * 1.4)}svg.has-activation-highlight [data-highlighted-context]{opacity:1;filter:none}svg.has-activation-highlight [data-highlighted-context]>:not([data-highlighted]):not([data-highlighted-context]){opacity:.35}@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}}.hd-disclaimer{max-width:680px;color:var(--text-secondary);text-align:center;margin:4px auto 0;font-size:10px;line-height:1.5}.action-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}body.layout-mandala #bodygraph-container,body.layout-mandala #info-panel,body.layout-mandala .channel-legend,body.layout-mandala #controls-panel,body.layout-mandala .chart-hint,body.layout-mandala .hd-disclaimer{max-width:760px}body.layout-mandala #bodygraph-container svg{max-height:var(--oe-chart-max-lg)}@media (min-width:900px){body.is-fullscreen #app{grid-template-rows:minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr) minmax(280px,340px);display:grid}body.is-fullscreen #app>.oe-stage,body.is-fullscreen #app>#loading-state{grid-area:1/1/span 2}body.is-fullscreen #app>#fs-bottom-bar{border-top:0;border-left:1px solid var(--border);grid-area:1/2/span 2;height:auto;display:block;overflow-y:auto}body.is-fullscreen #fs-bottom-bar [data-column=center]{display:none}body.is-fullscreen #fs-bottom-bar [data-column=left],body.is-fullscreen #fs-bottom-bar [data-column=right]{border:0;min-height:auto;overflow:visible}body.is-fullscreen #fs-bottom-bar [data-column=right]{border-top:1px solid var(--border)}}@media (max-width:640px){body.is-fullscreen #app #fs-bottom-bar{max-height:30%}}#fs-bottom-bar .hd-disclaimer{text-align:left;margin:8px 0 0}.param-controls{background:var(--surface);border-top:1px solid var(--border);flex-shrink:0;padding:6px 12px}.param-controls-grid{flex-wrap:wrap;align-items:center;gap:6px 10px;display:flex}.param-group{flex-direction:row;align-items:center;gap:6px;display:flex}.param-group label{text-transform:uppercase;color:var(--text-secondary);letter-spacing:.06em;white-space:nowrap;font-size:10px;font-weight:700}.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{background:var(--surface-2);border:1px solid var(--border-strong);color:var(--text);color-scheme:inherit;border-radius:var(--radius-sm);width:120px;height:24px;padding:3px 6px;font-family:inherit;font-size:11px}@media (prefers-reduced-motion:no-preference){.param-group input[type=date],.param-group input[type=time],.param-group input[type=text]{transition:border-color .15s}}.param-group input:focus{border-color:var(--gold-dim);outline:none}.loc-searching{border-color:var(--gold-dim)!important}@media (prefers-reduced-motion:no-preference){.loc-searching{animation:1s ease-in-out infinite alternate loc-pulse}}@keyframes loc-pulse{0%{border-color:var(--gold-dim)}to{border-color:rgba(204,156,66,.55);border-color:color(display-p3 .76996 .617341 .321369/.55);border-color:lab(67.5798% 11.9379 52.333/.55)}}.param-group-loc{flex:1;position:relative}.param-group-loc input{width:100%}.loc-suggestions{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius-sm);z-index:100;max-height:200px;margin-top:4px;position:absolute;top:100%;left:0;right:0;overflow-y:auto;box-shadow:0 4px 12px rgba(0,0,0,.35);box-shadow:0 4px 12px color(display-p3 0 0 0/.35);box-shadow:0 4px 12px lab(0% 0 0/.35)}.loc-item{color:var(--text);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid var(--border);padding:8px 10px;font-size:12px;overflow:hidden}.loc-item:last-child{border-bottom:none}@media (prefers-reduced-motion:no-preference){.loc-item{transition:background .1s,color .1s}}.loc-item:hover,.loc-item--active{background:var(--gold-subtle);color:var(--gold)}.loc-status{color:var(--text-secondary);letter-spacing:.01em;padding:8px 10px;font-size:11px;font-style:italic}.loc-status-error{color:#d76a5a;color:color(display-p3 .788241 .439621 .373983);color:lab(58.1265% 42.6447 29.9439);font-style:normal;font-weight:600}.param-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.param-cost-hint{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;font-size:10px}.param-btn-icon{border:1px solid var(--border-strong);color:var(--text-secondary);border-radius:var(--radius-sm);cursor:pointer;background:0 0;justify-content:center;align-items:center;width:24px;height:24px;display:flex}@media (prefers-reduced-motion:no-preference){.param-btn-icon{transition:background .15s,border-color .15s,color .15s}}.param-btn-icon:hover{background:var(--surface-2);color:var(--text);border-color:var(--gold-dim)}.param-btn-primary{color:var(--gold);border-radius:var(--radius-sm);cursor:pointer;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;background:rgba(204,156,66,.12);background:color(display-p3 .76996 .617341 .321369/.12);background:lab(67.5798% 11.9379 52.333/.12);border:1px solid rgba(204,156,66,.4);border:1px solid color(display-p3 .76996 .617341 .321369/.4);border:1px solid lab(67.5798% 11.9379 52.333/.4);height:24px;padding:3px 10px;font-family:inherit;font-size:10px;font-weight:600}@media (prefers-reduced-motion:no-preference){.param-btn-primary{transition:background .15s,border-color .15s}}.param-btn-primary:hover:not(:disabled){background:rgba(204,156,66,.2);background:color(display-p3 .76996 .617341 .321369/.2);background:lab(67.5798% 11.9379 52.333/.2);border-color:rgba(204,156,66,.65);border-color:color(display-p3 .76996 .617341 .321369/.65);border-color:lab(67.5798% 11.9379 52.333/.65)}.param-btn-primary:disabled{opacity:.5;cursor:not-allowed}.param-extra-toggle{color:var(--text-secondary);white-space:nowrap;letter-spacing:.02em;cursor:pointer;align-items:center;gap:5px;font-size:10px;display:flex}.param-extra-toggle input[type=checkbox]{width:13px;height:13px;accent-color:var(--gold,oklch(72% .12 80));cursor:pointer}.param-extra-toggle input[type=checkbox]:disabled{cursor:not-allowed}.param-extra-toggle input[type=checkbox]:disabled~span{opacity:.5}:root[data-theme=light] .param-group input[type=date],:root[data-theme=light] .param-group input[type=time],:root[data-theme=light] .param-group input[type=text]{border-color:var(--border-strong);color:var(--text);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167638 1.12768)}:root[data-theme=light] .loc-suggestions{border-color:var(--border-strong);background:#fdfcf9;background:color(display-p3 .990365 .986474 .97916);background:lab(98.849% .167638 1.12768)}:root[data-theme=light] .param-btn-primary{background:rgba(160,112,0,.12);background:color(display-p3 .615135 .441554 -.0204711/.12);background:lab(51.2092% 16.2654 78.3504/.12);border-color:rgba(160,112,0,.4);border-color:color(display-p3 .615135 .441554 -.0204711/.4);border-color:lab(51.2092% 16.2654 78.3504/.4)}:root[data-theme=light] .param-btn-primary:hover:not(:disabled){background:rgba(160,112,0,.22);background:color(display-p3 .615135 .441554 -.0204711/.22);background:lab(51.2092% 16.2654 78.3504/.22);border-color:rgba(160,112,0,.65);border-color:color(display-p3 .615135 .441554 -.0204711/.65);border-color:lab(51.2092% 16.2654 78.3504/.65)}.param-summary-bar{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:2px 0;margin-bottom:4px;padding:3px 4px 5px;font-size:10px;line-height:1.3;display:flex}.param-summary-bar[hidden]{display:none}.summary-name{color:var(--gold,#d6a54d);letter-spacing:.01em;padding-right:2px;font-size:12px;font-weight:700}@supports (color:color(display-p3 0 0 0)){.summary-name{color:var(--gold,color(display-p3 .808073 .654274 .358094))}}@supports (color:lab(0% 0 0)){.summary-name{color:var(--gold,lab(71.071% 11.7474 51.7651))}}.summary-datetime{font-family:var(--font-code,ui-monospace, "Cascadia Mono", Menlo, Consolas, monospace);font-variant-numeric:tabular-nums;color:var(--text-secondary);align-items:baseline;gap:4px;font-size:11px;display:inline-flex}.summary-time-sep{color:var(--border-strong);opacity:.7;font-family:inherit;font-size:9px}.summary-loc{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:200px;padding-left:2px;font-size:11px;font-style:italic;overflow:hidden}.summary-sep{background:var(--border-strong);opacity:.5;vertical-align:middle;flex-shrink:0;width:1px;height:11px;margin:0 7px;display:inline-block}
14
14
  /*$vite$:1*/</style>
15
15
  </head>
16
16
  <body>
@@ -20,7 +20,7 @@
20
20
  <p>Drawing your bodygraph…</p>
21
21
  </div>
22
22
  <div id="chart-status" class="chart-status" aria-live="polite"></div>
23
- <div id="bodygraph-container" hidden>
23
+ <div id="bodygraph-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>
@@ -31,7 +31,7 @@
31
31
  <div id="param-controls-container" hidden></div>
32
32
  <div id="info-panel" hidden></div>
33
33
  <div id="controls-panel" hidden></div>
34
- <p class="hd-disclaimer">
34
+ <p id="hd-disclaimer" class="hd-disclaimer">
35
35
  For insight and entertainment; not scientifically validated. Human Design
36
36
  was originated by Ra Uru Hu — OpenEphemeris is an independent calculation
37
37
  service, not affiliated with or endorsed by Jovian Archive.
@@ -130,7 +130,7 @@ var l = /* @__PURE__ */ Symbol("zod_brand"), u = class extends Error {
130
130
  function p(e5) {
131
131
  return e5 && Object.assign(f, e5), f;
132
132
  }
133
- var m = t({ BIGINT_FORMAT_RANGES: () => ke, Class: () => Ze, NUMBER_FORMAT_RANGES: () => Oe, aborted: () => Le, allowsEval: () => _e, assert: () => te, assertEqual: () => h, assertIs: () => _, assertNever: () => ee, assertNotEqual: () => g, assignProp: () => se, base64ToUint8Array: () => Ge, base64urlToUint8Array: () => qe, cached: () => ne, captureStackTrace: () => he, cleanEnum: () => We, cleanRegex: () => ie, clone: () => Te, cloneDef: () => le, createTransparentProxy: () => Ee, defineLazy: () => S, esc: () => pe, escapeRegex: () => we, extend: () => Me, finalizeIssue: () => Be, floatSafeRemainder: () => x, getElementAtPath: () => ue, getEnumValues: () => v, getLengthableOrigin: () => He, getParsedType: () => xe, getSizableOrigin: () => Ve, hexToUint8Array: () => Ye, isObject: () => ge, isPlainObject: () => ve, issue: () => Ue, joinValues: () => y, jsonStringifyReplacer: () => b, merge: () => Pe, mergeDefs: () => ce, normalizeParams: () => C, nullish: () => re, numKeys: () => be, objectClone: () => oe, omit: () => je, optionalKeys: () => De, parsedType: () => T, partial: () => Fe, pick: () => Ae, prefixIssues: () => Re, primitiveTypes: () => Ce, promiseAllObject: () => de, propertyKeyTypes: () => Se, randomString: () => fe, required: () => Ie, safeExtend: () => Ne, shallowClone: () => ye, slugify: () => me, stringifyPrimitive: () => w, uint8ArrayToBase64: () => Ke, uint8ArrayToBase64url: () => Je, uint8ArrayToHex: () => Xe, unwrapMessage: () => ze });
133
+ var m = t({ BIGINT_FORMAT_RANGES: () => ke, Class: () => Ze, NUMBER_FORMAT_RANGES: () => Oe, aborted: () => Le, allowsEval: () => _e, assert: () => te, assertEqual: () => h, assertIs: () => _, assertNever: () => ee, assertNotEqual: () => g, assignProp: () => se, base64ToUint8Array: () => Ge, base64urlToUint8Array: () => qe, cached: () => ne, captureStackTrace: () => he, cleanEnum: () => We, cleanRegex: () => ie, clone: () => Te, cloneDef: () => le, createTransparentProxy: () => Ee, defineLazy: () => S, esc: () => pe, escapeRegex: () => we, extend: () => Me, finalizeIssue: () => Be, floatSafeRemainder: () => ae, getElementAtPath: () => ue, getEnumValues: () => v, getLengthableOrigin: () => He, getParsedType: () => xe, getSizableOrigin: () => Ve, hexToUint8Array: () => Ye, isObject: () => ge, isPlainObject: () => ve, issue: () => Ue, joinValues: () => y, jsonStringifyReplacer: () => b, merge: () => Pe, mergeDefs: () => ce, normalizeParams: () => C, nullish: () => re, numKeys: () => be, objectClone: () => oe, omit: () => je, optionalKeys: () => De, parsedType: () => T, partial: () => Fe, pick: () => Ae, prefixIssues: () => Re, primitiveTypes: () => Ce, promiseAllObject: () => de, propertyKeyTypes: () => Se, randomString: () => fe, required: () => Ie, safeExtend: () => Ne, shallowClone: () => ye, slugify: () => me, stringifyPrimitive: () => w, uint8ArrayToBase64: () => Ke, uint8ArrayToBase64url: () => Je, uint8ArrayToHex: () => Xe, unwrapMessage: () => ze });
134
134
  function h(e5) {
135
135
  return e5;
136
136
  }
@@ -170,7 +170,7 @@ function ie(e5) {
170
170
  let t2 = +!!e5.startsWith("^"), n2 = e5.endsWith("$") ? e5.length - 1 : e5.length;
171
171
  return e5.slice(t2, n2);
172
172
  }
173
- function x(e5, t2) {
173
+ function ae(e5, t2) {
174
174
  let n2 = (e5.toString().split(".")[1] || "").length, r2 = t2.toString(), i2 = (r2.split(".")[1] || "").length;
175
175
  if (i2 === 0 && /\d?e-\d?/.test(r2)) {
176
176
  let e6 = r2.match(/\d?e-(\d?)/);
@@ -179,11 +179,11 @@ function x(e5, t2) {
179
179
  let a2 = n2 > i2 ? n2 : i2;
180
180
  return Number.parseInt(e5.toFixed(a2).replace(".", "")) % Number.parseInt(t2.toFixed(a2).replace(".", "")) / 10 ** a2;
181
181
  }
182
- var ae = /* @__PURE__ */ Symbol("evaluating");
182
+ var x = /* @__PURE__ */ Symbol("evaluating");
183
183
  function S(e5, t2, n2) {
184
184
  let r2;
185
185
  Object.defineProperty(e5, t2, { get() {
186
- if (r2 !== ae) return r2 === void 0 && (r2 = ae, r2 = n2()), r2;
186
+ if (r2 !== x) return r2 === void 0 && (r2 = x, r2 = n2()), r2;
187
187
  }, set(n3) {
188
188
  Object.defineProperty(e5, t2, { value: n3 });
189
189
  }, configurable: true });
@@ -634,7 +634,7 @@ var En = /^[0-9a-fA-F]{32}$/, Dn = wn(22, "=="), On = Tn(22), kn = /^[0-9a-fA-F]
634
634
  (n2 = e6._zod.bag).multipleOf != null || (n2.multipleOf = t2.value);
635
635
  }), e5._zod.check = (n2) => {
636
636
  if (typeof n2.value != typeof t2.value) throw Error("Cannot mix number and bigint in multiple_of check.");
637
- (typeof n2.value == "bigint" ? n2.value % t2.value === BigInt(0) : x(n2.value, t2.value) === 0) || n2.issues.push({ origin: typeof n2.value, code: "not_multiple_of", divisor: t2.value, input: n2.value, inst: e5, continue: !t2.abort });
637
+ (typeof n2.value == "bigint" ? n2.value % t2.value === BigInt(0) : ae(n2.value, t2.value) === 0) || n2.issues.push({ origin: typeof n2.value, code: "not_multiple_of", divisor: t2.value, input: n2.value, inst: e5, continue: !t2.abort });
638
638
  };
639
639
  }), Gn = c("$ZodCheckNumberFormat", (e5, t2) => {
640
640
  var n2;
@@ -2451,22 +2451,22 @@ var Oa = () => {
2451
2451
  }
2452
2452
  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));
2453
2453
  if (t3.origin === "array" || t3.origin === "set") {
2454
- var ie2, x2;
2454
+ var ie2, ae2;
2455
2455
  let r4 = t3.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA";
2456
- 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((ie2 = e6 == null ? void 0 : e6.unit) == null ? "" : ie2, " \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8") : "\u05D9\u05D5\u05EA\u05E8 \u05DE-".concat(t3.minimum, " ").concat((x2 = e6 == null ? void 0 : e6.unit) == null ? "" : x2)).trim();
2456
+ 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((ie2 = e6 == null ? void 0 : e6.unit) == null ? "" : ie2, " \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8") : "\u05D9\u05D5\u05EA\u05E8 \u05DE-".concat(t3.minimum, " ").concat((ae2 = e6 == null ? void 0 : e6.unit) == null ? "" : ae2)).trim();
2457
2457
  }
2458
2458
  let r3 = t3.inclusive ? ">=" : ">", s3 = a2((v2 = t3.origin) == null ? "value" : v2);
2459
2459
  return e6 != null && e6.unit ? "".concat(e6.shortLabel, " \u05DE\u05D3\u05D9: ").concat(n4, " ").concat(s3, " ").concat(r3).concat(t3.minimum.toString(), " ").concat(e6.unit) : "".concat((b2 = e6 == null ? void 0 : e6.shortLabel) == null ? "\u05E7\u05D8\u05DF" : b2, " \u05DE\u05D3\u05D9: ").concat(n4, " ").concat(s3, " ").concat(r3).concat(t3.minimum.toString());
2460
2460
  }
2461
2461
  case "invalid_format": {
2462
- var ae2, S2;
2462
+ var x2, S2;
2463
2463
  let e6 = t3;
2464
2464
  if (e6.format === "starts_with") return '\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 "'.concat(e6.prefix, '"');
2465
2465
  if (e6.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(e6.suffix, '"');
2466
2466
  if (e6.format === "includes") return '\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC "'.concat(e6.includes, '"');
2467
2467
  if (e6.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(e6.pattern);
2468
2468
  let n4 = s2[e6.format];
2469
- return "".concat((ae2 = n4 == null ? void 0 : n4.label) == null ? e6.format : ae2, " \u05DC\u05D0 ").concat(((S2 = n4 == null ? void 0 : n4.gender) == null ? "m" : S2) === "f" ? "\u05EA\u05E7\u05D9\u05E0\u05D4" : "\u05EA\u05E7\u05D9\u05DF");
2469
+ return "".concat((x2 = n4 == null ? void 0 : n4.label) == null ? e6.format : x2, " \u05DC\u05D0 ").concat(((S2 = n4 == null ? void 0 : n4.gender) == null ? "m" : S2) === "f" ? "\u05EA\u05E7\u05D9\u05E0\u05D4" : "\u05EA\u05E7\u05D9\u05DF");
2470
2470
  }
2471
2471
  case "not_multiple_of":
2472
2472
  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);
@@ -6333,7 +6333,15 @@ async function e_(e5, t2, n2 = "") {
6333
6333
  }
6334
6334
  return r2.value;
6335
6335
  }
6336
- var t_ = class e3 extends Eg {
6336
+ function t_(e5, t2 = document.documentElement) {
6337
+ for (let [n2, r2] of Object.entries(e5)) r2 !== void 0 && t2.style.setProperty(n2, r2);
6338
+ }
6339
+ function n_(e5) {
6340
+ if (document.getElementById("__mcp-host-fonts")) return;
6341
+ let t2 = document.createElement("style");
6342
+ t2.id = "__mcp-host-fonts", t2.textContent = e5, document.head.appendChild(t2);
6343
+ }
6344
+ var r_ = class e3 extends Eg {
6337
6345
  _assertInitialized(e5) {
6338
6346
  var t2;
6339
6347
  if (this._initializedSent) return;
@@ -6565,49 +6573,49 @@ var t_ = class e3 extends Eg {
6565
6573
  }
6566
6574
  }
6567
6575
  };
6568
- o(t_, "ONE_SHOT_EVENTS", /* @__PURE__ */ new Set(["toolinput", "toolinputpartial", "toolresult", "toolcancelled"]));
6569
- var n_ = null;
6570
- function r_(e5) {
6571
- n_ = e5;
6572
- }
6576
+ o(r_, "ONE_SHOT_EVENTS", /* @__PURE__ */ new Set(["toolinput", "toolinputpartial", "toolresult", "toolcancelled"]));
6573
6577
  var i_ = null;
6574
6578
  function a_(e5) {
6575
6579
  i_ = e5;
6576
6580
  }
6577
6581
  var o_ = null;
6578
- function s_() {
6579
- return o_ || (o_ = document.getElementById("tooltip")), o_;
6582
+ function s_(e5) {
6583
+ o_ = e5;
6584
+ }
6585
+ var c_ = null;
6586
+ function l_() {
6587
+ return c_ || (c_ = document.getElementById("tooltip")), c_;
6580
6588
  }
6581
- function c_(e5, t2, n2, r2, i2) {
6582
- let a2 = s_();
6589
+ function u_(e5, t2, n2, r2, i2) {
6590
+ let a2 = l_();
6583
6591
  if (!a2) return;
6584
- a2.innerHTML = '\n <div class="tooltip-title">'.concat(__(n2), '</div>\n <div class="tooltip-detail">').concat(__(r2), "</div>\n ").concat(i2 ? '<div class="tooltip-hint">'.concat(__(i2), "</div>") : "", "\n ");
6592
+ a2.innerHTML = '\n <div class="tooltip-title">'.concat(y_(n2), '</div>\n <div class="tooltip-detail">').concat(y_(r2), "</div>\n ").concat(i2 ? '<div class="tooltip-hint">'.concat(y_(i2), "</div>") : "", "\n ");
6585
6593
  let o2 = a2.getBoundingClientRect(), s2 = o2.width || 250, c2 = o2.height || 80, l2 = e5 + 14, u2 = t2 + 10;
6586
6594
  l2 + s2 > window.innerWidth && (l2 = e5 - s2 - 8), u2 + c2 > window.innerHeight && (u2 = t2 - c2 - 8), a2.style.left = "".concat(l2, "px"), a2.style.top = "".concat(u2, "px"), a2.classList.add("visible");
6587
6595
  }
6588
- function l_() {
6596
+ function d_() {
6589
6597
  var e5;
6590
- (e5 = s_()) == null || e5.classList.remove("visible");
6598
+ (e5 = l_()) == null || e5.classList.remove("visible");
6591
6599
  }
6592
- var u_ = { 1: "The Creative", 2: "The Receptive", 3: "Ordering", 4: "Formulization", 5: "Fixed Rhythms", 6: "Friction", 7: "The Role of the Self", 8: "Contribution", 9: "Focus", 10: "Behaviour of the Self", 11: "Ideas", 12: "Caution", 13: "Fellowship", 14: "Power Skills", 15: "Extremes", 16: "Skills", 17: "Opinions", 18: "Correction", 19: "Wanting", 20: "Contemplation", 21: "The Treasurer", 22: "Openness", 23: "Splitting Apart", 24: "Rationalisation", 25: "Innocence", 26: "The Taming Power", 27: "Caring", 28: "The Game Player", 29: "The Abysmal", 30: "Feelings", 31: "Influence", 32: "Continuity", 33: "Privacy", 34: "Power", 35: "Change", 36: "Crisis", 37: "Friendship", 38: "The Fighter", 39: "Provocation", 40: "Aloneness", 41: "Contraction", 42: "Growth", 43: "Insight", 44: "Alertness", 45: "The Gatherer", 46: "Determination", 47: "Realisation", 48: "Depth", 49: "Revolution", 50: "Values", 51: "Shock", 52: "Stillness", 53: "Beginnings", 54: "Ambition", 55: "Spirit", 56: "Stimulation", 57: "Intuitive Clarity", 58: "Vitality", 59: "Sexuality", 60: "Limitation", 61: "Mystery", 62: "Detail", 63: "Doubt", 64: "Confusion" }, d_ = { head: "inspiration & pressure to think", ajna: "conceptualization & mental awareness", throat: "communication & manifestation", g: "identity, direction & love", heart: "willpower & ego", sacral: "life force & response", root: "adrenalized pressure & drive", spleen: "survival & intuition", solar_plexus: "emotions & spirit" }, f_ = null;
6593
- function p_() {
6594
- return f_ || (f_ = document.createElement("div"), f_.id = "hd-popup-panel", f_.className = "hd-popup", document.body.appendChild(f_)), f_;
6600
+ var f_ = { 1: "The Creative", 2: "The Receptive", 3: "Ordering", 4: "Formulization", 5: "Fixed Rhythms", 6: "Friction", 7: "The Role of the Self", 8: "Contribution", 9: "Focus", 10: "Behaviour of the Self", 11: "Ideas", 12: "Caution", 13: "Fellowship", 14: "Power Skills", 15: "Extremes", 16: "Skills", 17: "Opinions", 18: "Correction", 19: "Wanting", 20: "Contemplation", 21: "The Treasurer", 22: "Openness", 23: "Splitting Apart", 24: "Rationalisation", 25: "Innocence", 26: "The Taming Power", 27: "Caring", 28: "The Game Player", 29: "The Abysmal", 30: "Feelings", 31: "Influence", 32: "Continuity", 33: "Privacy", 34: "Power", 35: "Change", 36: "Crisis", 37: "Friendship", 38: "The Fighter", 39: "Provocation", 40: "Aloneness", 41: "Contraction", 42: "Growth", 43: "Insight", 44: "Alertness", 45: "The Gatherer", 46: "Determination", 47: "Realisation", 48: "Depth", 49: "Revolution", 50: "Values", 51: "Shock", 52: "Stillness", 53: "Beginnings", 54: "Ambition", 55: "Spirit", 56: "Stimulation", 57: "Intuitive Clarity", 58: "Vitality", 59: "Sexuality", 60: "Limitation", 61: "Mystery", 62: "Detail", 63: "Doubt", 64: "Confusion" }, p_ = { head: "inspiration & pressure to think", ajna: "conceptualization & mental awareness", throat: "communication & manifestation", g: "identity, direction & love", heart: "willpower & ego", sacral: "life force & response", root: "adrenalized pressure & drive", spleen: "survival & intuition", solar_plexus: "emotions & spirit" }, m_ = null;
6601
+ function h_() {
6602
+ return m_ || (m_ = document.createElement("div"), m_.id = "hd-popup-panel", m_.className = "hd-popup", document.body.appendChild(m_)), m_;
6595
6603
  }
6596
- function m_() {
6597
- f_ == null || f_.classList.remove("visible"), n_ == null || n_(null);
6604
+ function g_() {
6605
+ m_ == null || m_.classList.remove("visible"), i_ == null || i_(null);
6598
6606
  }
6599
- function h_(e5, t2, n2, r2, i2, a2) {
6607
+ function __(e5, t2, n2, r2, i2, a2) {
6600
6608
  var o2;
6601
- let s2 = i_ ? '<button class="ask-claude-btn" id="hd-ask-claude-btn">Interpret</button>' : "", c2 = a2 ? '<div class="hd-popup-body">'.concat(a2, "</div>") : "", l2 = '\n <div class="hd-popup-header">\n <span class="hd-popup-icon">'.concat(__(t2), '</span>\n <div class="hd-popup-title">\n <strong>').concat(__(n2), '</strong>\n <div class="hd-popup-sub">').concat(__(r2), '</div>\n </div>\n <button class="hd-popup-close" id="hd-popup-close">\u2715</button>\n </div>\n ').concat(c2, "\n ").concat(s2, "\n "), u2 = document.querySelector("#fs-bottom-bar [data-column='right']");
6609
+ let s2 = o_ ? '<button class="ask-claude-btn" id="hd-ask-claude-btn">Interpret</button>' : "", c2 = a2 ? '<div class="hd-popup-body">'.concat(a2, "</div>") : "", l2 = '\n <div class="hd-popup-header">\n <span class="hd-popup-icon">'.concat(y_(t2), '</span>\n <div class="hd-popup-title">\n <strong>').concat(y_(n2), '</strong>\n <div class="hd-popup-sub">').concat(y_(r2), '</div>\n </div>\n <button class="hd-popup-close" id="hd-popup-close">\u2715</button>\n </div>\n ').concat(c2, "\n ").concat(s2, "\n "), u2 = document.querySelector("#fs-bottom-bar [data-column='right']");
6602
6610
  if (u2 && document.body.classList.contains("is-fullscreen")) {
6603
6611
  var d2;
6604
6612
  let e6 = u2.querySelector(".hd-detail-panel");
6605
6613
  e6 || (e6 = document.createElement("div"), e6.className = "hd-detail-panel", u2.appendChild(e6)), e6.innerHTML = l2, (d2 = e6.querySelector("#hd-popup-close")) == null || d2.addEventListener("click", () => {
6606
- e6.innerHTML = "", n_ == null || n_(null);
6607
- }), g_(e6, i2);
6614
+ e6.innerHTML = "", i_ == null || i_(null);
6615
+ }), v_(e6, i2);
6608
6616
  return;
6609
6617
  }
6610
- let f2 = p_();
6618
+ let f2 = h_();
6611
6619
  f2.innerHTML = l2, f2.classList.add("visible"), requestAnimationFrame(() => {
6612
6620
  let t3 = f2.getBoundingClientRect(), n3 = f2.offsetParent, r3, i3, a3, o3;
6613
6621
  if (n3) {
@@ -6616,17 +6624,17 @@ function h_(e5, t2, n2, r2, i2, a2) {
6616
6624
  } else r3 = window.innerWidth, i3 = window.innerHeight, a3 = 0, o3 = 0;
6617
6625
  let s3 = e5.clientX - a3 + 14, c3 = e5.clientY - o3 + 14;
6618
6626
  s3 + t3.width > r3 - 14 && (s3 = e5.clientX - a3 - t3.width - 14), c3 + t3.height > i3 - 14 && (c3 = e5.clientY - o3 - t3.height - 14), s3 = Math.max(14, s3), c3 = Math.max(14, c3), f2.style.left = "".concat(s3, "px"), f2.style.top = "".concat(c3, "px");
6619
- }), (o2 = document.getElementById("hd-popup-close")) == null || o2.addEventListener("click", m_), g_(f2, i2);
6627
+ }), (o2 = document.getElementById("hd-popup-close")) == null || o2.addEventListener("click", g_), v_(f2, i2);
6620
6628
  }
6621
- function g_(e5, t2) {
6629
+ function v_(e5, t2) {
6622
6630
  var n2;
6623
6631
  (n2 = e5.querySelector("#hd-ask-claude-btn")) == null || n2.addEventListener("click", () => {
6624
- if (!i_) return;
6632
+ if (!o_) return;
6625
6633
  let n3 = e5.querySelector("#hd-ask-claude-btn");
6626
6634
  if (!n3 || n3.disabled) return;
6627
6635
  n3.disabled = true, n3.textContent = "Sending\u2026", n3.classList.add("sending");
6628
6636
  let r2 = Object.fromEntries(Object.entries(t2.data).filter(([e6, t3]) => t3 != null && t3 !== "" && t3 !== 0)), i2 = { type: t2.type, data: r2 };
6629
- i_(i2).then(() => {
6637
+ o_(i2).then(() => {
6630
6638
  n3.textContent = "Sent", n3.classList.remove("sending"), n3.classList.add("sent"), setTimeout(() => {
6631
6639
  n3.textContent = "Interpret", n3.classList.remove("sent"), n3.disabled = false;
6632
6640
  }, 2500);
@@ -6635,91 +6643,93 @@ function g_(e5, t2) {
6635
6643
  });
6636
6644
  });
6637
6645
  }
6638
- function __(e5) {
6646
+ function y_(e5) {
6639
6647
  return e5.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
6640
6648
  }
6641
- function v_(e5, t2, n2, r2, i2, a2) {
6642
- let o2 = (e6, t3) => t3 ? '<span class="info-value interactive-text" data-ask="true" data-topic="'.concat(__(e6), '" data-val="').concat(__(t3), '" tabindex="0" role="button" title="Interpret this">').concat(__(t3), "</span>") : '<span class="info-value">None</span>';
6643
- return '\n <div class="info-row"><span class="info-label">Type</span>'.concat(o2("Type", e5), '</div>\n <div class="info-row"><span class="info-label">Profile</span>').concat(o2("Profile", t2), '</div>\n <div class="info-row"><span class="info-label">Authority</span>').concat(o2("Authority", n2), '</div>\n <div class="info-row"><span class="info-label">Definition</span>').concat(o2("Definition", r2), '</div>\n <div class="info-row"><span class="info-label">Cross</span>').concat(o2("Incarnation Cross", i2), '</div>\n <div class="info-row"><span class="info-label">Defined</span><span class="info-value">').concat(a2.length > 0 ? a2.map(__).join(", ") : "None", "</span></div>\n ");
6649
+ function b_(e5, t2, n2, r2, i2, a2) {
6650
+ let o2 = (e6, t3) => t3 ? '<span class="info-value interactive-text" data-ask="true" data-topic="'.concat(y_(e6), '" data-val="').concat(y_(t3), '" tabindex="0" role="button" title="Interpret this">').concat(y_(t3), "</span>") : '<span class="info-value">None</span>';
6651
+ return '\n <div class="info-row"><span class="info-label">Type</span>'.concat(o2("Type", e5), '</div>\n <div class="info-row"><span class="info-label">Profile</span>').concat(o2("Profile", t2), '</div>\n <div class="info-row"><span class="info-label">Authority</span>').concat(o2("Authority", n2), '</div>\n <div class="info-row"><span class="info-label">Definition</span>').concat(o2("Definition", r2), '</div>\n <div class="info-row"><span class="info-label">Cross</span>').concat(o2("Incarnation Cross", i2), '</div>\n <div class="info-row"><span class="info-label">Defined</span><span class="info-value">').concat(a2.length > 0 ? a2.map(y_).join(", ") : "None", "</span></div>\n ");
6644
6652
  }
6645
- function y_(e5, t2, n2, r2) {
6646
- let i2 = (e6, t3) => '\n <div class="info-subject-header">'.concat(__(e6), '</div>\n <div class="info-subject-grid">\n ').concat(v_(t3.type, t3.profile, t3.authority, t3.definition, t3.cross, t3.definedCenters), "\n </div>\n ");
6653
+ function x_(e5, t2, n2, r2) {
6654
+ let i2 = (e6, t3) => '\n <div class="info-subject-header">'.concat(y_(e6), '</div>\n <div class="info-subject-grid">\n ').concat(b_(t3.type, t3.profile, t3.authority, t3.definition, t3.cross, t3.definedCenters), "\n </div>\n ");
6647
6655
  return '<div class="info-connection">'.concat(i2(e5, t2)).concat(i2(n2, r2), "</div>");
6648
6656
  }
6649
- function b_(e5, t2) {
6657
+ function S_(e5, t2) {
6650
6658
  var n2, r2, i2, a2, o2, s2;
6651
6659
  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");
6652
6660
  c2 && (c2.hidden = false);
6653
6661
  let f2 = (n2 = (r2 = e5.getAttribute("viewBox")) == null ? void 0 : r2.split(/[\s,]+/).map(Number)) == null ? [0, 0, 500, 500] : n2, p2 = (i2 = f2[0]) == null ? 0 : i2, m2 = (a2 = f2[1]) == null ? 0 : a2, h2 = (o2 = f2[2]) == null ? 500 : o2, g2 = (s2 = f2[3]) == null ? 500 : s2, _2 = h2 / 5, ee2 = h2 * 2, te2 = p2, v2 = m2, y2 = h2, b2 = g2;
6654
- e5.style.touchAction = "none";
6655
- let ne2 = () => e5.setAttribute("viewBox", "".concat(te2, " ").concat(v2, " ").concat(y2, " ").concat(b2)), re2 = (e6, t3, n3) => {
6662
+ e5.classList.add("oe-pannable");
6663
+ let ne2 = () => document.body.classList.contains("is-fullscreen"), re2 = () => e5.setAttribute("viewBox", "".concat(te2, " ").concat(v2, " ").concat(y2, " ").concat(b2)), ie2 = (e6, t3, n3) => {
6656
6664
  t3 === void 0 && (t3 = te2 + y2 / 2), n3 === void 0 && (n3 = v2 + b2 / 2);
6657
6665
  let r3 = y2 * e6;
6658
- r3 < _2 && (r3 = _2), r3 > ee2 && (r3 = ee2), r3 !== y2 && (e6 = r3 / y2, te2 = t3 - (t3 - te2) * e6, v2 = n3 - (n3 - v2) * e6, y2 = r3, b2 *= e6, ne2());
6666
+ r3 < _2 && (r3 = _2), r3 > ee2 && (r3 = ee2), r3 !== y2 && (e6 = r3 / y2, te2 = t3 - (t3 - te2) * e6, v2 = n3 - (n3 - v2) * e6, y2 = r3, b2 *= e6, re2());
6659
6667
  };
6660
- l2 == null || l2.addEventListener("click", () => re2(0.8)), u2 == null || u2.addEventListener("click", () => re2(1.25)), d2 == null || d2.addEventListener("click", () => {
6661
- te2 = p2, v2 = m2, y2 = h2, b2 = g2, ne2();
6668
+ l2 == null || l2.addEventListener("click", () => ie2(0.8)), u2 == null || u2.addEventListener("click", () => ie2(1.25)), d2 == null || d2.addEventListener("click", () => {
6669
+ te2 = p2, v2 = m2, y2 = h2, b2 = g2, re2();
6662
6670
  });
6663
- let ie2 = (t3, n3) => {
6671
+ let ae2 = (t3, n3) => {
6664
6672
  let r3 = e5.getBoundingClientRect();
6665
6673
  return { x: te2 + (t3 - r3.left) / r3.width * y2, y: v2 + (n3 - r3.top) / r3.height * b2 };
6666
6674
  };
6667
6675
  e5.addEventListener("wheel", (e6) => {
6676
+ if (!ne2() && !e6.ctrlKey && !e6.metaKey) return;
6668
6677
  e6.preventDefault();
6669
- let t3 = Math.exp((e6.deltaY < 0 ? -1 : 1) * 0.1), n3 = ie2(e6.clientX, e6.clientY);
6670
- re2(t3, n3.x, n3.y);
6678
+ let t3 = Math.exp((e6.deltaY < 0 ? -1 : 1) * 0.1), n3 = ae2(e6.clientX, e6.clientY);
6679
+ ie2(t3, n3.x, n3.y);
6671
6680
  }, { passive: false });
6672
- let x2 = /* @__PURE__ */ new Map(), ae2 = null, S2 = () => {
6681
+ let x2 = /* @__PURE__ */ new Map(), S2 = null, oe2 = () => {
6673
6682
  let [e6, t3] = [...x2.values()];
6674
6683
  return { dist: Math.hypot(e6.x - t3.x, e6.y - t3.y), midX: (e6.x + t3.x) / 2, midY: (e6.y + t3.y) / 2 };
6675
- }, oe2 = (t3, n3) => {
6684
+ }, se2 = (t3, n3) => {
6676
6685
  let r3 = e5.getBoundingClientRect();
6677
- te2 -= t3 / r3.width * y2, v2 -= n3 / r3.height * b2, ne2();
6686
+ te2 -= t3 / r3.width * y2, v2 -= n3 / r3.height * b2, re2();
6678
6687
  };
6679
6688
  e5.addEventListener("pointerdown", (t3) => {
6689
+ if (t3.pointerType === "touch" && !ne2()) return;
6680
6690
  let n3 = t3.target, r3 = !!(n3.closest && (n3.closest('[class*="-hit"]') || n3.closest('[class*="-activation"]') || n3.closest(".variable-arrow") || n3.closest("button")));
6681
- x2.set(t3.pointerId, { x: t3.clientX, y: t3.clientY, interactive: r3 }), r3 || (e5.setPointerCapture(t3.pointerId), e5.style.cursor = "grabbing"), x2.size === 2 && (ae2 = S2());
6691
+ x2.set(t3.pointerId, { x: t3.clientX, y: t3.clientY, interactive: r3 }), r3 || (e5.setPointerCapture(t3.pointerId), e5.style.cursor = "grabbing"), x2.size === 2 && (S2 = oe2());
6682
6692
  }), e5.addEventListener("pointermove", (e6) => {
6683
6693
  let t3 = x2.get(e6.pointerId);
6684
- if (t3) if (x2.set(e6.pointerId, { x: e6.clientX, y: e6.clientY, interactive: t3.interactive }), x2.size >= 2 && ae2) {
6685
- let e7 = S2();
6686
- if (ae2.dist > 0 && e7.dist > 0) {
6687
- let t4 = ie2(e7.midX, e7.midY);
6688
- re2(ae2.dist / e7.dist, t4.x, t4.y);
6689
- }
6690
- oe2(e7.midX - ae2.midX, e7.midY - ae2.midY), ae2 = e7;
6691
- } else x2.size === 1 && !t3.interactive && oe2(e6.clientX - t3.x, e6.clientY - t3.y);
6694
+ if (t3) if (x2.set(e6.pointerId, { x: e6.clientX, y: e6.clientY, interactive: t3.interactive }), x2.size >= 2 && S2) {
6695
+ let e7 = oe2();
6696
+ if (S2.dist > 0 && e7.dist > 0) {
6697
+ let t4 = ae2(e7.midX, e7.midY);
6698
+ ie2(S2.dist / e7.dist, t4.x, t4.y);
6699
+ }
6700
+ se2(e7.midX - S2.midX, e7.midY - S2.midY), S2 = e7;
6701
+ } else x2.size === 1 && !t3.interactive && se2(e6.clientX - t3.x, e6.clientY - t3.y);
6692
6702
  });
6693
- let se2 = (t3) => {
6694
- x2.delete(t3.pointerId) && (e5.hasPointerCapture(t3.pointerId) && e5.releasePointerCapture(t3.pointerId), ae2 = x2.size >= 2 ? S2() : null, x2.size === 0 && (e5.style.cursor = "default"));
6703
+ let ce2 = (t3) => {
6704
+ x2.delete(t3.pointerId) && (e5.hasPointerCapture(t3.pointerId) && e5.releasePointerCapture(t3.pointerId), S2 = x2.size >= 2 ? oe2() : null, x2.size === 0 && (e5.style.cursor = "default"));
6695
6705
  };
6696
- e5.addEventListener("pointerup", se2), e5.addEventListener("pointercancel", se2);
6706
+ e5.addEventListener("pointerup", ce2), e5.addEventListener("pointercancel", ce2);
6697
6707
  }
6698
- var x_ = { head: "Head", ajna: "Ajna", throat: "Throat", g: "G", heart: "Heart", sacral: "Sacral", spleen: "Spleen", solar_plexus: "Solar Plexus", root: "Root" };
6699
- function S_(e5) {
6708
+ var C_ = { head: "Head", ajna: "Ajna", throat: "Throat", g: "G", heart: "Heart", sacral: "Sacral", spleen: "Spleen", solar_plexus: "Solar Plexus", root: "Root" };
6709
+ function w_(e5) {
6700
6710
  var t2;
6701
- return (t2 = x_[e5]) == null ? e5 : t2;
6711
+ return (t2 = C_[e5]) == null ? e5 : t2;
6702
6712
  }
6703
- function C_(e5, t2, n2, r2) {
6713
+ function T_(e5, t2, n2, r2) {
6704
6714
  var i2, a2, o2, s2;
6705
- a_((i2 = r2.onAskClaude) == null ? null : i2);
6715
+ s_((i2 = r2.onAskClaude) == null ? null : i2);
6706
6716
  let c2 = e5.querySelector("#pan-zoom-controls");
6707
6717
  e5.innerHTML = "", c2 && e5.appendChild(c2);
6708
6718
  let l2 = document.createElement("div");
6709
6719
  l2.style.cssText = "width:100%;height:100%;", l2.innerHTML = t2;
6710
6720
  let u2 = l2.querySelector("svg");
6711
6721
  if (!u2) return console.error("[wire-go-svg] No <svg> element found in payload"), null;
6712
- u2.setAttribute("width", "100%"), u2.setAttribute("height", "100%"), u2.setAttribute("role", "group"), u2.setAttribute("aria-label", "Human Design Bodygraph"), u2.addEventListener("click", (e6) => e6.stopPropagation()), e5.appendChild(u2), b_(u2, "pan-zoom-controls"), new Set((a2 = n2.personality_gates) == null ? [] : a2), new Set((o2 = n2.design_gates) == null ? [] : o2);
6722
+ u2.setAttribute("width", "100%"), u2.setAttribute("height", "100%"), u2.setAttribute("role", "group"), u2.setAttribute("aria-label", "Human Design Bodygraph"), u2.addEventListener("click", (e6) => e6.stopPropagation()), e5.appendChild(u2), S_(u2, "pan-zoom-controls"), new Set((a2 = n2.personality_gates) == null ? [] : a2), new Set((o2 = n2.design_gates) == null ? [] : o2);
6713
6723
  let d2 = /* @__PURE__ */ new Set();
6714
6724
  for (let e6 of (s2 = n2.centers) == null ? [] : s2) e6.defined && d2.add(e6.name);
6715
6725
  let f2 = {};
6716
- for (let [e6, t3] of Object.entries(x_)) f2[t3.toLowerCase()] = e6;
6717
- u2.addEventListener("mouseover", (e6) => h2(e6, true)), u2.addEventListener("mouseout", (e6) => h2(e6, false)), u2.addEventListener("click", g2), _2();
6726
+ for (let [e6, t3] of Object.entries(C_)) f2[t3.toLowerCase()] = e6;
6727
+ u2.addEventListener("mouseover", (e6) => g2(e6, true)), u2.addEventListener("mouseout", (e6) => g2(e6, false)), u2.addEventListener("click", _2), ee2();
6718
6728
  function p2(e6) {
6719
6729
  var t3;
6720
6730
  if (!e6) return "";
6721
6731
  let n3 = u2.querySelector('[data-gate="'.concat(e6, '"][data-center]')), r3 = (t3 = n3 == null ? void 0 : n3.getAttribute("data-center")) == null ? "" : t3;
6722
- return r3 ? S_(r3) : "";
6732
+ return r3 ? w_(r3) : "";
6723
6733
  }
6724
6734
  function m2(e6, t3) {
6725
6735
  let n3 = e6;
@@ -6729,76 +6739,95 @@ function C_(e5, t2, n2, r2) {
6729
6739
  }
6730
6740
  return null;
6731
6741
  }
6732
- function h2(e6, t3) {
6733
- let n3 = e6, r3 = m2(n3.target, "data-gate"), i3 = m2(n3.target, "data-center"), a3 = m2(n3.target, "data-channel");
6734
- if (!t3) {
6735
- l_();
6742
+ let h2 = null;
6743
+ function g2(e6, t3) {
6744
+ let n3 = e6, r3 = A_(u2, n3.target);
6745
+ if (r3) {
6746
+ if (t3) {
6747
+ var i3;
6748
+ j_(u2, r3), u_(n3.clientX, n3.clientY, "".concat(r3.sideLabel, " ").concat(r3.planet), r3.gate ? "Gate ".concat(r3.gate).concat(r3.line ? "." + r3.line : "", " \u2014 ").concat((i3 = f_[r3.gate]) == null ? "" : i3) : "", "Click to interpret");
6749
+ } else j_(u2, h2), d_();
6736
6750
  return;
6737
6751
  }
6738
- if (r3) {
6739
- var o3, s3;
6740
- let e7 = Number(r3.getAttribute("data-gate")), t4 = (o3 = r3.getAttribute("data-source")) == null ? "inactive" : o3, i4 = r3.getAttribute("data-hanging") === "true", a4 = (s3 = u_[e7]) == null ? "Gate ".concat(e7) : s3, c4 = t4 === "inactive" ? "Inactive gate" : "".concat(T_(t4)).concat(i4 ? " \xB7 hanging" : "");
6741
- c_(n3.clientX, n3.clientY, "Gate ".concat(e7, " \u2014 ").concat(a4), c4, "Click to interpret");
6752
+ let a3 = m2(n3.target, "data-gate"), o3 = m2(n3.target, "data-center"), s3 = m2(n3.target, "data-channel");
6753
+ if (!t3) {
6754
+ d_();
6742
6755
  return;
6743
6756
  }
6744
6757
  if (a3) {
6745
- var c3, l3, u3, d3;
6746
- let e7 = (c3 = a3.getAttribute("data-channel")) == null ? "" : c3, t4 = (l3 = a3.getAttribute("data-gate1")) == null ? "" : l3, r4 = (u3 = a3.getAttribute("data-gate2")) == null ? "" : u3, i4 = (d3 = a3.getAttribute("class")) == null ? "" : d3, o4 = i4.includes("channel--hanging") ? "Hanging gate" : i4.includes("channel--active") ? "Active channel" : "Inactive channel";
6747
- c_(n3.clientX, n3.clientY, "Channel ".concat(e7), "".concat(o4, " \u2014 gates ").concat(t4, " \u2194 ").concat(r4));
6758
+ var c3, l3;
6759
+ let e7 = Number(a3.getAttribute("data-gate")), t4 = (c3 = a3.getAttribute("data-source")) == null ? "inactive" : c3, r4 = a3.getAttribute("data-hanging") === "true", i4 = (l3 = f_[e7]) == null ? "Gate ".concat(e7) : l3, o4 = t4 === "inactive" ? "Inactive gate" : "".concat(N_(t4)).concat(r4 ? " \xB7 hanging" : "");
6760
+ u_(n3.clientX, n3.clientY, "Gate ".concat(e7, " \u2014 ").concat(i4), o4, "Click to interpret");
6761
+ return;
6762
+ }
6763
+ if (s3) {
6764
+ var d3, f3, p3, g3;
6765
+ let e7 = (d3 = s3.getAttribute("data-channel")) == null ? "" : d3, t4 = (f3 = s3.getAttribute("data-gate1")) == null ? "" : f3, r4 = (p3 = s3.getAttribute("data-gate2")) == null ? "" : p3, i4 = (g3 = s3.getAttribute("class")) == null ? "" : g3, a4 = i4.includes("channel--hanging") ? "Hanging gate" : i4.includes("channel--active") ? "Active channel" : "Inactive channel";
6766
+ u_(n3.clientX, n3.clientY, "Channel ".concat(e7), "".concat(a4, " \u2014 gates ").concat(t4, " \u2194 ").concat(r4));
6748
6767
  return;
6749
6768
  }
6750
- if (i3) {
6751
- var f3, p3;
6752
- let e7 = (f3 = i3.getAttribute("data-center")) == null ? "" : f3, t4 = i3.getAttribute("data-defined") === "true", r4 = S_(e7), a4 = (p3 = d_[e7]) == null ? "" : p3;
6753
- c_(n3.clientX, n3.clientY, "".concat(r4, " Center"), "".concat(t4 ? "Defined" : "Open").concat(a4 ? " \u2014 " + a4 : ""), "Click to interpret");
6769
+ if (o3) {
6770
+ var _3, ee3;
6771
+ let e7 = (_3 = o3.getAttribute("data-center")) == null ? "" : _3, t4 = o3.getAttribute("data-defined") === "true", r4 = w_(e7), i4 = (ee3 = p_[e7]) == null ? "" : ee3;
6772
+ u_(n3.clientX, n3.clientY, "".concat(r4, " Center"), "".concat(t4 ? "Defined" : "Open").concat(i4 ? " \u2014 " + i4 : ""), "Click to interpret");
6754
6773
  return;
6755
6774
  }
6756
- l_();
6775
+ d_();
6757
6776
  }
6758
- function g2(e6) {
6759
- let t3 = e6, n3 = m2(t3.target, "data-gate"), i3 = m2(t3.target, "data-center"), a3 = m2(t3.target, "data-channel");
6777
+ function _2(e6) {
6778
+ let t3 = e6, n3 = A_(u2, t3.target);
6760
6779
  if (n3) {
6761
- var o3;
6762
- let e7 = Number(n3.getAttribute("data-gate")), i4 = (o3 = n3.getAttribute("data-source")) == null ? "inactive" : o3, a4 = i4 === "personality" ? true : i4 === "design" ? false : null, c4 = S_(n3.getAttribute("data-center") || "");
6763
- if (r2.onGateClick(e7, a4, c4), r2.onAskClaude) {
6764
- var s3;
6765
- h_(t3, "\u25C9", "Gate ".concat(e7), (s3 = u_[e7]) == null ? "Active gate" : s3, { type: "gate", data: { gate: e7, conscious: a4, center: c4 } });
6780
+ if (h2 = (h2 == null ? void 0 : h2.token) === n3.token ? null : n3, j_(u2, h2), r2.onAskClaude && h2) {
6781
+ var i3;
6782
+ __(t3, n3.glyph, "".concat(n3.sideLabel, " ").concat(n3.planet), n3.gate ? "Gate ".concat(n3.gate).concat(n3.line ? "." + n3.line : "", " \u2014 ").concat((i3 = f_[n3.gate]) == null ? "activation" : i3) : "Activation", { type: "planet", data: { planet: n3.planet, gate: n3.gate, line: n3.line, side: n3.side } });
6766
6783
  }
6767
6784
  return;
6768
6785
  }
6786
+ h2 && (h2 = null, j_(u2, null));
6787
+ let a3 = m2(t3.target, "data-gate"), o3 = m2(t3.target, "data-center"), s3 = m2(t3.target, "data-channel");
6769
6788
  if (a3) {
6770
- var c3, l3, u3, d3;
6771
- let e7 = (c3 = a3.getAttribute("data-channel")) == null ? "" : c3, n4 = Number((l3 = a3.getAttribute("data-gate1")) == null ? 0 : l3), i4 = Number((u3 = a3.getAttribute("data-gate2")) == null ? 0 : u3), o4 = (d3 = a3.getAttribute("data-source")) == null ? "" : d3, s4 = p2(n4), f4 = p2(i4);
6772
- r2.onChannelClick(e7, n4, i4, s4, f4, o4), r2.onAskClaude && h_(t3, "\u2194", "Channel ".concat(e7), "Gates ".concat(n4, "\u2013").concat(i4).concat(o4 ? " \xB7 " + o4 : ""), { type: "channel", data: { channel: e7, gate1: n4, gate2: i4, color_type: o4 } });
6789
+ var c3;
6790
+ let e7 = Number(a3.getAttribute("data-gate")), n4 = (c3 = a3.getAttribute("data-source")) == null ? "inactive" : c3, i4 = n4 === "personality" ? true : n4 === "design" ? false : null, o4 = w_(a3.getAttribute("data-center") || "");
6791
+ if (r2.onGateClick(e7, i4, o4), r2.onAskClaude) {
6792
+ var l3;
6793
+ __(t3, "\u25C9", "Gate ".concat(e7), (l3 = f_[e7]) == null ? "Active gate" : l3, { type: "gate", data: { gate: e7, conscious: i4, center: o4 } });
6794
+ }
6795
+ return;
6796
+ }
6797
+ if (s3) {
6798
+ var d3, f3, g3, _3;
6799
+ let e7 = (d3 = s3.getAttribute("data-channel")) == null ? "" : d3, n4 = Number((f3 = s3.getAttribute("data-gate1")) == null ? 0 : f3), i4 = Number((g3 = s3.getAttribute("data-gate2")) == null ? 0 : g3), a4 = (_3 = s3.getAttribute("data-source")) == null ? "" : _3, o4 = p2(n4), c4 = p2(i4);
6800
+ r2.onChannelClick(e7, n4, i4, o4, c4, a4), r2.onAskClaude && __(t3, "\u2194", "Channel ".concat(e7), "Gates ".concat(n4, "\u2013").concat(i4).concat(a4 ? " \xB7 " + a4 : ""), { type: "channel", data: { channel: e7, gate1: n4, gate2: i4, color_type: a4 } });
6773
6801
  return;
6774
6802
  }
6775
- if (i3) {
6776
- var f3;
6777
- let e7 = (f3 = i3.getAttribute("data-center")) == null ? "" : f3, n4 = i3.getAttribute("data-defined") === "true", a4 = S_(e7);
6778
- if (r2.onCenterClick(a4, n4, []), r2.onAskClaude) {
6779
- var h3;
6780
- let r3 = (h3 = d_[e7]) == null ? "" : h3;
6781
- h_(t3, n4 ? "\u25C9" : "\u25CB", "".concat(a4, " Center"), "".concat(n4 ? "Defined" : "Open").concat(r3 ? " \u2014 " + r3 : ""), { type: "center", data: { center_name: a4, defined: n4 } }, __(r3));
6803
+ if (o3) {
6804
+ var ee3;
6805
+ let e7 = (ee3 = o3.getAttribute("data-center")) == null ? "" : ee3, n4 = o3.getAttribute("data-defined") === "true", i4 = w_(e7);
6806
+ if (r2.onCenterClick(i4, n4, []), r2.onAskClaude) {
6807
+ var te2;
6808
+ let r3 = (te2 = p_[e7]) == null ? "" : te2;
6809
+ __(t3, n4 ? "\u25C9" : "\u25CB", "".concat(i4, " Center"), "".concat(n4 ? "Defined" : "Open").concat(r3 ? " \u2014 " + r3 : ""), { type: "center", data: { center_name: i4, defined: n4 } }, y_(r3));
6782
6810
  }
6783
6811
  return;
6784
6812
  }
6785
6813
  }
6786
- function _2() {
6787
- u2 && u2.querySelectorAll("[data-gate], [data-channel], [data-center]").forEach((e6) => {
6788
- let t3;
6789
- if (e6.hasAttribute("data-gate")) {
6790
- var n3, r3;
6791
- let i4 = Number(e6.getAttribute("data-gate")), a4 = (n3 = e6.getAttribute("data-source")) == null ? "inactive" : n3, o4 = (r3 = u_[i4]) == null ? "" : r3;
6792
- t3 = "Gate ".concat(i4).concat(o4 ? " \u2014 " + o4 : "", ", ").concat(a4 === "inactive" ? "inactive" : T_(a4));
6814
+ function ee2() {
6815
+ u2 && u2.querySelectorAll("[data-gate], [data-channel], [data-center], [data-activation]").forEach((e6) => {
6816
+ let t3, n3 = k_(e6);
6817
+ if (n3) t3 = "".concat(n3.sideLabel, " ").concat(n3.planet).concat(n3.gate ? ", gate ".concat(n3.gate).concat(n3.line ? "." + n3.line : "") : "");
6818
+ else if (e6.hasAttribute("data-gate")) {
6819
+ var r3, i3;
6820
+ let n4 = Number(e6.getAttribute("data-gate")), a4 = (r3 = e6.getAttribute("data-source")) == null ? "inactive" : r3, o4 = (i3 = f_[n4]) == null ? "" : i3;
6821
+ t3 = "Gate ".concat(n4).concat(o4 ? " \u2014 " + o4 : "", ", ").concat(a4 === "inactive" ? "inactive" : N_(a4));
6793
6822
  } else if (e6.hasAttribute("data-channel")) {
6794
- var i3, a3, o3;
6795
- t3 = "Channel ".concat((i3 = e6.getAttribute("data-channel")) == null ? "" : i3, ", gates ").concat((a3 = e6.getAttribute("data-gate1")) == null ? "" : a3, " to ").concat((o3 = e6.getAttribute("data-gate2")) == null ? "" : o3);
6823
+ var a3, o3, s3;
6824
+ t3 = "Channel ".concat((a3 = e6.getAttribute("data-channel")) == null ? "" : a3, ", gates ").concat((o3 = e6.getAttribute("data-gate1")) == null ? "" : o3, " to ").concat((s3 = e6.getAttribute("data-gate2")) == null ? "" : s3);
6796
6825
  } else {
6797
- var s3;
6798
- let n4 = (s3 = e6.getAttribute("data-center")) == null ? "" : s3, r4 = e6.getAttribute("data-defined") === "true";
6799
- t3 = "".concat(S_(n4), " Center, ").concat(r4 ? "defined" : "open");
6826
+ var c3;
6827
+ let n4 = (c3 = e6.getAttribute("data-center")) == null ? "" : c3, r4 = e6.getAttribute("data-defined") === "true";
6828
+ t3 = "".concat(w_(n4), " Center, ").concat(r4 ? "defined" : "open");
6800
6829
  }
6801
- e6.setAttribute("tabindex", "0"), e6.setAttribute("role", "button"), e6.setAttribute("aria-label", t3), e6.addEventListener("keydown", (t4) => {
6830
+ e6.setAttribute("tabindex", "0"), e6.setAttribute("role", "button"), e6.setAttribute("aria-label", t3), n3 && (e6.addEventListener("focus", () => j_(u2, n3)), e6.addEventListener("blur", () => j_(u2, h2))), e6.addEventListener("keydown", (t4) => {
6802
6831
  let n4 = t4;
6803
6832
  if (n4.key !== "Enter" && n4.key !== " ") return;
6804
6833
  n4.preventDefault(), n4.stopPropagation();
@@ -6809,7 +6838,47 @@ function C_(e5, t2, n2, r2) {
6809
6838
  }
6810
6839
  return u2;
6811
6840
  }
6812
- function w_(e5, t2) {
6841
+ var E_ = { sun: "\u2609", earth: "\u2295", north_node: "\u260A", south_node: "\u260B", moon: "\u263D", mercury: "\u263F", venus: "\u2640", mars: "\u2642", jupiter: "\u2643", saturn: "\u2644", uranus: "\u2645", neptune: "\u2646", pluto: "\u2647" };
6842
+ function D_(e5) {
6843
+ return e5.trim().toLowerCase().replace(/[\s-]+/g, "_");
6844
+ }
6845
+ function O_(e5) {
6846
+ return e5.split("_").map((e6) => e6.charAt(0).toUpperCase() + e6.slice(1)).join(" ");
6847
+ }
6848
+ function k_(e5) {
6849
+ var t2, n2, r2;
6850
+ let i2 = e5.getAttribute("data-activation"), a2 = e5.getAttribute("data-planet");
6851
+ if (!i2 && !a2 || e5.hasAttribute("data-variable")) return null;
6852
+ let o2 = null, s2 = "";
6853
+ return i2 && i2.includes(":") && ([o2, s2] = i2.split(":")), o2 || (o2 = (t2 = (n2 = e5.closest("[data-column]")) == null ? void 0 : n2.getAttribute("data-column")) == null ? null : t2), !s2 && a2 && (s2 = D_(a2)), o2 !== "personality" && o2 !== "design" || !s2 ? null : { token: "".concat(o2, ":").concat(s2), side: o2, sideLabel: o2 === "design" ? "Design" : "Personality", planet: a2 || O_(s2), gate: Number(e5.getAttribute("data-gate") || 0), line: Number(e5.getAttribute("data-line") || 0), glyph: (r2 = E_[s2]) == null ? "\u2022" : r2, el: e5 };
6854
+ }
6855
+ function A_(e5, t2) {
6856
+ let n2 = t2;
6857
+ for (; n2 && n2 !== e5; ) {
6858
+ var r2, i2;
6859
+ if ((r2 = n2.hasAttribute) != null && r2.call(n2, "data-activation") || (i2 = n2.hasAttribute) != null && i2.call(n2, "data-planet")) return k_(n2);
6860
+ n2 = n2.parentElement;
6861
+ }
6862
+ return null;
6863
+ }
6864
+ function j_(e5, t2) {
6865
+ if (e5.querySelectorAll("[data-highlighted], [data-highlighted-context]").forEach((e6) => {
6866
+ e6.removeAttribute("data-highlighted"), e6.removeAttribute("data-highlighted-primary"), e6.removeAttribute("data-highlighted-context");
6867
+ }), e5.classList.toggle("has-highlight", !!t2), e5.classList.toggle("has-activation-highlight", !!t2), e5.removeAttribute("data-selected-activation"), !t2) return;
6868
+ e5.setAttribute("data-selected-activation", t2.token);
6869
+ let n2 = (e6) => !!e6 && e6.split(/\s+/).some((e7) => e7 === t2.token || e7.startsWith(t2.token + ":")), r2 = e5.querySelector("[data-activations], [data-activation]") ? [...e5.querySelectorAll("[data-activations], [data-activation]")].filter((e6) => n2(e6.getAttribute("data-activations")) || n2(e6.getAttribute("data-activation"))) : [t2.el, ...t2.gate ? [...e5.querySelectorAll('.gate[data-gate="'.concat(t2.gate, '"]'))].filter((e6) => {
6870
+ var n3;
6871
+ let r3 = (n3 = e6.getAttribute("data-source")) == null ? "" : n3;
6872
+ return r3 === t2.side || r3 === "both";
6873
+ }) : []];
6874
+ r2.includes(t2.el) || r2.push(t2.el);
6875
+ for (let t3 of r2) {
6876
+ t3.setAttribute("data-highlighted", "true"), t3.setAttribute("data-highlighted-primary", "true");
6877
+ let n3 = t3.parentElement;
6878
+ for (; n3 && n3 !== e5; ) (n3.hasAttribute("data-gate") || n3.hasAttribute("data-channel") || n3.hasAttribute("data-center") || n3.hasAttribute("data-column")) && (n3.hasAttribute("data-highlighted-primary") || n3.setAttribute("data-highlighted-context", "true")), n3 = n3.parentElement;
6879
+ }
6880
+ }
6881
+ function M_(e5, t2) {
6813
6882
  var n2, r2, i2, a2, o2, s2;
6814
6883
  e5.querySelectorAll("[data-highlighted]").forEach((e6) => {
6815
6884
  e6.removeAttribute("data-highlighted"), e6.removeAttribute("data-highlighted-primary");
@@ -6835,10 +6904,10 @@ function w_(e5, t2) {
6835
6904
  e6.setAttribute("data-highlighted", "true"), h2.has(t3) && e6.setAttribute("data-highlighted-primary", "true");
6836
6905
  });
6837
6906
  }
6838
- function T_(e5) {
6907
+ function N_(e5) {
6839
6908
  return e5.charAt(0).toUpperCase() + e5.slice(1);
6840
6909
  }
6841
- var E_ = class e4 {
6910
+ var P_ = class e4 {
6842
6911
  constructor(t2) {
6843
6912
  var n2, r2, i2, a2, s2, c2;
6844
6913
  o(this, "config", void 0), o(this, "params", void 0), o(this, "dateInput", void 0), o(this, "timeInput", void 0), o(this, "refreshBtn", void 0), o(this, "locInput", void 0), o(this, "locDropdown", void 0), o(this, "summaryBar", void 0), o(this, "extraToggleInput", void 0), o(this, "searchTimeout", null), o(this, "searchVersion", 0), o(this, "isSearching", false), o(this, "suggestions", []), o(this, "activeIndex", -1), o(this, "selecting", false), o(this, "listboxId", "loc-listbox-".concat(e4.comboSeq++)), this.config = t2, this.params = { date: ((n2 = t2.initialParams) == null ? void 0 : n2.date) || this.getTodayDate(), time: ((r2 = t2.initialParams) == null ? void 0 : r2.time) || "12:00", latitude: ((i2 = t2.initialParams) == null ? void 0 : i2.latitude) || null, longitude: ((a2 = t2.initialParams) == null ? void 0 : a2.longitude) || null, timezone: ((s2 = t2.initialParams) == null ? void 0 : s2.timezone) || null, locationName: ((c2 = t2.initialParams) == null ? void 0 : c2.locationName) || null }, this.render();
@@ -7018,11 +7087,11 @@ var E_ = class e4 {
7018
7087
  return e5.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
7019
7088
  }
7020
7089
  };
7021
- o(E_, "comboSeq", 0);
7022
- var D_ = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?(?:\.\d+)?$/;
7023
- function O_(e5, t2) {
7090
+ o(P_, "comboSeq", 0);
7091
+ var F_ = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?(?:\.\d+)?$/;
7092
+ function I_(e5, t2) {
7024
7093
  if (!e5) return null;
7025
- let n2 = D_.exec(e5.trim());
7094
+ let n2 = F_.exec(e5.trim());
7026
7095
  if (n2) {
7027
7096
  let [, e6, t3, r3, i2, a2, o2] = n2, s2 = new Date(Date.UTC(+e6, t3 - 1, +r3, +i2, +a2, o2 ? +o2 : 0));
7028
7097
  return isNaN(s2.getTime()) ? null : { date: s2, timeZone: "UTC" };
@@ -7030,27 +7099,27 @@ function O_(e5, t2) {
7030
7099
  let r2 = new Date(e5);
7031
7100
  return isNaN(r2.getTime()) ? null : { date: r2, timeZone: t2 || "UTC" };
7032
7101
  }
7033
- function k_(e5) {
7102
+ function L_(e5) {
7034
7103
  var t2;
7035
7104
  if (!e5) return "";
7036
7105
  let n2 = [], r2 = (t2 = e5.location) == null ? void 0 : t2.trim();
7037
7106
  if (r2 ? n2.push(r2) : typeof e5.latitude == "number" && typeof e5.longitude == "number" && n2.push("".concat(e5.latitude.toFixed(2), ", ").concat(e5.longitude.toFixed(2))), e5.datetime) {
7038
- let t3 = /^\d{4}-\d{2}-\d{2}/.test(e5.datetime.trim()) ? O_(e5.datetime, e5.timezone) : null;
7107
+ let t3 = /^\d{4}-\d{2}-\d{2}/.test(e5.datetime.trim()) ? I_(e5.datetime, e5.timezone) : null;
7039
7108
  t3 ? n2.push(t3.date.toLocaleString("en-US", { timeZone: t3.timeZone, day: "numeric", month: "short", year: "numeric", hour: "numeric", minute: "2-digit" })) : n2.push(e5.datetime);
7040
7109
  }
7041
7110
  return n2.join(" \xB7 ");
7042
7111
  }
7043
- function A_(e5, t2, n2 = "Chart") {
7044
- let r2 = k_(t2);
7112
+ function R_(e5, t2, n2 = "Chart") {
7113
+ let r2 = L_(t2);
7045
7114
  return r2 ? "".concat(n2, ": ").concat(r2, "\n\n").concat(e5) : e5;
7046
7115
  }
7047
- var j_ = { "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." } }, M_ = '\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';
7048
- function N_() {
7116
+ var z_ = { "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';
7117
+ function V_() {
7049
7118
  if (document.getElementById("oe-first-run-styles")) return;
7050
7119
  let e5 = document.createElement("style");
7051
- e5.id = "oe-first-run-styles", e5.textContent = M_, document.head.appendChild(e5);
7120
+ e5.id = "oe-first-run-styles", e5.textContent = B_, document.head.appendChild(e5);
7052
7121
  }
7053
- function P_(e5) {
7122
+ function H_(e5) {
7054
7123
  let t2 = document.activeElement, n2 = document.createElement("div");
7055
7124
  n2.className = "oe-welcome-backdrop";
7056
7125
  let r2 = document.createElement("div");
@@ -7068,24 +7137,24 @@ function P_(e5) {
7068
7137
  e6.key === "Escape" && (e6.preventDefault(), o2()), e6.key === "Tab" && (e6.preventDefault(), a2.focus());
7069
7138
  }), requestAnimationFrame(() => a2.focus()), n2;
7070
7139
  }
7071
- function F_(e5) {
7072
- N_();
7073
- let t2 = P_(j_[e5]);
7140
+ function U_(e5) {
7141
+ V_();
7142
+ let t2 = H_(z_[e5]);
7074
7143
  document.body.appendChild(t2);
7075
7144
  }
7076
- var I_ = "\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";
7077
- function L_() {
7145
+ 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";
7146
+ function G_() {
7078
7147
  if (document.getElementById("oe-info-button-styles")) return;
7079
7148
  let e5 = document.createElement("style");
7080
- e5.id = "oe-info-button-styles", e5.textContent = I_, document.head.appendChild(e5);
7149
+ e5.id = "oe-info-button-styles", e5.textContent = W_, document.head.appendChild(e5);
7081
7150
  }
7082
- function R_(e5) {
7151
+ function K_(e5) {
7083
7152
  if (document.getElementById("oe-info-button")) return;
7084
- L_();
7153
+ G_();
7085
7154
  let t2 = document.createElement("button");
7086
- 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", () => F_(e5)), document.body.appendChild(t2);
7155
+ 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", () => U_(e5)), document.body.appendChild(t2);
7087
7156
  }
7088
- function z_(e5) {
7157
+ function q_(e5) {
7089
7158
  var t2;
7090
7159
  if (!e5) return null;
7091
7160
  if (e5.structuredContent != null && typeof e5.structuredContent == "object") return e5.structuredContent;
@@ -7098,50 +7167,63 @@ function z_(e5) {
7098
7167
  }
7099
7168
  return null;
7100
7169
  }
7101
- function B_(e5) {
7170
+ function J_(e5) {
7102
7171
  return e5.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
7103
7172
  }
7104
- function V_(e5) {
7105
- let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e5, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(B_(i2), "</button>") : "";
7106
- if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(B_(n2), "</p>") + a2 + "</div>", t2.removeAttribute("hidden"), r2) {
7173
+ function Y_(e5) {
7174
+ let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e5, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(J_(i2), "</button>") : "";
7175
+ if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(J_(n2), "</p>") + a2 + "</div>", t2.removeAttribute("hidden"), r2) {
7107
7176
  var o2;
7108
7177
  (o2 = t2.querySelector(".error-retry-btn")) == null || o2.addEventListener("click", r2);
7109
7178
  }
7110
7179
  }
7111
- var H_;
7112
- function U_() {
7113
- return H_ ? H_ === "dark" : window.matchMedia("(prefers-color-scheme: dark)").matches;
7180
+ var X_;
7181
+ function Z_() {
7182
+ return X_ ? X_ === "dark" : window.matchMedia("(prefers-color-scheme: dark)").matches;
7114
7183
  }
7115
- function W_(e5 = U_()) {
7184
+ function Q_(e5 = Z_()) {
7116
7185
  let t2 = e5 ? "dark" : "light";
7117
7186
  return document.documentElement.setAttribute("data-theme", t2), t2;
7118
7187
  }
7119
- function G_(e5) {
7120
- W_();
7188
+ function $_(e5) {
7189
+ Q_();
7121
7190
  try {
7122
7191
  window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (t2) => {
7123
- H_ || e5 == null || e5(W_(t2.matches));
7192
+ X_ || e5 == null || e5(Q_(t2.matches));
7124
7193
  });
7125
7194
  } catch (e6) {
7126
7195
  }
7127
7196
  }
7128
- function K_(e5, t2) {
7197
+ function ev(e5, t2) {
7129
7198
  var n2, r2;
7130
7199
  let i2 = (e6) => {
7131
7200
  let n3 = e6 == null ? void 0 : e6.theme;
7132
7201
  if (n3 !== "light" && n3 !== "dark") return;
7133
- H_ = n3;
7134
- let r3 = document.documentElement.getAttribute("data-theme"), i3 = W_(n3 === "dark");
7202
+ X_ = n3;
7203
+ let r3 = document.documentElement.getAttribute("data-theme"), i3 = Q_(n3 === "dark");
7135
7204
  i3 !== r3 && (t2 == null || t2(i3));
7136
7205
  };
7137
7206
  (n2 = e5.addEventListener) == null || n2.call(e5, "hostcontextchanged", i2), i2((r2 = e5.getHostContext) == null ? void 0 : r2.call(e5));
7138
7207
  }
7139
- function q_(e5, t2, n2 = []) {
7140
- var r2, i2;
7208
+ var tv = ["inline", "fullscreen"];
7209
+ function nv(e5) {
7210
+ var t2;
7211
+ return (t2 = e5.getHostContext) == null ? void 0 : t2.call(e5);
7212
+ }
7213
+ function rv(e5) {
7214
+ var t2;
7215
+ let n2 = (t2 = nv(e5)) == null ? void 0 : t2.availableDisplayModes;
7216
+ return Array.isArray(n2) ? n2 : [];
7217
+ }
7218
+ var iv = '<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>', av = '<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>', ov = '<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>', sv = '<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>';
7219
+ function cv(e5, t2, n2 = [], r2 = {}) {
7220
+ var i2;
7141
7221
  if (!t2 || t2.querySelector("#btn-fullscreen")) return;
7142
7222
  let a2 = document.createElement("button");
7143
- 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>';
7144
- let o2 = a2.innerHTML, s2 = ["param-controls", "aspect-filter", "controls-panel", "mode-badge"];
7223
+ a2.id = "btn-fullscreen", a2.type = "button", a2.className = "pan-btn pan-btn--fullscreen", a2.innerHTML = iv, a2.hidden = true;
7224
+ let o2 = null;
7225
+ r2.pip && (o2 = document.createElement("button"), o2.id = "btn-pip", o2.type = "button", o2.className = "pan-btn pan-btn--pip", o2.innerHTML = ov, o2.hidden = true);
7226
+ let s2 = ["param-controls", "aspect-filter", "controls-panel", "mode-badge"];
7145
7227
  function c2() {
7146
7228
  if (document.getElementById("fs-bottom-bar") || !n2.length) return;
7147
7229
  let e6 = document.getElementById("app");
@@ -7174,59 +7256,59 @@ function q_(e5, t2, n2 = []) {
7174
7256
  }
7175
7257
  e6.remove();
7176
7258
  }
7177
- function u2(e6) {
7178
- let t3 = e6 === "fullscreen", n3 = document.body.classList.contains("is-fullscreen");
7179
- 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();
7259
+ let u2 = "inline";
7260
+ function d2(t3) {
7261
+ let n3 = u2 === "fullscreen", r3 = t3 === "fullscreen";
7262
+ 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 ? av : iv;
7263
+ let i3 = r3 ? "Exit fullscreen" : "Enter fullscreen";
7264
+ if (a2.setAttribute("aria-label", i3), a2.title = r3 ? "Exit fullscreen (Esc)" : i3, o2) {
7265
+ let e6 = t3 === "pip";
7266
+ o2.innerHTML = e6 ? sv : ov;
7267
+ let n4 = e6 ? "Return to the conversation" : "Pop out (picture-in-picture)";
7268
+ o2.setAttribute("aria-label", n4), o2.title = n4;
7269
+ }
7270
+ r3 && !n3 && (c2(), lv(e5)), !r3 && n3 && l2();
7180
7271
  }
7181
- a2.addEventListener("click", async () => {
7182
- try {
7183
- var t3, n3, r3, i3;
7184
- let a3 = (t3 = e5.getHostContext) == null ? void 0 : t3.call(e5), 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";
7185
- if (s3.length > 0 && !s3.includes(c3)) {
7186
- console.warn('[AppChrome] Display mode "'.concat(c3, '" not available. Available: ').concat(s3.join(", ")));
7187
- return;
7188
- }
7189
- let l3 = await e5.requestDisplayMode({ mode: c3 });
7190
- u2((i3 = l3 == null ? void 0 : l3.mode) == null ? "inline" : i3);
7272
+ function f2() {
7273
+ var n3, r3;
7274
+ let i3 = rv(e5);
7275
+ a2.hidden = !i3.includes("fullscreen"), o2 && (o2.hidden = !i3.includes("pip")), (!a2.hidden || o2 && !o2.hidden) && (t2.hidden = false);
7276
+ let s3 = (n3 = (r3 = nv(e5)) == null ? void 0 : r3.displayMode) == null ? "inline" : n3;
7277
+ s3 !== u2 && d2(s3);
7278
+ }
7279
+ async function p2(t3) {
7280
+ if (!(t3 !== "inline" && !rv(e5).includes(t3))) try {
7281
+ var n3;
7282
+ let r3 = await e5.requestDisplayMode({ mode: t3 });
7283
+ d2((n3 = r3 == null ? void 0 : r3.mode) == null ? u2 : n3);
7191
7284
  } catch (e6) {
7192
7285
  console.warn("[AppChrome] requestDisplayMode failed:", e6);
7193
7286
  }
7194
- }), document.addEventListener("keydown", async (t3) => {
7195
- if (t3.key === "Escape" && document.body.classList.contains("is-fullscreen")) {
7196
- t3.preventDefault();
7197
- try {
7198
- var n3;
7199
- let t4 = await e5.requestDisplayMode({ mode: "inline" });
7200
- u2((n3 = t4 == null ? void 0 : t4.mode) == null ? "inline" : n3);
7201
- } catch (e6) {
7202
- console.warn("[AppChrome] Escape fullscreen failed:", e6);
7203
- }
7204
- }
7205
- }), (r2 = e5.addEventListener) == null || r2.call(e5, "hostcontextchanged", (e6) => {
7206
- var t3;
7207
- u2((t3 = e6 == null ? void 0 : e6.displayMode) == null ? "inline" : t3);
7208
- });
7209
- let d2 = (i2 = e5.getHostContext) == null ? void 0 : i2.call(e5);
7210
- d2 != null && d2.displayMode && u2(d2.displayMode), t2.insertBefore(a2, t2.firstChild), t2.removeAttribute("hidden");
7211
- function f2() {
7212
- let e6 = document.getElementById("fs-hint-banner");
7213
- e6 && e6.remove();
7214
- let t3 = document.createElement("div");
7215
- 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(() => {
7216
- t3.style.opacity = "1";
7217
- }), setTimeout(() => {
7218
- t3.style.opacity = "0", setTimeout(() => t3.remove(), 350);
7219
- }, 4e3);
7220
7287
  }
7288
+ a2.addEventListener("click", () => {
7289
+ p2(u2 === "fullscreen" ? "inline" : "fullscreen");
7290
+ }), o2 == null || o2.addEventListener("click", () => {
7291
+ p2(u2 === "pip" ? "inline" : "pip");
7292
+ }), document.addEventListener("keydown", (e6) => {
7293
+ e6.key !== "Escape" || u2 !== "fullscreen" || (e6.preventDefault(), p2("inline"));
7294
+ }), (i2 = e5.addEventListener) == null || i2.call(e5, "hostcontextchanged", f2), o2 && t2.insertBefore(o2, t2.firstChild), t2.insertBefore(a2, t2.firstChild), d2("inline"), f2();
7295
+ }
7296
+ function lv(e5) {
7297
+ var t2, n2;
7298
+ (t2 = document.getElementById("fs-hint-banner")) == null || t2.remove();
7299
+ let r2 = (n2 = nv(e5)) == null ? void 0 : n2.deviceCapabilities, i2 = !!(r2 != null && r2.touch) && (r2 == null ? void 0 : r2.hover) === false, a2 = document.createElement("div");
7300
+ 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(() => {
7301
+ a2.classList.remove("visible"), setTimeout(() => a2.remove(), 350);
7302
+ }, 4e3);
7221
7303
  }
7222
- function J_(e5, t2) {
7304
+ function uv(e5, t2) {
7223
7305
  e5.ontoolcancelled = (e6) => {
7224
7306
  var n2, r2, i2;
7225
7307
  let a2 = (n2 = e6.reason) == null ? "Tool call was cancelled" : n2;
7226
- 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), Y_(a2);
7308
+ 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), dv(a2);
7227
7309
  };
7228
7310
  }
7229
- function Y_(e5) {
7311
+ function dv(e5) {
7230
7312
  var t2;
7231
7313
  (t2 = document.getElementById("cancel-toast")) == null || t2.remove();
7232
7314
  let n2 = document.createElement("div");
@@ -7234,141 +7316,155 @@ function Y_(e5) {
7234
7316
  n2.classList.remove("visible"), setTimeout(() => n2.remove(), 300);
7235
7317
  }, 3e3);
7236
7318
  }
7237
- function X_(e5) {
7319
+ function fv(e5) {
7238
7320
  var t2;
7239
- function n2(e6) {
7240
- if (!e6) return;
7241
- let t3 = e6.containerDimensions;
7242
- if (!t3) return;
7243
- let n3 = document.documentElement;
7244
- 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"));
7245
- }
7246
- n2((t2 = e5.getHostContext) == null ? void 0 : t2.call(e5)), e5.addEventListener("hostcontextchanged", (e6) => {
7247
- n2(e6);
7248
- });
7249
- }
7250
- var Z_ = document.getElementById("loading-state"), Q_ = document.getElementById("bodygraph-container"), $_ = document.getElementById("info-panel"), ev = document.getElementById("controls-panel"), tv = document.getElementById("chart-status"), nv = document.getElementById("param-controls-container"), Z = new t_({ name: "Human Design Bodygraph Explorer", version: "1.0.0" }), Q = null, rv = null, iv = false, av = "dark", ov = false, $ = "graph", sv = false, cv = false, lv = false, uv = "quarter,zodiac,planets";
7251
- function dv(e5) {
7252
- return e5 === "mandala" && cv;
7253
- }
7254
- function fv() {
7321
+ let n2 = document.documentElement, r2 = (e6, t3) => {
7322
+ typeof t3 == "number" && Number.isFinite(t3) && t3 > 0 ? n2.style.setProperty(e6, "".concat(t3, "px")) : n2.style.removeProperty(e6);
7323
+ }, i2 = (e6, t3) => {
7324
+ t3 === void 0 ? n2.removeAttribute(e6) : n2.setAttribute(e6, t3 ? "true" : "false");
7325
+ };
7326
+ function a2() {
7327
+ var t3, a3, o2;
7328
+ let s2 = nv(e5);
7329
+ if (!s2) return;
7330
+ let c2 = (t3 = s2.containerDimensions) == null ? {} : t3;
7331
+ r2("--host-width", c2.width), r2("--host-max-width", c2.maxWidth), r2("--host-height", c2.height), r2("--host-max-height", c2.maxHeight);
7332
+ let l2 = (a3 = s2.safeAreaInsets) == null ? {} : a3;
7333
+ for (let e6 of ["top", "right", "bottom", "left"]) {
7334
+ let t4 = l2[e6];
7335
+ n2.style.setProperty("--safe-".concat(e6), typeof t4 == "number" && t4 > 0 ? "".concat(t4, "px") : "0px");
7336
+ }
7337
+ let u2 = l2.bottom;
7338
+ n2.toggleAttribute("data-safe-bottom", typeof u2 == "number" && u2 > 0), typeof s2.platform == "string" && n2.setAttribute("data-platform", s2.platform);
7339
+ let d2 = s2.deviceCapabilities;
7340
+ i2("data-touch", d2 == null ? void 0 : d2.touch), i2("data-hover", d2 == null ? void 0 : d2.hover);
7341
+ let f2 = s2.styles;
7342
+ f2 != null && f2.variables && t_(f2.variables, n2), !(f2 == null || (o2 = f2.css) == null) && o2.fonts && n_(f2.css.fonts);
7343
+ }
7344
+ a2(), (t2 = e5.addEventListener) == null || t2.call(e5, "hostcontextchanged", a2);
7345
+ }
7346
+ var pv = document.getElementById("loading-state"), mv = document.getElementById("bodygraph-container"), hv = document.getElementById("info-panel"), gv = document.getElementById("controls-panel"), _v = document.getElementById("chart-status"), vv = document.getElementById("param-controls-container"), Z = new r_({ name: "Human Design Bodygraph Explorer", version: "1.0.0" }, { availableDisplayModes: tv }), Q = null, yv = null, bv = false, xv = "dark", Sv = false, $ = "graph", Cv = false, wv = false, Tv = false, Ev = "quarter,zodiac,planets";
7347
+ function Dv(e5) {
7348
+ return e5 === "mandala" && wv;
7349
+ }
7350
+ function Ov() {
7255
7351
  let e5 = Q == null ? void 0 : Q._birth_params;
7256
7352
  return typeof (e5 == null ? void 0 : e5.latitude) == "number" && typeof (e5 == null ? void 0 : e5.longitude) == "number";
7257
7353
  }
7258
- function pv() {
7354
+ function kv() {
7259
7355
  let e5 = Q == null ? void 0 : Q._render_token;
7260
7356
  return e5 ? { render_token: e5 } : {};
7261
7357
  }
7262
- function mv(e5 = $, t2 = dv(e5)) {
7263
- return e5 === "mandala" ? { layout: e5, rings: t2 ? "".concat(uv, ",houses") : uv } : { layout: e5 };
7358
+ function Av(e5 = $, t2 = Dv(e5)) {
7359
+ return e5 === "mandala" ? { layout: e5, rings: t2 ? "".concat(Ev, ",houses") : Ev } : { layout: e5 };
7264
7360
  }
7265
- var hv = {};
7266
- function gv(e5, t2, n2) {
7361
+ var jv = {};
7362
+ function Mv(e5, t2, n2) {
7267
7363
  return "".concat(e5, ":").concat(t2, ":").concat(n2);
7268
7364
  }
7269
- function _v() {
7270
- for (let e5 of Object.keys(hv)) delete hv[e5];
7365
+ function Nv() {
7366
+ for (let e5 of Object.keys(jv)) delete jv[e5];
7271
7367
  }
7272
- function vv() {
7273
- return W_();
7368
+ function Pv() {
7369
+ return Q_();
7274
7370
  }
7275
- G_((e5) => void yv(e5));
7276
- async function yv(e5) {
7277
- if (e5 === av || ov || !Q) return;
7278
- let t2 = hv[gv($, e5, dv($))];
7371
+ $_((e5) => void Fv(e5));
7372
+ async function Fv(e5) {
7373
+ if (e5 === xv || Sv || !Q) return;
7374
+ let t2 = jv[Mv($, e5, Dv($))];
7279
7375
  if (t2) {
7280
- av = e5, Mv(t2);
7376
+ xv = e5, Jv(t2);
7281
7377
  return;
7282
7378
  }
7283
- ov = true;
7379
+ Sv = true;
7284
7380
  let n2 = Q._refetch;
7285
7381
  try {
7286
7382
  let t3;
7287
- if (n2) t3 = await Z.callServerTool({ name: n2.tool, arguments: { ...n2.args, theme: e5, ...pv() } });
7383
+ if (n2) t3 = await Z.callServerTool({ name: n2.tool, arguments: { ...n2.args, theme: e5, ...kv() } });
7288
7384
  else {
7289
7385
  var r2, i2, a2, o2, s2;
7290
7386
  let n3 = (r2 = Q._birth_params) == null ? { datetime: "" } : r2;
7291
- t3 = await Z.callServerTool({ name: "bodygraph_recalculate", arguments: { datetime: n3.datetime, latitude: (i2 = n3.latitude) == null ? void 0 : i2, longitude: (a2 = n3.longitude) == null ? void 0 : a2, timezone: (o2 = n3.timezone) == null ? void 0 : o2, location: (s2 = n3.location) == null ? void 0 : s2, theme: e5, ...mv(), ...pv() } });
7387
+ t3 = await Z.callServerTool({ name: "bodygraph_recalculate", arguments: { datetime: n3.datetime, latitude: (i2 = n3.latitude) == null ? void 0 : i2, longitude: (a2 = n3.longitude) == null ? void 0 : a2, timezone: (o2 = n3.timezone) == null ? void 0 : o2, location: (s2 = n3.location) == null ? void 0 : s2, theme: e5, ...Av(), ...kv() } });
7292
7388
  }
7293
- let c2 = Rv(z_(t3));
7294
- c2 && (c2.type || c2.centers) ? (av = e5, hv[gv($, e5, dv($))] = c2, Mv(c2)) : (console.error("[Bodygraph] Theme re-fetch returned no usable payload"), wv("Couldn't switch theme \u2014 showing previous colors"));
7389
+ let c2 = ey(q_(t3));
7390
+ c2 && (c2.type || c2.centers) ? (xv = e5, jv[Mv($, e5, Dv($))] = c2, Jv(c2)) : (console.error("[Bodygraph] Theme re-fetch returned no usable payload"), Bv("Couldn't switch theme \u2014 showing previous colors"));
7295
7391
  } catch (e6) {
7296
- console.error("[Bodygraph] Theme re-fetch failed:", e6), wv("Couldn't switch theme \u2014 showing previous colors");
7392
+ console.error("[Bodygraph] Theme re-fetch failed:", e6), Bv("Couldn't switch theme \u2014 showing previous colors");
7297
7393
  } finally {
7298
- ov = false;
7394
+ Sv = false;
7299
7395
  }
7300
7396
  }
7301
- async function bv() {
7302
- if (!Q || sv || ov) return;
7303
- let e5 = $ === "graph" ? "mandala" : "graph", t2 = hv[gv(e5, av, dv(e5))];
7397
+ async function Iv() {
7398
+ if (!Q || Cv || Sv) return;
7399
+ let e5 = $ === "graph" ? "mandala" : "graph", t2 = jv[Mv(e5, xv, Dv(e5))];
7304
7400
  if (t2) {
7305
- $ = e5, Mv(t2);
7401
+ $ = e5, Jv(t2);
7306
7402
  return;
7307
7403
  }
7308
- sv = true;
7404
+ Cv = true;
7309
7405
  let n2 = document.getElementById("hd-layout-btn");
7310
7406
  n2 && (n2.disabled = true);
7311
7407
  try {
7312
7408
  let t3 = Q._refetch, n3;
7313
- if (t3 != null && t3.tool) n3 = { name: t3.tool, arguments: { ...t3.args, theme: av, layout: e5, ...pv() } };
7409
+ if (t3 != null && t3.tool) n3 = { name: t3.tool, arguments: { ...t3.args, theme: xv, layout: e5, ...kv() } };
7314
7410
  else {
7315
7411
  var r2, i2, a2, o2, s2;
7316
7412
  let t4 = (r2 = Q._birth_params) == null ? { datetime: "" } : r2;
7317
- n3 = { name: "bodygraph_recalculate", arguments: { datetime: t4.datetime, latitude: (i2 = t4.latitude) == null ? void 0 : i2, longitude: (a2 = t4.longitude) == null ? void 0 : a2, timezone: (o2 = t4.timezone) == null ? void 0 : o2, location: (s2 = t4.location) == null ? void 0 : s2, theme: av, ...mv(e5), ...pv() } };
7413
+ n3 = { name: "bodygraph_recalculate", arguments: { datetime: t4.datetime, latitude: (i2 = t4.latitude) == null ? void 0 : i2, longitude: (a2 = t4.longitude) == null ? void 0 : a2, timezone: (o2 = t4.timezone) == null ? void 0 : o2, location: (s2 = t4.location) == null ? void 0 : s2, theme: xv, ...Av(e5), ...kv() } };
7318
7414
  }
7319
- let c2 = Rv(z_(await Z.callServerTool(n3)));
7320
- c2 && (c2.type || c2.centers) ? ($ = e5, hv[gv($, av, dv($))] = c2, Mv(c2)) : (console.error("[Bodygraph] Layout toggle returned no usable payload"), wv("Couldn't switch layout \u2014 try again or check credits"));
7415
+ let c2 = ey(q_(await Z.callServerTool(n3)));
7416
+ c2 && (c2.type || c2.centers) ? ($ = e5, jv[Mv($, xv, Dv($))] = c2, Jv(c2)) : (console.error("[Bodygraph] Layout toggle returned no usable payload"), Bv("Couldn't switch layout \u2014 try again or check credits"));
7321
7417
  } catch (e6) {
7322
- console.error("[Bodygraph] Layout toggle failed:", e6), wv("Couldn't switch layout \u2014 try again or check credits");
7418
+ console.error("[Bodygraph] Layout toggle failed:", e6), Bv("Couldn't switch layout \u2014 try again or check credits");
7323
7419
  } finally {
7324
- sv = false;
7420
+ Cv = false;
7325
7421
  let e6 = document.getElementById("hd-layout-btn");
7326
7422
  e6 && (e6.disabled = false);
7327
7423
  }
7328
7424
  }
7329
- function xv() {
7330
- cv && !fv() && (cv = false), rv == null || rv.syncExtraToggle({ checked: cv, available: $ === "mandala" && fv(), disabledTitle: $ === "mandala" ? "Add a birth location to draw houses" : "Switch to Mandala view to add house rings" });
7425
+ function Lv() {
7426
+ wv && !Ov() && (wv = false), yv == null || yv.syncExtraToggle({ checked: wv, available: $ === "mandala" && Ov(), disabledTitle: $ === "mandala" ? "Add a birth location to draw houses" : "Switch to Mandala view to add house rings" });
7331
7427
  }
7332
- async function Sv(e5) {
7333
- if (!Q || $ !== "mandala" || lv) {
7334
- xv();
7428
+ async function Rv(e5) {
7429
+ if (!Q || $ !== "mandala" || Tv) {
7430
+ Lv();
7335
7431
  return;
7336
7432
  }
7337
- let t2 = hv[gv($, av, e5)];
7433
+ let t2 = jv[Mv($, xv, e5)];
7338
7434
  if (t2) {
7339
- cv = e5, Mv(t2);
7435
+ wv = e5, Jv(t2);
7340
7436
  return;
7341
7437
  }
7342
- lv = true, rv == null || rv.syncExtraToggle({ available: false });
7438
+ Tv = true, yv == null || yv.syncExtraToggle({ available: false });
7343
7439
  try {
7344
7440
  var n2, r2, i2, a2, o2;
7345
- let t3 = (n2 = Q._birth_params) == null ? { datetime: "" } : n2, s2 = Rv(z_(await Z.callServerTool({ name: "bodygraph_recalculate", arguments: { datetime: t3.datetime, latitude: (r2 = t3.latitude) == null ? void 0 : r2, longitude: (i2 = t3.longitude) == null ? void 0 : i2, timezone: (a2 = t3.timezone) == null ? void 0 : a2, location: (o2 = t3.location) == null ? void 0 : o2, theme: av, ...mv($, e5), ...pv() } })));
7346
- s2 && (s2.type || s2.centers) ? (cv = e5, hv[gv($, av, e5)] = s2, Mv(s2)) : (console.error("[Bodygraph] House ring toggle returned no usable payload"), wv("Couldn't update house rings \u2014 try again or check credits"));
7441
+ let t3 = (n2 = Q._birth_params) == null ? { datetime: "" } : n2, s2 = ey(q_(await Z.callServerTool({ name: "bodygraph_recalculate", arguments: { datetime: t3.datetime, latitude: (r2 = t3.latitude) == null ? void 0 : r2, longitude: (i2 = t3.longitude) == null ? void 0 : i2, timezone: (a2 = t3.timezone) == null ? void 0 : a2, location: (o2 = t3.location) == null ? void 0 : o2, theme: xv, ...Av($, e5), ...kv() } })));
7442
+ s2 && (s2.type || s2.centers) ? (wv = e5, jv[Mv($, xv, e5)] = s2, Jv(s2)) : (console.error("[Bodygraph] House ring toggle returned no usable payload"), Bv("Couldn't update house rings \u2014 try again or check credits"));
7347
7443
  } catch (e6) {
7348
- console.error("[Bodygraph] House ring toggle failed:", e6), wv("Couldn't update house rings \u2014 try again or check credits");
7444
+ console.error("[Bodygraph] House ring toggle failed:", e6), Bv("Couldn't update house rings \u2014 try again or check credits");
7349
7445
  } finally {
7350
- lv = false, xv();
7446
+ Tv = false, Lv();
7351
7447
  }
7352
7448
  }
7353
- async function Cv(e5) {
7354
- e5 = A_(e5, Q == null ? void 0 : Q._birth_params, "Human Design chart");
7449
+ async function zv(e5) {
7450
+ e5 = R_(e5, Q == null ? void 0 : Q._birth_params, "Human Design chart");
7355
7451
  try {
7356
7452
  (await Z.sendMessage({ role: "user", content: [{ type: "text", text: e5 }] })).isError && console.error("[Bodygraph] Host rejected sendMessage");
7357
7453
  } catch (e6) {
7358
7454
  console.error("[Bodygraph] sendMessage failed:", e6);
7359
7455
  }
7360
7456
  }
7361
- function wv(e5) {
7362
- if (tv) {
7457
+ function Bv(e5) {
7458
+ if (_v) {
7363
7459
  if (!e5) {
7364
- tv.classList.remove("visible");
7460
+ _v.classList.remove("visible");
7365
7461
  return;
7366
7462
  }
7367
- tv.textContent = "\xB7 ".concat(e5), tv.classList.add("visible");
7463
+ _v.textContent = "\xB7 ".concat(e5), _v.classList.add("visible");
7368
7464
  }
7369
7465
  }
7370
- r_(wv);
7371
- async function Tv(e5) {
7466
+ a_(Bv);
7467
+ async function Vv(e5) {
7372
7468
  var t2, n2, r2, i2;
7373
7469
  if (!Q) return;
7374
7470
  let a2 = (t2 = Q.type) == null ? "Unknown" : t2, o2 = (n2 = Q.profile) == null ? "" : n2, s2 = (r2 = Q.authority) == null ? "" : r2, c2 = (i2 = Q.incarnation_cross) == null ? "" : i2, l2 = "";
@@ -7405,53 +7501,53 @@ async function Tv(e5) {
7405
7501
  }
7406
7502
  return;
7407
7503
  }
7408
- l2 && await Cv(l2);
7504
+ l2 && await zv(l2);
7409
7505
  }
7410
- async function Ev() {
7506
+ async function Hv() {
7411
7507
  var e5, t2, n2, r2, i2, a2, o2;
7412
7508
  if (!Q) return;
7413
7509
  let s2 = Q, c2 = (e5 = s2.type) == null ? "Unknown" : e5, l2 = (t2 = s2.profile) == null ? "" : t2, u2 = (n2 = s2.authority) == null ? "" : n2, d2 = (r2 = s2.incarnation_cross) == null ? "" : r2, f2 = (i2 = s2.definition) == null ? "" : i2, p2 = ((a2 = s2.centers) == null ? [] : a2).filter((e6) => e6.defined).map((e6) => e6.name).join(", ") || "none", m2 = ((o2 = s2.active_channels) == null ? [] : o2).join(", ") || "none";
7414
- await Cv("Please give me a complete Human Design reading for this chart.\n\nType: ".concat(c2, "\n") + (l2 ? "Profile: ".concat(l2, "\n") : "") + (u2 ? "Authority: ".concat(u2, "\n") : "") + (f2 ? "Definition: ".concat(f2, "\n") : "") + (d2 ? "Incarnation Cross: ".concat(d2, "\n") : "") + "Defined Centers: ".concat(p2, "\nDefined Channels: ").concat(m2, "\n\nCover: (1) Life theme and purpose of this Type, (2) Strategy and how it works practically, (3) Authority and how to make aligned decisions, (4) The defined channels as core personality traits, (5) Key shadows and conditioning to watch for, (6) A practical summary of how to live this design."));
7510
+ await zv("Please give me a complete Human Design reading for this chart.\n\nType: ".concat(c2, "\n") + (l2 ? "Profile: ".concat(l2, "\n") : "") + (u2 ? "Authority: ".concat(u2, "\n") : "") + (f2 ? "Definition: ".concat(f2, "\n") : "") + (d2 ? "Incarnation Cross: ".concat(d2, "\n") : "") + "Defined Centers: ".concat(p2, "\nDefined Channels: ").concat(m2, "\n\nCover: (1) Life theme and purpose of this Type, (2) Strategy and how it works practically, (3) Authority and how to make aligned decisions, (4) The defined channels as core personality traits, (5) Key shadows and conditioning to watch for, (6) A practical summary of how to live this design."));
7415
7511
  }
7416
- async function Dv() {
7512
+ async function Uv() {
7417
7513
  var e5, t2, n2, r2, i2;
7418
7514
  if (!Q) return;
7419
7515
  let a2 = Q, o2 = (e5 = a2.type) == null ? "Unknown" : e5, s2 = (t2 = a2.profile) == null ? "" : t2, c2 = (n2 = a2.authority) == null ? "" : n2, l2 = [...(r2 = a2.personality_gates) == null ? [] : r2, ...(i2 = a2.design_gates) == null ? [] : i2].slice(0, 6).map((e6) => {
7420
7516
  var t3;
7421
7517
  return typeof e6 == "number" ? "Gate ".concat(e6) : "Gate ".concat((t3 = e6.gate) == null ? e6 : t3);
7422
7518
  }).join(", ") || "none";
7423
- await Cv("I'm exploring a Human Design Bodygraph for a ".concat(o2) + (s2 ? " with Profile ".concat(s2) : "") + (c2 ? " and ".concat(c2, " authority") : "") + ". Active gates include: ".concat(l2, ".\n\nBased on this design, please suggest 3-4 specific, insightful questions I could ask to understand this chart more deeply \u2014 such as how the type and authority work in daily life, what specific gates or channels mean, or how to live in alignment with this design. Present each as a tappable question I can ask you."));
7519
+ await zv("I'm exploring a Human Design Bodygraph for a ".concat(o2) + (s2 ? " with Profile ".concat(s2) : "") + (c2 ? " and ".concat(c2, " authority") : "") + ". Active gates include: ".concat(l2, ".\n\nBased on this design, please suggest 3-4 specific, insightful questions I could ask to understand this chart more deeply \u2014 such as how the type and authority work in daily life, what specific gates or channels mean, or how to live in alignment with this design. Present each as a tappable question I can ask you."));
7424
7520
  }
7425
- async function Ov(e5) {
7426
- iv && setTimeout(async () => {
7521
+ async function Wv(e5) {
7522
+ bv && setTimeout(async () => {
7427
7523
  try {
7428
7524
  var t2, n2, r2;
7429
7525
  let i2 = "User selected ".concat(e5.type, ": ").concat(JSON.stringify(e5.data, null, 2), "\nHD Type: ").concat((t2 = Q == null ? void 0 : Q.type) == null ? null : t2, "\nProfile: ").concat((n2 = Q == null ? void 0 : Q.profile) == null ? null : n2, "\nAuthority: ").concat((r2 = Q == null ? void 0 : Q.authority) == null ? null : r2);
7430
7526
  await Z.updateModelContext({ content: [{ type: "text", text: i2 }] });
7431
7527
  } catch (e6) {
7432
- iv = false;
7528
+ bv = false;
7433
7529
  }
7434
7530
  }, 0);
7435
7531
  }
7436
- async function kv(e5, t2, n2) {
7437
- wv("".concat(t2 ? "\u25C9" : "\u25CB", " ").concat(e5, " Center (").concat(t2 ? "defined" : "undefined", ")")), Ov({ type: "center", data: { center_name: e5, defined: t2, active_gates: n2 } });
7532
+ async function Gv(e5, t2, n2) {
7533
+ Bv("".concat(t2 ? "\u25C9" : "\u25CB", " ").concat(e5, " Center (").concat(t2 ? "defined" : "undefined", ")")), Wv({ type: "center", data: { center_name: e5, defined: t2, active_gates: n2 } });
7438
7534
  }
7439
- async function Av(e5, t2, n2) {
7440
- wv("Gate ".concat(e5, " \xB7 ").concat(n2, " \xB7 ").concat(t2 === true ? "Conscious" : t2 === false ? "Unconscious" : "Both")), Ov({ type: "gate", data: { gate: e5, conscious: t2, center: n2 } });
7535
+ async function Kv(e5, t2, n2) {
7536
+ Bv("Gate ".concat(e5, " \xB7 ").concat(n2, " \xB7 ").concat(t2 === true ? "Conscious" : t2 === false ? "Unconscious" : "Both")), Wv({ type: "gate", data: { gate: e5, conscious: t2, center: n2 } });
7441
7537
  }
7442
- async function jv(e5, t2, n2, r2, i2, a2) {
7443
- wv(r2 && i2 ? "Channel ".concat(e5, " \xB7 ").concat(r2, "\u2013").concat(i2) : "Channel ".concat(e5)), Ov({ type: "channel", data: { channel: e5, gate1: t2, gate2: n2, center1: r2, center2: i2, color_type: a2 } });
7538
+ async function qv(e5, t2, n2, r2, i2, a2) {
7539
+ Bv(r2 && i2 ? "Channel ".concat(e5, " \xB7 ").concat(r2, "\u2013").concat(i2) : "Channel ".concat(e5)), Wv({ type: "channel", data: { channel: e5, gate1: t2, gate2: n2, center1: r2, center2: i2, color_type: a2 } });
7444
7540
  }
7445
- function Mv(e5) {
7541
+ function Jv(e5) {
7446
7542
  var t2, n2, r2, i2, a2, o2, s2;
7447
- Q = e5, Z_.setAttribute("hidden", ""), Q_.removeAttribute("hidden"), document.body.classList.toggle("layout-mandala", $ === "mandala"), xv();
7543
+ Q = e5, pv.setAttribute("hidden", ""), mv.removeAttribute("hidden"), document.body.classList.toggle("layout-mandala", $ === "mandala"), Lv();
7448
7544
  let c2 = e5._svg;
7449
7545
  if (!c2) {
7450
- Fv("Bodygraph render unavailable \u2014 the server did not return an SVG.", Iv);
7546
+ Zv("Bodygraph render unavailable \u2014 the server did not return an SVG.", Qv);
7451
7547
  return;
7452
7548
  }
7453
- let l2 = C_(Q_, c2, e5, { onCenterClick: kv, onGateClick: Av, onChannelClick: jv, onAskClaude: Tv });
7454
- l2 && new URLSearchParams(window.location.search).has("debugHighlight") && Lv(l2);
7549
+ let l2 = T_(mv, c2, e5, { onCenterClick: Gv, onGateClick: Kv, onChannelClick: qv, onAskClaude: Vv });
7550
+ l2 && new URLSearchParams(window.location.search).has("debugHighlight") && $v(l2);
7455
7551
  let u2 = document.getElementById("hd-action-bar");
7456
7552
  if (!u2) {
7457
7553
  u2 = document.createElement("div"), u2.id = "hd-action-bar", u2.className = "hd-action-bar";
@@ -7459,65 +7555,65 @@ function Mv(e5) {
7459
7555
  if (e6) e6.appendChild(u2);
7460
7556
  else {
7461
7557
  var d2;
7462
- (d2 = Q_.parentElement) == null || d2.insertBefore(u2, Q_);
7558
+ (d2 = mv.parentElement) == null || d2.insertBefore(u2, mv);
7463
7559
  }
7464
7560
  }
7465
- let f2 = $ === "graph" ? "mandala" : "graph", p2 = !!hv[gv(f2, av, dv(f2))];
7466
- u2.innerHTML = '\n <button class="action-btn action-btn--primary" id="hd-interpret-btn">\u2728 Interpret this chart</button>\n <button class="action-btn" id="hd-questions-btn">\u{1F52E} What should I ask?</button>\n '.concat('<button class="action-btn" id="hd-layout-btn" title="'.concat(p2 ? "Already rendered this session \u2014 free to switch" : "Re-renders on the server (~2 credits)", '">').concat($ === "mandala" ? "\u2726 Graph view" : "\u2726 Mandala view").concat(p2 ? "" : " (~2 credits)", "</button>"), "\n "), (t2 = u2.querySelector("#hd-interpret-btn")) == null || t2.addEventListener("click", () => void Ev()), (n2 = u2.querySelector("#hd-questions-btn")) == null || n2.addEventListener("click", () => void Dv()), (r2 = u2.querySelector("#hd-layout-btn")) == null || r2.addEventListener("click", () => void bv());
7561
+ let f2 = $ === "graph" ? "mandala" : "graph", p2 = !!jv[Mv(f2, xv, Dv(f2))];
7562
+ u2.innerHTML = '\n <button class="action-btn action-btn--primary" id="hd-interpret-btn">\u2728 Interpret this chart</button>\n <button class="action-btn" id="hd-questions-btn">\u{1F52E} What should I ask?</button>\n '.concat('<button class="action-btn" id="hd-layout-btn" title="'.concat(p2 ? "Already rendered this session \u2014 free to switch" : "Re-renders on the server (~2 credits)", '">').concat($ === "mandala" ? "\u2726 Graph view" : "\u2726 Mandala view").concat(p2 ? "" : " (~2 credits)", "</button>"), "\n "), (t2 = u2.querySelector("#hd-interpret-btn")) == null || t2.addEventListener("click", () => void Hv()), (n2 = u2.querySelector("#hd-questions-btn")) == null || n2.addEventListener("click", () => void Uv()), (r2 = u2.querySelector("#hd-layout-btn")) == null || r2.addEventListener("click", () => void Iv());
7467
7563
  let m2 = ((i2 = (a2 = e5.personality_gates) == null ? void 0 : a2.length) == null ? 0 : i2) > 0 || ((o2 = (s2 = e5.design_gates) == null ? void 0 : s2.length) == null ? 0 : o2) > 0, h2 = document.querySelector(".channel-legend");
7468
7564
  if (m2 && !h2) {
7469
7565
  let e6 = document.createElement("div");
7470
- e6.className = "channel-legend", e6.innerHTML = '\n <span class="legend-item">\n <span class="legend-swatch" style="background:#a5b4fc"></span>Conscious\n </span>\n <span class="legend-item">\n <span class="legend-swatch" style="background:#f87171"></span>Unconscious\n </span>\n <span class="legend-item">\n <span class="legend-swatch" style="background:#f59e0b"></span>Both\n </span>\n ', $_.prepend(e6);
7566
+ e6.className = "channel-legend", e6.innerHTML = '\n <span class="legend-item">\n <span class="legend-swatch" style="background:#a5b4fc"></span>Conscious\n </span>\n <span class="legend-item">\n <span class="legend-swatch" style="background:#f87171"></span>Unconscious\n </span>\n <span class="legend-item">\n <span class="legend-swatch" style="background:#f59e0b"></span>Both\n </span>\n ', hv.prepend(e6);
7471
7567
  }
7472
7568
  if (e5._connectionSubjects) {
7473
- var g2, _2, ee2, te2, v2, y2, b2, ne2, re2, ie2, x2, ae2;
7569
+ var g2, _2, ee2, te2, v2, y2, b2, ne2, re2, ie2, ae2, x2;
7474
7570
  let { a: t3, b: n3 } = e5._connectionSubjects;
7475
- $_.innerHTML = y_("Person A", { type: (g2 = t3.type) == null ? "Unknown" : g2, profile: (_2 = t3.profile) == null ? "" : _2, authority: (ee2 = t3.authority) == null ? "" : ee2, definition: (te2 = t3.definition) == null ? "" : te2, cross: (v2 = t3.incarnation_cross) == null ? "" : v2, definedCenters: (y2 = t3.defined_centers) == null ? [] : y2 }, "Person B", { type: (b2 = n3.type) == null ? "Unknown" : b2, profile: (ne2 = n3.profile) == null ? "" : ne2, authority: (re2 = n3.authority) == null ? "" : re2, definition: (ie2 = n3.definition) == null ? "" : ie2, cross: (x2 = n3.incarnation_cross) == null ? "" : x2, definedCenters: (ae2 = n3.defined_centers) == null ? [] : ae2 });
7571
+ hv.innerHTML = x_("Person A", { type: (g2 = t3.type) == null ? "Unknown" : g2, profile: (_2 = t3.profile) == null ? "" : _2, authority: (ee2 = t3.authority) == null ? "" : ee2, definition: (te2 = t3.definition) == null ? "" : te2, cross: (v2 = t3.incarnation_cross) == null ? "" : v2, definedCenters: (y2 = t3.defined_centers) == null ? [] : y2 }, "Person B", { type: (b2 = n3.type) == null ? "Unknown" : b2, profile: (ne2 = n3.profile) == null ? "" : ne2, authority: (re2 = n3.authority) == null ? "" : re2, definition: (ie2 = n3.definition) == null ? "" : ie2, cross: (ae2 = n3.incarnation_cross) == null ? "" : ae2, definedCenters: (x2 = n3.defined_centers) == null ? [] : x2 });
7476
7572
  } else {
7477
7573
  var S2, oe2, se2, ce2, le2, ue2;
7478
7574
  let t3 = ((S2 = e5.centers) == null ? [] : S2).filter((e6) => e6.defined).map((e6) => e6.name);
7479
- $_.innerHTML = v_((oe2 = e5.type) == null ? "Unknown" : oe2, (se2 = e5.profile) == null ? "" : se2, (ce2 = e5.authority) == null ? "" : ce2, (le2 = e5.definition) == null ? "" : le2, (ue2 = e5.incarnation_cross) == null ? "" : ue2, t3);
7575
+ hv.innerHTML = b_((oe2 = e5.type) == null ? "Unknown" : oe2, (se2 = e5.profile) == null ? "" : se2, (ce2 = e5.authority) == null ? "" : ce2, (le2 = e5.definition) == null ? "" : le2, (ue2 = e5.incarnation_cross) == null ? "" : ue2, t3);
7480
7576
  }
7481
- $_.removeAttribute("hidden"), $_.querySelectorAll(".interactive-text").forEach((e6) => {
7577
+ hv.removeAttribute("hidden"), hv.querySelectorAll(".interactive-text").forEach((e6) => {
7482
7578
  e6.addEventListener("click", () => {
7483
7579
  let t3 = e6.getAttribute("data-topic"), n3 = e6.getAttribute("data-val");
7484
- t3 && n3 && Tv({ type: "attribute", data: { topic: t3, val: n3 } });
7580
+ t3 && n3 && Vv({ type: "attribute", data: { topic: t3, val: n3 } });
7485
7581
  }), e6.addEventListener("keydown", (t3) => {
7486
7582
  let n3 = t3;
7487
7583
  (n3.key === "Enter" || n3.key === " ") && (n3.preventDefault(), e6.dispatchEvent(new MouseEvent("click", { bubbles: true, cancelable: true })));
7488
7584
  });
7489
- }), ev.setAttribute("hidden", ""), nv.removeAttribute("hidden"), R_("bodygraph");
7585
+ }), gv.setAttribute("hidden", ""), vv.removeAttribute("hidden"), K_("bodygraph");
7490
7586
  }
7491
- var Nv;
7492
- function Pv() {
7493
- Nv && (clearTimeout(Nv), Nv = void 0);
7587
+ var Yv;
7588
+ function Xv() {
7589
+ Yv && (clearTimeout(Yv), Yv = void 0);
7494
7590
  }
7495
- function Fv(e5, t2) {
7496
- Pv(), Z_.setAttribute("hidden", ""), V_({ container: Q_, message: e5, onRetry: t2 });
7591
+ function Zv(e5, t2) {
7592
+ Xv(), pv.setAttribute("hidden", ""), Y_({ container: mv, message: e5, onRetry: t2 });
7497
7593
  }
7498
- function Iv() {
7499
- Pv(), Q_.setAttribute("hidden", ""), Z_.removeAttribute("hidden"), Nv = setTimeout(() => {
7500
- Fv("The bodygraph didn't load. Tap to try again.", Iv);
7594
+ function Qv() {
7595
+ Xv(), mv.setAttribute("hidden", ""), pv.removeAttribute("hidden"), Yv = setTimeout(() => {
7596
+ Zv("The bodygraph didn't load. Tap to try again.", Qv);
7501
7597
  }, 3e4), Z.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the Human Design bodygraph." }] }).catch(() => {
7502
7598
  });
7503
7599
  }
7504
- function Lv(e5) {
7600
+ function $v(e5) {
7505
7601
  e5.addEventListener("click", (t2) => {
7506
7602
  let n2 = t2.target;
7507
7603
  for (; n2 && n2 !== e5; ) {
7508
7604
  if (n2.hasAttribute("data-gate")) {
7509
7605
  let t3 = Number(n2.getAttribute("data-gate"));
7510
7606
  if (t3) {
7511
- w_(e5, { gates: [t3] });
7607
+ M_(e5, { gates: [t3] });
7512
7608
  return;
7513
7609
  }
7514
7610
  }
7515
7611
  n2 = n2.parentElement;
7516
7612
  }
7517
- w_(e5, {});
7613
+ M_(e5, {});
7518
7614
  });
7519
7615
  }
7520
- function Rv(e5) {
7616
+ function ey(e5) {
7521
7617
  var t2;
7522
7618
  if (!e5) return null;
7523
7619
  if (e5.type || e5.centers) return e5;
@@ -7530,18 +7626,18 @@ function Rv(e5) {
7530
7626
  return null;
7531
7627
  }
7532
7628
  Z.ontoolresult = (e5) => {
7533
- Pv();
7629
+ Xv();
7534
7630
  try {
7535
- let a2 = Rv(z_(e5)), o2 = a2 == null ? void 0 : a2._theme;
7536
- if ((o2 === "light" || o2 === "dark") && (av = o2), !a2) {
7537
- Fv("Bodygraph data could not be parsed from the server response.", Iv);
7631
+ let a2 = ey(q_(e5)), o2 = a2 == null ? void 0 : a2._theme;
7632
+ if ((o2 === "light" || o2 === "dark") && (xv = o2), !a2) {
7633
+ Zv("Bodygraph data could not be parsed from the server response.", Qv);
7538
7634
  return;
7539
7635
  }
7540
- if ($ = "graph", cv = false, _v(), hv[gv($, av, false)] = a2, !rv && a2._birth_params) {
7636
+ if ($ = "graph", wv = false, Nv(), jv[Mv($, xv, false)] = a2, !yv && a2._birth_params) {
7541
7637
  var t2, n2, r2, i2;
7542
7638
  let e6 = (t2 = a2._birth_params) == null ? {} : t2, o3 = (n2 = e6.datetime) == null ? "" : n2, s2 = (r2 = e6.location) == null ? "" : r2, c2 = (i2 = e6.timezone) == null ? "" : i2, l2 = e6.latitude, u2 = e6.longitude, d2 = "", f2 = "12:00";
7543
7639
  if (o3) try {
7544
- let e7 = O_(o3, c2);
7640
+ let e7 = I_(o3, c2);
7545
7641
  if (e7) {
7546
7642
  let { date: t3, timeZone: n3 } = e7;
7547
7643
  d2 = t3.toLocaleDateString("en-CA", { timeZone: n3 }), f2 = t3.toLocaleTimeString("en-GB", { timeZone: n3, hour: "2-digit", minute: "2-digit", hour12: false });
@@ -7549,30 +7645,30 @@ Z.ontoolresult = (e5) => {
7549
7645
  } catch (e7) {
7550
7646
  o3.includes("T") && (d2 = o3.split("T")[0], f2 = o3.split("T")[1].substring(0, 5));
7551
7647
  }
7552
- rv = new E_({ app: Z, container: nv, initialParams: { date: d2, time: f2, locationName: s2, timezone: c2, latitude: typeof l2 == "number" ? l2 : null, longitude: typeof u2 == "number" ? u2 : null }, showStepControls: false, costHint: "~2 credits", extraToggle: { label: "Add house rings (+1 credit)", initialChecked: false, initialDisabled: true, disabledTitle: "Switch to Mandala view to add house rings", onChange: (e7) => void Sv(e7) }, onRefresh: async (e7) => {
7553
- rv == null || rv.setBusy(true), Z_.removeAttribute("hidden"), Q_.setAttribute("hidden", "");
7648
+ yv = new P_({ app: Z, container: vv, initialParams: { date: d2, time: f2, locationName: s2, timezone: c2, latitude: typeof l2 == "number" ? l2 : null, longitude: typeof u2 == "number" ? u2 : null }, showStepControls: false, costHint: "~2 credits", extraToggle: { label: "Add house rings (+1 credit)", initialChecked: false, initialDisabled: true, disabledTitle: "Switch to Mandala view to add house rings", onChange: (e7) => void Rv(e7) }, onRefresh: async (e7) => {
7649
+ yv == null || yv.setBusy(true), pv.removeAttribute("hidden"), mv.setAttribute("hidden", "");
7554
7650
  try {
7555
7651
  var t3, n3, r3, i3;
7556
- let a3 = "".concat(e7.date, "T").concat(e7.time, ":00"), o4 = e7.timezone ? a3 : "".concat(a3, "Z"), s3 = new Promise((e8, t4) => setTimeout(() => t4(Error("Bodygraph recalculate timed out after 30s")), 3e4)), c3 = z_(await Promise.race([Z.callServerTool({ name: "bodygraph_recalculate", arguments: { datetime: o4, latitude: (t3 = e7.latitude) == null ? void 0 : t3, longitude: (n3 = e7.longitude) == null ? void 0 : n3, timezone: (r3 = e7.timezone) == null ? void 0 : r3, location: (i3 = e7.locationName) == null ? void 0 : i3, theme: av, ...mv() } }), s3])), l3 = c3 && (c3.type || c3.centers) ? c3 : null;
7557
- l3 ? (_v(), hv[gv($, av, dv($))] = l3, Mv(l3)) : Q && (Z_.setAttribute("hidden", ""), Q_.removeAttribute("hidden"));
7652
+ let a3 = "".concat(e7.date, "T").concat(e7.time, ":00"), o4 = e7.timezone ? a3 : "".concat(a3, "Z"), s3 = new Promise((e8, t4) => setTimeout(() => t4(Error("Bodygraph recalculate timed out after 30s")), 3e4)), c3 = q_(await Promise.race([Z.callServerTool({ name: "bodygraph_recalculate", arguments: { datetime: o4, latitude: (t3 = e7.latitude) == null ? void 0 : t3, longitude: (n3 = e7.longitude) == null ? void 0 : n3, timezone: (r3 = e7.timezone) == null ? void 0 : r3, location: (i3 = e7.locationName) == null ? void 0 : i3, theme: xv, ...Av() } }), s3])), l3 = c3 && (c3.type || c3.centers) ? c3 : null;
7653
+ l3 ? (Nv(), jv[Mv($, xv, Dv($))] = l3, Jv(l3)) : Q && (pv.setAttribute("hidden", ""), mv.removeAttribute("hidden"));
7558
7654
  } catch (e8) {
7559
- console.error("[Bodygraph] Recalculate failed or timed out:", e8), Q && (Z_.setAttribute("hidden", ""), Q_.removeAttribute("hidden"));
7655
+ console.error("[Bodygraph] Recalculate failed or timed out:", e8), Q && (pv.setAttribute("hidden", ""), mv.removeAttribute("hidden"));
7560
7656
  } finally {
7561
- rv == null || rv.setBusy(false);
7657
+ yv == null || yv.setBusy(false);
7562
7658
  }
7563
7659
  } });
7564
7660
  }
7565
- Mv(a2), yv(vv());
7661
+ Jv(a2), Fv(Pv());
7566
7662
  } catch (e6) {
7567
- Fv("An error occurred while rendering the bodygraph.", Iv), console.error("[Bodygraph] Render error:", e6);
7663
+ Zv("An error occurred while rendering the bodygraph.", Qv), console.error("[Bodygraph] Render error:", e6);
7568
7664
  }
7569
- }, J_(Z, { loadingEl: Z_, contentEl: Q_, statusFn: wv, paramControls: () => rv }), Nv = setTimeout(() => {
7570
- Fv("Bodygraph data is taking longer than expected.", Iv);
7665
+ }, uv(Z, { loadingEl: pv, contentEl: mv, statusFn: Bv, paramControls: () => yv }), Yv = setTimeout(() => {
7666
+ Zv("Bodygraph data is taking longer than expected.", Qv);
7571
7667
  }, 3e4), (async () => {
7572
7668
  try {
7573
7669
  await Z.connect();
7574
7670
  let e5 = Z.getHostCapabilities();
7575
- iv = !!(e5 != null && e5.modelContext), e5 == null || e5.sampling, q_(Z, document.getElementById("pan-zoom-controls"), ["param-controls-container", "controls-panel", "info-panel", "hd-action-bar"]), X_(Z), K_(Z, (e6) => void yv(e6));
7671
+ bv = !!(e5 != null && e5.modelContext), e5 == null || e5.sampling, cv(Z, document.getElementById("pan-zoom-controls"), ["param-controls-container", "controls-panel", "info-panel", "hd-action-bar", "hd-disclaimer"]), fv(Z), ev(Z, (e6) => void Fv(e6));
7576
7672
  } catch (e5) {
7577
7673
  console.error("[Bodygraph] connect() failed:", e5);
7578
7674
  }