@eaprelsky/nocturna-wheel 4.0.2 → 4.1.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.
@@ -293,7 +293,7 @@
293
293
  /**
294
294
  * IconData.js
295
295
  * Auto-generated module containing inline SVG icons as data URLs
296
- * Generated at: 2025-12-21T14:49:27.435Z
296
+ * Generated at: 2026-01-11T15:58:22.972Z
297
297
  *
298
298
  * This file is automatically generated by the build process.
299
299
  * Do not edit manually - changes will be overwritten.
@@ -318,7 +318,8 @@
318
318
  IconData.planets['moon'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%20%3Cpath%20d%3D%22M%20106.38%2031%20C%20133.61%2035.85%20154.8%2057.4%20159.18%2084.71%20C%20163.56%20112.02%20150.17%20139.12%20125.82%20152.23%20C%20101.46%20165.35%2071.47%20161.61%2051.08%20142.92%20Q%2059.25%20148.63%2089.31%20129.94%20Q%20119.38%20111.25%20119.38%2074.69%20Q%20119.38%2038.13%20108.81%2031.63%20Z%22%20fill%3D%22white%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%20%3C%2Fsvg%3E';
319
319
  IconData.planets['neptune'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22xklInLVkXW5TzGvFd8Wp-13%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20100%20170%20L%20100%2061.18%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3Cpath%20d%3D%22M%20105.67%2072.59%20L%20100%2055.59%20L%2094.33%2072.59%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22xklInLVkXW5TzGvFd8Wp-14%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20140%20140%20L%2060%20140%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22xklInLVkXW5TzGvFd8Wp-15%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%2061.18%20Q%2060%20100%2080%20110%20Q%20100%20120%20120%20110%20Q%20140%20100%20140%2061.18%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3Cpath%20d%3D%22M%2063.67%2066.59%20L%2060%2055.59%20L%2056.33%2066.59%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3Cpath%20d%3D%22M%20145.67%2072.59%20L%20140%2055.59%20L%20134.33%2072.59%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22zbcp-zu0BkE59QIL-Zbj-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';
320
320
  IconData.planets['pluto'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-9%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22149%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-10%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20100%20129%20L%20100.5%20110%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-11%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20140%2070.4%20C%20139.78%2092.49%20121.69%20110.22%2099.6%20110%20C%2077.51%20109.78%2059.78%2091.69%2060%2069.6%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-12%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%2270%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%227pAuGvqZmXAXuP9MepSf-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';
321
- IconData.planets['rahu'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-6%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-7%22%3E%3Cg%3E%3Cellipse%20cx%3D%2265%22%20cy%3D%2265%22%20rx%3D%2215%22%20ry%3D%2215%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-8%22%3E%3Cg%3E%3Cellipse%20cx%3D%22135%22%20cy%3D%2265%22%20rx%3D%2215%22%20ry%3D%2215%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-9%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20124.39%2054.39%20Q%20120%2060%20120%2065%20Q%20120%2070%20130%2095%20Q%20140%20120%20130%20135%20Q%20120%20150%20100%20150%20Q%2080%20150%2070%20135%20Q%2060%20120%2070%2095%20Q%2080%2070%2080%2065%20Q%2080%2060%2075.61%2054.39%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%223M6Cx9xprG5cO1lWqNEw-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';
321
+ IconData.planets['rahu-1'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-1%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-3%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-6%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-7%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-8%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-9%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-10%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-11%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-12%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-13%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-14%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-15%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-16%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-17%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-20%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-21%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-22%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-23%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-24%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-25%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-26%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-27%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-32%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-28%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-29%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-30%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-31%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-33%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-34%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-35%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-36%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-37%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-68%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-69%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-70%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-71%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-73%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-38%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-39%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-40%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-41%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-42%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-48%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-49%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-50%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-51%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-52%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-53%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-54%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-74%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-44%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-45%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-138%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-139%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-140%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-141%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-142%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-143%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-144%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-145%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-146%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-147%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-148%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-149%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-150%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-151%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-152%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-153%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-154%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-155%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-156%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-157%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-158%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-159%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-160%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-161%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-162%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-166%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-167%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-168%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-169%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-170%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-174%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-175%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-176%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-177%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-178%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-208%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-209%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-210%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-211%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-212%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-55%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-56%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-213%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-214%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-215%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-216%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-217%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-4%22%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-1%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-2%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-3%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-218%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-219%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-220%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-221%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-222%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-196%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-197%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-201%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-203%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-204%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-206%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-207%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-223%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-224%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-225%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-226%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-227%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-5%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-6%22%3E%3Cg%20transform%3D%22translate(0.5%2C0.5)%22%3E%3Cellipse%20cx%3D%22165%22%20cy%3D%22165%22%20rx%3D%2215%22%20ry%3D%2215%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20transform%3D%22rotate(-180%2C165%2C165)%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-7%22%3E%3Cg%20transform%3D%22translate(0.5%2C0.5)%22%3E%3Cellipse%20cx%3D%2235%22%20cy%3D%22165%22%20rx%3D%2215%22%20ry%3D%2215%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20transform%3D%22rotate(-180%2C35%2C165)%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-8%22%3E%3Cg%20transform%3D%22translate(0.5%2C0.5)%22%3E%3Cpath%20d%3D%22M%2055.61%20185.61%20Q%2065%20175%2065%20165%20Q%2065%20155%2045%20105%20Q%2025%2055%2045%2025%20Q%2065%20-5%20105%20-5%20Q%20145%20-5%20165%2025%20Q%20185%2055%20165%20105%20Q%20145%20155%20145%20165%20Q%20145%20175%20154.39%20185.61%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-228%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-229%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-230%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-231%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-232%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-265%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-266%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-233%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-234%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-235%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-236%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-237%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-238%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-239%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-240%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-241%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-242%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-294%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-295%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-243%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-244%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-245%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-246%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-247%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-298%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-299%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-300%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-58%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-59%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-57%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-63%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-64%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-66%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-248%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-249%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-254%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-256%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-257%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-258%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-259%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-260%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-261%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-262%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-263%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-264%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-292%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-267%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-268%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-269%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-270%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-271%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-272%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-273%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-274%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-277%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-278%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-279%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-281%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-282%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-283%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-284%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-291%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-286%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-287%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-288%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-290%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-302%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-303%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-304%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-305%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-306%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-362%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-307%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-308%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-309%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-310%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-311%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-312%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-313%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-314%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-315%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-316%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-363%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-317%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-318%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-319%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-320%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-321%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-322%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-323%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-324%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-325%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-326%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-364%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-365%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-366%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-327%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-328%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-329%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-330%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-331%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-332%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-333%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-334%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-335%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-336%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-367%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-368%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-337%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-338%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-339%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-340%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-341%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-342%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-343%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-344%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-345%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-346%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-371%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-372%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-373%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-347%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-348%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-349%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-350%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-351%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-357%22%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-358%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-359%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-360%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-361%22%2F%3E%3Cg%20data-cell-id%3D%22srBSQh4KOTasGSE8ft9g-6%22%2F%3E%3Cg%20data-cell-id%3D%22srBSQh4KOTasGSE8ft9g-7%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-9%22%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-10%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-11%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-12%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-13%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-22%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-23%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-24%22%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-20%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-21%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-14%22%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-15%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-16%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-17%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-18%22%2F%3E%3Cg%20data-cell-id%3D%22cskn5mqhr9ZncGVoWKjj-2%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-26%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-27%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-28%22%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-29%22%2F%3E%3Cg%20data-cell-id%3D%22KS9pV0ngr4uzh0Otbb3G-30%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22cskn5mqhr9ZncGVoWKjj-3%22%2F%3E%3Cg%20data-cell-id%3D%22cskn5mqhr9ZncGVoWKjj-4%22%2F%3E%3Cg%20data-cell-id%3D%22srBSQh4KOTasGSE8ft9g-1%22%3E%3Cg%20data-cell-id%3D%22srBSQh4KOTasGSE8ft9g-2%22%2F%3E%3Cg%20data-cell-id%3D%22srBSQh4KOTasGSE8ft9g-3%22%2F%3E%3Cg%20data-cell-id%3D%22srBSQh4KOTasGSE8ft9g-4%22%2F%3E%3Cg%20data-cell-id%3D%22srBSQh4KOTasGSE8ft9g-5%22%2F%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-353%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-354%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-355%22%2F%3E%3Cg%20data-cell-id%3D%22ApFtk30SPmznxXabnnFi-356%22%2F%3E%3Cg%20data-cell-id%3D%22srBSQh4KOTasGSE8ft9g-15%22%2F%3E%3Cg%20data-cell-id%3D%22srBSQh4KOTasGSE8ft9g-22%22%2F%3E%3Cg%20data-cell-id%3D%22srBSQh4KOTasGSE8ft9g-23%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';
322
+ IconData.planets['rahu'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%20xmlns%3Abx%3D%22https%3A%2F%2Fboxy-svg.com%22%3E%20%3Cdefs%3E%20%3Cbx%3Aexport%3E%20%3Cbx%3Afile%20format%3D%22svg%22%20href%3D%22%23object-0%22%2F%3E%20%3C%2Fbx%3Aexport%3E%20%3C%2Fdefs%3E%20%3Cg%20style%3D%22%22%20transform%3D%22matrix(1%2C%200%2C%200%2C%20-1%2C%200%2C%20200.000003)%22%20id%3D%22object-0%22%3E%20%3Cg%20data-cell-id%3D%220%22%3E%20%3Cg%20data-cell-id%3D%221%22%3E%20%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-1%22%3E%20%3Cg%2F%3E%20%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-6%22%3E%20%3Cg%2F%3E%20%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-7%22%3E%20%3Cg%3E%20%3Cellipse%20cx%3D%2265%22%20cy%3D%2265%22%20rx%3D%2215%22%20ry%3D%2215%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-8%22%3E%20%3Cg%3E%20%3Cellipse%20cx%3D%22135%22%20cy%3D%2265%22%20rx%3D%2215%22%20ry%3D%2215%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-9%22%3E%20%3Cg%3E%20%3Cpath%20d%3D%22M%20124.39%2054.39%20Q%20120%2060%20120%2065%20Q%20120%2070%20130%2095%20Q%20140%20120%20130%20135%20Q%20120%20150%20100%20150%20Q%2080%20150%2070%20135%20Q%2060%20120%2070%2095%20Q%2080%2070%2080%2065%20Q%2080%2060%2075.61%2054.39%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3Cg%20data-cell-id%3D%22fzDwOAeg_iJ89Dt6VeXd-1%22%3E%20%3Cg%3E%20%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3C%2Fg%3E%20%3C%2Fsvg%3E';
322
323
  IconData.planets['saturn'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22PGt55_aUy3Njtwruwuk4-5%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2090%20139%20L%2090%2039%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22PGt55_aUy3Njtwruwuk4-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%2059%20L%20120%2059%20L%2090%2059%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22PGt55_aUy3Njtwruwuk4-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20150%20169%20Q%20138%20179%20129%20174%20Q%20120%20169%20129%20144%20Q%20138%20119%20134%20104%20Q%20130%2089%20110%2089%20Q%2090%2089%2090%20109%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%226yAxXstixJTfL81ozoQc-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22sU4-NP-8qgTjRoMx9Fv4-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';
323
324
  IconData.planets['selena'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22jFIPWhlccuGsN_-w-8e2-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22jFIPWhlccuGsN_-w-8e2-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20140%20150%20L%2060%20150%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22jFIPWhlccuGsN_-w-8e2-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2099.2%20117.1%20L%20100%20180%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22jFIPWhlccuGsN_-w-8e2-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2073.37%2031.14%20C%2062.66%2048.46%2065.45%2070.65%2080.13%2084.94%20C%2094.81%2099.23%20117.6%20101.95%20135.38%2091.52%20C%20125.69%20107.19%20107.04%20115.39%2088.56%20112.1%20C%2070.07%20108.81%2055.61%2094.73%2052.23%2076.73%20C%2048.85%2058.74%2057.27%2040.58%2073.37%2031.14%20Z%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(225%2C92.12%2C73.26)%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22B7BV3EczgGRAOl1qaG-U-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';
324
325
  IconData.planets['sun'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22KMRcx8_Z6FSBlqI5tEZE-1%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22100%22%20rx%3D%2265%22%20ry%3D%2260%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22KMRcx8_Z6FSBlqI5tEZE-2%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22100%22%20rx%3D%2210%22%20ry%3D%2210%22%20fill%3D%22%23000000%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(237%2C%20237%2C%20237))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22adE6InmPBndy7Uo4bRgR-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';
@@ -893,7 +894,11 @@
893
894
  saturn: 0,
894
895
  uranus: 0,
895
896
  neptune: 0,
896
- pluto: 0
897
+ pluto: 0,
898
+ rahu: 0,
899
+ ketu: 0,
900
+ lilith: 0,
901
+ selena: 0
897
902
  }
898
903
  };
899
904
 
@@ -968,7 +973,11 @@
968
973
  saturn: 6,
969
974
  uranus: 4,
970
975
  neptune: 4,
971
- pluto: 4
976
+ pluto: 4,
977
+ rahu: 4,
978
+ ketu: 4,
979
+ lilith: 4,
980
+ selena: 4
972
981
  },
973
982
  colors: {
974
983
  // Default colors for each planet
@@ -981,7 +990,11 @@
981
990
  saturn: "#336633",
982
991
  uranus: "#33cccc",
983
992
  neptune: "#3366ff",
984
- pluto: "#663366"
993
+ pluto: "#663366",
994
+ rahu: "#666666",
995
+ ketu: "#888888",
996
+ lilith: "#330033",
997
+ selena: "#ffccff"
985
998
  },
986
999
  visible: {
987
1000
  // Default visibility for each planet
@@ -994,7 +1007,11 @@
994
1007
  saturn: true,
995
1008
  uranus: true,
996
1009
  neptune: true,
997
- pluto: true
1010
+ pluto: true,
1011
+ rahu: true,
1012
+ ketu: true,
1013
+ lilith: true,
1014
+ selena: true
998
1015
  }
999
1016
  };
1000
1017
 
@@ -1837,7 +1854,8 @@
1837
1854
  static getPlanets() {
1838
1855
  return [
1839
1856
  "sun", "moon", "mercury", "venus", "mars",
1840
- "jupiter", "saturn", "uranus", "neptune", "pluto"
1857
+ "jupiter", "saturn", "uranus", "neptune", "pluto",
1858
+ "rahu", "ketu", "lilith", "selena"
1841
1859
  ];
1842
1860
  }
1843
1861
 
@@ -1869,7 +1887,11 @@
1869
1887
  "saturn": "Saturn",
1870
1888
  "uranus": "Uranus",
1871
1889
  "neptune": "Neptune",
1872
- "pluto": "Pluto"
1890
+ "pluto": "Pluto",
1891
+ "rahu": "Rahu",
1892
+ "ketu": "Ketu",
1893
+ "lilith": "Lilith",
1894
+ "selena": "Selena"
1873
1895
  },
1874
1896
  ru: {
1875
1897
  "sun": "Солнце",
@@ -1881,7 +1903,11 @@
1881
1903
  "saturn": "Сатурн",
1882
1904
  "uranus": "Уран",
1883
1905
  "neptune": "Нептун",
1884
- "pluto": "Плутон"
1906
+ "pluto": "Плутон",
1907
+ "rahu": "Раху",
1908
+ "ketu": "Кету",
1909
+ "lilith": "Лилит",
1910
+ "selena": "Селена"
1885
1911
  }
1886
1912
  };
1887
1913
 
@@ -2750,6 +2776,16 @@
2750
2776
  */
