@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.
@@ -287,7 +287,7 @@ class IconProvider {
287
287
  /**
288
288
  * IconData.js
289
289
  * Auto-generated module containing inline SVG icons as data URLs
290
- * Generated at: 2025-12-21T14:49:27.435Z
290
+ * Generated at: 2026-01-11T15:58:22.972Z
291
291
  *
292
292
  * This file is automatically generated by the build process.
293
293
  * Do not edit manually - changes will be overwritten.
@@ -312,7 +312,8 @@ IconData.planets['mercury'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%2
312
312
  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';
313
313
  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';
314
314
  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';
315
- 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';
315
+ 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';
316
+ 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';
316
317
  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';
317
318
  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';
318
319
  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';
@@ -887,7 +888,11 @@ class ChartConfig {
887
888
  saturn: 0,
888
889
  uranus: 0,
889
890
  neptune: 0,
890
- pluto: 0
891
+ pluto: 0,
892
+ rahu: 0,
893
+ ketu: 0,
894
+ lilith: 0,
895
+ selena: 0
891
896
  }
892
897
  };
893
898
 
@@ -962,7 +967,11 @@ class ChartConfig {
962
967
  saturn: 6,
963
968
  uranus: 4,
964
969
  neptune: 4,
965
- pluto: 4
970
+ pluto: 4,
971
+ rahu: 4,
972
+ ketu: 4,
973
+ lilith: 4,
974
+ selena: 4
966
975
  },
967
976
  colors: {
968
977
  // Default colors for each planet
@@ -975,7 +984,11 @@ class ChartConfig {
975
984
  saturn: "#336633",
976
985
  uranus: "#33cccc",
977
986
  neptune: "#3366ff",
978
- pluto: "#663366"
987
+ pluto: "#663366",
988
+ rahu: "#666666",
989
+ ketu: "#888888",
990
+ lilith: "#330033",
991
+ selena: "#ffccff"
979
992
  },
980
993
  visible: {
981
994
  // Default visibility for each planet
@@ -988,7 +1001,11 @@ class ChartConfig {
988
1001
  saturn: true,
989
1002
  uranus: true,
990
1003
  neptune: true,
991
- pluto: true
1004
+ pluto: true,
1005
+ rahu: true,
1006
+ ketu: true,
1007
+ lilith: true,
1008
+ selena: true
992
1009
  }
993
1010
  };
994
1011
 
@@ -1831,7 +1848,8 @@ class AstrologyUtils {
1831
1848
  static getPlanets() {
1832
1849
  return [
1833
1850
  "sun", "moon", "mercury", "venus", "mars",
1834
- "jupiter", "saturn", "uranus", "neptune", "pluto"
1851
+ "jupiter", "saturn", "uranus", "neptune", "pluto",
1852
+ "rahu", "ketu", "lilith", "selena"
1835
1853
  ];
1836
1854
  }
1837
1855
 
@@ -1863,7 +1881,11 @@ class AstrologyUtils {
1863
1881
  "saturn": "Saturn",
1864
1882
  "uranus": "Uranus",
1865
1883
  "neptune": "Neptune",
1866
- "pluto": "Pluto"
1884
+ "pluto": "Pluto",
1885
+ "rahu": "Rahu",
1886
+ "ketu": "Ketu",
1887
+ "lilith": "Lilith",
1888
+ "selena": "Selena"
1867
1889
  },
1868
1890
  ru: {
1869
1891
  "sun": "Солнце",
@@ -1875,7 +1897,11 @@ class AstrologyUtils {
1875
1897
  "saturn": "Сатурн",
1876
1898
  "uranus": "Уран",
1877
1899
  "neptune": "Нептун",
1878
- "pluto": "Плутон"
1900
+ "pluto": "Плутон",
1901
+ "rahu": "Раху",
1902
+ "ketu": "Кету",
1903
+ "lilith": "Лилит",
1904
+ "selena": "Селена"
1879
1905
  }
1880
1906
  };
1881
1907
 
@@ -2744,6 +2770,16 @@ class PlanetSymbolRenderer extends BasePlanetRenderer {
2744
2770
  */
2745
2771
 
2746
2772
  class PlanetPositionCalculator {
2773
+ static _normalizeAngle(angle) {
2774
+ return ((angle % 360) + 360) % 360;
2775
+ }
2776
+
2777
+ static _getAngle(position) {
2778
+ return position && position.adjustedLongitude !== undefined
2779
+ ? position.adjustedLongitude
2780
+ : position.longitude;
2781
+ }
2782
+
2747
2783
  /**
2748
2784
  * Calculate position for a planet on a circle
2749
2785
  * @param {Object} params - Position parameters
@@ -2828,7 +2864,8 @@ class PlanetPositionCalculator {
2828
2864
  centerX,
2829
2865
  centerY,
2830
2866
  baseRadius,
2831
- iconSize = 24
2867
+ iconSize = 24,
2868
+ maxIterations = 5
2832
2869
  } = options;
2833
2870
 
2834
2871
  if (!positions || positions.length <= 1) {
@@ -2842,72 +2879,51 @@ class PlanetPositionCalculator {
2842
2879
 
2843
2880
  console.log(`PlanetPositionCalculator: Adjusting overlaps for ${positions.length} positions`);
2844
2881
 
2845
- // Make a copy to not modify originals
2846
- const adjustedPositions = [...positions];
2882
+ // Make a copy to not modify originals (also ensures we can add fields safely)
2883
+ const adjustedPositions = positions.map(p => ({ ...p }));
2847
2884
 
2848
2885
  // The minimum angular distance needed to prevent overlap at base radius
2849
2886
  // minDistance already includes the desired spacing (iconSize * 1.5)
2850
2887
  const minAngularDistance = (minDistance / baseRadius) * (180 / Math.PI);
2851
2888
  console.log(`PlanetPositionCalculator: Minimum angular distance: ${minAngularDistance.toFixed(2)}°`);
2852
-
2853
- // Sort positions by longitude for overlap detection
2854
- const sortedPositionIndices = adjustedPositions
2855
- .map((pos, idx) => ({ pos, idx }))
2856
- .sort((a, b) => a.pos.longitude - b.pos.longitude);
2857
-
2858
- const sortedPositions = sortedPositionIndices.map(item => ({
2859
- ...adjustedPositions[item.idx],
2860
- originalIndex: item.idx
2861
- }));
2862
-
2863
- // Find clusters of planets that are too close angularly
2864
- const clusters = this._findOverlappingClusters(sortedPositions, minAngularDistance);
2865
- console.log(`PlanetPositionCalculator: Found ${clusters.length} clusters of overlapping positions`);
2866
- clusters.forEach((cluster, i) => {
2867
- console.log(`PlanetPositionCalculator: Cluster ${i+1} has ${cluster.length} positions`);
2868
- });
2869
-
2870
- // Process each cluster
2871
- clusters.forEach((cluster, clusterIndex) => {
2872
- console.log(`PlanetPositionCalculator: Processing cluster ${clusterIndex+1}`);
2873
-
2874
- if (cluster.length <= 1) {
2875
- // Single planet - just place at exact base radius with no angle change
2876
- const planet = cluster[0];
2877
- console.log(`PlanetPositionCalculator: Single position in cluster, keeping at original longitude ${planet.longitude.toFixed(2)}°`);
2878
- this._setExactPosition(planet, planet.longitude, baseRadius, centerX, centerY, iconSize);
2879
- } else {
2880
- // Handle cluster with multiple planets - distribute by angle
2881
- console.log(`PlanetPositionCalculator: Distributing ${cluster.length} positions in cluster`);
2882
- this._distributeClusterByAngle(cluster, baseRadius, minAngularDistance, centerX, centerY, iconSize);
2883
-
2884
- // Log the distributions
2885
- cluster.forEach((pos, i) => {
2886
- console.log(`PlanetPositionCalculator: Position ${i+1} in cluster ${clusterIndex+1} adjusted from ${pos.longitude.toFixed(2)}° to ${pos.adjustedLongitude.toFixed(2)}°`);
2887
- });
2889
+
2890
+ // Initialize adjustedLongitude for all positions
2891
+ adjustedPositions.forEach(pos => {
2892
+ if (pos.adjustedLongitude === undefined) {
2893
+ pos.adjustedLongitude = pos.longitude;
2888
2894
  }
2895
+ this._setExactPosition(pos, this._getAngle(pos), baseRadius, centerX, centerY, iconSize);
2889
2896
  });
2890
-
2891
- // Copy adjusted positions back to the original array order
2892
- sortedPositions.forEach(pos => {
2893
- const origIndex = pos.originalIndex;
2894
-
2895
- // Only copy if we have valid data
2896
- if (origIndex !== undefined && origIndex >= 0 && origIndex < adjustedPositions.length) {
2897
- adjustedPositions[origIndex].x = pos.x;
2898
- adjustedPositions[origIndex].y = pos.y;
2899
- adjustedPositions[origIndex].iconX = pos.iconX;
2900
- adjustedPositions[origIndex].iconY = pos.iconY;
2901
- adjustedPositions[origIndex].iconCenterX = pos.iconCenterX;
2902
- adjustedPositions[origIndex].iconCenterY = pos.iconCenterY;
2903
-
2904
- // Also add any adjusted longitude for reference
2905
- if (pos.adjustedLongitude !== undefined) {
2906
- adjustedPositions[origIndex].adjustedLongitude = pos.adjustedLongitude;
2907
- }
2897
+
2898
+ // Iteratively resolve overlaps. This avoids "new overlaps" created after distributing a cluster.
2899
+ for (let iteration = 0; iteration < maxIterations; iteration++) {
2900
+ // Sort by current (possibly adjusted) angle for overlap detection
2901
+ const sortedPositions = [...adjustedPositions].sort(
2902
+ (a, b) => this._getAngle(a) - this._getAngle(b)
2903
+ );
2904
+
2905
+ // Find clusters of planets that are too close angularly
2906
+ const clusters = this._findOverlappingClusters(sortedPositions, minAngularDistance);
2907
+ console.log(`PlanetPositionCalculator: Iteration ${iteration + 1}/${maxIterations}, clusters: ${clusters.length}`);
2908
+
2909
+ // No overlaps -> done
2910
+ const hasRealClusters = clusters.some(c => c.length > 1);
2911
+ if (!hasRealClusters) {
2912
+ break;
2908
2913
  }
2909
- });
2910
-
2914
+
2915
+ // Process each cluster
2916
+ clusters.forEach(cluster => {
2917
+ if (cluster.length <= 1) {
2918
+ const planet = cluster[0];
2919
+ this._setExactPosition(planet, this._getAngle(planet), baseRadius, centerX, centerY, iconSize);
2920
+ return;
2921
+ }
2922
+
2923
+ this._distributeClusterByPush(cluster, baseRadius, minAngularDistance, centerX, centerY, iconSize);
2924
+ });
2925
+ }
2926
+
2911
2927
  return adjustedPositions;
2912
2928
  }
2913
2929
 
@@ -2937,7 +2953,9 @@ class PlanetPositionCalculator {
2937
2953
  const currPosition = sortedPositions[i];
2938
2954
 
2939
2955
  // Check angular distance, considering wrap-around at 360°
2940
- let angleDiff = currPosition.longitude - prevPosition.longitude;
2956
+ const prevAngle = this._getAngle(prevPosition);
2957
+ const currAngle = this._getAngle(currPosition);
2958
+ let angleDiff = currAngle - prevAngle;
2941
2959
  if (angleDiff < 0) angleDiff += 360;
2942
2960
 
2943
2961
  if (angleDiff < minAngularDistance) {
@@ -2961,7 +2979,9 @@ class PlanetPositionCalculator {
2961
2979
  const lastPlanet = sortedPositions[posCount - 1];
2962
2980
  const firstPlanetOriginal = sortedPositions[0];
2963
2981
 
2964
- let wrapDiff = (firstPlanetOriginal.longitude + 360) - lastPlanet.longitude;
2982
+ const lastAngle = this._getAngle(lastPlanet);
2983
+ const firstAngle = this._getAngle(firstPlanetOriginal);
2984
+ let wrapDiff = (firstAngle + 360) - lastAngle;
2965
2985
  if (wrapDiff < 0) wrapDiff += 360;
2966
2986
 
2967
2987
  if (wrapDiff < minAngularDistance) {
@@ -2985,7 +3005,8 @@ class PlanetPositionCalculator {
2985
3005
  }
2986
3006
 
2987
3007
  /**
2988
- * Distribute positions in a cluster by adjusting only their angles
3008
+ * Distribute positions in a cluster using a "push-apart" algorithm.
3009
+ * This keeps adjustments as small as possible while ensuring minimum spacing.
2989
3010
  * @private
2990
3011
  * @param {Array} positions - Array of positions in the cluster
2991
3012
  * @param {number} radius - The exact radius to place all positions
@@ -2994,49 +3015,62 @@ class PlanetPositionCalculator {
2994
3015
  * @param {number} centerY - Y coordinate of center
2995
3016
  * @param {number} iconSize - Size of the icon
2996
3017
  */
2997
- static _distributeClusterByAngle(positions, radius, minAngularDistance, centerX, centerY, iconSize) {
3018
+ static _distributeClusterByPush(positions, radius, minAngularDistance, centerX, centerY, iconSize) {
2998
3019
  const n = positions.length;
2999
-
3000
- // If only one planet, keep its original position
3001
- if (n === 1) {
3002
- this._setExactPosition(positions[0], positions[0].longitude, radius, centerX, centerY, iconSize);
3020
+ if (n <= 1) {
3021
+ const p = positions[0];
3022
+ this._setExactPosition(p, this._getAngle(p), radius, centerX, centerY, iconSize);
3003
3023
  return;
3004
3024
  }
3005
-
3006
- // Sort positions by their original longitude to maintain order
3007
- positions.sort((a, b) => a.longitude - b.longitude);
3008
-
3009
- // Calculate central angle and total span
3010
- const firstPos = positions[0].longitude;
3011
- const lastPos = positions[n-1].longitude;
3012
- let totalArc = lastPos - firstPos;
3013
-
3014
- // Handle wrap-around case (e.g., positions at 350° and 10°)
3015
- if (totalArc < 0 || totalArc > 180) {
3016
- totalArc = (360 + lastPos - firstPos) % 360;
3025
+
3026
+ // Unwrap angles if cluster spans the 0°/360° boundary
3027
+ const baseAngles = positions.map(p => this._getAngle(p));
3028
+ const min = Math.min(...baseAngles);
3029
+ const max = Math.max(...baseAngles);
3030
+ const unwrappedAngles = (max - min > 180)
3031
+ ? baseAngles.map(a => (a < 180 ? a + 360 : a))
3032
+ : baseAngles;
3033
+
3034
+ // Sort by unwrapped angle
3035
+ const items = positions
3036
+ .map((p, idx) => ({ p, orig: unwrappedAngles[idx] }))
3037
+ .sort((a, b) => a.orig - b.orig);
3038
+
3039
+ const origAngles = items.map(it => it.orig);
3040
+ let adjusted = [...origAngles];
3041
+
3042
+ // Forward pass: enforce minimum distance
3043
+ for (let i = 1; i < n; i++) {
3044
+ const minAllowed = adjusted[i - 1] + minAngularDistance;
3045
+ if (adjusted[i] < minAllowed) {
3046
+ adjusted[i] = minAllowed;
3047
+ }
3017
3048
  }
3018
-
3019
- // Calculate the center of the cluster (weighted average of all positions)
3020
- let sumAngles = 0;
3021
- for (let i = 0; i < n; i++) {
3022
- sumAngles += positions[i].longitude;
3049
+
3050
+ // Shift the whole cluster to keep it centered around the original mean angle
3051
+ const origCenter = origAngles.reduce((s, a) => s + a, 0) / n;
3052
+ const adjustedCenter = adjusted.reduce((s, a) => s + a, 0) / n;
3053
+ const shift = origCenter - adjustedCenter;
3054
+ adjusted = adjusted.map(a => a + shift);
3055
+
3056
+ // Re-enforce constraints after shifting
3057
+ for (let i = 1; i < n; i++) {
3058
+ const minAllowed = adjusted[i - 1] + minAngularDistance;
3059
+ if (adjusted[i] < minAllowed) {
3060
+ adjusted[i] = minAllowed;
3061
+ }
3023
3062
  }
3024
- let centerAngle = (sumAngles / n) % 360;
3025
-
3026
- // Determine minimum arc needed for n planets with minimum spacing
3027
- // minAngularDistance already includes the desired spacing
3028
- const minRequiredArc = (n - 1) * minAngularDistance;
3029
-
3030
- // Always use at least the minimum required arc
3031
- const spanToUse = Math.max(minRequiredArc, totalArc);
3032
-
3033
- // Calculate start angle (center - half of span)
3034
- const startAngle = (centerAngle - spanToUse/2 + 360) % 360;
3035
-
3036
- // Distribute planets evenly from the start angle
3063
+ for (let i = n - 2; i >= 0; i--) {
3064
+ const maxAllowed = adjusted[i + 1] - minAngularDistance;
3065
+ if (adjusted[i] > maxAllowed) {
3066
+ adjusted[i] = maxAllowed;
3067
+ }
3068
+ }
3069
+
3070
+ // Apply results
3037
3071
  for (let i = 0; i < n; i++) {
3038
- const angle = (startAngle + i * (spanToUse / (n-1))) % 360;
3039
- this._setExactPosition(positions[i], angle, radius, centerX, centerY, iconSize);
3072
+ const angle = this._normalizeAngle(adjusted[i]);
3073
+ this._setExactPosition(items[i].p, angle, radius, centerX, centerY, iconSize);
3040
3074
  }
3041
3075
  }
3042
3076
 
@@ -3236,7 +3270,7 @@ class PrimaryPlanetRenderer extends BasePlanetRenderer {
3236
3270
  this.symbolRenderer.addPlanetTooltip(planetGroup, planet);
3237
3271
 
3238
3272
  // Render connector if needed
3239
- const connector = this.symbolRenderer.renderConnector(planetGroup, planet, iconSize);
3273
+ const connector = this.symbolRenderer.renderConnector(planetGroup, planet, iconSize, 0.9);
3240
3274
  if (connector) {
3241
3275
  planetGroup.appendChild(connector);
3242
3276
  }
@@ -3418,7 +3452,7 @@ class SecondaryPlanetRenderer extends BasePlanetRenderer {
3418
3452
  this.symbolRenderer.addPlanetTooltip(planetGroup, planet);
3419
3453
 
3420
3454
  // Render connector if needed
3421
- const connector = this.symbolRenderer.renderConnector(planetGroup, planet, iconSize);
3455
+ const connector = this.symbolRenderer.renderConnector(planetGroup, planet, iconSize, 0.9);
3422
3456
  if (connector) {
3423
3457
  planetGroup.appendChild(connector);
3424
3458
  }
@@ -5457,8 +5491,13 @@ class ChartRenderer {
5457
5491
  const centerY = this.chart.config.svg.center.y;
5458
5492
  const c3Radius = this.chart.config.radius.innermost; // C3
5459
5493
 
5460
- // Only draw the innermost circle if secondary planets are enabled
5461
- if (this.chart.config.planetSettings.secondaryEnabled !== false) {
5494
+ // Only draw the innermost circle if secondary planets are enabled AND we actually have secondary data
5495
+ const hasSecondaryPlanetsData =
5496
+ this.chart?.secondaryPlanets &&
5497
+ typeof this.chart.secondaryPlanets === 'object' &&
5498
+ Object.keys(this.chart.secondaryPlanets).length > 0;
5499
+
5500
+ if (this.chart.config.planetSettings.secondaryEnabled !== false && hasSecondaryPlanetsData) {
5462
5501
  this.drawInnermostCircle(zodiacGroup, this.svgUtils, centerX, centerY, c3Radius);
5463
5502
  }
5464
5503