2751
2777
 
2752
2778
  class PlanetPositionCalculator {
2779
+ static _normalizeAngle(angle) {
2780
+ return ((angle % 360) + 360) % 360;
2781
+ }
2782
+
2783
+ static _getAngle(position) {
2784
+ return position && position.adjustedLongitude !== undefined
2785
+ ? position.adjustedLongitude
2786
+ : position.longitude;
2787
+ }
2788
+
2753
2789
  /**
2754
2790
  * Calculate position for a planet on a circle
2755
2791
  * @param {Object} params - Position parameters
@@ -2834,7 +2870,8 @@
2834
2870
  centerX,
2835
2871
  centerY,
2836
2872
  baseRadius,
2837
- iconSize = 24
2873
+ iconSize = 24,
2874
+ maxIterations = 5
2838
2875
  } = options;
2839
2876
 
2840
2877
  if (!positions || positions.length <= 1) {
@@ -2848,72 +2885,51 @@
2848
2885
 
2849
2886
  console.log(`PlanetPositionCalculator: Adjusting overlaps for ${positions.length} positions`);
2850
2887
 
2851
- // Make a copy to not modify originals
2852
- const adjustedPositions = [...positions];
2888
+ // Make a copy to not modify originals (also ensures we can add fields safely)
2889
+ const adjustedPositions = positions.map(p => ({ ...p }));
2853
2890
 
2854
2891
  // The minimum angular distance needed to prevent overlap at base radius
2855
2892
  // minDistance already includes the desired spacing (iconSize * 1.5)
2856
2893
  const minAngularDistance = (minDistance / baseRadius) * (180 / Math.PI);
2857
2894
  console.log(`PlanetPositionCalculator: Minimum angular distance: ${minAngularDistance.toFixed(2)}°`);
2858
-
2859
- // Sort positions by longitude for overlap detection
2860
- const sortedPositionIndices = adjustedPositions
2861
- .map((pos, idx) => ({ pos, idx }))
2862
- .sort((a, b) => a.pos.longitude - b.pos.longitude);
2863
-
2864
- const sortedPositions = sortedPositionIndices.map(item => ({
2865
- ...adjustedPositions[item.idx],
2866
- originalIndex: item.idx
2867
- }));
2868
-
2869
- // Find clusters of planets that are too close angularly
2870
- const clusters = this._findOverlappingClusters(sortedPositions, minAngularDistance);
2871
- console.log(`PlanetPositionCalculator: Found ${clusters.length} clusters of overlapping positions`);
2872
- clusters.forEach((cluster, i) => {
2873
- console.log(`PlanetPositionCalculator: Cluster ${i+1} has ${cluster.length} positions`);
2874
- });
2875
-
2876
- // Process each cluster
2877
- clusters.forEach((cluster, clusterIndex) => {
2878
- console.log(`PlanetPositionCalculator: Processing cluster ${clusterIndex+1}`);
2879
-
2880
- if (cluster.length <= 1) {
2881
- // Single planet - just place at exact base radius with no angle change
2882
- const planet = cluster[0];
2883
- console.log(`PlanetPositionCalculator: Single position in cluster, keeping at original longitude ${planet.longitude.toFixed(2)}°`);
2884
- this._setExactPosition(planet, planet.longitude, baseRadius, centerX, centerY, iconSize);
2885
- } else {
2886
- // Handle cluster with multiple planets - distribute by angle
2887
- console.log(`PlanetPositionCalculator: Distributing ${cluster.length} positions in cluster`);
2888
- this._distributeClusterByAngle(cluster, baseRadius, minAngularDistance, centerX, centerY, iconSize);
2889
-
2890
- // Log the distributions
2891
- cluster.forEach((pos, i) => {
2892
- console.log(`PlanetPositionCalculator: Position ${i+1} in cluster ${clusterIndex+1} adjusted from ${pos.longitude.toFixed(2)}° to ${pos.adjustedLongitude.toFixed(2)}°`);
2893
- });
2895
+
2896
+ // Initialize adjustedLongitude for all positions
2897
+ adjustedPositions.forEach(pos => {
2898
+ if (pos.adjustedLongitude === undefined) {
2899
+ pos.adjustedLongitude = pos.longitude;
2894
2900
  }
2901
+ this._setExactPosition(pos, this._getAngle(pos), baseRadius, centerX, centerY, iconSize);
2895
2902
  });
2896
-
2897
- // Copy adjusted positions back to the original array order
2898
- sortedPositions.forEach(pos => {
2899
- const origIndex = pos.originalIndex;
2900
-
2901
- // Only copy if we have valid data
2902
- if (origIndex !== undefined && origIndex >= 0 && origIndex < adjustedPositions.length) {
2903
- adjustedPositions[origIndex].x = pos.x;
2904
- adjustedPositions[origIndex].y = pos.y;
2905
- adjustedPositions[origIndex].iconX = pos.iconX;
2906
- adjustedPositions[origIndex].iconY = pos.iconY;
2907
- adjustedPositions[origIndex].iconCenterX = pos.iconCenterX;
2908
- adjustedPositions[origIndex].iconCenterY = pos.iconCenterY;
2909
-
2910
- // Also add any adjusted longitude for reference
2911
- if (pos.adjustedLongitude !== undefined) {
2912
- adjustedPositions[origIndex].adjustedLongitude = pos.adjustedLongitude;
2913
- }
2903
+
2904
+ // Iteratively resolve overlaps. This avoids "new overlaps" created after distributing a cluster.
2905
+ for (let iteration = 0; iteration < maxIterations; iteration++) {
2906
+ // Sort by current (possibly adjusted) angle for overlap detection
2907
+ const sortedPositions = [...adjustedPositions].sort(
2908
+ (a, b) => this._getAngle(a) - this._getAngle(b)
2909
+ );
2910
+
2911
+ // Find clusters of planets that are too close angularly
2912
+ const clusters = this._findOverlappingClusters(sortedPositions, minAngularDistance);
2913
+ console.log(`PlanetPositionCalculator: Iteration ${iteration + 1}/${maxIterations}, clusters: ${clusters.length}`);
2914
+
2915
+ // No overlaps -> done
2916
+ const hasRealClusters = clusters.some(c => c.length > 1);
2917
+ if (!hasRealClusters) {
2918
+ break;
2914
2919
  }
2915
- });
2916
-
2920
+
2921
+ // Process each cluster
2922
+ clusters.forEach(cluster => {
2923
+ if (cluster.length <= 1) {
2924
+ const planet = cluster[0];
2925
+ this._setExactPosition(planet, this._getAngle(planet), baseRadius, centerX, centerY, iconSize);
2926
+ return;
2927
+ }
2928
+
2929
+ this._distributeClusterByPush(cluster, baseRadius, minAngularDistance, centerX, centerY, iconSize);
2930
+ });
2931
+ }
2932
+
2917
2933
  return adjustedPositions;
2918
2934
  }
2919
2935
 
@@ -2943,7 +2959,9 @@
2943
2959
  const currPosition = sortedPositions[i];
2944
2960
 
2945
2961
  // Check angular distance, considering wrap-around at 360°
2946
- let angleDiff = currPosition.longitude - prevPosition.longitude;
2962
+ const prevAngle = this._getAngle(prevPosition);
2963
+ const currAngle = this._getAngle(currPosition);
2964
+ let angleDiff = currAngle - prevAngle;
2947
2965
  if (angleDiff < 0) angleDiff += 360;
2948
2966
 
2949
2967
  if (angleDiff < minAngularDistance) {
@@ -2967,7 +2985,9 @@
2967
2985
  const lastPlanet = sortedPositions[posCount - 1];
2968
2986
  const firstPlanetOriginal = sortedPositions[0];
2969
2987
 
2970
- let wrapDiff = (firstPlanetOriginal.longitude + 360) - lastPlanet.longitude;
2988
+ const lastAngle = this._getAngle(lastPlanet);
2989
+ const firstAngle = this._getAngle(firstPlanetOriginal);
2990
+ let wrapDiff = (firstAngle + 360) - lastAngle;
2971
2991
  if (wrapDiff < 0) wrapDiff += 360;
2972
2992
 
2973
2993
  if (wrapDiff < minAngularDistance) {
@@ -2991,7 +3011,8 @@
2991
3011
  }
2992
3012
 
2993
3013
  /**
2994
- * Distribute positions in a cluster by adjusting only their angles
3014
+ * Distribute positions in a cluster using a "push-apart" algorithm.
3015
+ * This keeps adjustments as small as possible while ensuring minimum spacing.
2995
3016
  * @private
2996
3017
  * @param {Array} positions - Array of positions in the cluster
2997
3018
  * @param {number} radius - The exact radius to place all positions
@@ -3000,49 +3021,62 @@
3000
3021
  * @param {number} centerY - Y coordinate of center
3001
3022
  * @param {number} iconSize - Size of the icon
3002
3023
  */
3003
- static _distributeClusterByAngle(positions, radius, minAngularDistance, centerX, centerY, iconSize) {
3024
+ static _distributeClusterByPush(positions, radius, minAngularDistance, centerX, centerY, iconSize) {
3004
3025
  const n = positions.length;
3005
-
3006
- // If only one planet, keep its original position
3007
- if (n === 1) {
3008
- this._setExactPosition(positions[0], positions[0].longitude, radius, centerX, centerY, iconSize);
3026
+ if (n <= 1) {
3027
+ const p = positions[0];
3028
+ this._setExactPosition(p, this._getAngle(p), radius, centerX, centerY, iconSize);
3009
3029
  return;
3010
3030
  }
3011
-
3012
- // Sort positions by their original longitude to maintain order
3013
- positions.sort((a, b) => a.longitude - b.longitude);
3014
-
3015
- // Calculate central angle and total span
3016
- const firstPos = positions[0].longitude;
3017
- const lastPos = positions[n-1].longitude;
3018
- let totalArc = lastPos - firstPos;
3019
-
3020
- // Handle wrap-around case (e.g., positions at 350° and 10°)
3021
- if (totalArc < 0 || totalArc > 180) {
3022
- totalArc = (360 + lastPos - firstPos) % 360;
3031
+
3032
+ // Unwrap angles if cluster spans the 0°/360° boundary
3033
+ const baseAngles = positions.map(p => this._getAngle(p));
3034
+ const min = Math.min(...baseAngles);
3035
+ const max = Math.max(...baseAngles);
3036
+ const unwrappedAngles = (max - min > 180)
3037
+ ? baseAngles.map(a => (a < 180 ? a + 360 : a))
3038
+ : baseAngles;
3039
+
3040
+ // Sort by unwrapped angle
3041
+ const items = positions
3042
+ .map((p, idx) => ({ p, orig: unwrappedAngles[idx] }))
3043
+ .sort((a, b) => a.orig - b.orig);
3044
+
3045
+ const origAngles = items.map(it => it.orig);
3046
+ let adjusted = [...origAngles];
3047
+
3048
+ // Forward pass: enforce minimum distance
3049
+ for (let i = 1; i < n; i++) {
3050
+ const minAllowed = adjusted[i - 1] + minAngularDistance;
3051
+ if (adjusted[i] < minAllowed) {
3052
+ adjusted[i] = minAllowed;
3053
+ }
3023
3054
  }
3024
-
3025
- // Calculate the center of the cluster (weighted average of all positions)
3026
- let sumAngles = 0;
3027
- for (let i = 0; i < n; i++) {
3028
- sumAngles += positions[i].longitude;
3055
+
3056
+ // Shift the whole cluster to keep it centered around the original mean angle
3057
+ const origCenter = origAngles.reduce((s, a) => s + a, 0) / n;
3058
+ const adjustedCenter = adjusted.reduce((s, a) => s + a, 0) / n;
3059
+ const shift = origCenter - adjustedCenter;
3060
+ adjusted = adjusted.map(a => a + shift);
3061
+
3062
+ // Re-enforce constraints after shifting
3063
+ for (let i = 1; i < n; i++) {
3064
+ const minAllowed = adjusted[i - 1] + minAngularDistance;
3065
+ if (adjusted[i] < minAllowed) {
3066
+ adjusted[i] = minAllowed;
3067
+ }
3029
3068
  }
3030
- let centerAngle = (sumAngles / n) % 360;
3031
-
3032
- // Determine minimum arc needed for n planets with minimum spacing
3033
- // minAngularDistance already includes the desired spacing
3034
- const minRequiredArc = (n - 1) * minAngularDistance;
3035
-
3036
- // Always use at least the minimum required arc
3037
- const spanToUse = Math.max(minRequiredArc, totalArc);
3038
-
3039
- // Calculate start angle (center - half of span)
3040
- const startAngle = (centerAngle - spanToUse/2 + 360) % 360;
3041
-
3042
- // Distribute planets evenly from the start angle
3069
+ for (let i = n - 2; i >= 0; i--) {
3070
+ const maxAllowed = adjusted[i + 1] - minAngularDistance;
3071
+ if (adjusted[i] > maxAllowed) {
3072
+ adjusted[i] = maxAllowed;
3073
+ }
3074
+ }
3075
+
3076
+ // Apply results
3043
3077
  for (let i = 0; i < n; i++) {
3044
- const angle = (startAngle + i * (spanToUse / (n-1))) % 360;
3045
- this._setExactPosition(positions[i], angle, radius, centerX, centerY, iconSize);
3078
+ const angle = this._normalizeAngle(adjusted[i]);
3079
+ this._setExactPosition(items[i].p, angle, radius, centerX, centerY, iconSize);
3046
3080
  }
3047
3081
  }
3048
3082
 
@@ -3242,7 +3276,7 @@
3242
3276
  this.symbolRenderer.addPlanetTooltip(planetGroup, planet);
3243
3277
 
3244
3278
  // Render connector if needed
3245
- const connector = this.symbolRenderer.renderConnector(planetGroup, planet, iconSize);
3279
+ const connector = this.symbolRenderer.renderConnector(planetGroup, planet, iconSize, 0.9);
3246
3280
  if (connector) {
3247
3281
  planetGroup.appendChild(connector);
3248
3282
  }
@@ -3424,7 +3458,7 @@
3424
3458
  this.symbolRenderer.addPlanetTooltip(planetGroup, planet);
3425
3459
 
3426
3460
  // Render connector if needed
3427
- const connector = this.symbolRenderer.renderConnector(planetGroup, planet, iconSize);
3461
+ const connector = this.symbolRenderer.renderConnector(planetGroup, planet, iconSize, 0.9);
3428
3462
  if (connector) {
3429
3463
  planetGroup.appendChild(connector);
3430
3464
  }
@@ -5463,8 +5497,13 @@
5463
5497
  const centerY = this.chart.config.svg.center.y;
5464
5498
  const c3Radius = this.chart.config.radius.innermost; // C3
5465
5499
 
5466
- // Only draw the innermost circle if secondary planets are enabled
5467
- if (this.chart.config.planetSettings.secondaryEnabled !== false) {
5500
+ // Only draw the innermost circle if secondary planets are enabled AND we actually have secondary data
5501
+ const hasSecondaryPlanetsData =
5502
+ this.chart?.secondaryPlanets &&
5503
+ typeof this.chart.secondaryPlanets === 'object' &&
5504
+ Object.keys(this.chart.secondaryPlanets).length > 0;
5505
+
5506
+ if (this.chart.config.planetSettings.secondaryEnabled !== false && hasSecondaryPlanetsData) {
5468
5507
  this.drawInnermostCircle(zodiacGroup, this.svgUtils, centerX, centerY, c3Radius);
5469
5508
  }
5470
5509