@roxyapi/ui 0.6.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +18 -1
- package/README.md +31 -2
- package/THEMING.md +1 -1
- package/dist/cdn/components/ashtakavarga-grid.js +1 -1
- package/dist/cdn/components/ashtakavarga-grid.js.map +2 -2
- package/dist/cdn/components/biorhythm-chart.js +3 -3
- package/dist/cdn/components/biorhythm-chart.js.map +2 -2
- package/dist/cdn/components/bodygraph.js +54 -0
- package/dist/cdn/components/bodygraph.js.map +7 -0
- package/dist/cdn/components/choghadiya-grid.js +1 -1
- package/dist/cdn/components/choghadiya-grid.js.map +2 -2
- package/dist/cdn/components/compatibility-card.js +1 -1
- package/dist/cdn/components/compatibility-card.js.map +2 -2
- package/dist/cdn/components/dasha-timeline.js +2 -2
- package/dist/cdn/components/dasha-timeline.js.map +2 -2
- package/dist/cdn/components/divisional-chart.js +2 -2
- package/dist/cdn/components/divisional-chart.js.map +2 -2
- package/dist/cdn/components/endpoint-form.js +2 -2
- package/dist/cdn/components/endpoint-form.js.map +2 -2
- package/dist/cdn/components/forecast-timeline.js +45 -0
- package/dist/cdn/components/forecast-timeline.js.map +7 -0
- package/dist/cdn/components/guna-milan.js +1 -1
- package/dist/cdn/components/guna-milan.js.map +2 -2
- package/dist/cdn/components/hexagram.js +1 -1
- package/dist/cdn/components/hexagram.js.map +2 -2
- package/dist/cdn/components/horoscope-card.js +1 -1
- package/dist/cdn/components/horoscope-card.js.map +2 -2
- package/dist/cdn/components/kp-chart.js +1 -1
- package/dist/cdn/components/kp-chart.js.map +2 -2
- package/dist/cdn/components/kp-ruling-planets.js +1 -1
- package/dist/cdn/components/kp-ruling-planets.js.map +2 -2
- package/dist/cdn/components/location-search.js +1 -1
- package/dist/cdn/components/location-search.js.map +2 -2
- package/dist/cdn/components/nakshatra-card.js +1 -1
- package/dist/cdn/components/nakshatra-card.js.map +2 -2
- package/dist/cdn/components/natal-chart.js +4 -4
- package/dist/cdn/components/natal-chart.js.map +2 -2
- package/dist/cdn/components/numerology-card.js +2 -2
- package/dist/cdn/components/numerology-card.js.map +2 -2
- package/dist/cdn/components/panchang-table.js +3 -3
- package/dist/cdn/components/panchang-table.js.map +3 -3
- package/dist/cdn/components/shadbala-table.js +1 -1
- package/dist/cdn/components/shadbala-table.js.map +2 -2
- package/dist/cdn/components/synastry-chart.js +3 -3
- package/dist/cdn/components/synastry-chart.js.map +2 -2
- package/dist/cdn/components/transits-table.js +2 -2
- package/dist/cdn/components/transits-table.js.map +2 -2
- package/dist/cdn/components/vedic-kundli.js +10 -10
- package/dist/cdn/components/vedic-kundli.js.map +2 -2
- package/dist/cdn/components/vedic-planets-table.js +3 -3
- package/dist/cdn/components/vedic-planets-table.js.map +4 -4
- package/dist/cdn/components/yoga-list.js +2 -2
- package/dist/cdn/components/yoga-list.js.map +2 -2
- package/dist/cdn/roxy-ui.js +55 -46
- package/dist/cdn/roxy-ui.js.map +4 -4
- package/dist/components/ashtakavarga-grid.js +1 -1
- package/dist/components/ashtakavarga-grid.js.map +3 -3
- package/dist/components/biorhythm-chart.js +1 -1
- package/dist/components/biorhythm-chart.js.map +2 -2
- package/dist/components/bodygraph.d.ts +27 -0
- package/dist/components/bodygraph.d.ts.map +1 -0
- package/dist/components/bodygraph.js +11 -0
- package/dist/components/bodygraph.js.map +7 -0
- package/dist/components/choghadiya-grid.js +1 -1
- package/dist/components/choghadiya-grid.js.map +2 -2
- package/dist/components/compatibility-card.js +1 -1
- package/dist/components/compatibility-card.js.map +2 -2
- package/dist/components/dasha-timeline.js +1 -1
- package/dist/components/dasha-timeline.js.map +2 -2
- package/dist/components/divisional-chart.js +2 -2
- package/dist/components/divisional-chart.js.map +2 -2
- package/dist/components/endpoint-form.js +1 -1
- package/dist/components/endpoint-form.js.map +2 -2
- package/dist/components/forecast-timeline.d.ts +38 -0
- package/dist/components/forecast-timeline.d.ts.map +1 -0
- package/dist/components/forecast-timeline.js +2 -0
- package/dist/components/forecast-timeline.js.map +7 -0
- package/dist/components/guna-milan.js +1 -1
- package/dist/components/guna-milan.js.map +2 -2
- package/dist/components/hexagram.js +1 -1
- package/dist/components/hexagram.js.map +2 -2
- package/dist/components/horoscope-card.js +1 -1
- package/dist/components/horoscope-card.js.map +2 -2
- package/dist/components/kp-chart.js +1 -1
- package/dist/components/kp-chart.js.map +2 -2
- package/dist/components/kp-ruling-planets.js +1 -1
- package/dist/components/kp-ruling-planets.js.map +2 -2
- package/dist/components/location-search.js +1 -1
- package/dist/components/location-search.js.map +2 -2
- package/dist/components/nakshatra-card.js +1 -1
- package/dist/components/nakshatra-card.js.map +2 -2
- package/dist/components/natal-chart.js +2 -2
- package/dist/components/natal-chart.js.map +2 -2
- package/dist/components/numerology-card.js +1 -1
- package/dist/components/numerology-card.js.map +2 -2
- package/dist/components/panchang-table.d.ts +22 -1
- package/dist/components/panchang-table.d.ts.map +1 -1
- package/dist/components/panchang-table.js +1 -1
- package/dist/components/panchang-table.js.map +3 -3
- package/dist/components/shadbala-table.js +1 -1
- package/dist/components/shadbala-table.js.map +2 -2
- package/dist/components/synastry-chart.js +4 -4
- package/dist/components/synastry-chart.js.map +2 -2
- package/dist/components/transits-table.js +1 -1
- package/dist/components/transits-table.js.map +2 -2
- package/dist/components/vedic-kundli.js +2 -2
- package/dist/components/vedic-kundli.js.map +2 -2
- package/dist/components/vedic-planets-table.d.ts +14 -0
- package/dist/components/vedic-planets-table.d.ts.map +1 -1
- package/dist/components/vedic-planets-table.js +1 -1
- package/dist/components/vedic-planets-table.js.map +4 -4
- package/dist/components/yoga-list.js +1 -1
- package/dist/components/yoga-list.js.map +2 -2
- package/dist/index.cjs +53 -44
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +52 -43
- package/dist/index.js.map +4 -4
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.json +2 -0
- package/dist/styles/tokens.css +4 -4
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types.gen.d.ts +6058 -1431
- package/dist/types/types.gen.d.ts.map +1 -1
- package/dist/utils/bodygraph-render.d.ts +105 -0
- package/dist/utils/bodygraph-render.d.ts.map +1 -0
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/ashtakavarga-grid.ts +1 -1
- package/src/components/biorhythm-chart.ts +1 -1
- package/src/components/bodygraph.ts +390 -0
- package/src/components/choghadiya-grid.ts +1 -1
- package/src/components/compatibility-card.ts +2 -2
- package/src/components/dasha-timeline.ts +3 -3
- package/src/components/endpoint-form.ts +2 -2
- package/src/components/forecast-timeline.ts +336 -0
- package/src/components/guna-milan.ts +1 -1
- package/src/components/hexagram.ts +3 -3
- package/src/components/horoscope-card.ts +1 -1
- package/src/components/kp-chart.ts +1 -1
- package/src/components/kp-ruling-planets.ts +1 -1
- package/src/components/location-search.ts +1 -1
- package/src/components/nakshatra-card.ts +1 -1
- package/src/components/natal-chart.ts +5 -5
- package/src/components/numerology-card.ts +2 -2
- package/src/components/panchang-table.ts +112 -18
- package/src/components/shadbala-table.ts +1 -1
- package/src/components/synastry-chart.ts +4 -4
- package/src/components/transits-table.ts +1 -1
- package/src/components/vedic-planets-table.ts +221 -3
- package/src/components/yoga-list.ts +1 -1
- package/src/index.ts +4 -0
- package/src/manifest.ts +26 -0
- package/src/styles/tokens.css +4 -4
- package/src/types/index.ts +1 -1
- package/src/types/types.gen.ts +5999 -1287
- package/src/utils/bodygraph-render.ts +641 -0
- package/src/utils/kundli-styles.ts +2 -2
- package/src/utils/tablist.ts +1 -1
- package/src/version.ts +1 -1
package/dist/cdn/roxy-ui.js
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
|
-
"use strict";var RoxyUI=(()=>{var
|
|
2
|
-
\f\r]`,
|
|
3
|
-
\f\r"'\`<>=]|("|')|))|$)`,"g"),Wt=/'/g,Jt=/"/g,er=/^(?:script|style|textarea|title)$/i,At=n=>(a,...e)=>({_$litType$:n,strings:a,values:e}),s=At(1),k=At(2),Ea=At(3),Ee=Symbol.for("lit-noChange"),l=Symbol.for("lit-nothing"),Xt=new WeakMap,Ae=Ce.createTreeWalker(Ce,129);function tr(n,a){if(!St(n)||!n.hasOwnProperty("raw"))throw Error("invalid template strings array");return Yt!==void 0?Yt.createHTML(a):a}var Tr=(n,a)=>{let e=n.length-1,t=[],r,o=a===2?"<svg>":a===3?"<math>":"",i=Ie;for(let c=0;c<e;c++){let d=n[c],p,g,h=-1,y=0;for(;y<d.length&&(i.lastIndex=y,g=i.exec(d),g!==null);)y=i.lastIndex,i===Ie?g[1]==="!--"?i=Ut:g[1]!==void 0?i=Ft:g[2]!==void 0?(er.test(g[2])&&(r=RegExp("</"+g[2],"g")),i=Se):g[3]!==void 0&&(i=Se):i===Se?g[0]===">"?(i=r??Ie,h=-1):g[1]===void 0?h=-2:(h=i.lastIndex-g[2].length,p=g[1],i=g[3]===void 0?Se:g[3]==='"'?Jt:Wt):i===Jt||i===Wt?i=Se:i===Ut||i===Ft?i=Ie:(i=Se,r=void 0);let S=i===Se&&n[c+1].startsWith("/>")?" ":"";o+=i===Ie?d+Lr:h>=0?(t.push(p),d.slice(0,h)+Zt+d.slice(h)+pe+S):d+pe+(h===-2?c:S)}return[tr(n,o+(n[e]||"<?>")+(a===2?"</svg>":a===3?"</math>":"")),t]},qe=class n{constructor({strings:a,_$litType$:e},t){let r;this.parts=[];let o=0,i=0,c=a.length-1,d=this.parts,[p,g]=Tr(a,e);if(this.el=n.createElement(p,t),Ae.currentNode=this.el.content,e===2||e===3){let h=this.el.content.firstChild;h.replaceWith(...h.childNodes)}for(;(r=Ae.nextNode())!==null&&d.length<c;){if(r.nodeType===1){if(r.hasAttributes())for(let h of r.getAttributeNames())if(h.endsWith(Zt)){let y=g[i++],S=r.getAttribute(h).split(pe),w=/([.?@])?(.*)/.exec(y);d.push({type:1,index:o,name:w[2],strings:S,ctor:w[1]==="."?bt:w[1]==="?"?vt:w[1]==="@"?$t:Re}),r.removeAttribute(h)}else h.startsWith(pe)&&(d.push({type:6,index:o}),r.removeAttribute(h));if(er.test(r.tagName)){let h=r.textContent.split(pe),y=h.length-1;if(y>0){r.textContent=rt?rt.emptyScript:"";for(let S=0;S<y;S++)r.append(h[S],Be()),Ae.nextNode(),d.push({type:2,index:++o});r.append(h[y],Be())}}}else if(r.nodeType===8)if(r.data===Qt)d.push({type:2,index:o});else{let h=-1;for(;(h=r.data.indexOf(pe,h+1))!==-1;)d.push({type:7,index:o}),h+=pe.length-1}o++}}static createElement(a,e){let t=Ce.createElement("template");return t.innerHTML=a,t}};function Te(n,a,e=n,t){if(a===Ee)return a;let r=t!==void 0?e._$Co?.[t]:e._$Cl,o=Ke(a)?void 0:a._$litDirective$;return r?.constructor!==o&&(r?._$AO?.(!1),o===void 0?r=void 0:(r=new o(n),r._$AT(n,e,t)),t!==void 0?(e._$Co??=[])[t]=r:e._$Cl=r),r!==void 0&&(a=Te(n,r._$AS(n,a.values),r,t)),a}var ft=class{constructor(a,e){this._$AV=[],this._$AN=void 0,this._$AD=a,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(a){let{el:{content:e},parts:t}=this._$AD,r=(a?.creationScope??Ce).importNode(e,!0);Ae.currentNode=r;let o=Ae.nextNode(),i=0,c=0,d=t[0];for(;d!==void 0;){if(i===d.index){let p;d.type===2?p=new Ve(o,o.nextSibling,this,a):d.type===1?p=new d.ctor(o,d.name,d.strings,this,a):d.type===6&&(p=new wt(o,this,a)),this._$AV.push(p),d=t[++c]}i!==d?.index&&(o=Ae.nextNode(),i++)}return Ae.currentNode=Ce,r}p(a){let e=0;for(let t of this._$AV)t!==void 0&&(t.strings!==void 0?(t._$AI(a,t,e),e+=t.strings.length-2):t._$AI(a[e])),e++}},Ve=class n{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(a,e,t,r){this.type=2,this._$AH=l,this._$AN=void 0,this._$AA=a,this._$AB=e,this._$AM=t,this.options=r,this._$Cv=r?.isConnected??!0}get parentNode(){let a=this._$AA.parentNode,e=this._$AM;return e!==void 0&&a?.nodeType===11&&(a=e.parentNode),a}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(a,e=this){a=Te(this,a,e),Ke(a)?a===l||a==null||a===""?(this._$AH!==l&&this._$AR(),this._$AH=l):a!==this._$AH&&a!==Ee&&this._(a):a._$litType$!==void 0?this.$(a):a.nodeType!==void 0?this.T(a):Pr(a)?this.k(a):this._(a)}O(a){return this._$AA.parentNode.insertBefore(a,this._$AB)}T(a){this._$AH!==a&&(this._$AR(),this._$AH=this.O(a))}_(a){this._$AH!==l&&Ke(this._$AH)?this._$AA.nextSibling.data=a:this.T(Ce.createTextNode(a)),this._$AH=a}$(a){let{values:e,_$litType$:t}=a,r=typeof t=="number"?this._$AC(a):(t.el===void 0&&(t.el=qe.createElement(tr(t.h,t.h[0]),this.options)),t);if(this._$AH?._$AD===r)this._$AH.p(e);else{let o=new ft(r,this),i=o.u(this.options);o.p(e),this.T(i),this._$AH=o}}_$AC(a){let e=Xt.get(a.strings);return e===void 0&&Xt.set(a.strings,e=new qe(a)),e}k(a){St(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,t,r=0;for(let o of a)r===e.length?e.push(t=new n(this.O(Be()),this.O(Be()),this,this.options)):t=e[r],t._$AI(o),r++;r<e.length&&(this._$AR(t&&t._$AB.nextSibling,r),e.length=r)}_$AR(a=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);a!==this._$AB;){let t=Vt(a).nextSibling;Vt(a).remove(),a=t}}setConnected(a){this._$AM===void 0&&(this._$Cv=a,this._$AP?.(a))}},Re=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(a,e,t,r,o){this.type=1,this._$AH=l,this._$AN=void 0,this.element=a,this.name=e,this._$AM=r,this.options=o,t.length>2||t[0]!==""||t[1]!==""?(this._$AH=Array(t.length-1).fill(new String),this.strings=t):this._$AH=l}_$AI(a,e=this,t,r){let o=this.strings,i=!1;if(o===void 0)a=Te(this,a,e,0),i=!Ke(a)||a!==this._$AH&&a!==Ee,i&&(this._$AH=a);else{let c=a,d,p;for(a=o[0],d=0;d<o.length-1;d++)p=Te(this,c[t+d],e,d),p===Ee&&(p=this._$AH[d]),i||=!Ke(p)||p!==this._$AH[d],p===l?a=l:a!==l&&(a+=(p??"")+o[d+1]),this._$AH[d]=p}i&&!r&&this.j(a)}j(a){a===l?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,a??"")}},bt=class extends Re{constructor(){super(...arguments),this.type=3}j(a){this.element[this.name]=a===l?void 0:a}},vt=class extends Re{constructor(){super(...arguments),this.type=4}j(a){this.element.toggleAttribute(this.name,!!a&&a!==l)}},$t=class extends Re{constructor(a,e,t,r,o){super(a,e,t,r,o),this.type=5}_$AI(a,e=this){if((a=Te(this,a,e,0)??l)===Ee)return;let t=this._$AH,r=a===l&&t!==l||a.capture!==t.capture||a.once!==t.once||a.passive!==t.passive,o=a!==l&&(t===l||r);r&&this.element.removeEventListener(this.name,this,t),o&&this.element.addEventListener(this.name,this,a),this._$AH=a}handleEvent(a){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,a):this._$AH.handleEvent(a)}},wt=class{constructor(a,e,t){this.element=a,this.type=6,this._$AN=void 0,this._$AM=e,this.options=t}get _$AU(){return this._$AM._$AU}_$AI(a){Te(this,a)}};var Rr=kt.litHtmlPolyfillSupport;Rr?.(qe,Ve),(kt.litHtmlVersions??=[]).push("3.3.2");var rr=(n,a,e)=>{let t=e?.renderBefore??a,r=t._$litPart$;if(r===void 0){let o=e?.renderBefore??null;t._$litPart$=r=new Ve(a.insertBefore(Be(),o),o,void 0,e??{})}return r._$AI(n),r};var Ct=globalThis,f=class extends V{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let a=super.createRenderRoot();return this.renderOptions.renderBefore??=a.firstChild,a}update(a){let e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(a),this._$Do=rr(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Ee}};f._$litElement$=!0,f.finalized=!0,Ct.litElementHydrateSupport?.({LitElement:f});var Mr=Ct.litElementPolyfillSupport;Mr?.({LitElement:f});(Ct.litElementVersions??=[]).push("4.2.2");var b=n=>(a,e)=>{e!==void 0?e.addInitializer(()=>{customElements.define(n,a)}):customElements.define(n,a)};var Nr={attribute:!0,type:String,converter:je,reflect:!1,hasChanged:tt},zr=(n=Nr,a,e)=>{let{kind:t,metadata:r}=e,o=globalThis.litPropertyMetadata.get(r);if(o===void 0&&globalThis.litPropertyMetadata.set(r,o=new Map),t==="setter"&&((n=Object.create(n)).wrapped=!0),o.set(e.name,n),t==="accessor"){let{name:i}=e;return{set(c){let d=a.get.call(this);a.set.call(this,c),this.requestUpdate(i,d,n,!0,c)},init(c){return c!==void 0&&this.C(i,void 0,n,c),c}}}if(t==="setter"){let{name:i}=e;return function(c){let d=this[i];a.call(this,c),this.requestUpdate(i,d,n,!0,c)}}throw Error("Unsupported decorator location: "+t)};function u(n){return(a,e)=>typeof e=="object"?zr(n,a,e):((t,r,o)=>{let i=r.hasOwnProperty(o);return r.constructor.createProperty(o,t),i?Object.getOwnPropertyDescriptor(r,o):void 0})(n,a,e)}function R(n){return u({...n,state:!0,attribute:!1})}var N={Sun:"\u2609",Moon:"\u263D",Mercury:"\u263F",Venus:"\u2640",Earth:"\u2641",Mars:"\u2642",Jupiter:"\u2643",Saturn:"\u2644",Uranus:"\u2645",Neptune:"\u2646",Pluto:"\u2647",Rahu:"\u260A",Ketu:"\u260B",Ascendant:"Asc",Lagna:"La",NorthNode:"\u260A",SouthNode:"\u260B","North node":"\u260A","South node":"\u260B",Chiron:"\u26B7",Lilith:"\u26B8","Black moon lilith":"\u26B8"},ar={Sun:"Su",Moon:"Mo",Mercury:"Me",Venus:"Ve",Mars:"Ma",Jupiter:"Ju",Saturn:"Sa",Uranus:"Ur",Neptune:"Ne",Pluto:"Pl",Rahu:"Ra",Ketu:"Ke",Ascendant:"Asc",Lagna:"La"},G={Aries:"\u2648",Taurus:"\u2649",Gemini:"\u264A",Cancer:"\u264B",Leo:"\u264C",Virgo:"\u264D",Libra:"\u264E",Scorpio:"\u264F",Sagittarius:"\u2650",Capricorn:"\u2651",Aquarius:"\u2652",Pisces:"\u2653"},st={Aries:"Ar",Taurus:"Ta",Gemini:"Ge",Cancer:"Cn",Leo:"Le",Virgo:"Vi",Libra:"Li",Scorpio:"Sc",Sagittarius:"Sg",Capricorn:"Cp",Aquarius:"Aq",Pisces:"Pi"},_=["Aries","Taurus","Gemini","Cancer","Leo","Virgo","Libra","Scorpio","Sagittarius","Capricorn","Aquarius","Pisces"],hs=_.map(n=>n.toLowerCase()),Et={conjunction:"\u260C",opposition:"\u260D",trine:"\u25B3",square:"\u25A1",sextile:"\u2731",quincunx:"\u22BB",semisextile:"\u22BC"},Lt={heaven:"\u2630",lake:"\u2631",fire:"\u2632",thunder:"\u2633",wind:"\u2634",water:"\u2635",mountain:"\u2636",earth:"\u2637",Heaven:"\u2630",Lake:"\u2631",Fire:"\u2632",Thunder:"\u2633",Wind:"\u2634",Water:"\u2635",Mountain:"\u2636",Earth:"\u2637"},sr={"new moon":"\u{1F311}","waxing crescent":"\u{1F312}","first quarter":"\u{1F313}","waxing gibbous":"\u{1F314}","full moon":"\u{1F315}","waning gibbous":"\u{1F316}","last quarter":"\u{1F317}","waning crescent":"\u{1F318}"};var v=x`:host{font-family:var(--roxy-font-sans,system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);color:var(--roxy-fg,#0a0a0a);font-size:var(--roxy-text-base,1rem);line-height:var(--roxy-leading-normal,1.5);animation:roxy-fade-in var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1)) both;background:0 0;display:block;container-type:inline-size}*,:before,:after{box-sizing:border-box}@keyframes roxy-fade-in{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){:host{animation:none}}.roxy-skeleton{background:linear-gradient(90deg, var(--roxy-border,#e4e4e7) 0%, color-mix(in srgb, var(--roxy-border,#e4e4e7) 60%, transparent) 50%, var(--roxy-border,#e4e4e7) 100%);border-radius:var(--roxy-radius-md,8px);background-size:200% 100%;animation:1.4s ease-in-out infinite roxy-shimmer}@keyframes roxy-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media (prefers-reduced-motion:reduce){.roxy-skeleton{animation:none}}.roxy-empty{padding:var(--roxy-space-lg,1.5rem);color:var(--roxy-muted,#71717a);text-align:center;font-size:var(--roxy-text-sm,.875rem)}:host(:focus-within) .roxy-card{outline:2px solid var(--roxy-ring,#f59e0b66);outline-offset:2px}:host{font-variant-emoji:text}`;var _r="roxy-data";function Dr(n){return n.nodeName==="SCRIPT"&&n.getAttribute("type")==="application/json"}var $=class{constructor(a){this.host=a,a.addController(this)}hostConnected(){if(this.host.data!=null)return;let a=this.read();a!==void 0&&(this.host.data=a,this.host.requestUpdate())}read(){let a=this.findInlineScript();return a?this.parse(a.textContent):void 0}findInlineScript(){for(let a of Array.from(this.host.children))if(Dr(a)&&a.classList.contains(_r))return a;return null}parse(a){if(a?.trim())try{return JSON.parse(a)}catch{return}}};var Or={sarva:"Sarvashtakavarga",bhinna:"Bhinnashtakavarga",pinda:"Shodhya Pinda"},Le=["sarva","bhinna","pinda"],Y=class extends f{constructor(){super();this.data=null;this.activeTab="sarva";new $(this)}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No ashtakavarga data</div>`;let e=this.data.signs??[];return s`<div class="wrap" aria-label="Ashtakavarga grid"><div class="head"><h2 class="title">Ashtakavarga</h2>${e.length?s`<p class="subtitle">${e.length} signs</p>`:l}</div><div class="tablist" role="tablist" aria-label="Ashtakavarga views" @keydown="${this.onTabKeyDown}">${Le.map(t=>s`<button class="tab" role="tab" id="tab-${t}" aria-selected="${this.activeTab===t?"true":"false"}" aria-controls="panel-${t}" tabindex="${this.activeTab===t?"0":"-1"}" @click="${()=>{this.activeTab=t}}">${Or[t]}</button>`)}</div><div id="panel-${this.activeTab}" role="tabpanel" aria-labelledby="tab-${this.activeTab}">${this.activeTab==="sarva"?this.renderSarva(e):this.activeTab==="bhinna"?this.renderBhinna(e):this.renderPinda()}</div></div>`}onTabKeyDown(e){let t=Le.indexOf(this.activeTab);e.key==="ArrowRight"?(e.preventDefault(),this.activeTab=Le[(t+1)%Le.length],this.focusActiveTab()):e.key==="ArrowLeft"&&(e.preventDefault(),this.activeTab=Le[(t-1+Le.length)%Le.length],this.focusActiveTab())}focusActiveTab(){requestAnimationFrame(()=>{this.shadowRoot?.querySelector(`#tab-${this.activeTab}`)?.focus()})}bhinnaHeat(e){return e<=1?"heat-1":e<=2?"heat-2":e<=3?"heat-3":e<=4?"heat-4":e<=5?"heat-5":e<=6?"heat-6":"heat-7"}sarvaHeat(e){return e<=18?"heat-1":e<=23?"heat-2":e<=28?"heat-3":e<=32?"heat-4":e<=37?"heat-5":e<=42?"heat-6":"heat-7"}renderSarva(e){let t=this.data.sarvashtakavarga;return t?s`<div class="overflow-scroll"><table aria-label="Sarvashtakavarga bindu counts per sign"><thead><tr><th scope="col">Sign</th><th scope="col">Bindus</th></tr></thead><tbody>${e.map((r,o)=>{let i=t.bindus[o]??0,c=this.sarvaHeat(i);return s`<tr><td><div class="planet-cell"><span class="glyph" aria-hidden="true">${G[r]??""}</span> ${r}</div></td><td class="${`heat-cell ${c}`}">${i}</td></tr>`})}</tbody><tfoot><tr class="total-row"><td>Total</td><td>${t.total}</td></tr></tfoot></table></div>`:s`<p class="roxy-empty">No sarvashtakavarga data</p>`}renderBhinna(e){let t=this.data.bhinnashtakavarga;return t?.length?s`<div class="overflow-scroll"><table class="bhinna-table" aria-label="Bhinnashtakavarga planet-by-sign grid"><thead><tr><th scope="col">Planet</th>${e.map(r=>s`<th scope="col" title="${r}">${G[r]??r.slice(0,2)}</th>`)}<th scope="col">Total</th></tr></thead><tbody>${t.map(r=>s`<tr><td>${r.planet}</td>${r.bindus.map(o=>{let i=this.bhinnaHeat(o);return s`<td class="${`heat-cell ${i}`}">${o}</td>`})}<td>${r.total}</td></tr>`)}</tbody></table></div>`:s`<p class="roxy-empty">No bhinnashtakavarga data</p>`}renderPinda(){let e=this.data.shodhyaPinda;return e?.length?s`<div class="overflow-scroll"><table aria-label="Shodhya Pinda planet strength scores"><thead><tr><th scope="col">Planet</th><th scope="col">Rashi Pinda</th><th scope="col">Graha Pinda</th><th scope="col">Shodhya Pinda</th></tr></thead><tbody>${e.map(t=>s`<tr><td>${t.planet}</td><td>${t.rashiPinda}</td><td>${t.grahaPinda}</td><td>${t.shodhyaPinda}</td></tr>`)}</tbody></table></div>`:s`<p class="roxy-empty">No shodhya pinda data</p>`}};Y.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:baseline;gap:var(--roxy-space-md,1rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.subtitle{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);margin:0}.tablist{border-bottom:2px solid var(--roxy-border,#e4e4e7);gap:2px;display:flex}.tab{padding:var(--roxy-space-xs,.25rem) var(--roxy-space-md,1rem);font-size:var(--roxy-text-sm,.875rem);cursor:pointer;color:var(--roxy-muted,#71717a);transition:color var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,ease);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-2px;font-family:inherit}.tab[aria-selected=true]{color:var(--roxy-accent-fg,#b45309);border-bottom-color:var(--roxy-accent,#f59e0b);font-weight:var(--roxy-weight-bold,600)}.tab:hover:not([aria-selected=true]){color:var(--roxy-fg,#0a0a0a)}.overflow-scroll{-webkit-overflow-scrolling:touch;overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem)}th,td{padding:var(--roxy-space-sm,.5rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);text-align:center}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.06em}td:first-child,th:first-child{text-align:left}.glyph{margin-right:3px;font-size:1.1em;line-height:1}.planet-cell{white-space:nowrap;align-items:center;gap:4px;display:flex}.total-row td{font-weight:var(--roxy-weight-bold,600);border-top:2px solid var(--roxy-border,#e4e4e7);border-bottom:none}.heat-cell{border-radius:var(--roxy-radius-sm,4px);font-weight:var(--roxy-weight-bold,600);font-variant-numeric:tabular-nums;min-width:2rem;color:var(--roxy-fg,currentColor)}.heat-1{background:color-mix(in srgb, var(--roxy-heat,#ef4444) 6%, transparent)}.heat-2{background:color-mix(in srgb, var(--roxy-heat,#ef4444) 14%, transparent)}.heat-3{background:color-mix(in srgb, var(--roxy-heat,#ef4444) 26%, transparent)}.heat-4{background:color-mix(in srgb, var(--roxy-heat,#ef4444) 40%, transparent)}.heat-5{background:color-mix(in srgb, var(--roxy-heat,#ef4444) 55%, transparent)}.heat-6{background:color-mix(in srgb, var(--roxy-heat,#ef4444) 72%, transparent)}.heat-7{background:color-mix(in srgb, var(--roxy-heat,#ef4444) 90%, transparent)}.bhinna-table th:first-child,.bhinna-table td:first-child{min-width:5rem}@container (width<=480px){.bhinna-table th,.bhinna-table td{font-size:var(--roxy-text-xs,.75rem);padding:.3rem .35rem}.bhinna-table th:first-child,.bhinna-table td:first-child{min-width:3.5rem}.heat-cell{min-width:1.5rem}}.overflow-scroll{-webkit-mask-image:linear-gradient(90deg,#0000 0,#000 .5rem calc(100% - 1rem),#0000 100%);mask-image:linear-gradient(90deg,#0000 0,#000 .5rem calc(100% - 1rem),#0000 100%)}`],m([u({attribute:!1})],Y.prototype,"data",2),m([R()],Y.prototype,"activeTab",2),Y=m([b("roxy-ashtakavarga-grid")],Y);var or={physical:"#dc2626",emotional:"#0284c7",intellectual:"#16a34a",intuitive:"#a855f7",aesthetic:"#f59e0b",awareness:"#ec4899",spiritual:"#14b8a6",passion:"#ef4444",mastery:"#6366f1",wisdom:"#475569"},U=class extends f{constructor(){super();this.data=null;this.mode="daily";new $(this)}render(){let e=this.data;return e?this.mode==="critical-days"&&"criticalDays"in e?this.renderCritical(e):this.mode==="forecast"&&"days"in e?this.renderForecast(e):this.renderDaily(e):s`<div class="roxy-empty" role="status">No biorhythm data</div>`}renderDaily(e){let t=e.quickRead??{},r=Object.entries(t).map(([o,i])=>{let c=typeof i=="number"?i:0,d=Math.abs(c)>1?c/100:c;return[o,d]});return s`<section class="wrap" aria-label="Daily biorhythm"><header class="head"><h2 class="title">Biorhythm</h2>${typeof e.energyRating=="number"?s`<span class="energy">Energy ${e.energyRating}/10</span>`:l}</header><div class="bars" role="list">${r.map(([o,i])=>{let c=(i+1)/2*100,d=or[o]??"var(--roxy-accent, #f59e0b)";return s`<div class="bar" role="listitem"><span style="text-transform:capitalize">${o}</span> <span class="track"><span class="fill" style="width:${c}%;background:${d}"></span> </span><span class="value">${Math.round(i*100)}%</span></div>`})}</div>${e.dailyMessage?s`<p class="advice">${e.dailyMessage}</p>`:l} ${e.advice?s`<p class="advice">${e.advice}</p>`:l}</section>`}renderForecast(e){let t=e.days??[];if(t.length===0)return s`<div class="roxy-empty" role="status">No forecast</div>`;let r=600,o=160,i=r/Math.max(t.length-1,1),c=["physical","emotional","intellectual","intuitive"];return s`<section class="wrap" aria-label="Biorhythm forecast"><header class="head"><h2 class="title">Forecast</h2><span class="energy">${e.startDate} - ${e.endDate}</span></header><svg viewBox="0 0 ${r} ${o}" role="img" aria-label="Biorhythm cycle lines across the forecast window"><title>Biorhythm forecast</title><line x1="0" y1="${o/2}" x2="${r}" y2="${o/2}" stroke="var(--roxy-border, #e4e4e7)" stroke-width="1"/>${c.map(d=>{let p=t.map((h,y)=>{let S=h[d]??0,w=y*i,ke=o/2-S/100*(o/2-8);return`${w.toFixed(2)},${ke.toFixed(2)}`}).join(" "),g=or[d]??"#475569";return k`<polyline points=${p} fill="none" stroke=${g} stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />`})}</svg> ${e.summary?.periodAdvice?s`<p class="advice">${e.summary.periodAdvice}</p>`:l}</section>`}renderCritical(e){return s`<section class="wrap" aria-label="Critical days"><header class="head"><h2 class="title">Critical days</h2><span class="energy">${e.totalCriticalDays} total</span></header><div>${e.criticalDays.map(t=>s`<span class="crit">${t.date} · ${t.cycle} ${t.severity}</span>`)}</div></section>`}};U.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:center;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.energy{font-variant-numeric:tabular-nums;color:var(--roxy-accent-fg,#b45309);font-weight:var(--roxy-weight-bold,600)}.bars{gap:var(--roxy-space-xs,.25rem);display:grid}.bar{gap:var(--roxy-space-sm,.5rem);font-size:var(--roxy-text-sm,.875rem);grid-template-columns:8rem 1fr 3.5rem;align-items:center;display:grid}.track{background:var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-full,9999px);height:14px;position:relative;overflow:hidden}.fill{height:100%;transition:width var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));display:block}.value{font-variant-numeric:tabular-nums;text-align:right;color:var(--roxy-muted,#71717a)}.advice{color:var(--roxy-fg,#0a0a0a)}.alert{background:color-mix(in srgb, var(--roxy-warning,#ea580c) 12%, transparent);border:1px solid color-mix(in srgb, var(--roxy-warning,#ea580c) 32%, transparent);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-sm,.5rem);font-size:var(--roxy-text-sm,.875rem);margin:0}svg{width:100%;height:auto;display:block}.crit{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 12%, transparent);border-radius:var(--roxy-radius-sm,4px);font-size:var(--roxy-text-xs,.75rem);margin:2px;padding:4px 8px;display:inline-block}`],m([u({attribute:!1})],U.prototype,"data",2),m([u({type:String,reflect:!0})],U.prototype,"mode",2),U=m([b("roxy-biorhythm-chart")],U);function E(n){return n?n.charAt(0).toUpperCase()+n.slice(1).toLowerCase():""}function me(n){return n.replace(/[_-]+/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/^\w/,a=>a.toUpperCase())}function nr(n){try{let a=new Date(n);return Number.isNaN(a.getTime())?n:a.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}catch{return n}}var he=class extends f{constructor(){super();this.data=null;new $(this)}isCurrent(e){let t=Date.now(),r=Date.parse(e.start),o=Date.parse(e.end);return Number.isNaN(r)||Number.isNaN(o)?!1:t>=r&&t<o}renderTile(e){let t=e.effect==="Good"?"good":e.effect==="Bad"?"bad":"neutral",r=this.isCurrent(e),o=N[E(e.lord)]??"",i=`${nr(e.start)} - ${nr(e.end)}`;return s`<div class="cho-tile ${t}${r?" now":""}" role="listitem" aria-current="${r?"time":"false"}"><span class="tile-name">${e.name}${r?s`<span class="now-badge">Now</span>`:l} </span><span class="tile-time" aria-label="Time range">${i}</span> <span class="tile-lord">${o?s`<span aria-hidden="true">${o}</span>`:l} ${e.lord}</span></div>`}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No choghadiya data</div>`;let{date:e,dayChoghadiya:t,nightChoghadiya:r}=this.data;return s`<div class="wrap"><div class="header"><h2 class="title">Choghadiya</h2>${e?s`<p class="subtitle">${e}</p>`:l}</div><div class="cho-grid"><section class="period-col" aria-label="Day muhurta periods"><h3 class="period-heading">Day</h3><div role="list" aria-label="Daytime choghadiya">${t&&t.length>0?t.map(o=>this.renderTile(o)):s`<p class="roxy-empty" role="status">No daytime periods</p>`}</div></section><section class="period-col" aria-label="Night muhurta periods"><h3 class="period-heading">Night</h3><div role="list" aria-label="Nighttime choghadiya">${r&&r.length>0?r.map(o=>this.renderTile(o)):s`<p class="roxy-empty" role="status">No nighttime periods</p>`}</div></section></div></div>`}};he.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.header{gap:var(--roxy-space-xs,.25rem);display:grid}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.subtitle{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);margin:0}.cho-grid{gap:var(--roxy-space-md,1rem);grid-template-columns:1fr;display:grid}@media (width>=720px){.cho-grid{grid-template-columns:1fr 1fr}}.period-col{gap:var(--roxy-space-xs,.25rem);display:grid}.period-heading{font-size:var(--roxy-text-base,1rem);font-weight:var(--roxy-weight-bold,600);margin:0 0 var(--roxy-space-xs,.25rem);color:var(--roxy-fg,#0a0a0a)}.cho-tile{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);grid-template-columns:1fr auto;align-items:center;gap:.25em .75em;padding:.55em .85em;display:grid}.cho-tile.good{background:color-mix(in srgb, var(--roxy-success,#22c55e) 18%, transparent);border-color:color-mix(in srgb, var(--roxy-success,#22c55e) 45%, transparent);color:var(--roxy-fg,#0a0a0a)}.cho-tile.bad{background:color-mix(in srgb, var(--roxy-danger,#ef4444) 18%, transparent);border-color:color-mix(in srgb, var(--roxy-danger,#ef4444) 45%, transparent);color:var(--roxy-fg,#0a0a0a)}.cho-tile.neutral{color:var(--roxy-fg,#0a0a0a);background:0 0}.cho-tile.now{outline:2px solid var(--roxy-accent,#f59e0b);outline-offset:1px;box-shadow:0 0 0 4px color-mix(in srgb, var(--roxy-accent,#f59e0b) 18%, transparent)}.now-badge{font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);color:var(--roxy-accent-fg,#b45309);text-transform:uppercase;letter-spacing:.06em;margin-left:.4em;display:inline-block}.tile-name{font-size:var(--roxy-text-base,1rem);font-weight:var(--roxy-weight-bold,600);grid-column:1}.tile-time{font-size:var(--roxy-text-xs,.75rem);opacity:.8;white-space:nowrap;text-align:right;grid-area:1/2/3;align-self:center}.tile-lord{font-size:var(--roxy-text-sm,.875rem);opacity:.85;grid-column:1;align-items:center;gap:.25em;display:flex}`],m([u({attribute:!1})],he.prototype,"data",2),he=m([b("roxy-choghadiya-grid")],he);function I(n){if(typeof n!="string"||n.length===0||/^\d{4}-\d{2}-\d{2}$/.test(n))return"";let e=/^\d{2}:\d{2}(:\d{2})?$/.test(n)?`1970-01-01T${n}`:n,t=new Date(e);return Number.isNaN(t.getTime())?n:t.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit",hour12:!0})}function ot(n){if(typeof n!="string"||n.length===0)return"";let a=new Date(/^\d{4}-\d{2}-\d{2}$/.test(n)?`${n}T00:00:00`:n);return Number.isNaN(a.getTime())?n:a.toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})}function Pt(n){if(!n)return"";let a=I(n.start),e=I(n.end);return a&&e?`${a} - ${e}`:a||e||""}function C(n,a=1){return typeof n!="number"||!Number.isFinite(n)?"":n.toFixed(a).replace(/\.?0+$/,"")}function ir(n,a=1){let e=C(n,a);return e?`${e}%`:""}var Ye={conjunction:"aspect-conjunction",sextile:"aspect-sextile",square:"aspect-square",trine:"aspect-trine",opposition:"aspect-opposition"};function Me(n){return(n.type??"").toLowerCase().replace(/_/g,"-")}var F=class extends f{constructor(){super();this.data=null;this.mode="astrology";new $(this)}getBreakdown(){let e=this.data;if(!e)return{};if("categories"in e&&e.categories){let t={};for(let[r,o]of Object.entries(e.categories))typeof o=="number"&&Number.isFinite(o)&&(t[r]=o);return t}return{}}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No compatibility data</div>`;let t=e.overallScore,r=this.getBreakdown(),o="rating"in e?e.rating:void 0,i="archetype"in e?e.archetype:void 0,c="advice"in e?e.advice:void 0,d="summary"in e?e.summary:void 0,p="interpretation"in e?e.interpretation:void 0,g="strengths"in e?e.strengths:void 0,h="challenges"in e?e.challenges:void 0,y="keyAspects"in e?e.keyAspects:void 0;return s`<article class="card" aria-label="${`Compatibility (${this.mode})`}"><div class="head"><h2>${this.mode} compatibility</h2><div>${typeof t=="number"?s`<div class="score">${C(t,0)}</div>`:l} ${o?s`<div class="rating">${o}</div>`:l}</div></div>${Object.keys(r).length>0?s`<div role="list">${Object.entries(r).map(([S,w])=>s`<div class="bar-row" role="listitem"><span style="text-transform:capitalize">${S}</span> <span class="bar"><span style="width:${Math.max(0,Math.min(100,w))}%"></span></span> <span>${C(w,0)}</span></div>`)}</div>`:l} ${i?s`<p><span class="archetype">${i.label}</span> ${i.description?s`· ${i.description}`:l}</p>`:l} ${d?s`<p>${d}</p>`:l} ${p&&!d?s`<p>${p}</p>`:l} ${c?s`<p>${c}</p>`:l} ${(g?.length??0)>0||(h?.length??0)>0?s`<div class="lists">${g?.length?s`<div><h3>Strengths</h3><ul>${g.map(S=>s`<li>${S}</li>`)}</ul></div>`:l} ${h?.length?s`<div><h3>Challenges</h3><ul>${h.map(S=>s`<li>${S}</li>`)}</ul></div>`:l}</div>`:l} ${y?.length?s`<div><h3 style="margin:0 0 .25rem;font-size:var(--roxy-text-xs);color:var(--roxy-muted);text-transform:uppercase;letter-spacing:.06em">Key aspects</h3><ul style="margin:0;padding-left:1rem;font-size:var(--roxy-text-sm)">${y.slice(0,6).map(S=>s`<li>${Hr(S)}</li>`)}</ul></div>`:l}</article>`}};F.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-md,1rem);display:grid}.head{align-items:center;gap:var(--roxy-space-md,1rem);grid-template-columns:1fr auto;display:grid}.head h2{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);text-transform:capitalize;margin:0}.score{font-variant-numeric:tabular-nums;font-size:2rem;font-weight:var(--roxy-weight-bold,600);color:var(--roxy-accent-fg,#b45309);line-height:1}.rating{color:var(--roxy-secondary,#475569);font-size:var(--roxy-text-sm,.875rem)}.bar-row{gap:var(--roxy-space-sm,.5rem);font-size:var(--roxy-text-sm,.875rem);grid-template-columns:8rem 1fr 3.5rem;align-items:center;display:grid}.bar{background:var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-full,9999px);height:8px;overflow:hidden}.bar>span{background:var(--roxy-accent,#f59e0b);height:100%;transition:width var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));display:block}.bar-row>span:last-child{font-variant-numeric:tabular-nums;color:var(--roxy-muted,#71717a);text-align:right}.archetype{color:var(--roxy-accent-fg,#b45309);font-weight:var(--roxy-weight-bold,600)}.lists{gap:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));display:grid}.lists h3{margin:0 0 var(--roxy-space-xs,.25rem);font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.06em}.lists ul{padding-left:var(--roxy-space-md,1rem);margin:0}`],m([u({attribute:!1})],F.prototype,"data",2),m([u({type:String,reflect:!0})],F.prototype,"mode",2),F=m([b("roxy-compatibility-card")],F);function Hr(n){let a=n.type.toLowerCase().replace(/_/g,"-"),e=typeof n.orb=="number"?` (orb ${C(n.orb,1)}\xB0)`:"",t=[n.planet1,a,n.planet2].filter(Boolean).join(" ");return n.description?`${t}${e} \xB7 ${n.description}`:`${t}${e}`}var W=class extends f{constructor(){super();this.data=null;this.period="current";new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No dasha data</div>`;let t=this.collectPeriods(e),r=t.length?Math.max(...t.map(o=>o.durationYears)):0;return s`<div class="wrap" aria-label="Dasha timeline"><header class="head"><h2 class="title">${this.period==="major"?"Vimshottari Mahadasha":this.period==="sub"?"Antardasha":"Active dashas"}</h2>${"nakshatraName"in e&&e.nakshatraName?s`<div class="nakshatra">Moon nakshatra: ${e.nakshatraName} ${"nakshatraLord"in e&&e.nakshatraLord?s`(lord ${e.nakshatraLord})`:l}</div>`:l}</header>${this.renderBirthBalance(e)} ${this.period==="current"?this.renderCurrent(e):l} ${t.length>0?s`<div class="timeline" role="list">${t.map(o=>this.renderBar(o,r))}</div>`:l} ${this.renderActiveInterpretation(t)}</div>`}renderBirthBalance(e){if(!("birthDashaBalance"in e)||!e.birthDashaBalance)return l;let t=e.birthDashaBalance,r="nakshatraLord"in e&&e.nakshatraLord?e.nakshatraLord:"",o=t.years??0,i=t.months??0,c=t.days??0,d=[];o&&d.push(`${o}y`),i&&d.push(`${i}m`),c&&d.push(`${c}d`);let p=d.length?d.join(" "):"0d";return s`<p class="balance">Birth dasha balance: ${p} of ${r?s`<strong>${r}</strong>`:"the opening mahadasha"} remained at birth.</p>`}renderActiveInterpretation(e){let t=e.find(r=>this.isCurrent(r));return t?.interpretation?s`<div class="interp"><h3>${t.planet} mahadasha</h3><p>${t.interpretation}</p></div>`:l}renderCurrent(e){return"mahadasha"in e?s`<div class="current">${"mahadasha"in e&&e.mahadasha?s`<div><span>Mahadasha</span> <strong>${e.mahadasha.planet}</strong> ${"remainingInMahadasha"in e&&e.remainingInMahadasha?s`<small>${C(e.remainingInMahadasha.years+e.remainingInMahadasha.months/12,1)} years left</small>`:l}</div>`:l} ${"antardasha"in e&&e.antardasha?s`<div><span>Antardasha</span> <strong>${e.antardasha.planet}</strong> ${"remainingInAntardasha"in e&&e.remainingInAntardasha?s`<small>${C(e.remainingInAntardasha.years+e.remainingInAntardasha.months/12,1)} years left</small>`:l}</div>`:l} ${"pratyantardasha"in e&&e.pratyantardasha?s`<div><span>Pratyantardasha</span> <strong>${e.pratyantardasha.planet}</strong> ${"remainingInPratyantardasha"in e&&e.remainingInPratyantardasha?s`<small>${C(e.remainingInPratyantardasha.years+e.remainingInPratyantardasha.months/12,1)} years left</small>`:l}</div>`:l}</div>`:l}collectPeriods(e){return"mahadashas"in e&&e.mahadashas?.length?e.mahadashas:"antardashas"in e&&e.antardashas?.length?e.antardashas:[]}isCurrent(e){if(!e.startDate||!e.endDate)return!1;let t=Date.now(),r=Date.parse(e.startDate),o=Date.parse(e.endDate);return Number.isNaN(r)||Number.isNaN(o)?!1:t>=r&&t<o}progressIn(e){if(!e.startDate||!e.endDate)return-1;let t=Date.parse(e.startDate),r=Date.parse(e.endDate),o=Date.now();return Number.isNaN(t)||Number.isNaN(r)||o<t||o>=r||r<=t?-1:(o-t)/(r-t)}renderBar(e,t){let r=e.durationYears,o=t>0?r/t*100:0,i=this.isCurrent(e),c=i?this.progressIn(e):-1,d=i?"bar-track bar-now":"bar-track";return s`<div class="${i?"bar now":"bar"}" role="listitem" aria-current="${i?"time":"false"}"><span><strong>${e.planet}</strong>${i?s`<span class="now-badge">Now</span>`:l} </span><span class="${d}"><span class="bar-fill" style="width:${o}%"></span> ${c>=0?s`<span class="bar-progress" style="left:${c*o}%" aria-hidden="true"></span>`:l} </span><span class="dates">${e.startDate?lr(e.startDate):""} ${e.endDate?s`- ${lr(e.endDate)}`:""}</span></div>`}};W.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:center;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.nakshatra{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}.current{gap:var(--roxy-space-md,1rem);background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-md,1rem);box-shadow:var(--roxy-shadow-sm);grid-template-columns:repeat(auto-fit,minmax(10rem,1fr));display:grid}.current div span:first-child{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);text-transform:uppercase;letter-spacing:.06em;display:block}.current div strong{font-size:var(--roxy-text-base,1rem);color:var(--roxy-fg,#0a0a0a)}.balance{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);border-left:2px solid var(--roxy-border,#e4e4e7);padding-left:var(--roxy-space-sm,.5rem);margin:0}.timeline{gap:var(--roxy-space-xs,.25rem);display:grid}.bar{gap:var(--roxy-space-sm,.5rem);font-size:var(--roxy-text-sm,.875rem);grid-template-columns:5rem 1fr 8rem;align-items:center;display:grid}.bar.now strong{color:var(--roxy-accent-fg,#b45309)}.now-badge{font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);color:var(--roxy-accent-fg,#b45309);text-transform:uppercase;letter-spacing:.06em;margin-left:.4em;display:inline-block}.bar-track{background:var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-full,9999px);height:14px;position:relative;overflow:hidden}.bar-fill{background:var(--roxy-accent,#f59e0b);opacity:.45;height:100%;transition:width var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));display:block}.bar-now .bar-fill{opacity:1}.bar-progress{background:var(--roxy-accent-fg,#b45309);width:2px;box-shadow:0 0 0 2px color-mix(in srgb, var(--roxy-accent,#f59e0b) 35%, transparent);border-radius:2px;position:absolute;top:-2px;bottom:-2px}.dates{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);font-variant-numeric:tabular-nums;text-align:right}.interp{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);background:var(--roxy-bg,#fff)}.interp h3{font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600);margin:0}.interp p{margin:var(--roxy-space-sm,.5rem) 0 0;font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a)}`],m([u({attribute:!1})],W.prototype,"data",2),m([u({type:String,reflect:!0})],W.prototype,"period",2),W=m([b("roxy-dasha-timeline")],W);function lr(n){let a=n.match(/^(\d{4})/);return a?a[1]:n}var Gr=["title","name","label","heading","overview","summary"],jr=["imageUrl","image","icon","symbol"],Ir=["imageUrl","image"],Br=6,J=class extends f{constructor(){super();this.data=null;this.depth=0;new $(this)}render(){return this.data==null?s`<div class="roxy-empty" role="status">No data</div>`:this.depth>=Br?s`<div class="roxy-empty" role="status">…</div>`:s`<div class="roxy-card" aria-label="Generic data display">${this.renderValue(this.data)}</div>`}renderValue(e){return e==null?l:typeof e=="string"?s`<p>${e}</p>`:typeof e=="number"||typeof e=="boolean"?s`<p>${String(e)}</p>`:Array.isArray(e)?this.renderArray(e):this.renderObject(e)}renderArray(e){return e.length===0?s`<div class="roxy-empty" role="status">Empty list</div>`:e.every(o=>o===null||["string","number","boolean"].includes(typeof o))?s`<ul class="roxy-chips">${e.map(o=>s`<li>${String(o)}</li>`)}</ul>`:e.every(o=>o!==null&&typeof o=="object"&&!Array.isArray(o))?this.renderTable(e):s`<ol>${e.map(o=>s`<li>${this.renderValue(o)}</li>`)}</ol>`}renderTable(e){let t=this.collectKeys(e);return s`<table class="roxy-table" role="table"><thead><tr>${t.map(r=>s`<th>${me(r)}</th>`)}</tr></thead><tbody>${e.map(r=>s`<tr>${t.map(o=>s`<td>${this.formatPrimitive(r[o])}</td>`)}</tr>`)}</tbody></table>`}renderObject(e){let t=Gr.find(c=>typeof e[c]=="string"),r=jr.find(c=>typeof e[c]=="string"&&e[c].startsWith("http")),o=t!=="summary"&&typeof e.summary=="string"?"summary":null,i=Object.entries(e).filter(([c,d])=>c!==t&&c!==o&&!Ir.includes(c)&&d!==null&&d!==void 0);return s`${r?s`<img class="roxy-image" src="${String(e[r])}" alt="${t?String(e[t]):"illustration"}" loading="lazy">`:l} ${t?s`<h3 class="roxy-title">${e[t]}</h3>`:l} ${o?s`<p class="roxy-summary">${e[o]}</p>`:l} ${i.length>0?s`<dl class="roxy-rows">${i.map(([c,d])=>s`<dt>${me(c)}</dt><dd>${this.renderField(d)}</dd>`)}</dl>`:l}`}renderField(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):Array.isArray(e)&&e.every(r=>["string","number","boolean"].includes(typeof r))?s`<ul class="roxy-chips">${e.map(r=>s`<li>${String(r)}</li>`)}</ul>`:s`<roxy-data .data="${e}" .depth="${this.depth+1}"></roxy-data>`}formatPrimitive(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):Array.isArray(e)?e.map(String).join(", "):JSON.stringify(e)}collectKeys(e){let t=new Set;for(let r of e)for(let o of Object.keys(r))t.add(o);return Array.from(t)}};J.styles=[v,x`.roxy-card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-md,1rem);box-shadow:var(--roxy-shadow-sm)}.roxy-title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0 0 var(--roxy-space-sm,.5rem) 0;color:var(--roxy-primary,#0f172a);letter-spacing:var(--roxy-tracking-tight)}.roxy-summary{color:var(--roxy-secondary,#475569);margin:0 0 var(--roxy-space-md,1rem) 0;font-size:var(--roxy-text-sm,.875rem)}dl.roxy-rows{gap:var(--roxy-space-xs,.25rem) var(--roxy-space-md,1rem);grid-template-columns:minmax(8ch,max-content) 1fr;margin:0;display:grid}dl.roxy-rows dt{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);text-transform:capitalize}dl.roxy-rows dd{color:var(--roxy-fg,#0a0a0a);font-size:var(--roxy-text-sm,.875rem);word-break:break-word;margin:0}ul.roxy-chips{gap:var(--roxy-space-xs,.25rem);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}ul.roxy-chips li{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 14%, transparent);color:var(--roxy-fg,#0a0a0a);border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);padding:2px 8px}table.roxy-table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem)}table.roxy-table th,table.roxy-table td{border-bottom:1px solid var(--roxy-border,#e4e4e7);padding:var(--roxy-space-sm,.5rem);text-align:left;text-transform:none}table.roxy-table th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:capitalize;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.04em}.roxy-image{border-radius:var(--roxy-radius-md,8px);max-width:100%;height:auto;margin-bottom:var(--roxy-space-md,1rem)}.roxy-section{margin-bottom:var(--roxy-space-md,1rem)}.roxy-section h4{font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600);color:var(--roxy-secondary,#475569);margin:0 0 var(--roxy-space-xs,.25rem) 0;text-transform:capitalize}`],m([u({attribute:!1})],J.prototype,"data",2),m([u({attribute:!1})],J.prototype,"depth",2),J=m([b("roxy-data")],J);function B(n){let a=n%360;return a<0?a+360:a}function K(n){let a=B(n),e=Math.floor(a/30)%12,t=a%30,r=Math.floor(t),o=(t-r)*60,i=Math.floor(o),c=Math.round((o-i)*60);return{sign:_[e]??"Aries",signIndex:e,degree:r,minute:i,second:c}}function nt(n){let{sign:a,degree:e,minute:t}=K(n);return`${e}\xB0 ${a} ${String(t).padStart(2,"0")}'`}function Tt(n){return B(n+180)}function dr(n,a){let e=B(n),t=B(a)-e;return t<0&&(t+=360),B(e+t/2)}function P(n,a,e,t){let r=t*Math.PI/180;return{x:n+e*Math.cos(r),y:a+e*Math.sin(r)}}var ge=x`.roxy-tablist{border-bottom:2px solid var(--roxy-border,#e4e4e7);gap:2px;display:flex}.roxy-tab{padding:var(--roxy-space-xs,.25rem) var(--roxy-space-md,1rem);font-size:var(--roxy-text-sm,.875rem);cursor:pointer;color:var(--roxy-muted,#71717a);transition:color var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,ease);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-2px;font-family:inherit}.roxy-tab[aria-selected=true]{color:var(--roxy-accent-fg,#b45309);border-bottom-color:var(--roxy-accent,#f59e0b);font-weight:var(--roxy-weight-bold,600)}.roxy-tab:hover:not([aria-selected=true]){color:var(--roxy-fg,#0a0a0a)}.roxy-tab:focus-visible{outline:2px solid var(--roxy-ring,#f59e0b66);outline-offset:2px;border-radius:4px}`;function Ne(n){let{items:a,active:e,onSelect:t,label:r,idPrefix:o,controls:i=!1}=n;return s`<div class="roxy-tablist" role="tablist" aria-label="${r}" @keydown="${d=>{if(d.key!=="ArrowRight"&&d.key!=="ArrowLeft")return;d.preventDefault();let p=a.findIndex(S=>S.id===e);if(p===-1)return;let g=d.key==="ArrowRight"?1:-1,h=a[(p+g+a.length)%a.length];if(!h)return;t(h.id);let y=d.currentTarget.getRootNode();requestAnimationFrame(()=>{y.querySelector(`#${o}-tab-${h.id}`)?.focus()})}}">${a.map(d=>s`<button type="button" class="roxy-tab" role="tab" id="${o}-tab-${d.id}" aria-selected="${e===d.id?"true":"false"}" aria-controls="${i&&e===d.id?`${o}-panel-${d.id}`:l}" tabindex="${e===d.id?"0":"-1"}" @click="${()=>t(d.id)}">${d.label}</button>`)}</div>`}var j=400,T=20,O=j-2*T,z=j/2,Kr=Object.fromEntries(_.map(n=>[n.toLowerCase(),n])),qr=[{id:"north",label:"North"},{id:"south",label:"South"},{id:"east",label:"East"}],Vr="\u02B3";function cr(n,a){return typeof n.longitude!="number"||!Number.isFinite(n.longitude)?!1:K(n.longitude).sign.toLowerCase()!==a.toLowerCase()}function Yr(n,a){let e=ar[E(n.graha)]??n.graha.slice(0,2),t=n.isRetrograde?Vr:"";if(typeof n.longitude!="number"||!Number.isFinite(n.longitude)||cr(n,a))return`${e}${t}`;let{degree:r}=K(n.longitude);return`${e} ${r}\xB0${t}`}function Ur(n,a){let e=[E(n.graha)],t=cr(n,a);if(t&&e.push(`in ${a}`),typeof n.longitude=="number"&&Number.isFinite(n.longitude)){let r=K(n.longitude),o=String(r.minute).padStart(2,"0");e.push(t?`D1: ${r.degree}\xB0${o}' ${r.sign}`:`${r.degree}\xB0${o}' ${r.sign}`)}if(n.nakshatra?.name){let r=n.nakshatra.pada?` pada ${n.nakshatra.pada}`:"";e.push(`${n.nakshatra.name}${r}`)}return n.awastha&&e.push(n.awastha),n.isRetrograde&&e.push("retrograde"),e.join(" \xB7 ")}function Rt(n,a,e,t,r){let o=t-(n.length-1)*r/2;return n.map((i,c)=>{let d=o+c*r;return k`<text class="planet-text" x=${e} y=${d} text-anchor="middle" dominant-baseline="central">${Yr(i,a)}<title>${Ur(i,a)}</title></text>`})}function lt(n,a){let e={};for(let r of _)e[r.toLowerCase()]=[];let t="";for(let[r,o]of Object.entries(n??{})){let i=(o?.rashi??"").toLowerCase();if(r==="Lagna"||o?.graha==="Lagna"){t=Kr[i]??"";continue}!i||!(i in e)||e[i]?.push({graha:o.graha??r,longitude:o.longitude,nakshatra:o.nakshatra,isRetrograde:o.isRetrograde,awastha:o.awastha})}return{lagnaSign:t,placements:e,divisionLabel:a}}var Pe=O/4,Fr={Pisces:{col:0,row:0},Aries:{col:1,row:0},Taurus:{col:2,row:0},Gemini:{col:3,row:0},Cancer:{col:3,row:1},Leo:{col:3,row:2},Virgo:{col:3,row:3},Libra:{col:2,row:3},Scorpio:{col:1,row:3},Sagittarius:{col:0,row:3},Capricorn:{col:0,row:2},Aquarius:{col:0,row:1}};function Wr(n){let a=Fr[n]??{col:0,row:0};return{x:T+a.col*Pe,y:T+a.row*Pe,w:Pe,h:Pe}}function Jr(n){let a=T,e=T+Pe,t=T+2*Pe,r=T+3*Pe,o=j-T;return k`
|
|
1
|
+
"use strict";var RoxyUI=(()=>{var nt=Object.defineProperty;var Zt=Object.getOwnPropertyDescriptor;var zr=Object.getOwnPropertyNames;var _r=Object.prototype.hasOwnProperty;var Dr=(n,a)=>{for(var e in a)nt(n,e,{get:a[e],enumerable:!0})},Or=(n,a,e,t)=>{if(a&&typeof a=="object"||typeof a=="function")for(let r of zr(a))!_r.call(n,r)&&r!==e&&nt(n,r,{get:()=>a[r],enumerable:!(t=Zt(a,r))||t.enumerable});return n};var Hr=n=>Or(nt({},"__esModule",{value:!0}),n),p=(n,a,e,t)=>{for(var r=t>1?void 0:t?Zt(a,e):a,o=n.length-1,i;o>=0;o--)(i=n[o])&&(r=(t?i(a,e,r):i(r))||r);return t&&r&&nt(a,e,r),r};var rs={};Dr(rs,{ROXY_COMPONENTS:()=>St,ROXY_UI_COMPONENTS:()=>ts,ROXY_UI_VERSION:()=>Mr,RoxyAshtakavargaGrid:()=>W,RoxyBiorhythmChart:()=>J,RoxyBodygraph:()=>ue,RoxyChoghadiyaGrid:()=>ye,RoxyCompatibilityCard:()=>X,RoxyDashaTimeline:()=>Z,RoxyData:()=>Q,RoxyDivisionalChart:()=>te,RoxyDoshaCard:()=>re,RoxyEndpointForm:()=>H,RoxyForecastTimeline:()=>be,RoxyGunaMilan:()=>ve,RoxyHexagram:()=>ae,RoxyHoroscopeCard:()=>se,RoxyKpChart:()=>oe,RoxyKpPlanetsTable:()=>$e,RoxyKpRulingPlanets:()=>we,RoxyLocationSearch:()=>D,RoxyMoonPhase:()=>ne,RoxyNakshatraCard:()=>ke,RoxyNatalChart:()=>F,RoxyNumerologyCard:()=>ie,RoxyPanchangTable:()=>le,RoxyShadbalaTable:()=>Se,RoxySynastryChart:()=>Ae,RoxyTarotCard:()=>de,RoxyTarotSpread:()=>ce,RoxyTransitsTable:()=>pe,RoxyVedicKundli:()=>me,RoxyVedicPlanetsTable:()=>Ce,RoxyWesternPlanetsTable:()=>Pe,RoxyYogaList:()=>he});var it=globalThis,lt=it.ShadowRoot&&(it.ShadyCSS===void 0||it.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,At=Symbol(),Qt=new WeakMap,Ye=class{constructor(a,e,t){if(this._$cssResult$=!0,t!==At)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=a,this.t=e}get styleSheet(){let a=this.o,e=this.t;if(lt&&a===void 0){let t=e!==void 0&&e.length===1;t&&(a=Qt.get(e)),a===void 0&&((this.o=a=new CSSStyleSheet).replaceSync(this.cssText),t&&Qt.set(e,a))}return a}toString(){return this.cssText}},er=n=>new Ye(typeof n=="string"?n:n+"",void 0,At),x=(n,...a)=>{let e=n.length===1?n[0]:a.reduce((t,r,o)=>t+(i=>{if(i._$cssResult$===!0)return i.cssText;if(typeof i=="number")return i;throw Error("Value passed to 'css' function must be a 'css' function result: "+i+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(r)+n[o+1],n[0]);return new Ye(e,n,At)},tr=(n,a)=>{if(lt)n.adoptedStyleSheets=a.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let e of a){let t=document.createElement("style"),r=it.litNonce;r!==void 0&&t.setAttribute("nonce",r),t.textContent=e.cssText,n.appendChild(t)}},Ct=lt?n=>n:n=>n instanceof CSSStyleSheet?(a=>{let e="";for(let t of a.cssRules)e+=t.cssText;return er(e)})(n):n;var{is:Gr,defineProperty:Ir,getOwnPropertyDescriptor:jr,getOwnPropertyNames:Br,getOwnPropertySymbols:Kr,getPrototypeOf:qr}=Object,dt=globalThis,rr=dt.trustedTypes,Vr=rr?rr.emptyScript:"",Yr=dt.reactiveElementPolyfillSupport,Fe=(n,a)=>n,Ue={toAttribute(n,a){switch(a){case Boolean:n=n?Vr:null;break;case Object:case Array:n=n==null?n:JSON.stringify(n)}return n},fromAttribute(n,a){let e=n;switch(a){case Boolean:e=n!==null;break;case Number:e=n===null?null:Number(n);break;case Object:case Array:try{e=JSON.parse(n)}catch{e=null}}return e}},ct=(n,a)=>!Gr(n,a),ar={attribute:!0,type:String,converter:Ue,reflect:!1,useDefault:!1,hasChanged:ct};Symbol.metadata??=Symbol("metadata"),dt.litPropertyMetadata??=new WeakMap;var U=class extends HTMLElement{static addInitializer(a){this._$Ei(),(this.l??=[]).push(a)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(a,e=ar){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(a)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(a,e),!e.noAccessor){let t=Symbol(),r=this.getPropertyDescriptor(a,t,e);r!==void 0&&Ir(this.prototype,a,r)}}static getPropertyDescriptor(a,e,t){let{get:r,set:o}=jr(this.prototype,a)??{get(){return this[e]},set(i){this[e]=i}};return{get:r,set(i){let d=r?.call(this);o?.call(this,i),this.requestUpdate(a,d,t)},configurable:!0,enumerable:!0}}static getPropertyOptions(a){return this.elementProperties.get(a)??ar}static _$Ei(){if(this.hasOwnProperty(Fe("elementProperties")))return;let a=qr(this);a.finalize(),a.l!==void 0&&(this.l=[...a.l]),this.elementProperties=new Map(a.elementProperties)}static finalize(){if(this.hasOwnProperty(Fe("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(Fe("properties"))){let e=this.properties,t=[...Br(e),...Kr(e)];for(let r of t)this.createProperty(r,e[r])}let a=this[Symbol.metadata];if(a!==null){let e=litPropertyMetadata.get(a);if(e!==void 0)for(let[t,r]of e)this.elementProperties.set(t,r)}this._$Eh=new Map;for(let[e,t]of this.elementProperties){let r=this._$Eu(e,t);r!==void 0&&this._$Eh.set(r,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(a){let e=[];if(Array.isArray(a)){let t=new Set(a.flat(1/0).reverse());for(let r of t)e.unshift(Ct(r))}else a!==void 0&&e.push(Ct(a));return e}static _$Eu(a,e){let t=e.attribute;return t===!1?void 0:typeof t=="string"?t:typeof a=="string"?a.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(a=>this.enableUpdating=a),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(a=>a(this))}addController(a){(this._$EO??=new Set).add(a),this.renderRoot!==void 0&&this.isConnected&&a.hostConnected?.()}removeController(a){this._$EO?.delete(a)}_$E_(){let a=new Map,e=this.constructor.elementProperties;for(let t of e.keys())this.hasOwnProperty(t)&&(a.set(t,this[t]),delete this[t]);a.size>0&&(this._$Ep=a)}createRenderRoot(){let a=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return tr(a,this.constructor.elementStyles),a}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(a=>a.hostConnected?.())}enableUpdating(a){}disconnectedCallback(){this._$EO?.forEach(a=>a.hostDisconnected?.())}attributeChangedCallback(a,e,t){this._$AK(a,t)}_$ET(a,e){let t=this.constructor.elementProperties.get(a),r=this.constructor._$Eu(a,t);if(r!==void 0&&t.reflect===!0){let o=(t.converter?.toAttribute!==void 0?t.converter:Ue).toAttribute(e,t.type);this._$Em=a,o==null?this.removeAttribute(r):this.setAttribute(r,o),this._$Em=null}}_$AK(a,e){let t=this.constructor,r=t._$Eh.get(a);if(r!==void 0&&this._$Em!==r){let o=t.getPropertyOptions(r),i=typeof o.converter=="function"?{fromAttribute:o.converter}:o.converter?.fromAttribute!==void 0?o.converter:Ue;this._$Em=r;let d=i.fromAttribute(e,o.type);this[r]=d??this._$Ej?.get(r)??d,this._$Em=null}}requestUpdate(a,e,t,r=!1,o){if(a!==void 0){let i=this.constructor;if(r===!1&&(o=this[a]),t??=i.getPropertyOptions(a),!((t.hasChanged??ct)(o,e)||t.useDefault&&t.reflect&&o===this._$Ej?.get(a)&&!this.hasAttribute(i._$Eu(a,t))))return;this.C(a,e,t)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(a,e,{useDefault:t,reflect:r,wrapped:o},i){t&&!(this._$Ej??=new Map).has(a)&&(this._$Ej.set(a,i??e??this[a]),o!==!0||i!==void 0)||(this._$AL.has(a)||(this.hasUpdated||t||(e=void 0),this._$AL.set(a,e)),r===!0&&this._$Em!==a&&(this._$Eq??=new Set).add(a))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let a=this.scheduleUpdate();return a!=null&&await a,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[r,o]of this._$Ep)this[r]=o;this._$Ep=void 0}let t=this.constructor.elementProperties;if(t.size>0)for(let[r,o]of t){let{wrapped:i}=o,d=this[r];i!==!0||this._$AL.has(r)||d===void 0||this.C(r,void 0,o,d)}}let a=!1,e=this._$AL;try{a=this.shouldUpdate(e),a?(this.willUpdate(e),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(e)):this._$EM()}catch(t){throw a=!1,this._$EM(),t}a&&this._$AE(e)}willUpdate(a){}_$AE(a){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(a)),this.updated(a)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(a){return!0}update(a){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(a){}firstUpdated(a){}};U.elementStyles=[],U.shadowRootOptions={mode:"open"},U[Fe("elementProperties")]=new Map,U[Fe("finalized")]=new Map,Yr?.({ReactiveElement:U}),(dt.reactiveElementVersions??=[]).push("2.1.2");var Mt=globalThis,sr=n=>n,pt=Mt.trustedTypes,or=pt?pt.createPolicy("lit-html",{createHTML:n=>n}):void 0,pr="$lit$",ge=`lit$${Math.random().toFixed(9).slice(2)}$`,mr="?"+ge,Fr=`<${mr}>`,Le=document,Je=()=>Le.createComment(""),Xe=n=>n===null||typeof n!="object"&&typeof n!="function",zt=Array.isArray,Ur=n=>zt(n)||typeof n?.[Symbol.iterator]=="function",Pt=`[
|
|
2
|
+
\f\r]`,We=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,nr=/-->/g,ir=/>/g,Te=RegExp(`>|${Pt}(?:([^\\s"'>=/]+)(${Pt}*=${Pt}*(?:[^
|
|
3
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),lr=/'/g,dr=/"/g,hr=/^(?:script|style|textarea|title)$/i,_t=n=>(a,...e)=>({_$litType$:n,strings:a,values:e}),s=_t(1),w=_t(2),ls=_t(3),Ne=Symbol.for("lit-noChange"),l=Symbol.for("lit-nothing"),cr=new WeakMap,Re=Le.createTreeWalker(Le,129);function gr(n,a){if(!zt(n)||!n.hasOwnProperty("raw"))throw Error("invalid template strings array");return or!==void 0?or.createHTML(a):a}var Wr=(n,a)=>{let e=n.length-1,t=[],r,o=a===2?"<svg>":a===3?"<math>":"",i=We;for(let d=0;d<e;d++){let c=n[d],m,g,h=-1,y=0;for(;y<c.length&&(i.lastIndex=y,g=i.exec(c),g!==null);)y=i.lastIndex,i===We?g[1]==="!--"?i=nr:g[1]!==void 0?i=ir:g[2]!==void 0?(hr.test(g[2])&&(r=RegExp("</"+g[2],"g")),i=Te):g[3]!==void 0&&(i=Te):i===Te?g[0]===">"?(i=r??We,h=-1):g[1]===void 0?h=-2:(h=i.lastIndex-g[2].length,m=g[1],i=g[3]===void 0?Te:g[3]==='"'?dr:lr):i===dr||i===lr?i=Te:i===nr||i===ir?i=We:(i=Te,r=void 0);let S=i===Te&&n[d+1].startsWith("/>")?" ":"";o+=i===We?c+Fr:h>=0?(t.push(m),c.slice(0,h)+pr+c.slice(h)+ge+S):c+ge+(h===-2?d:S)}return[gr(n,o+(n[e]||"<?>")+(a===2?"</svg>":a===3?"</math>":"")),t]},Ze=class n{constructor({strings:a,_$litType$:e},t){let r;this.parts=[];let o=0,i=0,d=a.length-1,c=this.parts,[m,g]=Wr(a,e);if(this.el=n.createElement(m,t),Re.currentNode=this.el.content,e===2||e===3){let h=this.el.content.firstChild;h.replaceWith(...h.childNodes)}for(;(r=Re.nextNode())!==null&&c.length<d;){if(r.nodeType===1){if(r.hasAttributes())for(let h of r.getAttributeNames())if(h.endsWith(pr)){let y=g[i++],S=r.getAttribute(h).split(ge),k=/([.?@])?(.*)/.exec(y);c.push({type:1,index:o,name:k[2],strings:S,ctor:k[1]==="."?Tt:k[1]==="?"?Rt:k[1]==="@"?Lt:He}),r.removeAttribute(h)}else h.startsWith(ge)&&(c.push({type:6,index:o}),r.removeAttribute(h));if(hr.test(r.tagName)){let h=r.textContent.split(ge),y=h.length-1;if(y>0){r.textContent=pt?pt.emptyScript:"";for(let S=0;S<y;S++)r.append(h[S],Je()),Re.nextNode(),c.push({type:2,index:++o});r.append(h[y],Je())}}}else if(r.nodeType===8)if(r.data===mr)c.push({type:2,index:o});else{let h=-1;for(;(h=r.data.indexOf(ge,h+1))!==-1;)c.push({type:7,index:o}),h+=ge.length-1}o++}}static createElement(a,e){let t=Le.createElement("template");return t.innerHTML=a,t}};function Oe(n,a,e=n,t){if(a===Ne)return a;let r=t!==void 0?e._$Co?.[t]:e._$Cl,o=Xe(a)?void 0:a._$litDirective$;return r?.constructor!==o&&(r?._$AO?.(!1),o===void 0?r=void 0:(r=new o(n),r._$AT(n,e,t)),t!==void 0?(e._$Co??=[])[t]=r:e._$Cl=r),r!==void 0&&(a=Oe(n,r._$AS(n,a.values),r,t)),a}var Et=class{constructor(a,e){this._$AV=[],this._$AN=void 0,this._$AD=a,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(a){let{el:{content:e},parts:t}=this._$AD,r=(a?.creationScope??Le).importNode(e,!0);Re.currentNode=r;let o=Re.nextNode(),i=0,d=0,c=t[0];for(;c!==void 0;){if(i===c.index){let m;c.type===2?m=new Qe(o,o.nextSibling,this,a):c.type===1?m=new c.ctor(o,c.name,c.strings,this,a):c.type===6&&(m=new Nt(o,this,a)),this._$AV.push(m),c=t[++d]}i!==c?.index&&(o=Re.nextNode(),i++)}return Re.currentNode=Le,r}p(a){let e=0;for(let t of this._$AV)t!==void 0&&(t.strings!==void 0?(t._$AI(a,t,e),e+=t.strings.length-2):t._$AI(a[e])),e++}},Qe=class n{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(a,e,t,r){this.type=2,this._$AH=l,this._$AN=void 0,this._$AA=a,this._$AB=e,this._$AM=t,this.options=r,this._$Cv=r?.isConnected??!0}get parentNode(){let a=this._$AA.parentNode,e=this._$AM;return e!==void 0&&a?.nodeType===11&&(a=e.parentNode),a}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(a,e=this){a=Oe(this,a,e),Xe(a)?a===l||a==null||a===""?(this._$AH!==l&&this._$AR(),this._$AH=l):a!==this._$AH&&a!==Ne&&this._(a):a._$litType$!==void 0?this.$(a):a.nodeType!==void 0?this.T(a):Ur(a)?this.k(a):this._(a)}O(a){return this._$AA.parentNode.insertBefore(a,this._$AB)}T(a){this._$AH!==a&&(this._$AR(),this._$AH=this.O(a))}_(a){this._$AH!==l&&Xe(this._$AH)?this._$AA.nextSibling.data=a:this.T(Le.createTextNode(a)),this._$AH=a}$(a){let{values:e,_$litType$:t}=a,r=typeof t=="number"?this._$AC(a):(t.el===void 0&&(t.el=Ze.createElement(gr(t.h,t.h[0]),this.options)),t);if(this._$AH?._$AD===r)this._$AH.p(e);else{let o=new Et(r,this),i=o.u(this.options);o.p(e),this.T(i),this._$AH=o}}_$AC(a){let e=cr.get(a.strings);return e===void 0&&cr.set(a.strings,e=new Ze(a)),e}k(a){zt(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,t,r=0;for(let o of a)r===e.length?e.push(t=new n(this.O(Je()),this.O(Je()),this,this.options)):t=e[r],t._$AI(o),r++;r<e.length&&(this._$AR(t&&t._$AB.nextSibling,r),e.length=r)}_$AR(a=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);a!==this._$AB;){let t=sr(a).nextSibling;sr(a).remove(),a=t}}setConnected(a){this._$AM===void 0&&(this._$Cv=a,this._$AP?.(a))}},He=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(a,e,t,r,o){this.type=1,this._$AH=l,this._$AN=void 0,this.element=a,this.name=e,this._$AM=r,this.options=o,t.length>2||t[0]!==""||t[1]!==""?(this._$AH=Array(t.length-1).fill(new String),this.strings=t):this._$AH=l}_$AI(a,e=this,t,r){let o=this.strings,i=!1;if(o===void 0)a=Oe(this,a,e,0),i=!Xe(a)||a!==this._$AH&&a!==Ne,i&&(this._$AH=a);else{let d=a,c,m;for(a=o[0],c=0;c<o.length-1;c++)m=Oe(this,d[t+c],e,c),m===Ne&&(m=this._$AH[c]),i||=!Xe(m)||m!==this._$AH[c],m===l?a=l:a!==l&&(a+=(m??"")+o[c+1]),this._$AH[c]=m}i&&!r&&this.j(a)}j(a){a===l?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,a??"")}},Tt=class extends He{constructor(){super(...arguments),this.type=3}j(a){this.element[this.name]=a===l?void 0:a}},Rt=class extends He{constructor(){super(...arguments),this.type=4}j(a){this.element.toggleAttribute(this.name,!!a&&a!==l)}},Lt=class extends He{constructor(a,e,t,r,o){super(a,e,t,r,o),this.type=5}_$AI(a,e=this){if((a=Oe(this,a,e,0)??l)===Ne)return;let t=this._$AH,r=a===l&&t!==l||a.capture!==t.capture||a.once!==t.once||a.passive!==t.passive,o=a!==l&&(t===l||r);r&&this.element.removeEventListener(this.name,this,t),o&&this.element.addEventListener(this.name,this,a),this._$AH=a}handleEvent(a){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,a):this._$AH.handleEvent(a)}},Nt=class{constructor(a,e,t){this.element=a,this.type=6,this._$AN=void 0,this._$AM=e,this.options=t}get _$AU(){return this._$AM._$AU}_$AI(a){Oe(this,a)}};var Jr=Mt.litHtmlPolyfillSupport;Jr?.(Ze,Qe),(Mt.litHtmlVersions??=[]).push("3.3.2");var ur=(n,a,e)=>{let t=e?.renderBefore??a,r=t._$litPart$;if(r===void 0){let o=e?.renderBefore??null;t._$litPart$=r=new Qe(a.insertBefore(Je(),o),o,void 0,e??{})}return r._$AI(n),r};var Dt=globalThis,f=class extends U{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let a=super.createRenderRoot();return this.renderOptions.renderBefore??=a.firstChild,a}update(a){let e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(a),this._$Do=ur(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Ne}};f._$litElement$=!0,f.finalized=!0,Dt.litElementHydrateSupport?.({LitElement:f});var Xr=Dt.litElementPolyfillSupport;Xr?.({LitElement:f});(Dt.litElementVersions??=[]).push("4.2.2");var b=n=>(a,e)=>{e!==void 0?e.addInitializer(()=>{customElements.define(n,a)}):customElements.define(n,a)};var Zr={attribute:!0,type:String,converter:Ue,reflect:!1,hasChanged:ct},Qr=(n=Zr,a,e)=>{let{kind:t,metadata:r}=e,o=globalThis.litPropertyMetadata.get(r);if(o===void 0&&globalThis.litPropertyMetadata.set(r,o=new Map),t==="setter"&&((n=Object.create(n)).wrapped=!0),o.set(e.name,n),t==="accessor"){let{name:i}=e;return{set(d){let c=a.get.call(this);a.set.call(this,d),this.requestUpdate(i,c,n,!0,d)},init(d){return d!==void 0&&this.C(i,void 0,n,d),d}}}if(t==="setter"){let{name:i}=e;return function(d){let c=this[i];a.call(this,d),this.requestUpdate(i,c,n,!0,d)}}throw Error("Unsupported decorator location: "+t)};function u(n){return(a,e)=>typeof e=="object"?Qr(n,a,e):((t,r,o)=>{let i=r.hasOwnProperty(o);return r.constructor.createProperty(o,t),i?Object.getOwnPropertyDescriptor(r,o):void 0})(n,a,e)}function N(n){return u({...n,state:!0,attribute:!1})}var L={Sun:"\u2609",Moon:"\u263D",Mercury:"\u263F",Venus:"\u2640",Earth:"\u2641",Mars:"\u2642",Jupiter:"\u2643",Saturn:"\u2644",Uranus:"\u2645",Neptune:"\u2646",Pluto:"\u2647",Rahu:"\u260A",Ketu:"\u260B",Ascendant:"Asc",Lagna:"La",NorthNode:"\u260A",SouthNode:"\u260B","North node":"\u260A","South node":"\u260B",Chiron:"\u26B7",Lilith:"\u26B8","Black moon lilith":"\u26B8"},yr={Sun:"Su",Moon:"Mo",Mercury:"Me",Venus:"Ve",Mars:"Ma",Jupiter:"Ju",Saturn:"Sa",Uranus:"Ur",Neptune:"Ne",Pluto:"Pl",Rahu:"Ra",Ketu:"Ke",Ascendant:"Asc",Lagna:"La"},G={Aries:"\u2648",Taurus:"\u2649",Gemini:"\u264A",Cancer:"\u264B",Leo:"\u264C",Virgo:"\u264D",Libra:"\u264E",Scorpio:"\u264F",Sagittarius:"\u2650",Capricorn:"\u2651",Aquarius:"\u2652",Pisces:"\u2653"},ht={Aries:"Ar",Taurus:"Ta",Gemini:"Ge",Cancer:"Cn",Leo:"Le",Virgo:"Vi",Libra:"Li",Scorpio:"Sc",Sagittarius:"Sg",Capricorn:"Cp",Aquarius:"Aq",Pisces:"Pi"},_=["Aries","Taurus","Gemini","Cancer","Leo","Virgo","Libra","Scorpio","Sagittarius","Capricorn","Aquarius","Pisces"],Us=_.map(n=>n.toLowerCase()),et={conjunction:"\u260C",opposition:"\u260D",trine:"\u25B3",square:"\u25A1",sextile:"\u2731",quincunx:"\u22BB",semisextile:"\u22BC"},Ot={heaven:"\u2630",lake:"\u2631",fire:"\u2632",thunder:"\u2633",wind:"\u2634",water:"\u2635",mountain:"\u2636",earth:"\u2637",Heaven:"\u2630",Lake:"\u2631",Fire:"\u2632",Thunder:"\u2633",Wind:"\u2634",Water:"\u2635",Mountain:"\u2636",Earth:"\u2637"},xr={"new moon":"\u{1F311}","waxing crescent":"\u{1F312}","first quarter":"\u{1F313}","waxing gibbous":"\u{1F314}","full moon":"\u{1F315}","waning gibbous":"\u{1F316}","last quarter":"\u{1F317}","waning crescent":"\u{1F318}"};var v=x`:host{font-family:var(--roxy-font-sans,system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);color:var(--roxy-fg,#0a0a0a);font-size:var(--roxy-text-base,1rem);line-height:var(--roxy-leading-normal,1.5);animation:roxy-fade-in var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1)) both;background:0 0;display:block;container-type:inline-size}*,:before,:after{box-sizing:border-box}@keyframes roxy-fade-in{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){:host{animation:none}}.roxy-skeleton{background:linear-gradient(90deg, var(--roxy-border,#e4e4e7) 0%, color-mix(in srgb, var(--roxy-border,#e4e4e7) 60%, transparent) 50%, var(--roxy-border,#e4e4e7) 100%);border-radius:var(--roxy-radius-md,8px);background-size:200% 100%;animation:1.4s ease-in-out infinite roxy-shimmer}@keyframes roxy-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media (prefers-reduced-motion:reduce){.roxy-skeleton{animation:none}}.roxy-empty{padding:var(--roxy-space-lg,1.5rem);color:var(--roxy-muted,#71717a);text-align:center;font-size:var(--roxy-text-sm,.875rem)}:host(:focus-within) .roxy-card{outline:2px solid var(--roxy-ring,#f59e0b66);outline-offset:2px}:host{font-variant-emoji:text}`;var ea="roxy-data";function ta(n){return n.nodeName==="SCRIPT"&&n.getAttribute("type")==="application/json"}var $=class{constructor(a){this.host=a,a.addController(this)}hostConnected(){if(this.host.data!=null)return;let a=this.read();a!==void 0&&(this.host.data=a,this.host.requestUpdate())}read(){let a=this.findInlineScript();return a?this.parse(a.textContent):void 0}findInlineScript(){for(let a of Array.from(this.host.children))if(ta(a)&&a.classList.contains(ea))return a;return null}parse(a){if(a?.trim())try{return JSON.parse(a)}catch{return}}};var ra={sarva:"Sarvashtakavarga",bhinna:"Bhinnashtakavarga",pinda:"Shodhya Pinda"},Me=["sarva","bhinna","pinda"],W=class extends f{constructor(){super();this.data=null;this.activeTab="sarva";new $(this)}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No ashtakavarga data</div>`;let e=this.data.signs??[];return s`<div class="wrap" aria-label="Ashtakavarga grid"><div class="head"><h2 class="title">Ashtakavarga</h2>${e.length?s`<p class="subtitle">${e.length} signs</p>`:l}</div><div class="tablist" role="tablist" aria-label="Ashtakavarga views" @keydown="${this.onTabKeyDown}">${Me.map(t=>s`<button class="tab" role="tab" id="tab-${t}" aria-selected="${this.activeTab===t?"true":"false"}" aria-controls="panel-${t}" tabindex="${this.activeTab===t?"0":"-1"}" @click="${()=>{this.activeTab=t}}">${ra[t]}</button>`)}</div><div id="panel-${this.activeTab}" role="tabpanel" aria-labelledby="tab-${this.activeTab}">${this.activeTab==="sarva"?this.renderSarva(e):this.activeTab==="bhinna"?this.renderBhinna(e):this.renderPinda()}</div></div>`}onTabKeyDown(e){let t=Me.indexOf(this.activeTab);e.key==="ArrowRight"?(e.preventDefault(),this.activeTab=Me[(t+1)%Me.length],this.focusActiveTab()):e.key==="ArrowLeft"&&(e.preventDefault(),this.activeTab=Me[(t-1+Me.length)%Me.length],this.focusActiveTab())}focusActiveTab(){requestAnimationFrame(()=>{this.shadowRoot?.querySelector(`#tab-${this.activeTab}`)?.focus()})}bhinnaHeat(e){return e<=1?"heat-1":e<=2?"heat-2":e<=3?"heat-3":e<=4?"heat-4":e<=5?"heat-5":e<=6?"heat-6":"heat-7"}sarvaHeat(e){return e<=18?"heat-1":e<=23?"heat-2":e<=28?"heat-3":e<=32?"heat-4":e<=37?"heat-5":e<=42?"heat-6":"heat-7"}renderSarva(e){let t=this.data.sarvashtakavarga;return t?s`<div class="overflow-scroll"><table aria-label="Sarvashtakavarga bindu counts per sign"><thead><tr><th scope="col">Sign</th><th scope="col">Bindus</th></tr></thead><tbody>${e.map((r,o)=>{let i=t.bindus[o]??0,d=this.sarvaHeat(i);return s`<tr><td><div class="planet-cell"><span class="glyph" aria-hidden="true">${G[r]??""}</span> ${r}</div></td><td class="${`heat-cell ${d}`}">${i}</td></tr>`})}</tbody><tfoot><tr class="total-row"><td>Total</td><td>${t.total}</td></tr></tfoot></table></div>`:s`<p class="roxy-empty">No sarvashtakavarga data</p>`}renderBhinna(e){let t=this.data.bhinnashtakavarga;return t?.length?s`<div class="overflow-scroll"><table class="bhinna-table" aria-label="Bhinnashtakavarga planet-by-sign grid"><thead><tr><th scope="col">Planet</th>${e.map(r=>s`<th scope="col" title="${r}">${G[r]??r.slice(0,2)}</th>`)}<th scope="col">Total</th></tr></thead><tbody>${t.map(r=>s`<tr><td>${r.planet}</td>${r.bindus.map(o=>{let i=this.bhinnaHeat(o);return s`<td class="${`heat-cell ${i}`}">${o}</td>`})}<td>${r.total}</td></tr>`)}</tbody></table></div>`:s`<p class="roxy-empty">No bhinnashtakavarga data</p>`}renderPinda(){let e=this.data.shodhyaPinda;return e?.length?s`<div class="overflow-scroll"><table aria-label="Shodhya Pinda planet strength scores"><thead><tr><th scope="col">Planet</th><th scope="col">Rashi Pinda</th><th scope="col">Graha Pinda</th><th scope="col">Shodhya Pinda</th></tr></thead><tbody>${e.map(t=>s`<tr><td>${t.planet}</td><td>${t.rashiPinda}</td><td>${t.grahaPinda}</td><td>${t.shodhyaPinda}</td></tr>`)}</tbody></table></div>`:s`<p class="roxy-empty">No shodhya pinda data</p>`}};W.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:baseline;gap:var(--roxy-space-md,1rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.subtitle{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);margin:0}.tablist{border-bottom:2px solid var(--roxy-border,#e4e4e7);gap:2px;display:flex}.tab{padding:var(--roxy-space-xs,.25rem) var(--roxy-space-md,1rem);font-size:var(--roxy-text-sm,.875rem);cursor:pointer;color:var(--roxy-muted,#71717a);transition:color var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,ease);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-2px;font-family:inherit}.tab[aria-selected=true]{color:var(--roxy-accent-ink,#b45309);border-bottom-color:var(--roxy-accent,#f59e0b);font-weight:var(--roxy-weight-bold,600)}.tab:hover:not([aria-selected=true]){color:var(--roxy-fg,#0a0a0a)}.overflow-scroll{-webkit-overflow-scrolling:touch;overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem)}th,td{padding:var(--roxy-space-sm,.5rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);text-align:center}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.06em}td:first-child,th:first-child{text-align:left}.glyph{margin-right:3px;font-size:1.1em;line-height:1}.planet-cell{white-space:nowrap;align-items:center;gap:4px;display:flex}.total-row td{font-weight:var(--roxy-weight-bold,600);border-top:2px solid var(--roxy-border,#e4e4e7);border-bottom:none}.heat-cell{border-radius:var(--roxy-radius-sm,4px);font-weight:var(--roxy-weight-bold,600);font-variant-numeric:tabular-nums;min-width:2rem;color:var(--roxy-fg,currentColor)}.heat-1{background:color-mix(in srgb, var(--roxy-heat,#ef4444) 6%, transparent)}.heat-2{background:color-mix(in srgb, var(--roxy-heat,#ef4444) 14%, transparent)}.heat-3{background:color-mix(in srgb, var(--roxy-heat,#ef4444) 26%, transparent)}.heat-4{background:color-mix(in srgb, var(--roxy-heat,#ef4444) 40%, transparent)}.heat-5{background:color-mix(in srgb, var(--roxy-heat,#ef4444) 55%, transparent)}.heat-6{background:color-mix(in srgb, var(--roxy-heat,#ef4444) 72%, transparent)}.heat-7{background:color-mix(in srgb, var(--roxy-heat,#ef4444) 90%, transparent)}.bhinna-table th:first-child,.bhinna-table td:first-child{min-width:5rem}@container (width<=480px){.bhinna-table th,.bhinna-table td{font-size:var(--roxy-text-xs,.75rem);padding:.3rem .35rem}.bhinna-table th:first-child,.bhinna-table td:first-child{min-width:3.5rem}.heat-cell{min-width:1.5rem}}.overflow-scroll{-webkit-mask-image:linear-gradient(90deg,#0000 0,#000 .5rem calc(100% - 1rem),#0000 100%);mask-image:linear-gradient(90deg,#0000 0,#000 .5rem calc(100% - 1rem),#0000 100%)}`],p([u({attribute:!1})],W.prototype,"data",2),p([N()],W.prototype,"activeTab",2),W=p([b("roxy-ashtakavarga-grid")],W);var fr={physical:"#dc2626",emotional:"#0284c7",intellectual:"#16a34a",intuitive:"#a855f7",aesthetic:"#f59e0b",awareness:"#ec4899",spiritual:"#14b8a6",passion:"#ef4444",mastery:"#6366f1",wisdom:"#475569"},J=class extends f{constructor(){super();this.data=null;this.mode="daily";new $(this)}render(){let e=this.data;return e?this.mode==="critical-days"&&"criticalDays"in e?this.renderCritical(e):this.mode==="forecast"&&"days"in e?this.renderForecast(e):this.renderDaily(e):s`<div class="roxy-empty" role="status">No biorhythm data</div>`}renderDaily(e){let t=e.quickRead??{},r=Object.entries(t).map(([o,i])=>{let d=typeof i=="number"?i:0,c=Math.abs(d)>1?d/100:d;return[o,c]});return s`<section class="wrap" aria-label="Daily biorhythm"><header class="head"><h2 class="title">Biorhythm</h2>${typeof e.energyRating=="number"?s`<span class="energy">Energy ${e.energyRating}/10</span>`:l}</header><div class="bars" role="list">${r.map(([o,i])=>{let d=(i+1)/2*100,c=fr[o]??"var(--roxy-accent, #f59e0b)";return s`<div class="bar" role="listitem"><span style="text-transform:capitalize">${o}</span> <span class="track"><span class="fill" style="width:${d}%;background:${c}"></span> </span><span class="value">${Math.round(i*100)}%</span></div>`})}</div>${e.dailyMessage?s`<p class="advice">${e.dailyMessage}</p>`:l} ${e.advice?s`<p class="advice">${e.advice}</p>`:l}</section>`}renderForecast(e){let t=e.days??[];if(t.length===0)return s`<div class="roxy-empty" role="status">No forecast</div>`;let r=600,o=160,i=r/Math.max(t.length-1,1),d=["physical","emotional","intellectual","intuitive"];return s`<section class="wrap" aria-label="Biorhythm forecast"><header class="head"><h2 class="title">Forecast</h2><span class="energy">${e.startDate} - ${e.endDate}</span></header><svg viewBox="0 0 ${r} ${o}" role="img" aria-label="Biorhythm cycle lines across the forecast window"><title>Biorhythm forecast</title><line x1="0" y1="${o/2}" x2="${r}" y2="${o/2}" stroke="var(--roxy-border, #e4e4e7)" stroke-width="1"/>${d.map(c=>{let m=t.map((h,y)=>{let S=h[c]??0,k=y*i,Ee=o/2-S/100*(o/2-8);return`${k.toFixed(2)},${Ee.toFixed(2)}`}).join(" "),g=fr[c]??"#475569";return w`<polyline points=${m} fill="none" stroke=${g} stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />`})}</svg> ${e.summary?.periodAdvice?s`<p class="advice">${e.summary.periodAdvice}</p>`:l}</section>`}renderCritical(e){return s`<section class="wrap" aria-label="Critical days"><header class="head"><h2 class="title">Critical days</h2><span class="energy">${e.totalCriticalDays} total</span></header><div>${e.criticalDays.map(t=>s`<span class="crit">${t.date} · ${t.cycle} ${t.severity}</span>`)}</div></section>`}};J.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:center;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.energy{font-variant-numeric:tabular-nums;color:var(--roxy-accent-ink,#b45309);font-weight:var(--roxy-weight-bold,600)}.bars{gap:var(--roxy-space-xs,.25rem);display:grid}.bar{gap:var(--roxy-space-sm,.5rem);font-size:var(--roxy-text-sm,.875rem);grid-template-columns:8rem 1fr 3.5rem;align-items:center;display:grid}.track{background:var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-full,9999px);height:14px;position:relative;overflow:hidden}.fill{height:100%;transition:width var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));display:block}.value{font-variant-numeric:tabular-nums;text-align:right;color:var(--roxy-muted,#71717a)}.advice{color:var(--roxy-fg,#0a0a0a)}.alert{background:color-mix(in srgb, var(--roxy-warning,#ea580c) 12%, transparent);border:1px solid color-mix(in srgb, var(--roxy-warning,#ea580c) 32%, transparent);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-sm,.5rem);font-size:var(--roxy-text-sm,.875rem);margin:0}svg{width:100%;height:auto;display:block}.crit{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 12%, transparent);border-radius:var(--roxy-radius-sm,4px);font-size:var(--roxy-text-xs,.75rem);margin:2px;padding:4px 8px;display:inline-block}`],p([u({attribute:!1})],J.prototype,"data",2),p([u({type:String,reflect:!0})],J.prototype,"mode",2),J=p([b("roxy-biorhythm-chart")],J);var yt=4,xt=9,vr=(100+2*xt)*yt,aa=(100+2*xt)*yt;function I(n,a){return{x:(n+xt)*yt,y:(a+xt)*yt}}var tt=50,jt=n=>2*tt-n,Ht={head:{64:[45.5,11.2],61:[50,11.2],63:[54.5,11.2]},ajna:{47:[45.3,18],24:[50,18],4:[54.7,18],17:[45.6,20.6],11:[54.4,20.6],43:[50,25.3]},throat:{62:[45.5,32.3],23:[50,32.3],56:[54.5,32.3],16:[42,34.6],35:[58,34.6],12:[58,37.6],20:[42,40.6],45:[58,40.6],31:[46,42.4],8:[50,42.4],33:[54,42.4]},g:{1:[50,47.5],7:[45.6,50.3],13:[54.4,50.3],10:[40,53.3],25:[60,53.3],15:[45.6,56.6],46:[54.4,56.6],2:[50,59]},heart:{21:[62.5,58.5],51:[62.5,61.3],26:[62.5,64.1],40:[73,61.3]},spleen:{48:[20,70.6],57:[24,72.3],44:[28,74],50:[32,75.6],32:[28,77.2],28:[24,78.9],18:[20,80.6]},sacral:{5:[45.5,72.5],14:[50,72.5],29:[54.5,72.5],34:[42,75.6],27:[42,79],59:[58,79],42:[45.5,81.4],3:[50,81.4],9:[54.5,81.4]},"solar-plexus":{},root:{53:[45.5,89.9],60:[50,89.9],52:[54.5,89.9],54:[42,92.7],19:[58,92.7],38:[42,95.3],39:[58,95.3],58:[42,98],41:[58,98]}},sa={48:36,57:22,44:37,50:6,32:49,28:55,18:30};function oa(){let n={},a={};for(let[e,[t,r]]of Object.entries(Ht.spleen))Ht["solar-plexus"][sa[Number(e)]]=[jt(t),r];for(let[e,t]of Object.entries(Ht))for(let[r,[o,i]]of Object.entries(t))n[Number(r)]=I(o,i),a[Number(r)]=e;return{points:n,centerOf:a}}var{points:It,centerOf:go}=oa(),uo=vr/2;function ze(n){return n.map(([a,e])=>I(a,e))}function Gt(n,a,e){return ze([[tt-n,a],[tt+n,a],[tt+n,e],[tt-n,e]])}var br=[[18.4,68],[18.4,81.8],[34.7,74.9]],na=[{id:"head",label:"Head",color:"gold",points:ze([[40,14.3],[60,14.3],[50,6]]),labelAnchor:I(63,9),labelAlign:"start"},{id:"ajna",label:"Ajna",color:"green",points:ze([[40,15.6],[60,15.6],[50,27.6]]),labelAnchor:I(62,21),labelAlign:"start"},{id:"throat",label:"Throat",color:"brown",points:Gt(9.5,30.4,43.6),labelAnchor:I(83,34),labelAlign:"start"},{id:"g",label:"G",color:"gold",points:ze([[50,45],[60.7,53.3],[50,61.6],[39.3,53.3]]),labelAnchor:I(13,51),labelAlign:"end"},{id:"heart",label:"Heart",color:"red",points:ze([[61.5,57],[76.5,61.3],[61.5,65.6]]),labelAnchor:I(85,56),labelAlign:"start"},{id:"spleen",label:"Spleen",color:"brown",points:ze(br),labelAnchor:I(13,70),labelAlign:"end"},{id:"sacral",label:"Sacral",color:"red",points:Gt(9.5,70.6,83.6),labelAnchor:I(85,88),labelAlign:"start"},{id:"solar-plexus",label:"Solar Plexus",color:"brown",points:ze(br.map(([n,a])=>[jt(n),a])),labelAnchor:I(87,73),labelAlign:"start"},{id:"root",label:"Root",color:"brown",points:Gt(9.5,87.9,99.9),labelAnchor:I(50,103),labelAlign:"middle"}],ia=[[64,47],[61,24],[63,4],[17,62],[11,56],[43,23],[16,48],[20,34],[20,10],[7,31],[1,8],[13,33],[21,45],[12,22],[35,36],[57,20],[15,5],[2,14],[46,29],[34,10],[10,57],[25,51],[27,50],[57,34],[26,44],[18,58],[28,38],[32,54],[3,60],[9,52],[42,53],[59,6],[19,49],[39,55],[41,30],[37,40]],la=da();function da(){let n=jt,a=[[50,-2],[60,-2],[60.5,9],[57,18],[56,21],[54,24],[52,27],[54,28],[64,30],[80,34],[83.5,40],[84,56],[83,74],[82,84],[76,92],[68,97],[64,99],[62,100],[60,100]],e=[`M ${gt(a[0])}`];for(let t=1;t+2<a.length;t+=3)e.push(`C ${gt(a[t])} ${gt(a[t+1])} ${gt(a[t+2])}`);e.push(`L ${ut(a[a.length-1],n)}`);for(let t=a.length-3;t>=1;t-=3)e.push(`C ${ut(a[t+1],n)} ${ut(a[t],n)} ${ut(a[t-1],n)}`);return e.push("Z"),e.join(" ")}function gt([n,a]){let e=I(n,a);return`${e.x} ${e.y}`}function ut([n,a],e){let t=I(e(n),a);return`${t.x} ${t.y}`}function ca(n){return n.map(a=>`${a.x},${a.y}`).join(" ")}function $r(n,a){return n<a?`${n}-${a}`:`${a}-${n}`}function pa(){return w`<path class="bg-body" d=${la} />`}function ma(n,a){let e=[];for(let[t,r]of ia){let o=It[t],i=It[r];if(!o||!i)continue;if(e.push(w`<line class="bg-channel" x1=${o.x} y1=${o.y} x2=${i.x} y2=${i.y} />`),n.has($r(t,r))){e.push(w`<line class="bg-channel on" x1=${o.x} y1=${o.y} x2=${i.x} y2=${i.y} />`);continue}let d={x:(o.x+i.x)/2,y:(o.y+i.y)/2};a.has(t)&&e.push(w`<line class="bg-half" x1=${o.x} y1=${o.y} x2=${d.x} y2=${d.y} />`),a.has(r)&&e.push(w`<line class="bg-half" x1=${i.x} y1=${i.y} x2=${d.x} y2=${d.y} />`)}return e}function ha(n,a,e){let t=e.x-a.x,r=e.y-a.y,o=t*t+r*r;if(o===0)return a;let i=Math.max(0,Math.min(1,((n.x-a.x)*t+(n.y-a.y)*r)/o));return{x:a.x+i*t,y:a.y+i*r}}function ga(n,a){let e=a[0],t=Number.POSITIVE_INFINITY;for(let r=0;r<a.length;r++){let o=ha(n,a[r],a[(r+1)%a.length]),i=(o.x-n.x)**2+(o.y-n.y)**2;i<t&&(t=i,e=o)}return e}function ua(n){return na.map(a=>{let e=n.has(a.id),t=`bg-center bg-${a.color}${e?" defined":""}`,r=ga(a.labelAnchor,a.points);return w`<g>
|
|
4
|
+
<line class="bg-leader" x1=${a.labelAnchor.x} y1=${a.labelAnchor.y} x2=${r.x} y2=${r.y} />
|
|
5
|
+
<polygon class=${t} points=${ca(a.points)}><title>${a.label}: ${e?"defined":"open"}</title></polygon>
|
|
6
|
+
<text class="bg-center-label" x=${a.labelAnchor.x} y=${a.labelAnchor.y} text-anchor=${a.labelAlign} dominant-baseline="central">${a.label}</text>
|
|
7
|
+
</g>`})}function ya(n,a){let e=[];for(let[t,r]of Object.entries(It)){let o=Number(t);if(!n.has(o))continue;let i=a.get(o);e.push(w`<text class="bg-gate" x=${r.x} y=${r.y} text-anchor="middle" dominant-baseline="central">${o}${i?w`<title>${i}</title>`:l}</text>`)}return e}function wr(n,a){return $r(n,a)}var kr=`0 0 ${vr} ${aa}`;function Sr(n){return w`
|
|
8
|
+
${pa()}
|
|
9
|
+
${ma(n.activeChannels,n.activeGates)}
|
|
10
|
+
${ua(n.definedCenters)}
|
|
11
|
+
${ya(n.activeGates,n.gateTitles)}
|
|
12
|
+
`}function A(n){return n?n.charAt(0).toUpperCase()+n.slice(1).toLowerCase():""}function j(n){return n.replace(/[_-]+/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/^\w/,a=>a.toUpperCase())}var ue=class extends f{constructor(){super();this.data=null;new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No bodygraph data</div>`;let t=new Set((e.centers??[]).filter(d=>d.defined).map(d=>d.id)),r=new Set((e.gates??[]).map(d=>d.gate).filter(d=>d!=null)),o=new Set((e.channels??[]).map(d=>wr(d.gateA,d.gateB))),i=this.buildGateTitles(e.gates??[]);return s`<div class="wrap"><header class="head"><h2 class="title">Bodygraph</h2>${e.type?s`<div class="type-line">${e.type}${e.profile?s`· Profile ${e.profile}`:l}</div>`:l}</header><div class="layout"><svg viewBox="${kr}" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Human Design bodygraph with nine centers, channels, and activated gates overlaid on a human silhouette"><title>Human Design bodygraph</title><desc>Nine energy centers in their canonical positions over a human silhouette, each filled with its traditional color when defined and outlined when open, wired by channels between activated gates.</desc>${Sr({definedCenters:t,activeChannels:o,activeGates:r,gateTitles:i})}</svg> ${this.renderSummary(e)}</div></div>`}buildGateTitles(e){let t=new Map;for(let r of e){if(r.gate==null)continue;let o=[`Gate ${r.gate}`];r.line!=null&&(o[0]+=`.${r.line}`),r.gateName&&o.push(r.gateName);let i=r.planet?A(r.planet):"",d=i?L[i]??i:"";d&&o.push(`${d} ${r.side??""}`.trim()),t.set(r.gate,o.join(" \xB7 "))}return t}renderSummary(e){let t=[{label:"Type",value:e.type},{label:"Strategy",value:e.strategy},{label:"Authority",value:e.authority},{label:"Profile",value:e.profile},{label:"Definition",value:e.definition}],r=e.incarnationCross;return s`<div class="summary"><div class="facts">${t.map(o=>o.value?s`<div class="fact"><span>${o.label}</span> <strong>${o.value}</strong></div>`:l)}</div>${r?.name?s`<p class="cross">${r.name} ${r.gates?.length?s`<span class="gates">(${r.gates.join(", ")})</span>`:l}</p>`:l} ${e.signature||e.notSelf?s`<div class="themes">${e.signature?s`<span class="pill pill--good">Signature: ${e.signature}</span>`:l} ${e.notSelf?s`<span class="pill pill--shadow">Not-self: ${e.notSelf}</span>`:l}</div>`:l}<div class="legend"><span class="legend-caption">Center colors when defined. Open centers are outlined.</span> <span><span class="swatch bg-gold defined"></span>Head, G</span> <span><span class="swatch bg-green defined"></span>Ajna</span> <span><span class="swatch bg-brown defined"></span>Throat, Spleen, Solar Plexus, Root</span> <span><span class="swatch bg-red defined"></span>Heart, Sacral</span> <span><span class="swatch"></span>Open center</span></div></div>`}};ue.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:baseline;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.type-line{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}.layout{gap:var(--roxy-space-lg,1.5rem);grid-template-columns:minmax(0,1fr);align-items:start;display:grid}@container (width>=520px){.layout{grid-template-columns:minmax(0,340px) minmax(0,1fr)}}svg{width:100%;max-width:340px;height:auto;margin:0 auto;display:block}.bg-body{fill:color-mix(in srgb, var(--roxy-secondary,#475569) 8%, transparent);stroke:var(--roxy-border,#e4e4e7);stroke-width:1px}.bg-channel{stroke:var(--roxy-secondary,#475569);stroke-width:1.6px;opacity:.3}.bg-channel.on{stroke-width:3.4px;stroke-linecap:round;opacity:1}.bg-half{stroke:var(--roxy-secondary,#475569);stroke-width:3.2px;stroke-linecap:round;opacity:.9}.bg-leader{stroke:var(--roxy-muted,#71717a);stroke-width:1px;opacity:.5}.bg-center{fill:#0000;stroke:var(--roxy-secondary,#475569);stroke-width:1.8px}.bg-center.defined{stroke:#00000073}.bg-center.bg-gold.defined{fill:#e0a200}.bg-center.bg-green.defined{fill:#2f8f00}.bg-center.bg-red.defined{fill:#c41f1f}.bg-center.bg-brown.defined{fill:#76502f}.bg-center-label{fill:var(--roxy-muted,#71717a);font-size:11px;font-family:var(--roxy-font-sans)}.bg-gate{fill:var(--roxy-fg,#0a0a0a);font-size:8px;font-weight:600;font-family:var(--roxy-font-sans);paint-order:stroke;stroke:var(--roxy-bg,#fff);stroke-width:1.6px;stroke-linejoin:round}.summary{gap:var(--roxy-space-md,1rem);display:grid}.facts{gap:var(--roxy-space-sm,.5rem);grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));display:grid}.fact{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);background:var(--roxy-bg,#fff)}.fact span{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);text-transform:uppercase;letter-spacing:.06em;display:block}.fact strong{font-size:var(--roxy-text-base,1rem);color:var(--roxy-fg,#0a0a0a)}.cross{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-fg,#0a0a0a);border-left:2px solid var(--roxy-accent,#f59e0b);padding-left:var(--roxy-space-sm,.5rem);margin:0}.cross .gates{color:var(--roxy-muted,#71717a);font-variant-numeric:tabular-nums}.themes{gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.pill{border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);padding:2px 10px}.pill--good{background:color-mix(in srgb, var(--roxy-success,#16a34a) 16%, transparent);color:var(--roxy-success-fg,#166534)}.pill--shadow{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 16%, transparent);color:var(--roxy-danger-fg,#991b1b)}.legend{gap:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);flex-wrap:wrap;display:flex}.legend-caption{color:var(--roxy-muted,#71717a);flex-basis:100%}.legend .swatch{vertical-align:middle;border:1px solid var(--roxy-secondary,#475569);border-radius:2px;width:10px;height:10px;margin-right:4px;display:inline-block}.legend .swatch.defined{border-color:#00000073}.legend .swatch.bg-gold{background:#e0a200}.legend .swatch.bg-green{background:#2f8f00}.legend .swatch.bg-red{background:#c41f1f}.legend .swatch.bg-brown{background:#76502f}`],p([u({attribute:!1})],ue.prototype,"data",2),ue=p([b("roxy-bodygraph")],ue);function Ar(n){try{let a=new Date(n);return Number.isNaN(a.getTime())?n:a.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}catch{return n}}var ye=class extends f{constructor(){super();this.data=null;new $(this)}isCurrent(e){let t=Date.now(),r=Date.parse(e.start),o=Date.parse(e.end);return Number.isNaN(r)||Number.isNaN(o)?!1:t>=r&&t<o}renderTile(e){let t=e.effect==="Good"?"good":e.effect==="Bad"?"bad":"neutral",r=this.isCurrent(e),o=L[A(e.lord)]??"",i=`${Ar(e.start)} - ${Ar(e.end)}`;return s`<div class="cho-tile ${t}${r?" now":""}" role="listitem" aria-current="${r?"time":"false"}"><span class="tile-name">${e.name}${r?s`<span class="now-badge">Now</span>`:l} </span><span class="tile-time" aria-label="Time range">${i}</span> <span class="tile-lord">${o?s`<span aria-hidden="true">${o}</span>`:l} ${e.lord}</span></div>`}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No choghadiya data</div>`;let{date:e,dayChoghadiya:t,nightChoghadiya:r}=this.data;return s`<div class="wrap"><div class="header"><h2 class="title">Choghadiya</h2>${e?s`<p class="subtitle">${e}</p>`:l}</div><div class="cho-grid"><section class="period-col" aria-label="Day muhurta periods"><h3 class="period-heading">Day</h3><div role="list" aria-label="Daytime choghadiya">${t&&t.length>0?t.map(o=>this.renderTile(o)):s`<p class="roxy-empty" role="status">No daytime periods</p>`}</div></section><section class="period-col" aria-label="Night muhurta periods"><h3 class="period-heading">Night</h3><div role="list" aria-label="Nighttime choghadiya">${r&&r.length>0?r.map(o=>this.renderTile(o)):s`<p class="roxy-empty" role="status">No nighttime periods</p>`}</div></section></div></div>`}};ye.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.header{gap:var(--roxy-space-xs,.25rem);display:grid}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.subtitle{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);margin:0}.cho-grid{gap:var(--roxy-space-md,1rem);grid-template-columns:1fr;display:grid}@media (width>=720px){.cho-grid{grid-template-columns:1fr 1fr}}.period-col{gap:var(--roxy-space-xs,.25rem);display:grid}.period-heading{font-size:var(--roxy-text-base,1rem);font-weight:var(--roxy-weight-bold,600);margin:0 0 var(--roxy-space-xs,.25rem);color:var(--roxy-fg,#0a0a0a)}.cho-tile{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);grid-template-columns:1fr auto;align-items:center;gap:.25em .75em;padding:.55em .85em;display:grid}.cho-tile.good{background:color-mix(in srgb, var(--roxy-success,#22c55e) 18%, transparent);border-color:color-mix(in srgb, var(--roxy-success,#22c55e) 45%, transparent);color:var(--roxy-fg,#0a0a0a)}.cho-tile.bad{background:color-mix(in srgb, var(--roxy-danger,#ef4444) 18%, transparent);border-color:color-mix(in srgb, var(--roxy-danger,#ef4444) 45%, transparent);color:var(--roxy-fg,#0a0a0a)}.cho-tile.neutral{color:var(--roxy-fg,#0a0a0a);background:0 0}.cho-tile.now{outline:2px solid var(--roxy-accent,#f59e0b);outline-offset:1px;box-shadow:0 0 0 4px color-mix(in srgb, var(--roxy-accent,#f59e0b) 18%, transparent)}.now-badge{font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);color:var(--roxy-accent-ink,#b45309);text-transform:uppercase;letter-spacing:.06em;margin-left:.4em;display:inline-block}.tile-name{font-size:var(--roxy-text-base,1rem);font-weight:var(--roxy-weight-bold,600);grid-column:1}.tile-time{font-size:var(--roxy-text-xs,.75rem);opacity:.8;white-space:nowrap;text-align:right;grid-area:1/2/3;align-self:center}.tile-lord{font-size:var(--roxy-text-sm,.875rem);opacity:.85;grid-column:1;align-items:center;gap:.25em;display:flex}`],p([u({attribute:!1})],ye.prototype,"data",2),ye=p([b("roxy-choghadiya-grid")],ye);function K(n){if(typeof n!="string"||n.length===0||/^\d{4}-\d{2}-\d{2}$/.test(n))return"";let e=/^\d{2}:\d{2}(:\d{2})?$/.test(n)?`1970-01-01T${n}`:n,t=new Date(e);return Number.isNaN(t.getTime())?n:t.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit",hour12:!0})}function xe(n){if(typeof n!="string"||n.length===0)return"";let a=new Date(/^\d{4}-\d{2}-\d{2}$/.test(n)?`${n}T00:00:00`:n);return Number.isNaN(a.getTime())?n:a.toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})}function Bt(n){if(!n)return"";let a=K(n.start),e=K(n.end);return a&&e?`${a} - ${e}`:a||e||""}function C(n,a=1){return typeof n!="number"||!Number.isFinite(n)?"":n.toFixed(a).replace(/\.?0+$/,"")}function Cr(n,a=1){let e=C(n,a);return e?`${e}%`:""}var _e={conjunction:"aspect-conjunction",sextile:"aspect-sextile",square:"aspect-square",trine:"aspect-trine",opposition:"aspect-opposition"};function Ge(n){return(n.type??"").toLowerCase().replace(/_/g,"-")}var X=class extends f{constructor(){super();this.data=null;this.mode="astrology";new $(this)}getBreakdown(){let e=this.data;if(!e)return{};if("categories"in e&&e.categories){let t={};for(let[r,o]of Object.entries(e.categories))typeof o=="number"&&Number.isFinite(o)&&(t[r]=o);return t}return{}}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No compatibility data</div>`;let t=e.overallScore,r=this.getBreakdown(),o="rating"in e?e.rating:void 0,i="archetype"in e?e.archetype:void 0,d="advice"in e?e.advice:void 0,c="summary"in e?e.summary:void 0,m="interpretation"in e?e.interpretation:void 0,g="strengths"in e?e.strengths:void 0,h="challenges"in e?e.challenges:void 0,y="keyAspects"in e?e.keyAspects:void 0;return s`<article class="card" aria-label="${`Compatibility (${this.mode})`}"><div class="head"><h2>${this.mode} compatibility</h2><div>${typeof t=="number"?s`<div class="score">${C(t,0)}</div>`:l} ${o?s`<div class="rating">${o}</div>`:l}</div></div>${Object.keys(r).length>0?s`<div role="list">${Object.entries(r).map(([S,k])=>s`<div class="bar-row" role="listitem"><span style="text-transform:capitalize">${S}</span> <span class="bar"><span style="width:${Math.max(0,Math.min(100,k))}%"></span></span> <span>${C(k,0)}</span></div>`)}</div>`:l} ${i?s`<p><span class="archetype">${i.label}</span> ${i.description?s`· ${i.description}`:l}</p>`:l} ${c?s`<p>${c}</p>`:l} ${m&&!c?s`<p>${m}</p>`:l} ${d?s`<p>${d}</p>`:l} ${(g?.length??0)>0||(h?.length??0)>0?s`<div class="lists">${g?.length?s`<div><h3>Strengths</h3><ul>${g.map(S=>s`<li>${S}</li>`)}</ul></div>`:l} ${h?.length?s`<div><h3>Challenges</h3><ul>${h.map(S=>s`<li>${S}</li>`)}</ul></div>`:l}</div>`:l} ${y?.length?s`<div><h3 style="margin:0 0 .25rem;font-size:var(--roxy-text-xs);color:var(--roxy-muted);text-transform:uppercase;letter-spacing:.06em">Key aspects</h3><ul style="margin:0;padding-left:1rem;font-size:var(--roxy-text-sm)">${y.slice(0,6).map(S=>s`<li>${xa(S)}</li>`)}</ul></div>`:l}</article>`}};X.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-md,1rem);display:grid}.head{align-items:center;gap:var(--roxy-space-md,1rem);grid-template-columns:1fr auto;display:grid}.head h2{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);text-transform:capitalize;margin:0}.score{font-variant-numeric:tabular-nums;font-size:2rem;font-weight:var(--roxy-weight-bold,600);color:var(--roxy-accent-ink,#b45309);line-height:1}.rating{color:var(--roxy-secondary,#475569);font-size:var(--roxy-text-sm,.875rem)}.bar-row{gap:var(--roxy-space-sm,.5rem);font-size:var(--roxy-text-sm,.875rem);grid-template-columns:8rem 1fr 3.5rem;align-items:center;display:grid}.bar{background:var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-full,9999px);height:8px;overflow:hidden}.bar>span{background:var(--roxy-accent,#f59e0b);height:100%;transition:width var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));display:block}.bar-row>span:last-child{font-variant-numeric:tabular-nums;color:var(--roxy-muted,#71717a);text-align:right}.archetype{color:var(--roxy-accent-ink,#b45309);font-weight:var(--roxy-weight-bold,600)}.lists{gap:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));display:grid}.lists h3{margin:0 0 var(--roxy-space-xs,.25rem);font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.06em}.lists ul{padding-left:var(--roxy-space-md,1rem);margin:0}`],p([u({attribute:!1})],X.prototype,"data",2),p([u({type:String,reflect:!0})],X.prototype,"mode",2),X=p([b("roxy-compatibility-card")],X);function xa(n){let a=n.type.toLowerCase().replace(/_/g,"-"),e=typeof n.orb=="number"?` (orb ${C(n.orb,1)}\xB0)`:"",t=[n.planet1,a,n.planet2].filter(Boolean).join(" ");return n.description?`${t}${e} \xB7 ${n.description}`:`${t}${e}`}var Z=class extends f{constructor(){super();this.data=null;this.period="current";new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No dasha data</div>`;let t=this.collectPeriods(e),r=t.length?Math.max(...t.map(o=>o.durationYears)):0;return s`<div class="wrap" aria-label="Dasha timeline"><header class="head"><h2 class="title">${this.period==="major"?"Vimshottari Mahadasha":this.period==="sub"?"Antardasha":"Active dashas"}</h2>${"nakshatraName"in e&&e.nakshatraName?s`<div class="nakshatra">Moon nakshatra: ${e.nakshatraName} ${"nakshatraLord"in e&&e.nakshatraLord?s`(lord ${e.nakshatraLord})`:l}</div>`:l}</header>${this.renderBirthBalance(e)} ${this.period==="current"?this.renderCurrent(e):l} ${t.length>0?s`<div class="timeline" role="list">${t.map(o=>this.renderBar(o,r))}</div>`:l} ${this.renderActiveInterpretation(t)}</div>`}renderBirthBalance(e){if(!("birthDashaBalance"in e)||!e.birthDashaBalance)return l;let t=e.birthDashaBalance,r="nakshatraLord"in e&&e.nakshatraLord?e.nakshatraLord:"",o=t.years??0,i=t.months??0,d=t.days??0,c=[];o&&c.push(`${o}y`),i&&c.push(`${i}m`),d&&c.push(`${d}d`);let m=c.length?c.join(" "):"0d";return s`<p class="balance">Birth dasha balance: ${m} of ${r?s`<strong>${r}</strong>`:"the opening mahadasha"} remained at birth.</p>`}renderActiveInterpretation(e){let t=e.find(r=>this.isCurrent(r));return t?.interpretation?s`<div class="interp"><h3>${t.planet} mahadasha</h3><p>${t.interpretation}</p></div>`:l}renderCurrent(e){return"mahadasha"in e?s`<div class="current">${"mahadasha"in e&&e.mahadasha?s`<div><span>Mahadasha</span> <strong>${e.mahadasha.planet}</strong> ${"remainingInMahadasha"in e&&e.remainingInMahadasha?s`<small>${C(e.remainingInMahadasha.years+e.remainingInMahadasha.months/12,1)} years left</small>`:l}</div>`:l} ${"antardasha"in e&&e.antardasha?s`<div><span>Antardasha</span> <strong>${e.antardasha.planet}</strong> ${"remainingInAntardasha"in e&&e.remainingInAntardasha?s`<small>${C(e.remainingInAntardasha.years+e.remainingInAntardasha.months/12,1)} years left</small>`:l}</div>`:l} ${"pratyantardasha"in e&&e.pratyantardasha?s`<div><span>Pratyantardasha</span> <strong>${e.pratyantardasha.planet}</strong> ${"remainingInPratyantardasha"in e&&e.remainingInPratyantardasha?s`<small>${C(e.remainingInPratyantardasha.years+e.remainingInPratyantardasha.months/12,1)} years left</small>`:l}</div>`:l}</div>`:l}collectPeriods(e){return"mahadashas"in e&&e.mahadashas?.length?e.mahadashas:"antardashas"in e&&e.antardashas?.length?e.antardashas:[]}isCurrent(e){if(!e.startDate||!e.endDate)return!1;let t=Date.now(),r=Date.parse(e.startDate),o=Date.parse(e.endDate);return Number.isNaN(r)||Number.isNaN(o)?!1:t>=r&&t<o}progressIn(e){if(!e.startDate||!e.endDate)return-1;let t=Date.parse(e.startDate),r=Date.parse(e.endDate),o=Date.now();return Number.isNaN(t)||Number.isNaN(r)||o<t||o>=r||r<=t?-1:(o-t)/(r-t)}renderBar(e,t){let r=e.durationYears,o=t>0?r/t*100:0,i=this.isCurrent(e),d=i?this.progressIn(e):-1,c=i?"bar-track bar-now":"bar-track";return s`<div class="${i?"bar now":"bar"}" role="listitem" aria-current="${i?"time":"false"}"><span><strong>${e.planet}</strong>${i?s`<span class="now-badge">Now</span>`:l} </span><span class="${c}"><span class="bar-fill" style="width:${o}%"></span> ${d>=0?s`<span class="bar-progress" style="left:${d*o}%" aria-hidden="true"></span>`:l} </span><span class="dates">${e.startDate?Pr(e.startDate):""} ${e.endDate?s`- ${Pr(e.endDate)}`:""}</span></div>`}};Z.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:center;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.nakshatra{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}.current{gap:var(--roxy-space-md,1rem);background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-md,1rem);box-shadow:var(--roxy-shadow-sm);grid-template-columns:repeat(auto-fit,minmax(10rem,1fr));display:grid}.current div span:first-child{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);text-transform:uppercase;letter-spacing:.06em;display:block}.current div strong{font-size:var(--roxy-text-base,1rem);color:var(--roxy-fg,#0a0a0a)}.balance{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);border-left:2px solid var(--roxy-border,#e4e4e7);padding-left:var(--roxy-space-sm,.5rem);margin:0}.timeline{gap:var(--roxy-space-xs,.25rem);display:grid}.bar{gap:var(--roxy-space-sm,.5rem);font-size:var(--roxy-text-sm,.875rem);grid-template-columns:5rem 1fr 8rem;align-items:center;display:grid}.bar.now strong{color:var(--roxy-accent-ink,#b45309)}.now-badge{font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);color:var(--roxy-accent-ink,#b45309);text-transform:uppercase;letter-spacing:.06em;margin-left:.4em;display:inline-block}.bar-track{background:var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-full,9999px);height:14px;position:relative;overflow:hidden}.bar-fill{background:var(--roxy-accent,#f59e0b);opacity:.45;height:100%;transition:width var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));display:block}.bar-now .bar-fill{opacity:1}.bar-progress{background:var(--roxy-accent-ink,#b45309);width:2px;box-shadow:0 0 0 2px color-mix(in srgb, var(--roxy-accent,#f59e0b) 35%, transparent);border-radius:2px;position:absolute;top:-2px;bottom:-2px}.dates{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);font-variant-numeric:tabular-nums;text-align:right}.interp{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);background:var(--roxy-bg,#fff)}.interp h3{font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600);margin:0}.interp p{margin:var(--roxy-space-sm,.5rem) 0 0;font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a)}`],p([u({attribute:!1})],Z.prototype,"data",2),p([u({type:String,reflect:!0})],Z.prototype,"period",2),Z=p([b("roxy-dasha-timeline")],Z);function Pr(n){let a=n.match(/^(\d{4})/);return a?a[1]:n}var fa=["title","name","label","heading","overview","summary"],ba=["imageUrl","image","icon","symbol"],va=["imageUrl","image"],$a=6,Q=class extends f{constructor(){super();this.data=null;this.depth=0;new $(this)}render(){return this.data==null?s`<div class="roxy-empty" role="status">No data</div>`:this.depth>=$a?s`<div class="roxy-empty" role="status">…</div>`:s`<div class="roxy-card" aria-label="Generic data display">${this.renderValue(this.data)}</div>`}renderValue(e){return e==null?l:typeof e=="string"?s`<p>${e}</p>`:typeof e=="number"||typeof e=="boolean"?s`<p>${String(e)}</p>`:Array.isArray(e)?this.renderArray(e):this.renderObject(e)}renderArray(e){return e.length===0?s`<div class="roxy-empty" role="status">Empty list</div>`:e.every(o=>o===null||["string","number","boolean"].includes(typeof o))?s`<ul class="roxy-chips">${e.map(o=>s`<li>${String(o)}</li>`)}</ul>`:e.every(o=>o!==null&&typeof o=="object"&&!Array.isArray(o))?this.renderTable(e):s`<ol>${e.map(o=>s`<li>${this.renderValue(o)}</li>`)}</ol>`}renderTable(e){let t=this.collectKeys(e);return s`<table class="roxy-table" role="table"><thead><tr>${t.map(r=>s`<th>${j(r)}</th>`)}</tr></thead><tbody>${e.map(r=>s`<tr>${t.map(o=>s`<td>${this.formatPrimitive(r[o])}</td>`)}</tr>`)}</tbody></table>`}renderObject(e){let t=fa.find(d=>typeof e[d]=="string"),r=ba.find(d=>typeof e[d]=="string"&&e[d].startsWith("http")),o=t!=="summary"&&typeof e.summary=="string"?"summary":null,i=Object.entries(e).filter(([d,c])=>d!==t&&d!==o&&!va.includes(d)&&c!==null&&c!==void 0);return s`${r?s`<img class="roxy-image" src="${String(e[r])}" alt="${t?String(e[t]):"illustration"}" loading="lazy">`:l} ${t?s`<h3 class="roxy-title">${e[t]}</h3>`:l} ${o?s`<p class="roxy-summary">${e[o]}</p>`:l} ${i.length>0?s`<dl class="roxy-rows">${i.map(([d,c])=>s`<dt>${j(d)}</dt><dd>${this.renderField(c)}</dd>`)}</dl>`:l}`}renderField(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):Array.isArray(e)&&e.every(r=>["string","number","boolean"].includes(typeof r))?s`<ul class="roxy-chips">${e.map(r=>s`<li>${String(r)}</li>`)}</ul>`:s`<roxy-data .data="${e}" .depth="${this.depth+1}"></roxy-data>`}formatPrimitive(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):Array.isArray(e)?e.map(String).join(", "):JSON.stringify(e)}collectKeys(e){let t=new Set;for(let r of e)for(let o of Object.keys(r))t.add(o);return Array.from(t)}};Q.styles=[v,x`.roxy-card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-md,1rem);box-shadow:var(--roxy-shadow-sm)}.roxy-title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0 0 var(--roxy-space-sm,.5rem) 0;color:var(--roxy-primary,#0f172a);letter-spacing:var(--roxy-tracking-tight)}.roxy-summary{color:var(--roxy-secondary,#475569);margin:0 0 var(--roxy-space-md,1rem) 0;font-size:var(--roxy-text-sm,.875rem)}dl.roxy-rows{gap:var(--roxy-space-xs,.25rem) var(--roxy-space-md,1rem);grid-template-columns:minmax(8ch,max-content) 1fr;margin:0;display:grid}dl.roxy-rows dt{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);text-transform:capitalize}dl.roxy-rows dd{color:var(--roxy-fg,#0a0a0a);font-size:var(--roxy-text-sm,.875rem);word-break:break-word;margin:0}ul.roxy-chips{gap:var(--roxy-space-xs,.25rem);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}ul.roxy-chips li{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 14%, transparent);color:var(--roxy-fg,#0a0a0a);border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);padding:2px 8px}table.roxy-table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem)}table.roxy-table th,table.roxy-table td{border-bottom:1px solid var(--roxy-border,#e4e4e7);padding:var(--roxy-space-sm,.5rem);text-align:left;text-transform:none}table.roxy-table th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:capitalize;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.04em}.roxy-image{border-radius:var(--roxy-radius-md,8px);max-width:100%;height:auto;margin-bottom:var(--roxy-space-md,1rem)}.roxy-section{margin-bottom:var(--roxy-space-md,1rem)}.roxy-section h4{font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600);color:var(--roxy-secondary,#475569);margin:0 0 var(--roxy-space-xs,.25rem) 0;text-transform:capitalize}`],p([u({attribute:!1})],Q.prototype,"data",2),p([u({attribute:!1})],Q.prototype,"depth",2),Q=p([b("roxy-data")],Q);function q(n){let a=n%360;return a<0?a+360:a}function V(n){let a=q(n),e=Math.floor(a/30)%12,t=a%30,r=Math.floor(t),o=(t-r)*60,i=Math.floor(o),d=Math.round((o-i)*60);return{sign:_[e]??"Aries",signIndex:e,degree:r,minute:i,second:d}}function ft(n){let{sign:a,degree:e,minute:t}=V(n);return`${e}\xB0 ${a} ${String(t).padStart(2,"0")}'`}function Kt(n){return q(n+180)}function Er(n,a){let e=q(n),t=q(a)-e;return t<0&&(t+=360),q(e+t/2)}function T(n,a,e,t){let r=t*Math.PI/180;return{x:n+e*Math.cos(r),y:a+e*Math.sin(r)}}var fe=x`.roxy-tablist{border-bottom:2px solid var(--roxy-border,#e4e4e7);gap:2px;display:flex}.roxy-tab{padding:var(--roxy-space-xs,.25rem) var(--roxy-space-md,1rem);font-size:var(--roxy-text-sm,.875rem);cursor:pointer;color:var(--roxy-muted,#71717a);transition:color var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,ease);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-2px;font-family:inherit}.roxy-tab[aria-selected=true]{color:var(--roxy-accent-ink,#b45309);border-bottom-color:var(--roxy-accent,#f59e0b);font-weight:var(--roxy-weight-bold,600)}.roxy-tab:hover:not([aria-selected=true]){color:var(--roxy-fg,#0a0a0a)}.roxy-tab:focus-visible{outline:2px solid var(--roxy-ring,#f59e0b66);outline-offset:2px;border-radius:4px}`;function Ie(n){let{items:a,active:e,onSelect:t,label:r,idPrefix:o,controls:i=!1}=n;return s`<div class="roxy-tablist" role="tablist" aria-label="${r}" @keydown="${c=>{if(c.key!=="ArrowRight"&&c.key!=="ArrowLeft")return;c.preventDefault();let m=a.findIndex(S=>S.id===e);if(m===-1)return;let g=c.key==="ArrowRight"?1:-1,h=a[(m+g+a.length)%a.length];if(!h)return;t(h.id);let y=c.currentTarget.getRootNode();requestAnimationFrame(()=>{y.querySelector(`#${o}-tab-${h.id}`)?.focus()})}}">${a.map(c=>s`<button type="button" class="roxy-tab" role="tab" id="${o}-tab-${c.id}" aria-selected="${e===c.id?"true":"false"}" aria-controls="${i&&e===c.id?`${o}-panel-${c.id}`:l}" tabindex="${e===c.id?"0":"-1"}" @click="${()=>t(c.id)}">${c.label}</button>`)}</div>`}var B=400,R=20,O=B-2*R,z=B/2,wa=Object.fromEntries(_.map(n=>[n.toLowerCase(),n])),ka=[{id:"north",label:"North"},{id:"south",label:"South"},{id:"east",label:"East"}],Sa="\u02B3";function Tr(n,a){return typeof n.longitude!="number"||!Number.isFinite(n.longitude)?!1:V(n.longitude).sign.toLowerCase()!==a.toLowerCase()}function Aa(n,a){let e=yr[A(n.graha)]??n.graha.slice(0,2),t=n.isRetrograde?Sa:"";if(typeof n.longitude!="number"||!Number.isFinite(n.longitude)||Tr(n,a))return`${e}${t}`;let{degree:r}=V(n.longitude);return`${e} ${r}\xB0${t}`}function Ca(n,a){let e=[A(n.graha)],t=Tr(n,a);if(t&&e.push(`in ${a}`),typeof n.longitude=="number"&&Number.isFinite(n.longitude)){let r=V(n.longitude),o=String(r.minute).padStart(2,"0");e.push(t?`D1: ${r.degree}\xB0${o}' ${r.sign}`:`${r.degree}\xB0${o}' ${r.sign}`)}if(n.nakshatra?.name){let r=n.nakshatra.pada?` pada ${n.nakshatra.pada}`:"";e.push(`${n.nakshatra.name}${r}`)}return n.awastha&&e.push(n.awastha),n.isRetrograde&&e.push("retrograde"),e.join(" \xB7 ")}function qt(n,a,e,t,r){let o=t-(n.length-1)*r/2;return n.map((i,d)=>{let c=o+d*r;return w`<text class="planet-text" x=${e} y=${c} text-anchor="middle" dominant-baseline="central">${Aa(i,a)}<title>${Ca(i,a)}</title></text>`})}function vt(n,a){let e={};for(let r of _)e[r.toLowerCase()]=[];let t="";for(let[r,o]of Object.entries(n??{})){let i=(o?.rashi??"").toLowerCase();if(r==="Lagna"||o?.graha==="Lagna"){t=wa[i]??"";continue}!i||!(i in e)||e[i]?.push({graha:o.graha??r,longitude:o.longitude,nakshatra:o.nakshatra,isRetrograde:o.isRetrograde,awastha:o.awastha})}return{lagnaSign:t,placements:e,divisionLabel:a}}var De=O/4,Pa={Pisces:{col:0,row:0},Aries:{col:1,row:0},Taurus:{col:2,row:0},Gemini:{col:3,row:0},Cancer:{col:3,row:1},Leo:{col:3,row:2},Virgo:{col:3,row:3},Libra:{col:2,row:3},Scorpio:{col:1,row:3},Sagittarius:{col:0,row:3},Capricorn:{col:0,row:2},Aquarius:{col:0,row:1}};function Ea(n){let a=Pa[n]??{col:0,row:0};return{x:R+a.col*De,y:R+a.row*De,w:De,h:De}}function Ta(n){let a=R,e=R+De,t=R+2*De,r=R+3*De,o=B-R;return w`
|
|
4
13
|
<rect class="line" x=${a} y=${a} width=${O} height=${O} stroke-width="1.5" fill="none" />
|
|
5
14
|
<line class="line" x1=${a} y1=${e} x2=${o} y2=${e} stroke-width="1" />
|
|
6
15
|
<line class="line" x1=${a} y1=${r} x2=${o} y2=${r} stroke-width="1" />
|
|
@@ -10,37 +19,37 @@
|
|
|
10
19
|
<line class="line" x1=${r} y1=${t} x2=${o} y2=${t} stroke-width="1" />
|
|
11
20
|
<line class="line" x1=${t} y1=${a} x2=${t} y2=${e} stroke-width="1" />
|
|
12
21
|
<line class="line" x1=${t} y1=${r} x2=${t} y2=${o} stroke-width="1" />
|
|
13
|
-
${n?
|
|
14
|
-
`}function
|
|
22
|
+
${n?w`<text class="centre-label" x=${z} y=${z} text-anchor="middle" dominant-baseline="central">${n}</text>`:l}
|
|
23
|
+
`}function Rr(n,a){let e=_.findIndex(r=>r===a),t=_.findIndex(r=>r===n);return e===-1||t===-1?0:(t-e+12)%12+1}function Ra(n,a,e,t){let r=Ea(n),o=r.x+r.w/2,i=r.y+r.h/2,d=ht[n]??n.slice(0,2),c=14;return w`
|
|
15
24
|
<g class=${e?"cell lagna":"cell"}>
|
|
16
|
-
${e?
|
|
25
|
+
${e?w`
|
|
17
26
|
<rect class="lagna-bg" x=${r.x} y=${r.y} width=${r.w} height=${r.h} />
|
|
18
|
-
<line class="lagna-slash" x1=${r.x+r.w-
|
|
27
|
+
<line class="lagna-slash" x1=${r.x+r.w-c} y1=${r.y+c} x2=${r.x+c} y2=${r.y+r.h-c} stroke-width="1.2" />
|
|
19
28
|
`:l}
|
|
20
|
-
<text class="sign-text" x=${r.x+6} y=${r.y+12} text-anchor="start" dominant-baseline="central">${
|
|
21
|
-
${t>0?
|
|
22
|
-
${e?
|
|
23
|
-
${a.length?
|
|
29
|
+
<text class="sign-text" x=${r.x+6} y=${r.y+12} text-anchor="start" dominant-baseline="central">${d}</text>
|
|
30
|
+
${t>0?w`<text class="house-num" x=${r.x+r.w-6} y=${r.y+12} text-anchor="end" dominant-baseline="central">${t}</text>`:l}
|
|
31
|
+
${e?w`<text class="lagna-marker" x=${o} y=${r.y+26} text-anchor="middle" dominant-baseline="central">Asc</text>`:l}
|
|
32
|
+
${a.length?qt(a,n,o,i+4,14):l}
|
|
24
33
|
</g>
|
|
25
|
-
`}function
|
|
26
|
-
${
|
|
27
|
-
${_.map(e=>
|
|
28
|
-
`}var
|
|
34
|
+
`}function La(n){let a=n.lagnaSign.toLowerCase();return w`
|
|
35
|
+
${Ta(n.divisionLabel)}
|
|
36
|
+
${_.map(e=>Ra(e,n.placements[e.toLowerCase()]??[],e.toLowerCase()===a,Rr(e,n.lagnaSign)))}
|
|
37
|
+
`}var E={tl:{x:R,y:R},tr:{x:B-R,y:R},br:{x:B-R,y:B-R},bl:{x:R,y:B-R},top:{x:z,y:R},right:{x:B-R,y:z},bottom:{x:z,y:B-R},left:{x:R,y:z},tlMid:{x:z-O/4,y:z-O/4},trMid:{x:z+O/4,y:z-O/4},brMid:{x:z+O/4,y:z+O/4},blMid:{x:z-O/4,y:z+O/4}};function ee(n){let a=n.reduce((t,r)=>t+r.x,0)/n.length,e=n.reduce((t,r)=>t+r.y,0)/n.length;return{x:a,y:e}}var Na={1:{x:z,y:E.tlMid.y},2:ee([E.tl,E.top,E.tlMid]),3:ee([E.tl,E.left,E.tlMid]),4:{x:E.tlMid.x,y:z},5:ee([E.bl,E.left,E.blMid]),6:ee([E.bl,E.bottom,E.blMid]),7:{x:z,y:E.blMid.y},8:ee([E.br,E.bottom,E.brMid]),9:ee([E.br,E.right,E.brMid]),10:{x:E.brMid.x,y:z},11:ee([E.tr,E.right,E.trMid]),12:ee([E.tr,E.top,E.trMid])};function Ma(n,a){let e=_.findIndex(t=>t===a);return e===-1?n:(e+n-1)%12+1}function za(n){let{tl:a,tr:e,br:t,bl:r,top:o,right:i,bottom:d,left:c}=E;return w`
|
|
29
38
|
<rect class="line" x=${a.x} y=${a.y} width=${O} height=${O} stroke-width="1.5" fill="none" />
|
|
30
|
-
<polygon class="line" points="${o.x},${o.y} ${i.x},${i.y} ${
|
|
39
|
+
<polygon class="line" points="${o.x},${o.y} ${i.x},${i.y} ${d.x},${d.y} ${c.x},${c.y}" stroke-width="1" fill="none" />
|
|
31
40
|
<line class="line" x1=${a.x} y1=${a.y} x2=${t.x} y2=${t.y} stroke-width="1" />
|
|
32
41
|
<line class="line" x1=${e.x} y1=${e.y} x2=${r.x} y2=${r.y} stroke-width="1" />
|
|
33
|
-
${n?
|
|
34
|
-
`}function
|
|
42
|
+
${n?w`<text class="centre-label" x=${z} y=${z} text-anchor="middle" dominant-baseline="central">${n}</text>`:l}
|
|
43
|
+
`}function _a(n,a,e,t,r){let o=Na[n];if(!o)return w``;let i=Math.min(14,Math.abs(o.y-z)*.45+6),d=i+12,c=r?`${a} \xB7 ${ht[e]??e.slice(0,2)}`:`${a}`;return w`
|
|
35
44
|
<g class=${r?"cell lagna":"cell"}>
|
|
36
|
-
<text class="rashi-num" x=${o.x} y=${o.y-i} text-anchor="middle" dominant-baseline="central">${
|
|
37
|
-
${r?
|
|
38
|
-
${t.length?
|
|
45
|
+
<text class="rashi-num" x=${o.x} y=${o.y-i} text-anchor="middle" dominant-baseline="central">${c}</text>
|
|
46
|
+
${r?w`<text class="lagna-marker" x=${o.x} y=${o.y-d} text-anchor="middle" dominant-baseline="central">Asc</text>`:l}
|
|
47
|
+
${t.length?qt(t,e,o.x,o.y+8,12):l}
|
|
39
48
|
</g>
|
|
40
|
-
`}function
|
|
41
|
-
${
|
|
42
|
-
${Array.from({length:12},(e,t)=>{let r=t+1,o=
|
|
43
|
-
`}var
|
|
49
|
+
`}function Da(n){let a=n.lagnaSign||"Aries";return w`
|
|
50
|
+
${za(n.divisionLabel)}
|
|
51
|
+
${Array.from({length:12},(e,t)=>{let r=t+1,o=Ma(r,a),i=_[o-1]??"Aries";return _a(r,o,i,n.placements[i.toLowerCase()]??[],r===1)})}
|
|
52
|
+
`}var bt=O/3;function Oa(){let n=R,a=R+bt,e=R+2*bt,t=B-R,at={Aries:[{x:a,y:n},{x:e,y:n},{x:e,y:a},{x:a,y:a}],Taurus:[{x:n,y:n},{x:a,y:n},{x:a,y:a}],Gemini:[{x:n,y:n},{x:a,y:a},{x:n,y:a}],Cancer:[{x:n,y:a},{x:a,y:a},{x:a,y:e},{x:n,y:e}],Leo:[{x:n,y:e},{x:a,y:e},{x:n,y:t}],Virgo:[{x:a,y:e},{x:a,y:t},{x:n,y:t}],Libra:[{x:a,y:e},{x:e,y:e},{x:e,y:t},{x:a,y:t}],Scorpio:[{x:e,y:e},{x:e,y:t},{x:t,y:t}],Sagittarius:[{x:e,y:e},{x:t,y:t},{x:t,y:e}],Capricorn:[{x:e,y:a},{x:t,y:a},{x:t,y:e},{x:e,y:e}],Aquarius:[{x:t,y:n},{x:t,y:a},{x:e,y:a}],Pisces:[{x:e,y:n},{x:t,y:n},{x:e,y:a}]},Ve={};for(let[st,ot]of Object.entries(at))Ve[st]={points:[...ot],centroid:ee(ot)};return Ve}var Ha=Oa();function Ga(n){let a=R,e=R+bt,t=R+2*bt,r=B-R;return w`
|
|
44
53
|
<rect class="line" x=${a} y=${a} width=${O} height=${O} stroke-width="1.5" fill="none" />
|
|
45
54
|
<line class="line" x1=${a} y1=${e} x2=${e} y2=${e} stroke-width="1" />
|
|
46
55
|
<line class="line" x1=${t} y1=${e} x2=${r} y2=${e} stroke-width="1" />
|
|
@@ -54,34 +63,34 @@
|
|
|
54
63
|
<line class="line" x1=${r} y1=${a} x2=${t} y2=${e} stroke-width="1" />
|
|
55
64
|
<line class="line" x1=${r} y1=${r} x2=${t} y2=${t} stroke-width="1" />
|
|
56
65
|
<line class="line" x1=${a} y1=${r} x2=${e} y2=${t} stroke-width="1" />
|
|
57
|
-
${n?
|
|
58
|
-
`}function
|
|
66
|
+
${n?w`<text class="centre-label" x=${z} y=${z} text-anchor="middle" dominant-baseline="central">${n}</text>`:l}
|
|
67
|
+
`}function Ia(n,a,e,t){let r=Ha[n];if(!r)return w``;let{centroid:o,points:i}=r,d=ht[n]??n.slice(0,2),c=i.map(m=>`${m.x},${m.y}`).join(" ");return w`
|
|
59
68
|
<g class=${e?"cell lagna":"cell"}>
|
|
60
|
-
${e?
|
|
61
|
-
<text class="sign-text" x=${o.x} y=${o.y-16} text-anchor="middle" dominant-baseline="central">${
|
|
62
|
-
${t>0?
|
|
63
|
-
${e?
|
|
64
|
-
${a.length?
|
|
69
|
+
${e?w`<polygon class="lagna-bg" points=${c} />`:l}
|
|
70
|
+
<text class="sign-text" x=${o.x} y=${o.y-16} text-anchor="middle" dominant-baseline="central">${d}</text>
|
|
71
|
+
${t>0?w`<text class="house-num" x=${o.x+18} y=${o.y-16} text-anchor="start" dominant-baseline="central">${t}</text>`:l}
|
|
72
|
+
${e?w`<text class="lagna-marker" x=${o.x} y=${o.y-30} text-anchor="middle" dominant-baseline="central">Asc</text>`:l}
|
|
73
|
+
${a.length?qt(a,n,o.x,o.y+4,12):l}
|
|
65
74
|
</g>
|
|
66
|
-
`}function
|
|
67
|
-
${
|
|
68
|
-
${_.map(e=>
|
|
69
|
-
`}function dt(n,a){switch(a){case"north":return aa(n);case"east":return la(n);default:return Zr(n)}}function ct(n,a){return Ne({items:qr,active:n,onSelect:a,label:"Kundli style",idPrefix:"kundli"})}var pt=x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.header{justify-content:space-between;align-items:center;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}svg{aspect-ratio:1;width:100%;max-width:560px;height:auto;margin:0 auto;display:block}.line{fill:#0000;stroke:var(--roxy-border,#d4d4d8)}.sign-text{fill:var(--roxy-muted,#71717a);font-size:11px;font-weight:500;font-family:var(--roxy-font-sans);text-transform:uppercase;letter-spacing:.04em}.rashi-num{fill:var(--roxy-muted,#71717a);font-size:12px;font-weight:500;font-family:var(--roxy-font-sans)}.house-num{fill:var(--roxy-accent-fg,#b45309);font-size:11px;font-weight:600;font-family:var(--roxy-font-sans);opacity:.85}.planet-text{fill:var(--roxy-fg,#0a0a0a);font-size:13px;font-weight:600;font-family:var(--roxy-font-sans)}.centre-label{fill:var(--roxy-muted,#71717a);font-size:14px;font-weight:600;font-family:var(--roxy-font-sans);letter-spacing:.02em}.lagna-marker{fill:var(--roxy-accent-fg,#b45309);font-size:10px;font-weight:700;font-family:var(--roxy-font-sans);letter-spacing:.08em;text-transform:uppercase}.lagna-bg{fill:color-mix(in srgb, var(--roxy-accent,#f59e0b) 14%, transparent)}.lagna-slash{stroke:var(--roxy-accent,#f59e0b);stroke-linecap:round;opacity:.7}`;var Z=class extends f{constructor(){super();this.data=null;this.chartStyle="north";this.setStyle=e=>{this.chartStyle=e};new $(this)}viewModel(){if(!this.data?.chart?.meta)return null;let{division:e}=this.data,t=`D${e.number} ${e.name}`;return lt(this.data.chart.meta,t)}render(){let e=this.viewModel();if(!this.data||!e)return s`<div class="roxy-empty" role="status">No divisional chart data</div>`;let{division:t,vargottama:r}=this.data;return s`<div class="wrap"><div class="header"><div><h2 class="title">D${t.number} ${t.name} ${t.sanskritName&&t.sanskritName!==t.name?s`<span class="division-meta">· ${t.sanskritName}</span>`:l}</h2>${t.significance?s`<p class="significance">${t.significance}</p>`:l}</div>${ct(this.chartStyle,this.setStyle)}</div><svg viewBox="0 0 400 400" preserveAspectRatio="xMidYMid meet" role="img" aria-label="D${t.number} ${t.name} divisional chart with twelve sign houses"><title>D${t.number} ${t.name}</title>${dt(e,this.chartStyle)}</svg> ${r&&r.length>0?s`<div class="vargottama-row" role="list" aria-label="Vargottama planets"><span class="vargottama-label">Vargottama:</span> ${r.map(o=>s`<span class="vargottama-pill" role="listitem">${N[o]??""} ${o}</span>`)}</div>`:l}</div>`}};Z.styles=[v,pt,ge,x`.division-meta{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);margin:0}.significance{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);border-left:2px solid var(--roxy-border,#e4e4e7);padding-left:var(--roxy-space-sm,.5rem);margin:0}.vargottama-row{gap:var(--roxy-space-xs,.25rem);flex-wrap:wrap;align-items:center;display:flex}.vargottama-label{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);margin-right:var(--roxy-space-xs,.25rem);font-weight:500}.vargottama-pill{font-size:var(--roxy-text-sm,.875rem);background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 22%, transparent);color:var(--roxy-fg,#0a0a0a);border:1px solid color-mix(in srgb, var(--roxy-accent,#f59e0b) 45%, transparent);border-radius:999px;align-items:center;gap:.2em;padding:.15em .6em;font-weight:600;display:inline-flex}`],m([u({attribute:!1})],Z.prototype,"data",2),m([u({type:String,reflect:!0,attribute:"chart-style"})],Z.prototype,"chartStyle",2),Z=m([b("roxy-divisional-chart")],Z);var da={manglik:"Mangal Dosha",kalsarpa:"Kaal Sarp Dosha",sadhesati:"Sade Sati"},Q=class extends f{constructor(){super();this.data=null;this.type="manglik";new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No dosha data</div>`;let t=!!e.present,r=da[this.type]??this.type,o=(e.severity??"").toLowerCase(),i=o==="severe"?3:o==="moderate"?2:o==="mild"?1:0,c=i*33,d=i===3?"var(--roxy-danger)":i===2?"var(--roxy-warning)":i===1?"var(--roxy-success)":"transparent";return s`<article class="card" aria-label="${r}"><header class="head"><h2 class="title">${r}</h2><span class="${`badge ${t?"present":"absent"}`}">${t?"Present":"Absent"}</span></header>${e.severity?s`<div class="severity-bar" role="meter" aria-valuemin="0" aria-valuemax="3" aria-valuenow="${i}" aria-label="Severity ${e.severity}"><span class="severity-fill" style="width:${c}%;background:${d}"></span></div>`:l} ${e.description?s`<p class="description">${e.description}</p>`:l} ${this.renderEffects(e)} ${e.remedies&&e.remedies.length>0?s`<div><h3>Remedies</h3><ul>${e.remedies.map(p=>s`<li>${p}</li>`)}</ul></div>`:l} ${"exceptions"in e&&e.exceptions&&e.exceptions.length>0?s`<div><h3>Exceptions</h3><ul>${e.exceptions.map(p=>s`<li>${p}</li>`)}</ul></div>`:l}</article>`}renderEffects(e){if(!e.effects)return l;let t=Object.entries(e.effects).filter(([,r])=>typeof r=="string"&&r.length>0);return t.length===0?l:s`<div class="effects">${t.map(([r,o])=>s`<div><h3>${r}</h3><p>${o}</p></div>`)}</div>`}};Q.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:center;gap:var(--roxy-space-md,1rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);text-transform:capitalize;margin:0}.badge{align-items:center;gap:var(--roxy-space-xs,.25rem);border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;letter-spacing:.06em;padding:4px 10px;display:inline-flex}.badge.absent{background:color-mix(in srgb, var(--roxy-success,#16a34a) 16%, transparent);color:var(--roxy-success-fg,#166534)}.badge.present{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 16%, transparent);color:var(--roxy-danger-fg,#991b1b)}.severity-bar{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 30%, transparent);border-radius:4px;width:100%;height:8px;position:relative;overflow:hidden}.severity-fill{height:100%;transition:width var(--roxy-motion-duration,.2s) ease-out;border-radius:4px;display:block}@media (prefers-reduced-motion:reduce){.severity-fill{transition:none}}.description{color:var(--roxy-fg,#0a0a0a);margin:0}h3{margin:0 0 var(--roxy-space-xs,.25rem);font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.06em}ul{padding-left:var(--roxy-space-md,1rem);font-size:var(--roxy-text-sm,.875rem);margin:0}.effects{gap:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));display:grid}.effects p{font-size:var(--roxy-text-sm,.875rem);margin:0}`],m([u({attribute:!1})],Q.prototype,"data",2),m([u({type:String,reflect:!0})],Q.prototype,"type",2),Q=m([b("roxy-dosha-card")],Q);var Mt=new Map;async function ca(n){let a=Mt.get(n);return a||(a=fetch(n).then(async e=>{if(!e.ok)throw new Error(`HTTP ${e.status}`);return await e.json()}).catch(e=>{throw Mt.delete(n),e}),Mt.set(n,a)),a}var H=class extends f{constructor(){super(...arguments);this.endpoint="vedic-astrology/birth-chart";this.method="POST";this.specUrl="https://roxyapi.com/api/v2/openapi.json";this.submitLabel="Submit";this.fields=[];this.values={};this.hasLocation=!1;this.loaded=!1;this.specError=null;this.retryLoadSchema=()=>{this.loaded=!1,this.specError=null,this.loadSchema()};this.onLocation=e=>{let t=e.detail;t&&(this.values={...this.values,latitude:t.latitude,longitude:t.longitude,timezone:t.timezone??t.utcOffset})};this.onSubmit=e=>{e.preventDefault();let t=this.fields.filter(r=>r.required).filter(r=>this.values[r.name]===void 0||this.values[r.name]==="");if(t.length>0){this.dispatchEvent(new CustomEvent("roxy-validation-error",{detail:{missing:t.map(r=>r.name)},bubbles:!0,composed:!0}));return}this.dispatchEvent(new CustomEvent("roxy-submit",{detail:{endpoint:this.endpoint,values:this.values},bubbles:!0,composed:!0}))}}connectedCallback(){super.connectedCallback(),this.loadSchema()}async loadSchema(){this.specError=null;try{let e=await ca(this.specUrl),t=`/${this.endpoint.replace(/^\//,"")}`,r=e.paths?.[t]?.[this.method.toLowerCase()];if(!r)throw new Error(`Endpoint ${this.method} ${t} not found in OpenAPI spec`);let o=e.components?.schemas??{},i=[],c;if(r.requestBody){let p=r.requestBody.content?.["application/json"]?.schema;c=this.resolve(p,o)}if(c?.properties){let p=new Set(c.required??[]);for(let[g,h]of Object.entries(c.properties)){let y=this.resolve(h,o)??{};i.push({name:g,type:this.fieldType(y),required:p.has(g),description:y.description,enum:y.enum,min:y.minimum,max:y.maximum,default:y.default})}}for(let p of r.parameters??[])if(p.in==="path"||p.in==="query"){let g=this.resolve(p.schema,o)??{};i.push({name:p.name,type:this.fieldType(g),required:!!p.required,description:g.description,enum:g.enum,default:g.default})}this.fields=i,this.hasLocation=i.some(p=>p.name==="latitude")&&i.some(p=>p.name==="longitude")&&i.some(p=>p.name==="timezone");let d={};for(let p of i)p.default!==void 0&&(d[p.name]=p.default);this.values=d,this.loaded=!0}catch(e){let t=e instanceof Error?e.message:String(e);this.specError=t,this.loaded=!0,this.dispatchEvent(new CustomEvent("roxy-spec-error",{detail:{url:this.specUrl,message:t},bubbles:!0,composed:!0}))}}resolve(e,t){if(e){if("$ref"in e&&e.$ref){let r=e.$ref.split("/").pop();return r?t[r]:void 0}return e}}fieldType(e){return e.enum?"enum":e.format==="date"?"date":e.format==="time"?"time":e.format==="date-time"?"datetime":e.type==="integer"||e.type==="number"?"number":"text"}setValue(e,t){this.values={...this.values,[e]:t}}render(){if(!this.loaded)return s`<form><div class="roxy-skeleton" style="height:8rem"></div></form>`;if(this.specError)return s`<div class="spec-error" role="alert">Schema load failed: ${this.specError} <button type="button" class="submit" @click="${this.retryLoadSchema}">Retry</button></div>`;let e=t=>{if(this.hasLocation&&(t.name==="latitude"||t.name==="longitude"||t.name==="timezone"))return l;let r=`roxy-form-${t.name}`;return s`<div class="field"><label for="${r}">${me(t.name)}${t.required?s`<span class="req" aria-hidden="true">*</span>`:l}</label> ${t.enum?s`<select id="${r}" ?required="${t.required}" @change="${o=>this.setValue(t.name,o.target.value)}"><option value="">Choose</option>${t.enum.map(o=>s`<option value="${o}" ?selected="${this.values[t.name]===o}">${o}</option>`)}</select>`:s`<input id="${r}" type="${this.htmlType(t.type)}" ?required="${t.required}" min="${t.min??""}" max="${t.max??""}" step="${t.type==="number"?"any":""}" .value="${this.values[t.name]??""}" @input="${o=>this.setValue(t.name,this.coerce(t.type,o.target.value))}">`} ${t.description?s`<small class="help">${t.description}</small>`:l}</div>`};return s`<form @submit="${this.onSubmit}"><h2 class="title">${me(this.endpoint.split("/").pop()??"")}</h2>${this.hasLocation?s`<div class="location-block"><label>Birth location</label><roxy-location-search @roxy-location-select="${this.onLocation}" placeholder="City of birth"></roxy-location-search><small class="help">Required: latitude, longitude, timezone. Pick a city to autofill.</small></div>`:l}<div class="fields">${this.fields.map(t=>e(t))}</div><button class="submit" type="submit">${this.submitLabel}</button></form>`}htmlType(e){switch(e){case"date":return"date";case"time":return"time";case"datetime":return"datetime-local";case"number":return"number";default:return"text"}}coerce(e,t){if(t!==""){if(e==="number"){let r=Number(t);return Number.isFinite(r)?r:void 0}return t}}};H.styles=[v,x`form{gap:var(--roxy-space-md,1rem);background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);display:grid}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.fields{align-items:start;gap:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));display:grid}.field{gap:var(--roxy-space-xs,.25rem);flex-direction:column;min-width:0;display:flex}label{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-secondary,#475569)}label .req{color:var(--roxy-danger-fg,#991b1b);margin-left:4px}input,select{box-sizing:border-box;width:100%;padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);font-size:var(--roxy-text-base,1rem);color:var(--roxy-fg,#0a0a0a);background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);font-family:inherit}input:focus,select:focus{outline:2px solid var(--roxy-ring,#f59e0b66);outline-offset:2px;border-color:var(--roxy-accent-fg,#b45309)}.help{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem)}.location-block{gap:var(--roxy-space-xs,.25rem);grid-column:1/-1;display:grid}.coords{gap:var(--roxy-space-sm,.5rem);grid-template-columns:repeat(3,1fr);display:grid}.coords input{font-size:var(--roxy-text-sm,.875rem)}button.submit{background:var(--roxy-accent-fg,#b45309);color:var(--roxy-bg,#fff);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-sm,.5rem) var(--roxy-space-lg,1.5rem);font-size:var(--roxy-text-base,1rem);font-weight:var(--roxy-weight-bold,600);cursor:pointer;transition:transform var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));border:0;justify-self:start}button.submit:hover{transform:scale(1.02)}button.submit:focus-visible{outline:2px solid var(--roxy-ring,#f59e0b66);outline-offset:2px}.spec-error{gap:var(--roxy-space-md,1rem);background:var(--roxy-bg,#fff);border:1px solid var(--roxy-danger,#dc2626);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);color:var(--roxy-danger-fg,#991b1b);font-size:var(--roxy-text-sm,.875rem);justify-items:start;display:grid}`],m([u({type:String,attribute:"data-endpoint"})],H.prototype,"endpoint",2),m([u({type:String})],H.prototype,"method",2),m([u({type:String,attribute:"spec-url"})],H.prototype,"specUrl",2),m([u({type:String,attribute:"submit-label"})],H.prototype,"submitLabel",2),m([R()],H.prototype,"fields",2),m([R()],H.prototype,"values",2),m([R()],H.prototype,"hasLocation",2),m([R()],H.prototype,"loaded",2),m([R()],H.prototype,"specError",2),H=m([b("roxy-endpoint-form")],H);var ue=class extends f{constructor(){super();this.data=null;new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No Guna Milan data</div>`;let t=(e.breakdown??[]).filter(h=>h?.category!==void 0),r=e.total??0,o=e.maxScore??36,i=r/o*100,c="color-mix(in srgb, var(--roxy-border) 50%, transparent)",d=i>=70?"var(--roxy-success)":i>=50?"var(--roxy-warning)":"var(--roxy-danger)",p=i*2.827,g=(100-i)*2.827;return s`<article class="card" aria-label="Guna Milan score"><div class="score-header"><div class="score-info"><div class="score-bar"><div><span class="total">${C(e.total,1)}</span> <span class="over">/ ${e.maxScore}</span> ${typeof e.percentage=="number"?s`<small style="margin-left:.5rem;color:var(--roxy-muted)">${ir(e.percentage,1)}</small>`:l}</div>${e.recommendation?s`<span class="recommendation">${e.recommendation}</span>`:l}</div></div><div class="score-ring" role="meter" aria-label="Guna milan score" aria-valuemin="0" aria-valuemax="36" aria-valuenow="${r}"><svg viewBox="0 0 100 100" aria-hidden="true"><circle class="ring-track" cx="50" cy="50" r="45" fill="none" stroke="${c}" stroke-width="8"/><circle class="ring-fill" cx="50" cy="50" r="45" fill="none" stroke="${d}" stroke-width="8" stroke-dasharray="${p},${g}" stroke-linecap="round" transform="rotate(-90 50 50)"/><text x="50" y="50" text-anchor="middle" dominant-baseline="central" class="ring-text">${r}</text><text x="50" y="64" text-anchor="middle" dominant-baseline="central" class="ring-max">/${o}</text></svg></div></div>${t.length>0?s`<table><thead><tr><th>Category</th><th>Progress</th><th class="score">Score</th></tr></thead><tbody>${t.map(h=>{let y=h.score??0,S=h.maxScore??pa(h.category),w=S?y/S*100:0;return s`<tr><td>${h.category}</td><td class="bar-cell"><div class="mini-bar"><span style="width:${w}%"></span></div></td><td class="score">${C(y,1)} / ${S}</td></tr>`})}</tbody></table>`:l} ${(e.doshas?.length??0)>0||(e.doshaCancellations?.length??0)>0?s`<div class="tags">${e.doshas?.map(h=>s`<span class="dosha">${h}</span>`)} ${e.doshaCancellations?.map(h=>s`<span class="cancel" title="${h.reason}">${h.dosha} cancelled</span>`)}</div>`:l}</article>`}};ue.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-md,1rem);display:grid}.score-header{align-items:center;gap:1rem;display:flex}.score-info{flex:1}.score-bar{align-items:center;gap:var(--roxy-space-md,1rem);grid-template-columns:1fr auto;display:grid}.total{font-size:2.25rem;font-weight:var(--roxy-weight-bold,600);color:var(--roxy-accent-fg,#b45309);font-variant-numeric:tabular-nums;line-height:1}.over{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-base,1rem)}.recommendation{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-secondary,#475569)}.score-ring{flex-shrink:0;width:120px;height:120px}.score-ring svg{width:100%;height:100%}.score-ring .ring-text{fill:var(--roxy-fg,#0a0a0a);font-size:22px;font-weight:700;font-family:var(--roxy-font-sans)}.score-ring .ring-max{fill:var(--roxy-muted,#71717a);font-size:10px;font-family:var(--roxy-font-sans)}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem)}th,td{padding:var(--roxy-space-sm,.5rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);text-align:left}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.06em}td.score{text-align:right;font-variant-numeric:tabular-nums;color:var(--roxy-fg,#0a0a0a);font-weight:var(--roxy-weight-bold,600)}td.bar-cell{width:30%}.mini-bar{background:var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-full,9999px);height:8px;overflow:hidden}.mini-bar>span{background:var(--roxy-accent,#f59e0b);height:100%;transition:width var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));display:block}.tags{gap:var(--roxy-space-xs,.25rem);flex-wrap:wrap;display:flex}.tags span{border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);padding:2px 8px}.tags .dosha{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 16%, transparent);color:var(--roxy-danger-fg,#991b1b)}.tags .cancel{background:color-mix(in srgb, var(--roxy-success,#16a34a) 18%, transparent);color:var(--roxy-success-fg,#166534)}`],m([u({attribute:!1})],ue.prototype,"data",2),ue=m([b("roxy-guna-milan")],ue);function pa(n){if(!n)return 1;switch(n.toLowerCase()){case"varna":return 1;case"vasya":return 2;case"tara":return 3;case"yoni":return 4;case"maitri":return 5;case"gana":return 6;case"bhakoot":return 7;case"nadi":return 8;default:return 1}}var ee=class extends f{constructor(){super();this.data=null;this.mode="lookup";new $(this)}resolveHexagram(){let e=this.data;if(!e)return null;if("hexagram"in e&&e.hexagram){if("lines"in e){let r=e;return{hex:r.hexagram,lines:r.lines,changingLinePositions:r.changingLinePositions,resultingHexagram:r.resultingHexagram}}let t=e;return{hex:t.hexagram,dailyMessage:t.dailyMessage}}return{hex:e}}render(){let e=this.resolveHexagram();if(!e)return s`<div class="roxy-empty" role="status">No hexagram data</div>`;let{hex:t,lines:r,changingLinePositions:o,dailyMessage:i,resultingHexagram:c}=e,d=r??this.derivedLines(t),p=new Set(o??[]);return s`<article class="card" aria-label="I Ching hexagram"><div class="glyphs">${t.symbol?s`<div class="symbol">${t.symbol}</div>`:l}<div class="lines" aria-hidden="true">${d.slice().reverse().map((g,h)=>{let y=d.length-1-h+1,S=p.has(y),w=g===6||g===8;return s`<div class="line ${`${w?"broken":"solid"}${S?" changing":""}`}">${w?k`<span class="seg"></span><span class="seg"></span>`:k`<span class="seg"></span>`}</div>`})}</div></div><div><h2 class="title">${t.number?s`${t.number}.`:l}${t.english??t.chinese??"Hexagram"}</h2><p class="subtitle">${t.chinese?s`${t.chinese}`:l} ${t.pinyin?s`· ${t.pinyin}`:l}</p><div class="trigrams">${t.upperTrigram?s`<div>Upper <span class="tri-glyph">${Lt[t.upperTrigram]??""}</span>${t.upperTrigram}</div>`:l} ${t.lowerTrigram?s`<div>Lower <span class="tri-glyph">${Lt[t.lowerTrigram]??""}</span>${t.lowerTrigram}</div>`:l}</div>${t.judgment?s`<p class="judgment">${t.judgment}</p>`:l} ${t.image?s`<p class="image">${t.image}</p>`:l} ${i?s`<p class="message">${i}</p>`:l} ${t.interpretation?.general?s`<p>${t.interpretation.general}</p>`:l} ${p.size>0?s`<div class="changing">Changing lines: ${Array.from(p).sort((g,h)=>g-h).join(", ")}. ${c?.english?s`Becomes hexagram ${c.number} ${c.english}.`:l}</div>`:l}</div></article>`}derivedLines(e){let t=e.symbol.codePointAt(0)??0;if(t>=19904&&t<=19967){let r=t-19904,o=[];for(let i=0;i<6;i++){let c=r>>i&1;o.push(c?8:7)}return o}return Array.from({length:6},()=>7)}};ee.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-lg,1.5rem);grid-template-columns:6rem 1fr;display:grid}@container (width<=480px){.card{grid-template-columns:1fr}}.glyphs{gap:var(--roxy-space-md,1rem);justify-items:center;display:grid}.symbol{color:var(--roxy-accent-fg,#b45309);font-size:3rem;line-height:1}.lines{gap:4px;width:4rem;display:grid}.line{justify-content:center;align-items:center;gap:4px;height:8px;display:flex}.seg{background:var(--roxy-fg,#0a0a0a);border-radius:1px;height:6px;display:block}.line.broken .seg{width:1.4rem}.line.solid .seg{width:3rem}.line.changing .seg{background:var(--roxy-accent,#f59e0b)}.title{font-size:var(--roxy-text-xl,1.5rem);font-weight:var(--roxy-weight-bold,600);letter-spacing:var(--roxy-tracking-tight);margin:0}.subtitle{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);margin:0 0 var(--roxy-space-sm,.5rem)}.trigrams{gap:var(--roxy-space-md,1rem);margin-bottom:var(--roxy-space-sm,.5rem);color:var(--roxy-secondary,#475569);font-size:var(--roxy-text-xs,.75rem);text-transform:uppercase;letter-spacing:.06em;display:flex}.tri-glyph{font-size:var(--roxy-text-xl,1.5rem);color:var(--roxy-accent-fg,#b45309);vertical-align:middle;margin-right:4px}.judgment,.image,.message{margin:0 0 var(--roxy-space-sm,.5rem);font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-fg,#0a0a0a)}.judgment:before{content:"Judgment. ";font-weight:var(--roxy-weight-bold,600);color:var(--roxy-secondary,#475569)}.image:before{content:"Image. ";font-weight:var(--roxy-weight-bold,600);color:var(--roxy-secondary,#475569)}.changing{margin-top:var(--roxy-space-md,1rem);padding-top:var(--roxy-space-md,1rem);border-top:1px solid var(--roxy-border,#e4e4e7);color:var(--roxy-accent-fg,#b45309);font-size:var(--roxy-text-sm,.875rem)}`],m([u({attribute:!1})],ee.prototype,"data",2),m([u({type:String,reflect:!0})],ee.prototype,"mode",2),ee=m([b("roxy-hexagram")],ee);var te=class extends f{constructor(){super();this.data=null;this.period="daily";new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No horoscope data</div>`;let t=e.sign??"",r=t?G[E(t)]??"":"",o="energyRating"in e&&typeof e.energyRating=="number"?e.energyRating:null,i="date"in e&&e.date||"week"in e&&e.week||"month"in e&&e.month||"";return s`<article class="card" aria-label="${`${this.period} horoscope for ${t}`}"><header class="head"><span class="glyph" aria-hidden="true">${r}</span><div><h2 class="title">${t} ${this.period}</h2>${i?s`<div class="date">${i}</div>`:l}</div>${o!==null?s`<span class="energy" aria-label="${`Energy ${o} of 10`}">Energy ${o}/10 <span class="energy-bar"><span style="width:${o/10*100}%"></span></span></span>`:l}</header>${e.overview?s`<p class="overview">${e.overview}</p>`:l}<div class="sections">${e.love?s`<div class="section"><h3>Love</h3><p>${e.love}</p></div>`:l} ${e.career?s`<div class="section"><h3>Career</h3><p>${e.career}</p></div>`:l} ${e.health?s`<div class="section"><h3>Health</h3><p>${e.health}</p></div>`:l} ${e.finance?s`<div class="section"><h3>Finance</h3><p>${e.finance}</p></div>`:l} ${"advice"in e&&e.advice?s`<div class="section"><h3>Advice</h3><p>${e.advice}</p></div>`:l}</div>${(()=>{let c="luckyNumber"in e&&e.luckyNumber!==void 0?e.luckyNumber:void 0,d="luckyColor"in e&&e.luckyColor?e.luckyColor:"",p="luckyNumbers"in e&&e.luckyNumbers?e.luckyNumbers:[],g="luckyDays"in e&&e.luckyDays?e.luckyDays:[],h=e.compatibleSigns??[];return c===void 0&&!d&&p.length===0&&g.length===0&&h.length===0?l:s`<div class="lucky">${c!==void 0?s`<span>Lucky number <strong>${c}</strong></span>`:l} ${d?s`<span>Lucky color <strong>${d}</strong></span>`:l} ${p.length?s`<span>Lucky numbers <strong>${p.join(", ")}</strong></span>`:l} ${g.length?s`<span>Lucky days <strong>${g.join(", ")}</strong></span>`:l} ${h.length?s`<span class="compat-wrap">Best with <span class="compat">${h.map(y=>s`<span>${y}</span>`)}</span></span>`:l}</div>`})()}</article>`}};te.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-md,1rem);display:grid}.head{align-items:center;gap:var(--roxy-space-md,1rem);display:flex}.glyph{color:var(--roxy-accent-fg,#b45309);font-size:2.25rem;line-height:1}.title{font-size:var(--roxy-text-xl,1.5rem);font-weight:var(--roxy-weight-bold,600);letter-spacing:var(--roxy-tracking-tight);text-transform:capitalize;margin:0}.date{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a)}.energy{font-variant-numeric:tabular-nums;font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-secondary,#475569);margin-left:auto}.energy-bar{background:var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-full,9999px);vertical-align:middle;width:6rem;height:6px;margin-left:6px;display:inline-block;overflow:hidden}.energy-bar>span{background:var(--roxy-accent,#f59e0b);height:100%;transition:width var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));display:block}.overview{font-size:var(--roxy-text-base,1rem);color:var(--roxy-fg,#0a0a0a);margin:0}.sections{gap:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));display:grid}.section h3{margin:0 0 var(--roxy-space-xs,.25rem) 0;font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;letter-spacing:.06em}.section p{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-fg,#0a0a0a);margin:0}.lucky{gap:var(--roxy-space-sm,.5rem);border-top:1px solid var(--roxy-border,#e4e4e7);padding-top:var(--roxy-space-md,1rem);font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-secondary,#475569);flex-wrap:wrap;display:flex}.lucky strong{color:var(--roxy-fg,#0a0a0a);font-weight:var(--roxy-weight-bold,600)}.compat-wrap{align-items:center;gap:var(--roxy-space-xs,.25rem);flex-wrap:wrap;width:100%;display:flex}.compat{gap:var(--roxy-space-xs,.25rem);flex-wrap:wrap;display:flex}.compat span{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 16%, transparent);color:var(--roxy-fg,#0a0a0a);border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);text-transform:capitalize;padding:2px 8px}`],m([u({attribute:!1})],te.prototype,"data",2),m([u({type:String,reflect:!0})],te.prototype,"period",2),te=m([b("roxy-horoscope-card")],te);var re=class extends f{constructor(){super();this.data=null;this.activeTab="planets";new $(this)}bodies(){let e=this.data;if(!e)return[];let t=(e.planets??[]).map(o=>({name:o.planet,sign:o.sign,house:o.house,nakshatra:o.nakshatra,starLord:o.starLord,subLord:o.subLord,subSubLord:o.subSubLord,kpNumber:o.kpNumber,retrograde:o.retrograde})),r=e.nodes;for(let[o,i]of[["Rahu",r?.rahu],["Ketu",r?.ketu]])i&&t.push({name:o,sign:i.sign,house:i.house,nakshatra:i.nakshatra,starLord:i.starLord,subLord:i.subLord,subSubLord:i.subSubLord,retrograde:!0});return t}onTabKeyDown(e){if(e.key!=="ArrowRight"&&e.key!=="ArrowLeft")return;e.preventDefault(),this.activeTab=this.activeTab==="planets"?"cusps":"planets";let t=this.activeTab;requestAnimationFrame(()=>{this.shadowRoot?.querySelector(`#tab-${t}`)?.focus()})}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No KP chart data</div>`;let e=this.data,t=e.ascendant;return s`<div class="wrap" aria-label="KP chart" tabindex="0"><header class="head"><h2 class="title">KP chart</h2>${t?s`<div class="asc">Ascendant: <strong>${t.sign??""}</strong> ${t.nakshatra?s`· ${t.nakshatra}`:l} ${t.subLord?s`· sub lord ${t.subLord}`:l} ${typeof t.kpNumber=="number"?s`· KP ${t.kpNumber}`:l}</div>`:l} ${typeof e.meta?.ayanamsa=="number"?s`<div class="ayan">${e.meta.ayanamsaType??"Ayanamsa"}: ${C(e.meta.ayanamsa,4)}° ${e.meta.houseSystem?s`· ${e.meta.houseSystem} houses`:l}</div>`:l}</header><div class="tablist" role="tablist" aria-label="KP chart views" @keydown="${this.onTabKeyDown}">${["planets","cusps"].map(r=>s`<button class="tab" role="tab" id="tab-${r}" aria-selected="${this.activeTab===r?"true":"false"}" aria-controls="panel-${r}" tabindex="${this.activeTab===r?"0":"-1"}" @click="${()=>{this.activeTab=r}}">${r==="planets"?"Planets":"Cusps"}</button>`)}</div><div id="panel-${this.activeTab}" role="tabpanel" aria-labelledby="tab-${this.activeTab}">${this.activeTab==="planets"?this.renderPlanets():this.renderCusps()}</div></div>`}renderPlanets(){let e=this.bodies();return e.length?s`<table role="table" aria-label="KP planets and nodes"><thead><tr><th scope="col">Body</th><th scope="col">Sign</th><th scope="col">House</th><th scope="col">Nakshatra</th><th scope="col">Star lord</th><th scope="col">Sub lord</th><th scope="col">Sub sub lord</th><th scope="col">KP no.</th></tr></thead><tbody>${e.map(t=>s`<tr><td class="body">${t.name}${t.retrograde?s`<span class="retro">R</span>`:l}</td><td>${t.sign??""}</td><td class="num">${typeof t.house=="number"?t.house:""}</td><td>${t.nakshatra??""}</td><td>${t.starLord??""}</td><td>${t.subLord??""}</td><td>${t.subSubLord??""}</td><td class="num">${typeof t.kpNumber=="number"?t.kpNumber:""}</td></tr>`)}</tbody></table>`:s`<p class="roxy-empty" role="status">No planets</p>`}renderCusps(){let e=this.data?.cusps??[];return e.length?s`<table role="table" aria-label="KP Placidus cusps"><thead><tr><th scope="col">House</th><th scope="col">Sign</th><th scope="col">Sign lord</th><th scope="col">Nakshatra</th><th scope="col">Star lord</th><th scope="col">Sub lord</th><th scope="col">Sub sub lord</th><th scope="col">KP no.</th></tr></thead><tbody>${e.map(t=>s`<tr><td class="body num">${t.house}</td><td>${t.sign??""}</td><td>${t.signLord??""}</td><td>${t.nakshatra??""}</td><td>${t.starLord??""}</td><td>${t.subLord??""}</td><td>${t.subSubLord??""}</td><td class="num">${typeof t.kpNumber=="number"?t.kpNumber:""}</td></tr>`)}</tbody></table>`:s`<p class="roxy-empty" role="status">No cusps</p>`}};re.styles=[v,x`.wrap{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);box-shadow:var(--roxy-shadow-sm);overflow:auto}.head{padding:var(--roxy-space-md,1rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);gap:var(--roxy-space-xs,.25rem);display:grid}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.asc,.ayan{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}.asc strong{color:var(--roxy-fg,#0a0a0a)}.tablist{padding:0 var(--roxy-space-md,1rem);border-bottom:2px solid var(--roxy-border,#e4e4e7);gap:2px;display:flex}.tab{padding:var(--roxy-space-xs,.25rem) var(--roxy-space-md,1rem);font-size:var(--roxy-text-sm,.875rem);cursor:pointer;color:var(--roxy-muted,#71717a);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-2px;font-family:inherit}.tab[aria-selected=true]{color:var(--roxy-accent-fg,#b45309);border-bottom-color:var(--roxy-accent,#f59e0b);font-weight:var(--roxy-weight-bold,600)}.tab:hover:not([aria-selected=true]){color:var(--roxy-fg,#0a0a0a)}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem);min-width:620px}thead{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 20%, transparent)}th,td{padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);text-align:left;white-space:nowrap}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.04em}tbody tr{border-top:1px solid var(--roxy-border,#e4e4e7)}td.body{font-weight:var(--roxy-weight-bold,600);color:var(--roxy-fg,#0a0a0a)}.retro{color:var(--roxy-warning-fg,#9a3412);font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);margin-left:4px}.num{font-variant-numeric:tabular-nums}`],m([u({attribute:!1})],re.prototype,"data",2),m([R()],re.prototype,"activeTab",2),re=m([b("roxy-kp-chart")],re);var ye=class extends f{constructor(){super();this.data=null;new $(this)}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No KP data</div>`;let e=this.data.planets??[];return s`<div class="wrap" aria-label="KP planets table" tabindex="0"><header class="head"><h2 class="title">KP planets</h2>${typeof this.data.ayanamsa=="number"?s`<span class="ayanamsa">Ayanamsa: ${C(this.data.ayanamsa,2)}°</span>`:l}</header><table role="table"><thead><tr><th scope="col">Planet</th><th scope="col">Sign</th><th scope="col">Sign lord</th><th scope="col">Nakshatra</th><th scope="col">Star lord</th><th scope="col">Sub lord</th><th scope="col">Sub sub lord</th><th scope="col">KP no.</th></tr></thead><tbody>${e.map(t=>s`<tr><td class="planet">${t.planet} ${t.retrograde?s`<span class="retro">R</span>`:l}</td><td>${t.sign??""}</td><td>${t.signLord??""}</td><td>${t.nakshatra??""}</td><td>${t.nakshatraLord??""}</td><td>${t.subLord??""}</td><td>${t.subSubLord??""}</td><td>${t.kpNumber??""}</td></tr>`)}</tbody></table></div>`}};ye.styles=[v,x`.wrap{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);box-shadow:var(--roxy-shadow-sm);overflow:auto}.head{padding:var(--roxy-space-md,1rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);justify-content:space-between;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.ayanamsa{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem);min-width:560px}thead{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 20%, transparent)}th,td{padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);text-align:left;white-space:nowrap}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.04em}tbody tr{border-top:1px solid var(--roxy-border,#e4e4e7)}td.planet{font-weight:var(--roxy-weight-bold,600);color:var(--roxy-fg,#0a0a0a)}.retro{color:var(--roxy-warning-fg,#9a3412);font-size:var(--roxy-text-xs,.75rem);margin-left:4px}`],m([u({attribute:!1})],ye.prototype,"data",2),ye=m([b("roxy-kp-planets-table")],ye);var xe=class extends f{constructor(){super();this.data=null;new $(this)}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No ruling planets data</div>`;let e=this.data,t=e.significators??[];return s`<div class="wrap" aria-label="KP ruling planets"><header><h2 class="title">KP ruling planets</h2>${e.dayLord?s`<div class="day-lord">Day lord: <strong>${e.dayLord}</strong></div>`:l}</header><div class="groups"><div class="group"><h3>Moon</h3><dl><dt>Sign lord</dt><dd>${e.moonSignLord??""}</dd><dt>Star lord</dt><dd>${e.moonStarLord??""}</dd><dt>Sub lord</dt><dd>${e.moonSublord??""}</dd><dt>Sub-sub lord</dt><dd>${e.moonSubSublord??""}</dd></dl></div><div class="group"><h3>Lagna</h3><dl><dt>Sign lord</dt><dd>${e.lagnaSignLord??""}</dd><dt>Star lord</dt><dd>${e.lagnaStarLord??""}</dd><dt>Sub lord</dt><dd>${e.lagnaSublord??""}</dd><dt>Sub-sub lord</dt><dd>${e.lagnaSubSublord??""}</dd></dl></div></div>${e.rulingPlanets?.length?s`<div class="rp-list" role="list" aria-label="Ruling planets by strength"><span class="rp-label">Ruling planets</span> ${e.rulingPlanets.map((r,o)=>s`<span class="rp" role="listitem"><span class="rank">${o+1}</span> ${r}</span>`)}</div>`:l} ${t.length?s`<table aria-label="House significators"><thead><tr><th scope="col">Planet</th><th scope="col">Signifies houses</th></tr></thead><tbody>${t.map(r=>s`<tr><td>${r.planet}</td><td>${(r.signifies??[]).join(", ")}</td></tr>`)}</tbody></table>`:l}</div>`}};xe.styles=[v,x`.wrap{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);padding:var(--roxy-space-md,1rem);gap:var(--roxy-space-md,1rem);box-shadow:var(--roxy-shadow-sm);display:grid}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.day-lord{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}.day-lord strong{color:var(--roxy-fg,#0a0a0a)}.groups{gap:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(11rem,1fr));display:grid}.group h3{margin:0 0 var(--roxy-space-xs,.25rem);font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.05em}.group dl{gap:2px var(--roxy-space-sm,.5rem);font-size:var(--roxy-text-sm,.875rem);grid-template-columns:auto 1fr;margin:0;display:grid}.group dt{color:var(--roxy-muted,#71717a)}.group dd{color:var(--roxy-fg,#0a0a0a);font-weight:var(--roxy-weight-bold,600);margin:0}.rp-list{gap:var(--roxy-space-xs,.25rem);flex-wrap:wrap;align-items:center;display:flex}.rp-label{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.05em;margin-right:var(--roxy-space-xs,.25rem)}.rp{font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600);background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 18%, transparent);color:var(--roxy-fg,#0a0a0a);border-radius:999px;align-items:center;gap:.3em;padding:.15em .6em;display:inline-flex}.rp .rank{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-accent-fg,#b45309)}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem)}th,td{padding:var(--roxy-space-xs,.25rem) var(--roxy-space-sm,.5rem);text-align:left;border-bottom:1px solid var(--roxy-border,#e4e4e7)}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.04em}`],m([u({attribute:!1})],xe.prototype,"data",2),xe=m([b("roxy-kp-ruling-planets")],xe);function mr(n,a){let e,t=((...r)=>{e&&clearTimeout(e),e=setTimeout(()=>{e=void 0,n(...r)},a)});return t.cancel=()=>{e&&(clearTimeout(e),e=void 0)},t}var D=class extends f{constructor(){super(...arguments);this.endpoint="https://roxyapi.com/api/v2/location/search";this.placeholder="Search city";this.defaultValue="";this.query="";this.results=[];this.isOpen=!1;this.isLoading=!1;this.highlight=-1;this.secretKeyWarned=!1;this.debouncedFetch=mr(e=>{this.fetchResults(e)},300);this.onInput=e=>{let t=e.target.value;if(this.query=t,t.length<2){this.results=[],this.isOpen=!1,this.highlight=-1;return}this.debouncedFetch(t)};this.onKeyDown=e=>{if(!this.isOpen||this.results.length===0){e.key==="ArrowDown"&&this.query.length>=2&&(this.fetchResults(this.query),e.preventDefault());return}if(e.key==="ArrowDown")e.preventDefault(),this.highlight=(this.highlight+1)%this.results.length;else if(e.key==="ArrowUp")e.preventDefault(),this.highlight=(this.highlight-1+this.results.length)%this.results.length;else if(e.key==="Enter"){e.preventDefault();let t=this.results[this.highlight]??this.results[0];t&&this.select(t)}else e.key==="Escape"&&(this.isOpen=!1)}}connectedCallback(){super.connectedCallback(),this.query=this.defaultValue,this.clickOutsideHandler=e=>{e.composedPath().includes(this)||(this.isOpen=!1)},document.addEventListener("mousedown",this.clickOutsideHandler)}disconnectedCallback(){super.disconnectedCallback(),this.clickOutsideHandler&&document.removeEventListener("mousedown",this.clickOutsideHandler),this.debouncedFetch.cancel(),this.abortController&&(this.abortController.abort(),this.abortController=void 0)}warnIfSecretKey(){if(this.secretKeyWarned||!this.apiKey||this.apiKey.startsWith("pk_"))return;this.secretKeyWarned=!0;let e="Possible secret key in client-side <roxy-location-search>; use a `pk_` publishable key with origin allowlist instead.";console.warn(e),this.dispatchEvent(new CustomEvent("roxy-validation-error",{detail:{reason:"possible-secret-key",message:e},bubbles:!0,composed:!0}))}async fetchResults(e){this.warnIfSecretKey(),this.abortController&&this.abortController.abort();let t=new AbortController;this.abortController=t,this.isLoading=!0;try{let r=new URL(this.endpoint);r.searchParams.set("q",e),r.searchParams.set("limit","8");let o={Accept:"application/json"};this.apiKey&&this.publishableKey&&console.warn("[roxy-location-search] both api-key and publishable-key set; using publishable-key. Remove api-key from your widget markup.");let i=this.publishableKey??this.apiKey;i&&(o["X-API-Key"]=i);let c=await fetch(r,{headers:o,signal:t.signal});if(!c.ok)throw new Error(`HTTP ${c.status}`);let d=await c.json();if(t.signal.aborted)return;this.results=d.cities??[],this.isOpen=this.results.length>0,this.highlight=this.results.length>0?0:-1}catch(r){if(r?.name==="AbortError")return;this.results=[],this.isOpen=!1}finally{this.abortController===t&&(this.abortController=void 0),t.signal.aborted||(this.isLoading=!1)}}select(e){this.query=`${e.city}${e.province?`, ${e.province}`:""}, ${e.country}`,this.isOpen=!1,this.results=[],this.dispatchEvent(new CustomEvent("roxy-location-select",{detail:e,bubbles:!0,composed:!0}))}render(){return s`<div class="field"><input type="text" role="combobox" aria-expanded="${this.isOpen?"true":"false"}" aria-controls="roxy-location-listbox" aria-activedescendant="${this.isOpen&&this.highlight>=0?`roxy-location-option-${this.highlight}`:""}" aria-autocomplete="list" autocomplete="off" placeholder="${this.placeholder}" .value="${this.query}" @input="${this.onInput}" @keydown="${this.onKeyDown}" @focus="${()=>{this.results.length>0&&(this.isOpen=!0)}}"> ${this.isLoading?s`<span class="spinner" role="status" aria-label="Loading"></span>`:l} ${this.isOpen?s`<ul id="roxy-location-listbox" class="results" role="listbox">${this.results.length===0?s`<li class="empty" role="status">No cities found</li>`:this.results.map((e,t)=>s`<li role="presentation"><button type="button" class="option" role="option" id="${`roxy-location-option-${t}`}" aria-selected="${this.highlight===t?"true":"false"}" @click="${()=>this.select(e)}" @mouseenter="${()=>{this.highlight=t}}"><span class="city">${e.city}</span> <span class="where">${e.province?s`${e.province},`:""}${e.country}</span> <span class="tz">UTC${e.utcOffset>=0?"+":""}${e.utcOffset}</span></button></li>`)}</ul>`:l}</div>`}};D.styles=[v,x`:host{display:block;position:relative}.field{position:relative}input{width:100%;padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);font-size:var(--roxy-text-base,1rem);color:var(--roxy-fg,#0a0a0a);background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);transition:border-color var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));box-sizing:border-box;font-family:inherit}input:focus{outline:2px solid var(--roxy-ring,#f59e0b66);outline-offset:2px;border-color:var(--roxy-accent-fg,#b45309)}.spinner{border:2px solid var(--roxy-muted,#71717a);border-top-color:#0000;border-radius:50%;width:14px;height:14px;animation:.7s linear infinite roxy-spin;position:absolute;top:50%;right:12px;transform:translateY(-50%)}@keyframes roxy-spin{to{transform:translateY(-50%)rotate(360deg)}}@media (prefers-reduced-motion:reduce){.spinner{animation:none}}.results{z-index:50;background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);box-shadow:var(--roxy-shadow-md);max-height:22rem;animation:roxy-fade-in var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto}.option{align-items:baseline;gap:var(--roxy-space-sm,.5rem);width:100%;padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);text-align:left;font-family:inherit;font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-fg,#0a0a0a);cursor:pointer;transition:background-color var(--roxy-motion-duration,.2s);background:0 0;border:0;display:flex}.option:hover,.option[aria-selected=true]{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 10%, transparent)}.option .city{font-weight:var(--roxy-weight-bold,600)}.option .where{color:var(--roxy-muted,#71717a);flex-grow:1}.option .tz{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);font-variant-numeric:tabular-nums}.empty{padding:var(--roxy-space-md,1rem);color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}`],m([u({type:String,attribute:"api-key"})],D.prototype,"apiKey",2),m([u({type:String,attribute:"publishable-key"})],D.prototype,"publishableKey",2),m([u({type:String})],D.prototype,"endpoint",2),m([u({type:String})],D.prototype,"placeholder",2),m([u({type:String,attribute:"default-value"})],D.prototype,"defaultValue",2),m([R()],D.prototype,"query",2),m([R()],D.prototype,"results",2),m([R()],D.prototype,"isOpen",2),m([R()],D.prototype,"isLoading",2),m([R()],D.prototype,"highlight",2),D=m([b("roxy-location-search")],D);var ae=class extends f{constructor(){super();this.data=null;this.mode="current";new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No moon phase data</div>`;let t="phases"in e?e.phases:"calendar"in e?e.calendar:[];if(this.mode!=="current"&&t.length>0){let r="month"in e?e.month:void 0,o="year"in e?e.year:void 0;return s`<article class="card" aria-label="Moon phase calendar"><h2 class="label">${r??"Moon phases"} ${o??""}</h2><div class="list" role="list">${t.map(i=>this.renderListItem(i))}</div></article>`}return"phase"in e?this.renderSingle(e):l}renderSingle(e){let t=hr(e.phase);return s`<article class="card" aria-label="Current moon phase"><div class="hero"><span class="emoji" aria-hidden="true">${t}</span><div><h2 class="label">${e.phase??"Moon"}</h2>${e.date?s`<div class="date">${e.date}</div>`:l}</div></div><div class="stats">${typeof e.illumination=="number"?s`<div><span>Illumination</span> <strong>${ma(e.illumination)}</strong></div>`:l} ${typeof e.age=="number"?s`<div><span>Age</span> <strong>${C(e.age,1)} days</strong></div>`:l} ${e.sign?s`<div><span>Sign</span> <strong>${e.sign}</strong></div>`:l} ${typeof e.distance=="number"?s`<div><span>Distance</span> <strong>${(e.distance/1e3).toFixed(0)}k km</strong></div>`:l}</div>${e.meaning?.description?s`<p class="meaning">${e.meaning.description}</p>`:l} ${e.meaning?.keywords?.length?s`<div class="keywords">${e.meaning.keywords.map(r=>s`<span>${r}</span>`)}</div>`:l}</article>`}renderListItem(e){let t=hr(e.phase);return s`<div class="list-item" role="listitem"><span aria-hidden="true">${t}</span> <span>${e.phase}</span> <span>${e.date??""}</span></div>`}};ae.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-md,1rem);display:grid}.hero{align-items:center;gap:var(--roxy-space-md,1rem);display:flex}.emoji{font-size:3rem;line-height:1}.label{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);text-transform:capitalize;margin:0}.date{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}.stats{gap:var(--roxy-space-md,1rem);font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-secondary,#475569);grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));display:grid}.stats div span:first-child{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);text-transform:uppercase;letter-spacing:.06em;display:block}.stats strong{color:var(--roxy-fg,#0a0a0a);font-variant-numeric:tabular-nums}.meaning{color:var(--roxy-fg,#0a0a0a)}.keywords{gap:var(--roxy-space-xs,.25rem);margin-top:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.keywords span{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 14%, transparent);border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);padding:2px 8px}.list{gap:var(--roxy-space-sm,.5rem);display:grid}.list-item{gap:var(--roxy-space-sm,.5rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);padding:var(--roxy-space-sm,.5rem) 0;font-size:var(--roxy-text-sm,.875rem);grid-template-columns:2.5rem 1fr auto;align-items:center;display:grid}.list-item:last-child{border-bottom:none}`],m([u({attribute:!1})],ae.prototype,"data",2),m([u({type:String,reflect:!0})],ae.prototype,"mode",2),ae=m([b("roxy-moon-phase")],ae);function hr(n){return n?sr[n.toLowerCase()]??"\u{1F319}":"\u{1F319}"}function ma(n){let a=n<=1?n*100:n;return`${Math.round(a)}%`}var fe=class extends f{constructor(){super();this.data=null;new $(this)}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No nakshatra data</div>`;let e=this.data,t=e.remedies;return s`<article class="wrap" aria-label="${`Nakshatra ${e.name}`}"><header class="head"><h2 class="name">${e.name}</h2>${typeof e.number=="number"?s`<span class="number">Nakshatra ${e.number} of 27</span>`:l} ${e.range?s`<span class="range">${e.range}</span>`:l}</header><dl class="facts">${e.lord?s`<div class="fact"><dt>Lord</dt><dd>${e.lord}</dd></div>`:l} ${e.deity?s`<div class="fact"><dt>Deity</dt><dd>${e.deity}</dd></div>`:l} ${e.symbol?s`<div class="fact"><dt>Symbol</dt><dd>${e.symbol}</dd></div>`:l}</dl>${e.characteristics?s`<div class="section"><h3>Characteristics</h3><p>${e.characteristics}</p></div>`:l} ${t?s`<div class="section"><h3>Remedies</h3><div class="remedies">${t.mantras?s`<div class="remedy"><strong>Mantras:</strong> ${t.mantras}</div>`:l} ${t.gemstones?s`<div class="remedy"><strong>Gemstones:</strong> ${t.gemstones}</div>`:l} ${t.rituals?s`<div class="remedy"><strong>Rituals:</strong> ${t.rituals}</div>`:l}</div></div>`:l}</article>`}};fe.styles=[v,x`.wrap{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);padding:var(--roxy-space-md,1rem);gap:var(--roxy-space-md,1rem);box-shadow:var(--roxy-shadow-sm);display:grid}.head{align-items:baseline;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.name{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.number{color:var(--roxy-accent-fg,#b45309);font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600)}.range{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}.facts{gap:var(--roxy-space-sm,.5rem);grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));display:grid}.fact{gap:2px;display:grid}.fact dt{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);text-transform:uppercase;letter-spacing:.05em}.fact dd{color:var(--roxy-fg,#0a0a0a);font-size:var(--roxy-text-sm,.875rem);margin:0}.section h3{margin:0 0 var(--roxy-space-xs,.25rem);font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.05em}.section p{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-fg,#0a0a0a);margin:0;line-height:1.5}.remedies{gap:var(--roxy-space-xs,.25rem);display:grid}.remedy{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-fg,#0a0a0a)}.remedy strong{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600)}`],m([u({attribute:!1})],fe.prototype,"data",2),fe=m([b("roxy-nakshatra-card")],fe);function mt(){return s`<svg class="roxy-chevron" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path d="M4 6l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>`}var ht=x`summary{list-style:none}summary::-webkit-details-marker{display:none}.roxy-chevron{aspect-ratio:auto;width:14px;height:14px;color:var(--roxy-muted,#71717a);transition:transform var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,ease);flex-shrink:0}details[open]>summary .roxy-chevron{transform:rotate(180deg)}@media (prefers-reduced-motion:reduce){.roxy-chevron{transition:none}}`;var zt=420,A=zt/2,ze=164,Nt=146,Ue=120,_e=96,ha=178,ga=196,q=class extends f{constructor(){super();this.data=null;this.houseSystem="placidus";this.view="wheel";new $(this)}getPlanets(){return this.data?.planets??[]}getAscendant(){return this.data?.ascendant?.longitude??0}getMidheaven(){let e=this.data?.midheaven?.longitude;return typeof e=="number"?e:null}toAngle(e){return 180+this.getAscendant()-e}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No chart data</div>`;let e=this.getPlanets(),t=this.data.aspects??[],r=this.view;return s`<div class="wrap"><header><h2 class="title">Natal chart</h2>${this.data.birthDetails?s`<div class="meta">${[this.data.birthDetails.date,this.data.birthDetails.time].filter(Boolean).join(" \xB7 ")}</div>`:l}</header>${Ne({items:[{id:"wheel",label:"Wheel"},{id:"grid",label:"Aspect grid"}],active:r,onSelect:o=>{this.view=o},label:"Natal chart views",idPrefix:"natal",controls:!0})}<div id="natal-panel-${r}" role="tabpanel" aria-labelledby="natal-tab-${r}">${r==="wheel"?this.renderWheel(e,t):this.renderAspectGrid(e,t)}</div><div class="legend"><span>${e.length} planets</span> <span>${t.length} aspects</span> ${this.data.houseSystem?s`<span>${this.data.houseSystem} houses</span>`:l} <span><span class="legend-swatch" style="background:var(--roxy-success)"></span>harmonious</span> <span><span class="legend-swatch" style="background:var(--roxy-danger)"></span>challenging</span></div>${this.renderDetails()} ${this.renderInterpretations()}</div>`}renderWheel(e,t){return s`<svg viewBox="0 0 ${zt} ${zt}" role="img" aria-label="Natal chart wheel with twelve houses, planets, and aspects"><title>Natal chart wheel</title><desc>Twelve zodiac sign segments around a circular wheel. Planet glyphs are placed at their ecliptic longitudes. Aspect lines connect related planets.</desc><circle class="wheel-line" cx="${A}" cy="${A}" r="${ze}" stroke-width="1.5"/><circle class="wheel-line" cx="${A}" cy="${A}" r="${Nt-14}" stroke-width="0.8"/><circle class="wheel-line" cx="${A}" cy="${A}" r="${Ue}" stroke-width="1"/><circle class="wheel-line" cx="${A}" cy="${A}" r="${_e-16}" stroke-width="0.5"/>${this.renderTicks()} ${this.renderSpokes()} ${this.renderSigns()} ${this.renderHouseNumbers()} ${this.renderCuspDegrees()} ${this.renderAspects(e,t)} ${this.renderPlanets(e)} ${this.renderAngles()}</svg>`}renderAspectGrid(e,t){let r=e.map(i=>E(i.name)),o=new Map;for(let i of t){let c=[E(i.planet1),E(i.planet2)].sort().join("|");o.set(c,i)}return r.length===0?s`<p class="roxy-empty" role="status">No planets to grid</p>`:s`<div class="grid-scroll"><table class="aspect-grid" aria-label="Planet by planet aspect grid"><thead><tr><th></th>${r.slice(0,-1).map(i=>{let c=N[i]??i.slice(0,2);return s`<th scope="col" title="${i}">${c}</th>`})}</tr></thead><tbody>${r.slice(1).map((i,c)=>{let d=N[i]??i.slice(0,2);return s`<tr><th scope="row" title="${i}">${d}</th>${r.slice(0,c+1).map(p=>{let g=o.get([i,p].sort().join("|"));if(!g)return s`<td class="empty"></td>`;let h=Me(g),y=Et[h]??Et[h.replace(/-/g,"")]??h.slice(0,3),S=Ye[h]??"aspect-other",w=C(g.orb,1);return s`<td class="${`cell ${S}`}" title="${`${i} ${h} ${p}${w?` (orb ${w}\xB0)`:""}`}"><span class="asp">${y}</span></td>`})} ${r.slice(c+1,-1).map(()=>s`<td class="empty"></td>`)}</tr>`})}</tbody></table></div>`}renderAngles(){let e=this.getAscendant(),t=this.getMidheaven(),r=[this.renderAngleMark(e,"ASC"),this.renderAngleMark(Tt(e),"DSC")];t!==null&&(r.push(this.renderAngleMark(t,"MC")),r.push(this.renderAngleMark(Tt(t),"IC")));let o=this.data?.partOfFortune?.longitude;typeof o=="number"&&r.push(this.renderAngleMark(B(o),"PoF"));let i=this.data?.vertex?.longitude;return typeof i=="number"&&r.push(this.renderAngleMark(B(i),"Vtx")),r}renderAngleMark(e,t){let r=this.toAngle(e),o=P(A,A,ze,r),i=P(A,A,ha,r),c=P(A,A,ga,r);return k`
|
|
75
|
+
`}function ja(n){let a=n.lagnaSign.toLowerCase();return w`
|
|
76
|
+
${Ga(n.divisionLabel)}
|
|
77
|
+
${_.map(e=>Ia(e,n.placements[e.toLowerCase()]??[],e.toLowerCase()===a,Rr(e,n.lagnaSign)))}
|
|
78
|
+
`}function $t(n,a){switch(a){case"north":return Da(n);case"east":return ja(n);default:return La(n)}}function wt(n,a){return Ie({items:ka,active:n,onSelect:a,label:"Kundli style",idPrefix:"kundli"})}var kt=x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.header{justify-content:space-between;align-items:center;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}svg{aspect-ratio:1;width:100%;max-width:560px;height:auto;margin:0 auto;display:block}.line{fill:#0000;stroke:var(--roxy-border,#d4d4d8)}.sign-text{fill:var(--roxy-muted,#71717a);font-size:11px;font-weight:500;font-family:var(--roxy-font-sans);text-transform:uppercase;letter-spacing:.04em}.rashi-num{fill:var(--roxy-muted,#71717a);font-size:12px;font-weight:500;font-family:var(--roxy-font-sans)}.house-num{fill:var(--roxy-accent-ink,#b45309);font-size:11px;font-weight:600;font-family:var(--roxy-font-sans);opacity:.85}.planet-text{fill:var(--roxy-fg,#0a0a0a);font-size:13px;font-weight:600;font-family:var(--roxy-font-sans)}.centre-label{fill:var(--roxy-muted,#71717a);font-size:14px;font-weight:600;font-family:var(--roxy-font-sans);letter-spacing:.02em}.lagna-marker{fill:var(--roxy-accent-ink,#b45309);font-size:10px;font-weight:700;font-family:var(--roxy-font-sans);letter-spacing:.08em;text-transform:uppercase}.lagna-bg{fill:color-mix(in srgb, var(--roxy-accent,#f59e0b) 14%, transparent)}.lagna-slash{stroke:var(--roxy-accent,#f59e0b);stroke-linecap:round;opacity:.7}`;var te=class extends f{constructor(){super();this.data=null;this.chartStyle="north";this.setStyle=e=>{this.chartStyle=e};new $(this)}viewModel(){if(!this.data?.chart?.meta)return null;let{division:e}=this.data,t=`D${e.number} ${e.name}`;return vt(this.data.chart.meta,t)}render(){let e=this.viewModel();if(!this.data||!e)return s`<div class="roxy-empty" role="status">No divisional chart data</div>`;let{division:t,vargottama:r}=this.data;return s`<div class="wrap"><div class="header"><div><h2 class="title">D${t.number} ${t.name} ${t.sanskritName&&t.sanskritName!==t.name?s`<span class="division-meta">· ${t.sanskritName}</span>`:l}</h2>${t.significance?s`<p class="significance">${t.significance}</p>`:l}</div>${wt(this.chartStyle,this.setStyle)}</div><svg viewBox="0 0 400 400" preserveAspectRatio="xMidYMid meet" role="img" aria-label="D${t.number} ${t.name} divisional chart with twelve sign houses"><title>D${t.number} ${t.name}</title>${$t(e,this.chartStyle)}</svg> ${r&&r.length>0?s`<div class="vargottama-row" role="list" aria-label="Vargottama planets"><span class="vargottama-label">Vargottama:</span> ${r.map(o=>s`<span class="vargottama-pill" role="listitem">${L[o]??""} ${o}</span>`)}</div>`:l}</div>`}};te.styles=[v,kt,fe,x`.division-meta{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);margin:0}.significance{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);border-left:2px solid var(--roxy-border,#e4e4e7);padding-left:var(--roxy-space-sm,.5rem);margin:0}.vargottama-row{gap:var(--roxy-space-xs,.25rem);flex-wrap:wrap;align-items:center;display:flex}.vargottama-label{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);margin-right:var(--roxy-space-xs,.25rem);font-weight:500}.vargottama-pill{font-size:var(--roxy-text-sm,.875rem);background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 22%, transparent);color:var(--roxy-fg,#0a0a0a);border:1px solid color-mix(in srgb, var(--roxy-accent,#f59e0b) 45%, transparent);border-radius:999px;align-items:center;gap:.2em;padding:.15em .6em;font-weight:600;display:inline-flex}`],p([u({attribute:!1})],te.prototype,"data",2),p([u({type:String,reflect:!0,attribute:"chart-style"})],te.prototype,"chartStyle",2),te=p([b("roxy-divisional-chart")],te);var Ba={manglik:"Mangal Dosha",kalsarpa:"Kaal Sarp Dosha",sadhesati:"Sade Sati"},re=class extends f{constructor(){super();this.data=null;this.type="manglik";new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No dosha data</div>`;let t=!!e.present,r=Ba[this.type]??this.type,o=(e.severity??"").toLowerCase(),i=o==="severe"?3:o==="moderate"?2:o==="mild"?1:0,d=i*33,c=i===3?"var(--roxy-danger)":i===2?"var(--roxy-warning)":i===1?"var(--roxy-success)":"transparent";return s`<article class="card" aria-label="${r}"><header class="head"><h2 class="title">${r}</h2><span class="${`badge ${t?"present":"absent"}`}">${t?"Present":"Absent"}</span></header>${e.severity?s`<div class="severity-bar" role="meter" aria-valuemin="0" aria-valuemax="3" aria-valuenow="${i}" aria-label="Severity ${e.severity}"><span class="severity-fill" style="width:${d}%;background:${c}"></span></div>`:l} ${e.description?s`<p class="description">${e.description}</p>`:l} ${this.renderEffects(e)} ${e.remedies&&e.remedies.length>0?s`<div><h3>Remedies</h3><ul>${e.remedies.map(m=>s`<li>${m}</li>`)}</ul></div>`:l} ${"exceptions"in e&&e.exceptions&&e.exceptions.length>0?s`<div><h3>Exceptions</h3><ul>${e.exceptions.map(m=>s`<li>${m}</li>`)}</ul></div>`:l}</article>`}renderEffects(e){if(!e.effects)return l;let t=Object.entries(e.effects).filter(([,r])=>typeof r=="string"&&r.length>0);return t.length===0?l:s`<div class="effects">${t.map(([r,o])=>s`<div><h3>${r}</h3><p>${o}</p></div>`)}</div>`}};re.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:center;gap:var(--roxy-space-md,1rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);text-transform:capitalize;margin:0}.badge{align-items:center;gap:var(--roxy-space-xs,.25rem);border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;letter-spacing:.06em;padding:4px 10px;display:inline-flex}.badge.absent{background:color-mix(in srgb, var(--roxy-success,#16a34a) 16%, transparent);color:var(--roxy-success-fg,#166534)}.badge.present{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 16%, transparent);color:var(--roxy-danger-fg,#991b1b)}.severity-bar{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 30%, transparent);border-radius:4px;width:100%;height:8px;position:relative;overflow:hidden}.severity-fill{height:100%;transition:width var(--roxy-motion-duration,.2s) ease-out;border-radius:4px;display:block}@media (prefers-reduced-motion:reduce){.severity-fill{transition:none}}.description{color:var(--roxy-fg,#0a0a0a);margin:0}h3{margin:0 0 var(--roxy-space-xs,.25rem);font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.06em}ul{padding-left:var(--roxy-space-md,1rem);font-size:var(--roxy-text-sm,.875rem);margin:0}.effects{gap:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));display:grid}.effects p{font-size:var(--roxy-text-sm,.875rem);margin:0}`],p([u({attribute:!1})],re.prototype,"data",2),p([u({type:String,reflect:!0})],re.prototype,"type",2),re=p([b("roxy-dosha-card")],re);var Vt=new Map;async function Ka(n){let a=Vt.get(n);return a||(a=fetch(n).then(async e=>{if(!e.ok)throw new Error(`HTTP ${e.status}`);return await e.json()}).catch(e=>{throw Vt.delete(n),e}),Vt.set(n,a)),a}var H=class extends f{constructor(){super(...arguments);this.endpoint="vedic-astrology/birth-chart";this.method="POST";this.specUrl="https://roxyapi.com/api/v2/openapi.json";this.submitLabel="Submit";this.fields=[];this.values={};this.hasLocation=!1;this.loaded=!1;this.specError=null;this.retryLoadSchema=()=>{this.loaded=!1,this.specError=null,this.loadSchema()};this.onLocation=e=>{let t=e.detail;t&&(this.values={...this.values,latitude:t.latitude,longitude:t.longitude,timezone:t.timezone??t.utcOffset})};this.onSubmit=e=>{e.preventDefault();let t=this.fields.filter(r=>r.required).filter(r=>this.values[r.name]===void 0||this.values[r.name]==="");if(t.length>0){this.dispatchEvent(new CustomEvent("roxy-validation-error",{detail:{missing:t.map(r=>r.name)},bubbles:!0,composed:!0}));return}this.dispatchEvent(new CustomEvent("roxy-submit",{detail:{endpoint:this.endpoint,values:this.values},bubbles:!0,composed:!0}))}}connectedCallback(){super.connectedCallback(),this.loadSchema()}async loadSchema(){this.specError=null;try{let e=await Ka(this.specUrl),t=`/${this.endpoint.replace(/^\//,"")}`,r=e.paths?.[t]?.[this.method.toLowerCase()];if(!r)throw new Error(`Endpoint ${this.method} ${t} not found in OpenAPI spec`);let o=e.components?.schemas??{},i=[],d;if(r.requestBody){let m=r.requestBody.content?.["application/json"]?.schema;d=this.resolve(m,o)}if(d?.properties){let m=new Set(d.required??[]);for(let[g,h]of Object.entries(d.properties)){let y=this.resolve(h,o)??{};i.push({name:g,type:this.fieldType(y),required:m.has(g),description:y.description,enum:y.enum,min:y.minimum,max:y.maximum,default:y.default})}}for(let m of r.parameters??[])if(m.in==="path"||m.in==="query"){let g=this.resolve(m.schema,o)??{};i.push({name:m.name,type:this.fieldType(g),required:!!m.required,description:g.description,enum:g.enum,default:g.default})}this.fields=i,this.hasLocation=i.some(m=>m.name==="latitude")&&i.some(m=>m.name==="longitude")&&i.some(m=>m.name==="timezone");let c={};for(let m of i)m.default!==void 0&&(c[m.name]=m.default);this.values=c,this.loaded=!0}catch(e){let t=e instanceof Error?e.message:String(e);this.specError=t,this.loaded=!0,this.dispatchEvent(new CustomEvent("roxy-spec-error",{detail:{url:this.specUrl,message:t},bubbles:!0,composed:!0}))}}resolve(e,t){if(e){if("$ref"in e&&e.$ref){let r=e.$ref.split("/").pop();return r?t[r]:void 0}return e}}fieldType(e){return e.enum?"enum":e.format==="date"?"date":e.format==="time"?"time":e.format==="date-time"?"datetime":e.type==="integer"||e.type==="number"?"number":"text"}setValue(e,t){this.values={...this.values,[e]:t}}render(){if(!this.loaded)return s`<form><div class="roxy-skeleton" style="height:8rem"></div></form>`;if(this.specError)return s`<div class="spec-error" role="alert">Schema load failed: ${this.specError} <button type="button" class="submit" @click="${this.retryLoadSchema}">Retry</button></div>`;let e=t=>{if(this.hasLocation&&(t.name==="latitude"||t.name==="longitude"||t.name==="timezone"))return l;let r=`roxy-form-${t.name}`;return s`<div class="field"><label for="${r}">${j(t.name)}${t.required?s`<span class="req" aria-hidden="true">*</span>`:l}</label> ${t.enum?s`<select id="${r}" ?required="${t.required}" @change="${o=>this.setValue(t.name,o.target.value)}"><option value="">Choose</option>${t.enum.map(o=>s`<option value="${o}" ?selected="${this.values[t.name]===o}">${o}</option>`)}</select>`:s`<input id="${r}" type="${this.htmlType(t.type)}" ?required="${t.required}" min="${t.min??""}" max="${t.max??""}" step="${t.type==="number"?"any":""}" .value="${this.values[t.name]??""}" @input="${o=>this.setValue(t.name,this.coerce(t.type,o.target.value))}">`} ${t.description?s`<small class="help">${t.description}</small>`:l}</div>`};return s`<form @submit="${this.onSubmit}"><h2 class="title">${j(this.endpoint.split("/").pop()??"")}</h2>${this.hasLocation?s`<div class="location-block"><label>Birth location</label><roxy-location-search @roxy-location-select="${this.onLocation}" placeholder="City of birth"></roxy-location-search><small class="help">Required: latitude, longitude, timezone. Pick a city to autofill.</small></div>`:l}<div class="fields">${this.fields.map(t=>e(t))}</div><button class="submit" type="submit">${this.submitLabel}</button></form>`}htmlType(e){switch(e){case"date":return"date";case"time":return"time";case"datetime":return"datetime-local";case"number":return"number";default:return"text"}}coerce(e,t){if(t!==""){if(e==="number"){let r=Number(t);return Number.isFinite(r)?r:void 0}return t}}};H.styles=[v,x`form{gap:var(--roxy-space-md,1rem);background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);display:grid}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.fields{align-items:start;gap:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));display:grid}.field{gap:var(--roxy-space-xs,.25rem);flex-direction:column;min-width:0;display:flex}label{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-secondary,#475569)}label .req{color:var(--roxy-danger-fg,#991b1b);margin-left:4px}input,select{box-sizing:border-box;width:100%;padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);font-size:var(--roxy-text-base,1rem);color:var(--roxy-fg,#0a0a0a);background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);font-family:inherit}input:focus,select:focus{outline:2px solid var(--roxy-ring,#f59e0b66);outline-offset:2px;border-color:var(--roxy-accent-ink,#b45309)}.help{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem)}.location-block{gap:var(--roxy-space-xs,.25rem);grid-column:1/-1;display:grid}.coords{gap:var(--roxy-space-sm,.5rem);grid-template-columns:repeat(3,1fr);display:grid}.coords input{font-size:var(--roxy-text-sm,.875rem)}button.submit{background:var(--roxy-accent-ink,#b45309);color:var(--roxy-bg,#fff);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-sm,.5rem) var(--roxy-space-lg,1.5rem);font-size:var(--roxy-text-base,1rem);font-weight:var(--roxy-weight-bold,600);cursor:pointer;transition:transform var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));border:0;justify-self:start}button.submit:hover{transform:scale(1.02)}button.submit:focus-visible{outline:2px solid var(--roxy-ring,#f59e0b66);outline-offset:2px}.spec-error{gap:var(--roxy-space-md,1rem);background:var(--roxy-bg,#fff);border:1px solid var(--roxy-danger,#dc2626);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);color:var(--roxy-danger-fg,#991b1b);font-size:var(--roxy-text-sm,.875rem);justify-items:start;display:grid}`],p([u({type:String,attribute:"data-endpoint"})],H.prototype,"endpoint",2),p([u({type:String})],H.prototype,"method",2),p([u({type:String,attribute:"spec-url"})],H.prototype,"specUrl",2),p([u({type:String,attribute:"submit-label"})],H.prototype,"submitLabel",2),p([N()],H.prototype,"fields",2),p([N()],H.prototype,"values",2),p([N()],H.prototype,"hasLocation",2),p([N()],H.prototype,"loaded",2),p([N()],H.prototype,"specError",2),H=p([b("roxy-endpoint-form")],H);var qa={western:"Western",vedic:"Vedic",biorhythm:"Biorhythm"},Va=["western","vedic","biorhythm"],be=class extends f{constructor(){super();this.data=null;new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No forecast data</div>`;let t=e.events??[],r=this.groupByDate(t),o=Va.filter(i=>t.some(d=>d.domain===i));return s`<div class="wrap" aria-label="Forecast timeline"><header class="head"><h2 class="title">Forecast timeline</h2>${e.startDate&&e.endDate?s`<div class="range">${xe(e.startDate)} - ${xe(e.endDate)} · ${e.count??t.length} events</div>`:l}</header>${o.length?s`<div class="legend">${o.map(i=>s`<span><span class="swatch swatch-${i}"></span>${qa[i]}</span>`)}</div>`:l} ${r.length?s`<div class="days" role="list">${r.map(([i,d])=>this.renderDay(i,d))}</div>`:s`<p class="roxy-empty" role="status">No events in this window</p>`}</div>`}groupByDate(e){let t=new Map;for(let r of e){let o=r.date??"",i=t.get(o)??[];i.push(r),t.set(o,i)}return[...t.entries()]}renderDay(e,t){return s`<div class="day" role="listitem"><div class="day-date">${xe(e)}</div><div class="events">${t.map(r=>this.renderEvent(r))}</div></div>`}renderEvent(e){let t=typeof e.significance=="number"?e.significance:0,r=Math.max(0,Math.min(100,t));return s`<div class="event"><span class="dot dot-${e.domain}" aria-hidden="true"></span><div class="event-body"><div class="event-line">${this.renderHeadline(e)}</div>${e.description?s`<p class="event-desc">${e.description}</p>`:l}<div class="sig" title="Significance ${r} of 100"><span class="sig-track"><span class="sig-fill sig-fill-${e.domain}" style="width:${r}%"></span> </span><span class="sig-val">${r}</span></div></div></div>`}renderHeadline(e){let t=e.body?A(e.body):"",r=e.target?A(e.target):"",o=e.aspect?e.aspect.toLowerCase():"",i=_e[o]??"",d=o?et[o]??o:"",c=typeof e.orb=="number"?C(e.orb,1):"",m=this.typeQualifier(e);return o&&r?s`<strong>${t}</strong> <span class="${i}">${d}</span> <strong>${r}</strong>${c?s`<span class="kind">orb ${c}°</span>`:l}`:s`<strong>${t||j(e.type??"")}</strong>${m?s`<span class="kind">${m}</span>`:l}`}typeQualifier(e){return e.type==="sign-ingress"&&e.target?`enters ${A(e.target)}`:e.type==="retrograde-station"&&e.station?e.station:e.type==="eclipse"?[e.kind,"eclipse"].filter(Boolean).join(" "):e.type==="critical-day"?"critical day":e.type==="dasha-change"&&e.target?`dasha ${A(e.target)}`:j(e.type??"")}};be.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:baseline;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.range{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);font-variant-numeric:tabular-nums}.legend{gap:var(--roxy-space-md,1rem);font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);flex-wrap:wrap;display:flex}.legend .swatch{vertical-align:middle;border-radius:50%;width:10px;height:10px;margin-right:4px;display:inline-block}.swatch-western{background:var(--roxy-accent,#f59e0b)}.swatch-vedic{background:var(--roxy-info,#2563eb)}.swatch-biorhythm{background:var(--roxy-success,#16a34a)}.day{gap:var(--roxy-space-md,1rem);padding-block:var(--roxy-space-sm,.5rem);border-top:1px solid var(--roxy-border,#e4e4e7);grid-template-columns:4.5rem 1fr;display:grid}.day:first-of-type{border-top:none}.day-date{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);font-variant-numeric:tabular-nums;padding-top:2px}.events{gap:var(--roxy-space-sm,.5rem);display:grid}.event{gap:var(--roxy-space-sm,.5rem);grid-template-columns:.6rem 1fr;align-items:start;display:grid}.dot{border-radius:50%;width:.6rem;height:.6rem;margin-top:4px}.dot-western{background:var(--roxy-accent,#f59e0b)}.dot-vedic{background:var(--roxy-info,#2563eb)}.dot-biorhythm{background:var(--roxy-success,#16a34a)}.event-body{min-width:0}.event-line{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-fg,#0a0a0a)}.event-line .aspect-trine,.event-line .aspect-sextile{color:var(--roxy-success-fg,#166534)}.event-line .aspect-square,.event-line .aspect-opposition{color:var(--roxy-danger-fg,#991b1b)}.event-line .aspect-conjunction{color:var(--roxy-accent-ink,#b45309)}.event-line .kind{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);text-transform:uppercase;letter-spacing:.04em;margin-left:.35em}.event-desc{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);margin:2px 0 0}.sig{align-items:center;gap:.4rem;margin-top:4px;display:flex}.sig-track{background:var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-full,9999px);flex:1;max-width:8rem;height:4px;overflow:hidden}.sig-fill{border-radius:var(--roxy-radius-full,9999px);height:100%;display:block}.sig-fill-western{background:var(--roxy-accent,#f59e0b)}.sig-fill-vedic{background:var(--roxy-info,#2563eb)}.sig-fill-biorhythm{background:var(--roxy-success,#16a34a)}.sig-val{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);font-variant-numeric:tabular-nums}`],p([u({attribute:!1})],be.prototype,"data",2),be=p([b("roxy-forecast-timeline")],be);var ve=class extends f{constructor(){super();this.data=null;new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No Guna Milan data</div>`;let t=(e.breakdown??[]).filter(h=>h?.category!==void 0),r=e.total??0,o=e.maxScore??36,i=r/o*100,d="color-mix(in srgb, var(--roxy-border) 50%, transparent)",c=i>=70?"var(--roxy-success)":i>=50?"var(--roxy-warning)":"var(--roxy-danger)",m=i*2.827,g=(100-i)*2.827;return s`<article class="card" aria-label="Guna Milan score"><div class="score-header"><div class="score-info"><div class="score-bar"><div><span class="total">${C(e.total,1)}</span> <span class="over">/ ${e.maxScore}</span> ${typeof e.percentage=="number"?s`<small style="margin-left:.5rem;color:var(--roxy-muted)">${Cr(e.percentage,1)}</small>`:l}</div>${e.recommendation?s`<span class="recommendation">${e.recommendation}</span>`:l}</div></div><div class="score-ring" role="meter" aria-label="Guna milan score" aria-valuemin="0" aria-valuemax="36" aria-valuenow="${r}"><svg viewBox="0 0 100 100" aria-hidden="true"><circle class="ring-track" cx="50" cy="50" r="45" fill="none" stroke="${d}" stroke-width="8"/><circle class="ring-fill" cx="50" cy="50" r="45" fill="none" stroke="${c}" stroke-width="8" stroke-dasharray="${m},${g}" stroke-linecap="round" transform="rotate(-90 50 50)"/><text x="50" y="50" text-anchor="middle" dominant-baseline="central" class="ring-text">${r}</text><text x="50" y="64" text-anchor="middle" dominant-baseline="central" class="ring-max">/${o}</text></svg></div></div>${t.length>0?s`<table><thead><tr><th>Category</th><th>Progress</th><th class="score">Score</th></tr></thead><tbody>${t.map(h=>{let y=h.score??0,S=h.maxScore??Ya(h.category),k=S?y/S*100:0;return s`<tr><td>${h.category}</td><td class="bar-cell"><div class="mini-bar"><span style="width:${k}%"></span></div></td><td class="score">${C(y,1)} / ${S}</td></tr>`})}</tbody></table>`:l} ${(e.doshas?.length??0)>0||(e.doshaCancellations?.length??0)>0?s`<div class="tags">${e.doshas?.map(h=>s`<span class="dosha">${h}</span>`)} ${e.doshaCancellations?.map(h=>s`<span class="cancel" title="${h.reason}">${h.dosha} cancelled</span>`)}</div>`:l}</article>`}};ve.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-md,1rem);display:grid}.score-header{align-items:center;gap:1rem;display:flex}.score-info{flex:1}.score-bar{align-items:center;gap:var(--roxy-space-md,1rem);grid-template-columns:1fr auto;display:grid}.total{font-size:2.25rem;font-weight:var(--roxy-weight-bold,600);color:var(--roxy-accent-ink,#b45309);font-variant-numeric:tabular-nums;line-height:1}.over{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-base,1rem)}.recommendation{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-secondary,#475569)}.score-ring{flex-shrink:0;width:120px;height:120px}.score-ring svg{width:100%;height:100%}.score-ring .ring-text{fill:var(--roxy-fg,#0a0a0a);font-size:22px;font-weight:700;font-family:var(--roxy-font-sans)}.score-ring .ring-max{fill:var(--roxy-muted,#71717a);font-size:10px;font-family:var(--roxy-font-sans)}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem)}th,td{padding:var(--roxy-space-sm,.5rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);text-align:left}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.06em}td.score{text-align:right;font-variant-numeric:tabular-nums;color:var(--roxy-fg,#0a0a0a);font-weight:var(--roxy-weight-bold,600)}td.bar-cell{width:30%}.mini-bar{background:var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-full,9999px);height:8px;overflow:hidden}.mini-bar>span{background:var(--roxy-accent,#f59e0b);height:100%;transition:width var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));display:block}.tags{gap:var(--roxy-space-xs,.25rem);flex-wrap:wrap;display:flex}.tags span{border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);padding:2px 8px}.tags .dosha{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 16%, transparent);color:var(--roxy-danger-fg,#991b1b)}.tags .cancel{background:color-mix(in srgb, var(--roxy-success,#16a34a) 18%, transparent);color:var(--roxy-success-fg,#166534)}`],p([u({attribute:!1})],ve.prototype,"data",2),ve=p([b("roxy-guna-milan")],ve);function Ya(n){if(!n)return 1;switch(n.toLowerCase()){case"varna":return 1;case"vasya":return 2;case"tara":return 3;case"yoni":return 4;case"maitri":return 5;case"gana":return 6;case"bhakoot":return 7;case"nadi":return 8;default:return 1}}var ae=class extends f{constructor(){super();this.data=null;this.mode="lookup";new $(this)}resolveHexagram(){let e=this.data;if(!e)return null;if("hexagram"in e&&e.hexagram){if("lines"in e){let r=e;return{hex:r.hexagram,lines:r.lines,changingLinePositions:r.changingLinePositions,resultingHexagram:r.resultingHexagram}}let t=e;return{hex:t.hexagram,dailyMessage:t.dailyMessage}}return{hex:e}}render(){let e=this.resolveHexagram();if(!e)return s`<div class="roxy-empty" role="status">No hexagram data</div>`;let{hex:t,lines:r,changingLinePositions:o,dailyMessage:i,resultingHexagram:d}=e,c=r??this.derivedLines(t),m=new Set(o??[]);return s`<article class="card" aria-label="I Ching hexagram"><div class="glyphs">${t.symbol?s`<div class="symbol">${t.symbol}</div>`:l}<div class="lines" aria-hidden="true">${c.slice().reverse().map((g,h)=>{let y=c.length-1-h+1,S=m.has(y),k=g===6||g===8;return s`<div class="line ${`${k?"broken":"solid"}${S?" changing":""}`}">${k?w`<span class="seg"></span><span class="seg"></span>`:w`<span class="seg"></span>`}</div>`})}</div></div><div><h2 class="title">${t.number?s`${t.number}.`:l}${t.english??t.chinese??"Hexagram"}</h2><p class="subtitle">${t.chinese?s`${t.chinese}`:l} ${t.pinyin?s`· ${t.pinyin}`:l}</p><div class="trigrams">${t.upperTrigram?s`<div>Upper <span class="tri-glyph">${Ot[t.upperTrigram]??""}</span>${t.upperTrigram}</div>`:l} ${t.lowerTrigram?s`<div>Lower <span class="tri-glyph">${Ot[t.lowerTrigram]??""}</span>${t.lowerTrigram}</div>`:l}</div>${t.judgment?s`<p class="judgment">${t.judgment}</p>`:l} ${t.image?s`<p class="image">${t.image}</p>`:l} ${i?s`<p class="message">${i}</p>`:l} ${t.interpretation?.general?s`<p>${t.interpretation.general}</p>`:l} ${m.size>0?s`<div class="changing">Changing lines: ${Array.from(m).sort((g,h)=>g-h).join(", ")}. ${d?.english?s`Becomes hexagram ${d.number} ${d.english}.`:l}</div>`:l}</div></article>`}derivedLines(e){let t=e.symbol.codePointAt(0)??0;if(t>=19904&&t<=19967){let r=t-19904,o=[];for(let i=0;i<6;i++){let d=r>>i&1;o.push(d?8:7)}return o}return Array.from({length:6},()=>7)}};ae.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-lg,1.5rem);grid-template-columns:6rem 1fr;display:grid}@container (width<=480px){.card{grid-template-columns:1fr}}.glyphs{gap:var(--roxy-space-md,1rem);justify-items:center;display:grid}.symbol{color:var(--roxy-accent-ink,#b45309);font-size:3rem;line-height:1}.lines{gap:4px;width:4rem;display:grid}.line{justify-content:center;align-items:center;gap:4px;height:8px;display:flex}.seg{background:var(--roxy-fg,#0a0a0a);border-radius:1px;height:6px;display:block}.line.broken .seg{width:1.4rem}.line.solid .seg{width:3rem}.line.changing .seg{background:var(--roxy-accent,#f59e0b)}.title{font-size:var(--roxy-text-xl,1.5rem);font-weight:var(--roxy-weight-bold,600);letter-spacing:var(--roxy-tracking-tight);margin:0}.subtitle{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);margin:0 0 var(--roxy-space-sm,.5rem)}.trigrams{gap:var(--roxy-space-md,1rem);margin-bottom:var(--roxy-space-sm,.5rem);color:var(--roxy-secondary,#475569);font-size:var(--roxy-text-xs,.75rem);text-transform:uppercase;letter-spacing:.06em;display:flex}.tri-glyph{font-size:var(--roxy-text-xl,1.5rem);color:var(--roxy-accent-ink,#b45309);vertical-align:middle;margin-right:4px}.judgment,.image,.message{margin:0 0 var(--roxy-space-sm,.5rem);font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-fg,#0a0a0a)}.judgment:before{content:"Judgment. ";font-weight:var(--roxy-weight-bold,600);color:var(--roxy-secondary,#475569)}.image:before{content:"Image. ";font-weight:var(--roxy-weight-bold,600);color:var(--roxy-secondary,#475569)}.changing{margin-top:var(--roxy-space-md,1rem);padding-top:var(--roxy-space-md,1rem);border-top:1px solid var(--roxy-border,#e4e4e7);color:var(--roxy-accent-ink,#b45309);font-size:var(--roxy-text-sm,.875rem)}`],p([u({attribute:!1})],ae.prototype,"data",2),p([u({type:String,reflect:!0})],ae.prototype,"mode",2),ae=p([b("roxy-hexagram")],ae);var se=class extends f{constructor(){super();this.data=null;this.period="daily";new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No horoscope data</div>`;let t=e.sign??"",r=t?G[A(t)]??"":"",o="energyRating"in e&&typeof e.energyRating=="number"?e.energyRating:null,i="date"in e&&e.date||"week"in e&&e.week||"month"in e&&e.month||"";return s`<article class="card" aria-label="${`${this.period} horoscope for ${t}`}"><header class="head"><span class="glyph" aria-hidden="true">${r}</span><div><h2 class="title">${t} ${this.period}</h2>${i?s`<div class="date">${i}</div>`:l}</div>${o!==null?s`<span class="energy" aria-label="${`Energy ${o} of 10`}">Energy ${o}/10 <span class="energy-bar"><span style="width:${o/10*100}%"></span></span></span>`:l}</header>${e.overview?s`<p class="overview">${e.overview}</p>`:l}<div class="sections">${e.love?s`<div class="section"><h3>Love</h3><p>${e.love}</p></div>`:l} ${e.career?s`<div class="section"><h3>Career</h3><p>${e.career}</p></div>`:l} ${e.health?s`<div class="section"><h3>Health</h3><p>${e.health}</p></div>`:l} ${e.finance?s`<div class="section"><h3>Finance</h3><p>${e.finance}</p></div>`:l} ${"advice"in e&&e.advice?s`<div class="section"><h3>Advice</h3><p>${e.advice}</p></div>`:l}</div>${(()=>{let d="luckyNumber"in e&&e.luckyNumber!==void 0?e.luckyNumber:void 0,c="luckyColor"in e&&e.luckyColor?e.luckyColor:"",m="luckyNumbers"in e&&e.luckyNumbers?e.luckyNumbers:[],g="luckyDays"in e&&e.luckyDays?e.luckyDays:[],h=e.compatibleSigns??[];return d===void 0&&!c&&m.length===0&&g.length===0&&h.length===0?l:s`<div class="lucky">${d!==void 0?s`<span>Lucky number <strong>${d}</strong></span>`:l} ${c?s`<span>Lucky color <strong>${c}</strong></span>`:l} ${m.length?s`<span>Lucky numbers <strong>${m.join(", ")}</strong></span>`:l} ${g.length?s`<span>Lucky days <strong>${g.join(", ")}</strong></span>`:l} ${h.length?s`<span class="compat-wrap">Best with <span class="compat">${h.map(y=>s`<span>${y}</span>`)}</span></span>`:l}</div>`})()}</article>`}};se.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-md,1rem);display:grid}.head{align-items:center;gap:var(--roxy-space-md,1rem);display:flex}.glyph{color:var(--roxy-accent-ink,#b45309);font-size:2.25rem;line-height:1}.title{font-size:var(--roxy-text-xl,1.5rem);font-weight:var(--roxy-weight-bold,600);letter-spacing:var(--roxy-tracking-tight);text-transform:capitalize;margin:0}.date{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a)}.energy{font-variant-numeric:tabular-nums;font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-secondary,#475569);margin-left:auto}.energy-bar{background:var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-full,9999px);vertical-align:middle;width:6rem;height:6px;margin-left:6px;display:inline-block;overflow:hidden}.energy-bar>span{background:var(--roxy-accent,#f59e0b);height:100%;transition:width var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));display:block}.overview{font-size:var(--roxy-text-base,1rem);color:var(--roxy-fg,#0a0a0a);margin:0}.sections{gap:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));display:grid}.section h3{margin:0 0 var(--roxy-space-xs,.25rem) 0;font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;letter-spacing:.06em}.section p{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-fg,#0a0a0a);margin:0}.lucky{gap:var(--roxy-space-sm,.5rem);border-top:1px solid var(--roxy-border,#e4e4e7);padding-top:var(--roxy-space-md,1rem);font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-secondary,#475569);flex-wrap:wrap;display:flex}.lucky strong{color:var(--roxy-fg,#0a0a0a);font-weight:var(--roxy-weight-bold,600)}.compat-wrap{align-items:center;gap:var(--roxy-space-xs,.25rem);flex-wrap:wrap;width:100%;display:flex}.compat{gap:var(--roxy-space-xs,.25rem);flex-wrap:wrap;display:flex}.compat span{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 16%, transparent);color:var(--roxy-fg,#0a0a0a);border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);text-transform:capitalize;padding:2px 8px}`],p([u({attribute:!1})],se.prototype,"data",2),p([u({type:String,reflect:!0})],se.prototype,"period",2),se=p([b("roxy-horoscope-card")],se);var oe=class extends f{constructor(){super();this.data=null;this.activeTab="planets";new $(this)}bodies(){let e=this.data;if(!e)return[];let t=(e.planets??[]).map(o=>({name:o.planet,sign:o.sign,house:o.house,nakshatra:o.nakshatra,starLord:o.starLord,subLord:o.subLord,subSubLord:o.subSubLord,kpNumber:o.kpNumber,retrograde:o.retrograde})),r=e.nodes;for(let[o,i]of[["Rahu",r?.rahu],["Ketu",r?.ketu]])i&&t.push({name:o,sign:i.sign,house:i.house,nakshatra:i.nakshatra,starLord:i.starLord,subLord:i.subLord,subSubLord:i.subSubLord,retrograde:!0});return t}onTabKeyDown(e){if(e.key!=="ArrowRight"&&e.key!=="ArrowLeft")return;e.preventDefault(),this.activeTab=this.activeTab==="planets"?"cusps":"planets";let t=this.activeTab;requestAnimationFrame(()=>{this.shadowRoot?.querySelector(`#tab-${t}`)?.focus()})}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No KP chart data</div>`;let e=this.data,t=e.ascendant;return s`<div class="wrap" aria-label="KP chart" tabindex="0"><header class="head"><h2 class="title">KP chart</h2>${t?s`<div class="asc">Ascendant: <strong>${t.sign??""}</strong> ${t.nakshatra?s`· ${t.nakshatra}`:l} ${t.subLord?s`· sub lord ${t.subLord}`:l} ${typeof t.kpNumber=="number"?s`· KP ${t.kpNumber}`:l}</div>`:l} ${typeof e.meta?.ayanamsa=="number"?s`<div class="ayan">${e.meta.ayanamsaType??"Ayanamsa"}: ${C(e.meta.ayanamsa,4)}° ${e.meta.houseSystem?s`· ${e.meta.houseSystem} houses`:l}</div>`:l}</header><div class="tablist" role="tablist" aria-label="KP chart views" @keydown="${this.onTabKeyDown}">${["planets","cusps"].map(r=>s`<button class="tab" role="tab" id="tab-${r}" aria-selected="${this.activeTab===r?"true":"false"}" aria-controls="panel-${r}" tabindex="${this.activeTab===r?"0":"-1"}" @click="${()=>{this.activeTab=r}}">${r==="planets"?"Planets":"Cusps"}</button>`)}</div><div id="panel-${this.activeTab}" role="tabpanel" aria-labelledby="tab-${this.activeTab}">${this.activeTab==="planets"?this.renderPlanets():this.renderCusps()}</div></div>`}renderPlanets(){let e=this.bodies();return e.length?s`<table role="table" aria-label="KP planets and nodes"><thead><tr><th scope="col">Body</th><th scope="col">Sign</th><th scope="col">House</th><th scope="col">Nakshatra</th><th scope="col">Star lord</th><th scope="col">Sub lord</th><th scope="col">Sub sub lord</th><th scope="col">KP no.</th></tr></thead><tbody>${e.map(t=>s`<tr><td class="body">${t.name}${t.retrograde?s`<span class="retro">R</span>`:l}</td><td>${t.sign??""}</td><td class="num">${typeof t.house=="number"?t.house:""}</td><td>${t.nakshatra??""}</td><td>${t.starLord??""}</td><td>${t.subLord??""}</td><td>${t.subSubLord??""}</td><td class="num">${typeof t.kpNumber=="number"?t.kpNumber:""}</td></tr>`)}</tbody></table>`:s`<p class="roxy-empty" role="status">No planets</p>`}renderCusps(){let e=this.data?.cusps??[];return e.length?s`<table role="table" aria-label="KP Placidus cusps"><thead><tr><th scope="col">House</th><th scope="col">Sign</th><th scope="col">Sign lord</th><th scope="col">Nakshatra</th><th scope="col">Star lord</th><th scope="col">Sub lord</th><th scope="col">Sub sub lord</th><th scope="col">KP no.</th></tr></thead><tbody>${e.map(t=>s`<tr><td class="body num">${t.house}</td><td>${t.sign??""}</td><td>${t.signLord??""}</td><td>${t.nakshatra??""}</td><td>${t.starLord??""}</td><td>${t.subLord??""}</td><td>${t.subSubLord??""}</td><td class="num">${typeof t.kpNumber=="number"?t.kpNumber:""}</td></tr>`)}</tbody></table>`:s`<p class="roxy-empty" role="status">No cusps</p>`}};oe.styles=[v,x`.wrap{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);box-shadow:var(--roxy-shadow-sm);overflow:auto}.head{padding:var(--roxy-space-md,1rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);gap:var(--roxy-space-xs,.25rem);display:grid}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.asc,.ayan{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}.asc strong{color:var(--roxy-fg,#0a0a0a)}.tablist{padding:0 var(--roxy-space-md,1rem);border-bottom:2px solid var(--roxy-border,#e4e4e7);gap:2px;display:flex}.tab{padding:var(--roxy-space-xs,.25rem) var(--roxy-space-md,1rem);font-size:var(--roxy-text-sm,.875rem);cursor:pointer;color:var(--roxy-muted,#71717a);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-2px;font-family:inherit}.tab[aria-selected=true]{color:var(--roxy-accent-ink,#b45309);border-bottom-color:var(--roxy-accent,#f59e0b);font-weight:var(--roxy-weight-bold,600)}.tab:hover:not([aria-selected=true]){color:var(--roxy-fg,#0a0a0a)}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem);min-width:620px}thead{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 20%, transparent)}th,td{padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);text-align:left;white-space:nowrap}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.04em}tbody tr{border-top:1px solid var(--roxy-border,#e4e4e7)}td.body{font-weight:var(--roxy-weight-bold,600);color:var(--roxy-fg,#0a0a0a)}.retro{color:var(--roxy-warning-fg,#9a3412);font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);margin-left:4px}.num{font-variant-numeric:tabular-nums}`],p([u({attribute:!1})],oe.prototype,"data",2),p([N()],oe.prototype,"activeTab",2),oe=p([b("roxy-kp-chart")],oe);var $e=class extends f{constructor(){super();this.data=null;new $(this)}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No KP data</div>`;let e=this.data.planets??[];return s`<div class="wrap" aria-label="KP planets table" tabindex="0"><header class="head"><h2 class="title">KP planets</h2>${typeof this.data.ayanamsa=="number"?s`<span class="ayanamsa">Ayanamsa: ${C(this.data.ayanamsa,2)}°</span>`:l}</header><table role="table"><thead><tr><th scope="col">Planet</th><th scope="col">Sign</th><th scope="col">Sign lord</th><th scope="col">Nakshatra</th><th scope="col">Star lord</th><th scope="col">Sub lord</th><th scope="col">Sub sub lord</th><th scope="col">KP no.</th></tr></thead><tbody>${e.map(t=>s`<tr><td class="planet">${t.planet} ${t.retrograde?s`<span class="retro">R</span>`:l}</td><td>${t.sign??""}</td><td>${t.signLord??""}</td><td>${t.nakshatra??""}</td><td>${t.nakshatraLord??""}</td><td>${t.subLord??""}</td><td>${t.subSubLord??""}</td><td>${t.kpNumber??""}</td></tr>`)}</tbody></table></div>`}};$e.styles=[v,x`.wrap{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);box-shadow:var(--roxy-shadow-sm);overflow:auto}.head{padding:var(--roxy-space-md,1rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);justify-content:space-between;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.ayanamsa{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem);min-width:560px}thead{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 20%, transparent)}th,td{padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);text-align:left;white-space:nowrap}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.04em}tbody tr{border-top:1px solid var(--roxy-border,#e4e4e7)}td.planet{font-weight:var(--roxy-weight-bold,600);color:var(--roxy-fg,#0a0a0a)}.retro{color:var(--roxy-warning-fg,#9a3412);font-size:var(--roxy-text-xs,.75rem);margin-left:4px}`],p([u({attribute:!1})],$e.prototype,"data",2),$e=p([b("roxy-kp-planets-table")],$e);var we=class extends f{constructor(){super();this.data=null;new $(this)}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No ruling planets data</div>`;let e=this.data,t=e.significators??[];return s`<div class="wrap" aria-label="KP ruling planets"><header><h2 class="title">KP ruling planets</h2>${e.dayLord?s`<div class="day-lord">Day lord: <strong>${e.dayLord}</strong></div>`:l}</header><div class="groups"><div class="group"><h3>Moon</h3><dl><dt>Sign lord</dt><dd>${e.moonSignLord??""}</dd><dt>Star lord</dt><dd>${e.moonStarLord??""}</dd><dt>Sub lord</dt><dd>${e.moonSublord??""}</dd><dt>Sub-sub lord</dt><dd>${e.moonSubSublord??""}</dd></dl></div><div class="group"><h3>Lagna</h3><dl><dt>Sign lord</dt><dd>${e.lagnaSignLord??""}</dd><dt>Star lord</dt><dd>${e.lagnaStarLord??""}</dd><dt>Sub lord</dt><dd>${e.lagnaSublord??""}</dd><dt>Sub-sub lord</dt><dd>${e.lagnaSubSublord??""}</dd></dl></div></div>${e.rulingPlanets?.length?s`<div class="rp-list" role="list" aria-label="Ruling planets by strength"><span class="rp-label">Ruling planets</span> ${e.rulingPlanets.map((r,o)=>s`<span class="rp" role="listitem"><span class="rank">${o+1}</span> ${r}</span>`)}</div>`:l} ${t.length?s`<table aria-label="House significators"><thead><tr><th scope="col">Planet</th><th scope="col">Signifies houses</th></tr></thead><tbody>${t.map(r=>s`<tr><td>${r.planet}</td><td>${(r.signifies??[]).join(", ")}</td></tr>`)}</tbody></table>`:l}</div>`}};we.styles=[v,x`.wrap{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);padding:var(--roxy-space-md,1rem);gap:var(--roxy-space-md,1rem);box-shadow:var(--roxy-shadow-sm);display:grid}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.day-lord{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}.day-lord strong{color:var(--roxy-fg,#0a0a0a)}.groups{gap:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(11rem,1fr));display:grid}.group h3{margin:0 0 var(--roxy-space-xs,.25rem);font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.05em}.group dl{gap:2px var(--roxy-space-sm,.5rem);font-size:var(--roxy-text-sm,.875rem);grid-template-columns:auto 1fr;margin:0;display:grid}.group dt{color:var(--roxy-muted,#71717a)}.group dd{color:var(--roxy-fg,#0a0a0a);font-weight:var(--roxy-weight-bold,600);margin:0}.rp-list{gap:var(--roxy-space-xs,.25rem);flex-wrap:wrap;align-items:center;display:flex}.rp-label{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.05em;margin-right:var(--roxy-space-xs,.25rem)}.rp{font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600);background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 18%, transparent);color:var(--roxy-fg,#0a0a0a);border-radius:999px;align-items:center;gap:.3em;padding:.15em .6em;display:inline-flex}.rp .rank{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-accent-ink,#b45309)}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem)}th,td{padding:var(--roxy-space-xs,.25rem) var(--roxy-space-sm,.5rem);text-align:left;border-bottom:1px solid var(--roxy-border,#e4e4e7)}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.04em}`],p([u({attribute:!1})],we.prototype,"data",2),we=p([b("roxy-kp-ruling-planets")],we);function Lr(n,a){let e,t=((...r)=>{e&&clearTimeout(e),e=setTimeout(()=>{e=void 0,n(...r)},a)});return t.cancel=()=>{e&&(clearTimeout(e),e=void 0)},t}var D=class extends f{constructor(){super(...arguments);this.endpoint="https://roxyapi.com/api/v2/location/search";this.placeholder="Search city";this.defaultValue="";this.query="";this.results=[];this.isOpen=!1;this.isLoading=!1;this.highlight=-1;this.secretKeyWarned=!1;this.debouncedFetch=Lr(e=>{this.fetchResults(e)},300);this.onInput=e=>{let t=e.target.value;if(this.query=t,t.length<2){this.results=[],this.isOpen=!1,this.highlight=-1;return}this.debouncedFetch(t)};this.onKeyDown=e=>{if(!this.isOpen||this.results.length===0){e.key==="ArrowDown"&&this.query.length>=2&&(this.fetchResults(this.query),e.preventDefault());return}if(e.key==="ArrowDown")e.preventDefault(),this.highlight=(this.highlight+1)%this.results.length;else if(e.key==="ArrowUp")e.preventDefault(),this.highlight=(this.highlight-1+this.results.length)%this.results.length;else if(e.key==="Enter"){e.preventDefault();let t=this.results[this.highlight]??this.results[0];t&&this.select(t)}else e.key==="Escape"&&(this.isOpen=!1)}}connectedCallback(){super.connectedCallback(),this.query=this.defaultValue,this.clickOutsideHandler=e=>{e.composedPath().includes(this)||(this.isOpen=!1)},document.addEventListener("mousedown",this.clickOutsideHandler)}disconnectedCallback(){super.disconnectedCallback(),this.clickOutsideHandler&&document.removeEventListener("mousedown",this.clickOutsideHandler),this.debouncedFetch.cancel(),this.abortController&&(this.abortController.abort(),this.abortController=void 0)}warnIfSecretKey(){if(this.secretKeyWarned||!this.apiKey||this.apiKey.startsWith("pk_"))return;this.secretKeyWarned=!0;let e="Possible secret key in client-side <roxy-location-search>; use a `pk_` publishable key with origin allowlist instead.";console.warn(e),this.dispatchEvent(new CustomEvent("roxy-validation-error",{detail:{reason:"possible-secret-key",message:e},bubbles:!0,composed:!0}))}async fetchResults(e){this.warnIfSecretKey(),this.abortController&&this.abortController.abort();let t=new AbortController;this.abortController=t,this.isLoading=!0;try{let r=new URL(this.endpoint);r.searchParams.set("q",e),r.searchParams.set("limit","8");let o={Accept:"application/json"};this.apiKey&&this.publishableKey&&console.warn("[roxy-location-search] both api-key and publishable-key set; using publishable-key. Remove api-key from your widget markup.");let i=this.publishableKey??this.apiKey;i&&(o["X-API-Key"]=i);let d=await fetch(r,{headers:o,signal:t.signal});if(!d.ok)throw new Error(`HTTP ${d.status}`);let c=await d.json();if(t.signal.aborted)return;this.results=c.cities??[],this.isOpen=this.results.length>0,this.highlight=this.results.length>0?0:-1}catch(r){if(r?.name==="AbortError")return;this.results=[],this.isOpen=!1}finally{this.abortController===t&&(this.abortController=void 0),t.signal.aborted||(this.isLoading=!1)}}select(e){this.query=`${e.city}${e.province?`, ${e.province}`:""}, ${e.country}`,this.isOpen=!1,this.results=[],this.dispatchEvent(new CustomEvent("roxy-location-select",{detail:e,bubbles:!0,composed:!0}))}render(){return s`<div class="field"><input type="text" role="combobox" aria-expanded="${this.isOpen?"true":"false"}" aria-controls="roxy-location-listbox" aria-activedescendant="${this.isOpen&&this.highlight>=0?`roxy-location-option-${this.highlight}`:""}" aria-autocomplete="list" autocomplete="off" placeholder="${this.placeholder}" .value="${this.query}" @input="${this.onInput}" @keydown="${this.onKeyDown}" @focus="${()=>{this.results.length>0&&(this.isOpen=!0)}}"> ${this.isLoading?s`<span class="spinner" role="status" aria-label="Loading"></span>`:l} ${this.isOpen?s`<ul id="roxy-location-listbox" class="results" role="listbox">${this.results.length===0?s`<li class="empty" role="status">No cities found</li>`:this.results.map((e,t)=>s`<li role="presentation"><button type="button" class="option" role="option" id="${`roxy-location-option-${t}`}" aria-selected="${this.highlight===t?"true":"false"}" @click="${()=>this.select(e)}" @mouseenter="${()=>{this.highlight=t}}"><span class="city">${e.city}</span> <span class="where">${e.province?s`${e.province},`:""}${e.country}</span> <span class="tz">UTC${e.utcOffset>=0?"+":""}${e.utcOffset}</span></button></li>`)}</ul>`:l}</div>`}};D.styles=[v,x`:host{display:block;position:relative}.field{position:relative}input{width:100%;padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);font-size:var(--roxy-text-base,1rem);color:var(--roxy-fg,#0a0a0a);background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);transition:border-color var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));box-sizing:border-box;font-family:inherit}input:focus{outline:2px solid var(--roxy-ring,#f59e0b66);outline-offset:2px;border-color:var(--roxy-accent-ink,#b45309)}.spinner{border:2px solid var(--roxy-muted,#71717a);border-top-color:#0000;border-radius:50%;width:14px;height:14px;animation:.7s linear infinite roxy-spin;position:absolute;top:50%;right:12px;transform:translateY(-50%)}@keyframes roxy-spin{to{transform:translateY(-50%)rotate(360deg)}}@media (prefers-reduced-motion:reduce){.spinner{animation:none}}.results{z-index:50;background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);box-shadow:var(--roxy-shadow-md);max-height:22rem;animation:roxy-fade-in var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto}.option{align-items:baseline;gap:var(--roxy-space-sm,.5rem);width:100%;padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);text-align:left;font-family:inherit;font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-fg,#0a0a0a);cursor:pointer;transition:background-color var(--roxy-motion-duration,.2s);background:0 0;border:0;display:flex}.option:hover,.option[aria-selected=true]{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 10%, transparent)}.option .city{font-weight:var(--roxy-weight-bold,600)}.option .where{color:var(--roxy-muted,#71717a);flex-grow:1}.option .tz{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);font-variant-numeric:tabular-nums}.empty{padding:var(--roxy-space-md,1rem);color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}`],p([u({type:String,attribute:"api-key"})],D.prototype,"apiKey",2),p([u({type:String,attribute:"publishable-key"})],D.prototype,"publishableKey",2),p([u({type:String})],D.prototype,"endpoint",2),p([u({type:String})],D.prototype,"placeholder",2),p([u({type:String,attribute:"default-value"})],D.prototype,"defaultValue",2),p([N()],D.prototype,"query",2),p([N()],D.prototype,"results",2),p([N()],D.prototype,"isOpen",2),p([N()],D.prototype,"isLoading",2),p([N()],D.prototype,"highlight",2),D=p([b("roxy-location-search")],D);var ne=class extends f{constructor(){super();this.data=null;this.mode="current";new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No moon phase data</div>`;let t="phases"in e?e.phases:"calendar"in e?e.calendar:[];if(this.mode!=="current"&&t.length>0){let r="month"in e?e.month:void 0,o="year"in e?e.year:void 0;return s`<article class="card" aria-label="Moon phase calendar"><h2 class="label">${r??"Moon phases"} ${o??""}</h2><div class="list" role="list">${t.map(i=>this.renderListItem(i))}</div></article>`}return"phase"in e?this.renderSingle(e):l}renderSingle(e){let t=Nr(e.phase);return s`<article class="card" aria-label="Current moon phase"><div class="hero"><span class="emoji" aria-hidden="true">${t}</span><div><h2 class="label">${e.phase??"Moon"}</h2>${e.date?s`<div class="date">${e.date}</div>`:l}</div></div><div class="stats">${typeof e.illumination=="number"?s`<div><span>Illumination</span> <strong>${Fa(e.illumination)}</strong></div>`:l} ${typeof e.age=="number"?s`<div><span>Age</span> <strong>${C(e.age,1)} days</strong></div>`:l} ${e.sign?s`<div><span>Sign</span> <strong>${e.sign}</strong></div>`:l} ${typeof e.distance=="number"?s`<div><span>Distance</span> <strong>${(e.distance/1e3).toFixed(0)}k km</strong></div>`:l}</div>${e.meaning?.description?s`<p class="meaning">${e.meaning.description}</p>`:l} ${e.meaning?.keywords?.length?s`<div class="keywords">${e.meaning.keywords.map(r=>s`<span>${r}</span>`)}</div>`:l}</article>`}renderListItem(e){let t=Nr(e.phase);return s`<div class="list-item" role="listitem"><span aria-hidden="true">${t}</span> <span>${e.phase}</span> <span>${e.date??""}</span></div>`}};ne.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-md,1rem);display:grid}.hero{align-items:center;gap:var(--roxy-space-md,1rem);display:flex}.emoji{font-size:3rem;line-height:1}.label{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);text-transform:capitalize;margin:0}.date{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}.stats{gap:var(--roxy-space-md,1rem);font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-secondary,#475569);grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));display:grid}.stats div span:first-child{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);text-transform:uppercase;letter-spacing:.06em;display:block}.stats strong{color:var(--roxy-fg,#0a0a0a);font-variant-numeric:tabular-nums}.meaning{color:var(--roxy-fg,#0a0a0a)}.keywords{gap:var(--roxy-space-xs,.25rem);margin-top:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.keywords span{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 14%, transparent);border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);padding:2px 8px}.list{gap:var(--roxy-space-sm,.5rem);display:grid}.list-item{gap:var(--roxy-space-sm,.5rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);padding:var(--roxy-space-sm,.5rem) 0;font-size:var(--roxy-text-sm,.875rem);grid-template-columns:2.5rem 1fr auto;align-items:center;display:grid}.list-item:last-child{border-bottom:none}`],p([u({attribute:!1})],ne.prototype,"data",2),p([u({type:String,reflect:!0})],ne.prototype,"mode",2),ne=p([b("roxy-moon-phase")],ne);function Nr(n){return n?xr[n.toLowerCase()]??"\u{1F319}":"\u{1F319}"}function Fa(n){let a=n<=1?n*100:n;return`${Math.round(a)}%`}var ke=class extends f{constructor(){super();this.data=null;new $(this)}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No nakshatra data</div>`;let e=this.data,t=e.remedies;return s`<article class="wrap" aria-label="${`Nakshatra ${e.name}`}"><header class="head"><h2 class="name">${e.name}</h2>${typeof e.number=="number"?s`<span class="number">Nakshatra ${e.number} of 27</span>`:l} ${e.range?s`<span class="range">${e.range}</span>`:l}</header><dl class="facts">${e.lord?s`<div class="fact"><dt>Lord</dt><dd>${e.lord}</dd></div>`:l} ${e.deity?s`<div class="fact"><dt>Deity</dt><dd>${e.deity}</dd></div>`:l} ${e.symbol?s`<div class="fact"><dt>Symbol</dt><dd>${e.symbol}</dd></div>`:l}</dl>${e.characteristics?s`<div class="section"><h3>Characteristics</h3><p>${e.characteristics}</p></div>`:l} ${t?s`<div class="section"><h3>Remedies</h3><div class="remedies">${t.mantras?s`<div class="remedy"><strong>Mantras:</strong> ${t.mantras}</div>`:l} ${t.gemstones?s`<div class="remedy"><strong>Gemstones:</strong> ${t.gemstones}</div>`:l} ${t.rituals?s`<div class="remedy"><strong>Rituals:</strong> ${t.rituals}</div>`:l}</div></div>`:l}</article>`}};ke.styles=[v,x`.wrap{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);padding:var(--roxy-space-md,1rem);gap:var(--roxy-space-md,1rem);box-shadow:var(--roxy-shadow-sm);display:grid}.head{align-items:baseline;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.name{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.number{color:var(--roxy-accent-ink,#b45309);font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600)}.range{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}.facts{gap:var(--roxy-space-sm,.5rem);grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));display:grid}.fact{gap:2px;display:grid}.fact dt{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-xs,.75rem);text-transform:uppercase;letter-spacing:.05em}.fact dd{color:var(--roxy-fg,#0a0a0a);font-size:var(--roxy-text-sm,.875rem);margin:0}.section h3{margin:0 0 var(--roxy-space-xs,.25rem);font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.05em}.section p{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-fg,#0a0a0a);margin:0;line-height:1.5}.remedies{gap:var(--roxy-space-xs,.25rem);display:grid}.remedy{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-fg,#0a0a0a)}.remedy strong{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600)}`],p([u({attribute:!1})],ke.prototype,"data",2),ke=p([b("roxy-nakshatra-card")],ke);function Y(){return s`<svg class="roxy-chevron" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path d="M4 6l4 4 4-4" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>`}var je=x`summary{list-style:none}summary::-webkit-details-marker{display:none}.roxy-chevron{aspect-ratio:auto;width:14px;height:14px;color:var(--roxy-muted,#71717a);transition:transform var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,ease);flex-shrink:0}details[open]>summary .roxy-chevron{transform:rotate(180deg)}@media (prefers-reduced-motion:reduce){.roxy-chevron{transition:none}}`;var Ft=420,P=Ft/2,Be=164,Yt=146,rt=120,Ke=96,Ua=178,Wa=196,F=class extends f{constructor(){super();this.data=null;this.houseSystem="placidus";this.view="wheel";new $(this)}getPlanets(){return this.data?.planets??[]}getAscendant(){return this.data?.ascendant?.longitude??0}getMidheaven(){let e=this.data?.midheaven?.longitude;return typeof e=="number"?e:null}toAngle(e){return 180+this.getAscendant()-e}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No chart data</div>`;let e=this.getPlanets(),t=this.data.aspects??[],r=this.view;return s`<div class="wrap"><header><h2 class="title">Natal chart</h2>${this.data.birthDetails?s`<div class="meta">${[this.data.birthDetails.date,this.data.birthDetails.time].filter(Boolean).join(" \xB7 ")}</div>`:l}</header>${Ie({items:[{id:"wheel",label:"Wheel"},{id:"grid",label:"Aspect grid"}],active:r,onSelect:o=>{this.view=o},label:"Natal chart views",idPrefix:"natal",controls:!0})}<div id="natal-panel-${r}" role="tabpanel" aria-labelledby="natal-tab-${r}">${r==="wheel"?this.renderWheel(e,t):this.renderAspectGrid(e,t)}</div><div class="legend"><span>${e.length} planets</span> <span>${t.length} aspects</span> ${this.data.houseSystem?s`<span>${this.data.houseSystem} houses</span>`:l} <span><span class="legend-swatch" style="background:var(--roxy-success)"></span>harmonious</span> <span><span class="legend-swatch" style="background:var(--roxy-danger)"></span>challenging</span></div>${this.renderDetails()} ${this.renderInterpretations()}</div>`}renderWheel(e,t){return s`<svg viewBox="0 0 ${Ft} ${Ft}" role="img" aria-label="Natal chart wheel with twelve houses, planets, and aspects"><title>Natal chart wheel</title><desc>Twelve zodiac sign segments around a circular wheel. Planet glyphs are placed at their ecliptic longitudes. Aspect lines connect related planets.</desc><circle class="wheel-line" cx="${P}" cy="${P}" r="${Be}" stroke-width="1.5"/><circle class="wheel-line" cx="${P}" cy="${P}" r="${Yt-14}" stroke-width="0.8"/><circle class="wheel-line" cx="${P}" cy="${P}" r="${rt}" stroke-width="1"/><circle class="wheel-line" cx="${P}" cy="${P}" r="${Ke-16}" stroke-width="0.5"/>${this.renderTicks()} ${this.renderSpokes()} ${this.renderSigns()} ${this.renderHouseNumbers()} ${this.renderCuspDegrees()} ${this.renderAspects(e,t)} ${this.renderPlanets(e)} ${this.renderAngles()}</svg>`}renderAspectGrid(e,t){let r=e.map(i=>A(i.name)),o=new Map;for(let i of t){let d=[A(i.planet1),A(i.planet2)].sort().join("|");o.set(d,i)}return r.length===0?s`<p class="roxy-empty" role="status">No planets to grid</p>`:s`<div class="grid-scroll"><table class="aspect-grid" aria-label="Planet by planet aspect grid"><thead><tr><th></th>${r.slice(0,-1).map(i=>{let d=L[i]??i.slice(0,2);return s`<th scope="col" title="${i}">${d}</th>`})}</tr></thead><tbody>${r.slice(1).map((i,d)=>{let c=L[i]??i.slice(0,2);return s`<tr><th scope="row" title="${i}">${c}</th>${r.slice(0,d+1).map(m=>{let g=o.get([i,m].sort().join("|"));if(!g)return s`<td class="empty"></td>`;let h=Ge(g),y=et[h]??et[h.replace(/-/g,"")]??h.slice(0,3),S=_e[h]??"aspect-other",k=C(g.orb,1);return s`<td class="${`cell ${S}`}" title="${`${i} ${h} ${m}${k?` (orb ${k}\xB0)`:""}`}"><span class="asp">${y}</span></td>`})} ${r.slice(d+1,-1).map(()=>s`<td class="empty"></td>`)}</tr>`})}</tbody></table></div>`}renderAngles(){let e=this.getAscendant(),t=this.getMidheaven(),r=[this.renderAngleMark(e,"ASC"),this.renderAngleMark(Kt(e),"DSC")];t!==null&&(r.push(this.renderAngleMark(t,"MC")),r.push(this.renderAngleMark(Kt(t),"IC")));let o=this.data?.partOfFortune?.longitude;typeof o=="number"&&r.push(this.renderAngleMark(q(o),"PoF"));let i=this.data?.vertex?.longitude;return typeof i=="number"&&r.push(this.renderAngleMark(q(i),"Vtx")),r}renderAngleMark(e,t){let r=this.toAngle(e),o=T(P,P,Be,r),i=T(P,P,Ua,r),d=T(P,P,Wa,r);return w`
|
|
70
79
|
<g>
|
|
71
80
|
<line class="angle-tick" x1=${o.x} y1=${o.y} x2=${i.x} y2=${i.y} />
|
|
72
|
-
<text class="angle-marker" x=${
|
|
81
|
+
<text class="angle-marker" x=${d.x} y=${d.y} text-anchor="middle" dominant-baseline="central">${t}</text>
|
|
73
82
|
</g>
|
|
74
|
-
`}renderSpokes(){let e=this.data?.houses??[];return(e.length===12?e.map(r=>r.longitude):Array.from({length:12},(r,o)=>this.getAscendant()+o*30)).map(r=>{let o=this.toAngle(r),i=P
|
|
75
|
-
${
|
|
76
|
-
<text class="planet-glyph" x=${h.x} y=${h.y} text-anchor="middle" dominant-baseline="central"><title>${i.name}${
|
|
77
|
-
<text class="planet-deg" x=${y.x} y=${y.y} text-anchor="middle" dominant-baseline="central">${
|
|
78
|
-
</g>`})}renderDetails(){let e=this.data?.summary,t=this.data?.aspectsInterpretation;if(!e&&!t)return l;let r=e?.retrogradePlanets??[];return s`<div class="details">${e?.dominantElement||e?.dominantModality?s`<div class="pill-row">${e.dominantElement?s`<span class="pill">Dominant element: ${e.dominantElement}</span>`:l} ${e.dominantModality?s`<span class="pill">Dominant modality: ${e.dominantModality}</span>`:l}</div>`:l} ${t?s`<div class="pill-row"><span class="pill pill--success">Harmonious ${t.harmonious}</span> <span class="pill pill--danger">Challenging ${t.challenging}</span> <span class="pill pill--muted">Neutral ${t.neutral}</span></div>`:l} ${r.length>0?s`<div class="pill-row">${r.map(o=>{let i=N[o]??o.slice(0,2);return s`<span class="pill pill--muted">${i} ${o} R</span>`})}</div>`:l} ${t?.summary?s`<p class="summary">${t.summary}</p>`:l} ${this.renderElementModalityGrid()}</div>`}renderElementModalityGrid(){let e=this.getPlanets();if(e.length===0)return l;let t=["Fire","Earth","Air","Water"],r=["Cardinal","Fixed","Mutable"],o=_,i={};for(let c of t)i[c]={Cardinal:[],Fixed:[],Mutable:[]};for(let c of e){let d=o.indexOf(E(c.sign??""));if(d<0)continue;let p=t[d%4],g=r[d%3],h=N[E(c.name)]??E(c.name).slice(0,2);i[p]?.[g]?.push(h)}return s`<table class="em-grid" aria-label="Element and modality distribution"><thead><tr><th></th>${r.map(c=>s`<th scope="col">${c.slice(0,3)}</th>`)}<th scope="col">Total</th></tr></thead><tbody>${t.map(c=>{let d=r.reduce((p,g)=>p+(i[c]?.[g]?.length??0),0);return s`<tr><th scope="row">${c}</th>${r.map(p=>s`<td>${(i[c]?.[p]??[]).join(" ")}</td>`)}<td class="em-total">${d}</td></tr>`})}<tr><th scope="row">Total</th>${r.map(c=>s`<td class="em-total">${t.reduce((d,p)=>d+(i[p]?.[c]?.length??0),0)}</td>`)}<td class="em-total">${e.length}</td></tr></tbody></table>`}renderInterpretations(){let e=this.getPlanets().filter(t=>t.interpretation);return e.length===0?l:s`<section class="interpretations"><h3>Planet readings</h3>${e.map((t,r)=>{let o=t.interpretation,i=N[E(t.name)]??"",c=C(t.degree??0,1);return s`<details class="interp-card" name="natal-planet-readings" ?open="${r===0}"><summary><span>${i} ${t.name}</span> <span class="interp-aside"><small>${t.sign??""} ${c}</small> ${mt()}</span></summary><div class="interp-body">${o.summary?s`<p class="interp-summary">${o.summary}</p>`:l} ${o.detailed?s`<p class="interp-detail">${o.detailed}</p>`:l} ${o.keywords?.length?s`<div class="interp-keywords">${o.keywords.map(d=>s`<span class="kw">${d}</span>`)}</div>`:l}</div></details>`})}</section>`}renderAspects(e,t){let r=new Map;for(let o of e){if(typeof o.longitude!="number")continue;let i=E(o.name);i&&r.set(i,o.longitude)}return t.map(o=>{let i=r.get(E(o.planet1)),c=r.get(E(o.planet2));if(i===void 0||c===void 0)return l;let d=P(A,A,_e-18,this.toAngle(i)),p=P(A,A,_e-18,this.toAngle(c)),g=Me(o),h=Ye[g]??"aspect-other",y=C(o.orb,1);return k`<line class=${`aspect ${h}`} x1=${d.x} y1=${d.y} x2=${p.x} y2=${p.y}><title>${o.planet1} ${g||""} ${o.planet2}${y?` (orb ${y}\xB0)`:""}</title></line>`})}};q.styles=[v,ge,ht,x`.wrap{gap:var(--roxy-space-md,1rem);width:100%;display:grid}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);color:var(--roxy-primary,#0f172a);margin:0}.meta{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}svg{aspect-ratio:1;width:100%;max-width:560px;height:auto;margin:0 auto;display:block}.wheel-line{fill:none;stroke:var(--roxy-border,#e4e4e7)}.sign-glyph{fill:var(--roxy-secondary,#475569);font-size:14px;font-family:var(--roxy-font-sans)}.planet-glyph{fill:var(--roxy-accent,#f59e0b);font-size:14px;font-weight:600;font-family:var(--roxy-font-sans)}.planet-deg{fill:var(--roxy-fg,#0a0a0a);font-size:7px;font-family:var(--roxy-font-sans)}@container (width<=480px){.sign-glyph,.planet-glyph{font-size:18px}.planet-deg{font-size:10px}.house-num{font-size:12px}}.planet-deg .retro{fill:var(--roxy-danger,#dc2626)}.planet-leader{stroke:var(--roxy-accent,#f59e0b);stroke-width:.5px;opacity:.55}.house-num{fill:var(--roxy-muted,#71717a);font-size:9px;font-family:var(--roxy-font-sans)}.cusp-deg{fill:var(--roxy-muted,#71717a);font-size:6px;font-family:var(--roxy-font-sans)}.tick{stroke:var(--roxy-border,#e4e4e7)}.tick-major{stroke:var(--roxy-secondary,#475569)}.aspect{stroke-width:.8px;fill:none;opacity:.55}.aspect-trine,.aspect-sextile{stroke:var(--roxy-success,#16a34a)}.aspect-square,.aspect-opposition{stroke:var(--roxy-danger,#dc2626)}.aspect-conjunction{stroke:var(--roxy-accent-fg,#b45309)}.aspect-other{stroke:var(--roxy-muted,#71717a);opacity:.4}.angle-marker{fill:var(--roxy-accent-fg,#b45309);font-size:10px;font-weight:700;font-family:var(--roxy-font-sans);letter-spacing:.04em}.angle-tick{stroke:var(--roxy-accent-fg,#b45309);stroke-width:1.5px}.legend{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);gap:var(--roxy-space-md,1rem);flex-wrap:wrap;display:flex}.legend-swatch{vertical-align:middle;border-radius:50%;width:8px;height:8px;margin-right:4px;display:inline-block}.grid-scroll{-webkit-overflow-scrolling:touch;overflow-x:auto}table.aspect-grid{border-collapse:collapse;font-size:var(--roxy-text-xs,.75rem);margin:0 auto}table.aspect-grid th,table.aspect-grid td{text-align:center;border:1px solid var(--roxy-border,#e4e4e7);width:1.6rem;height:1.6rem;padding:0}table.aspect-grid th{color:var(--roxy-secondary,#475569);font-weight:var(--roxy-weight-bold,600)}table.aspect-grid td.cell{cursor:default}table.aspect-grid td.empty{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 18%, transparent)}table.aspect-grid td .asp{font-size:.95em;line-height:1}table.aspect-grid td.aspect-trine .asp,table.aspect-grid td.aspect-sextile .asp{color:var(--roxy-success,#16a34a)}table.aspect-grid td.aspect-square .asp,table.aspect-grid td.aspect-opposition .asp{color:var(--roxy-danger,#dc2626)}table.aspect-grid td.aspect-conjunction .asp{color:var(--roxy-accent-fg,#b45309)}table.aspect-grid td.aspect-other .asp{color:var(--roxy-muted,#71717a)}.details{margin-top:var(--roxy-space-md,1rem)}.pill-row{gap:var(--roxy-space-xs,.25rem);margin-bottom:var(--roxy-space-xs,.25rem);flex-wrap:wrap;display:flex}.pill{border-radius:var(--roxy-radius-sm,4px);font-size:var(--roxy-text-xs,.75rem);background:color-mix(in srgb, var(--roxy-fg,#0f172a) 8%, transparent);color:var(--roxy-fg,#0f172a);padding:2px 8px}.pill--success{background:color-mix(in srgb, var(--roxy-success,#16a34a) 15%, transparent);color:var(--roxy-success,#16a34a)}.pill--danger{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 15%, transparent);color:var(--roxy-danger,#dc2626)}.pill--muted{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 60%, transparent);color:var(--roxy-fg,#0a0a0a)}.summary{color:var(--roxy-fg,#0f172a);font-size:var(--roxy-text-sm,.875rem);margin:var(--roxy-space-md,1rem) 0}.em-grid{border-collapse:collapse;font-size:var(--roxy-text-xs,.75rem);width:100%}.em-grid th,.em-grid td{border:1px solid var(--roxy-border,#e4e4e7);text-align:center;vertical-align:middle;padding:3px 5px}.em-grid th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;letter-spacing:.04em}.em-grid th[scope=row]{text-align:left}.em-grid td{color:var(--roxy-accent,#f59e0b);min-width:1.4rem;font-size:.95em;line-height:1.4}.em-grid .em-total{color:var(--roxy-fg,#0a0a0a);font-weight:var(--roxy-weight-bold,600);background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 25%, transparent)}.interpretations{margin-top:var(--roxy-space-md,1rem)}.interpretations h3{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.06em;margin:0 0 var(--roxy-space-sm,.5rem);font-weight:600}.interp-card{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);margin-bottom:var(--roxy-space-xs,.25rem)}.interp-card summary{cursor:pointer;color:var(--roxy-fg,#0f172a);justify-content:space-between;align-items:center;gap:var(--roxy-space-md,1rem);font-weight:500;display:flex}.interp-aside{align-items:center;gap:.6em;display:inline-flex}.interp-aside small{color:var(--roxy-muted,#71717a);font-weight:400}.interp-body{margin-top:var(--roxy-space-xs,.25rem);color:var(--roxy-fg,#0f172a);font-size:var(--roxy-text-sm,.875rem)}.interp-keywords{flex-wrap:wrap;gap:.25rem;margin-top:.5rem;display:flex}.interp-keywords .kw{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 14%, transparent);color:var(--roxy-accent-fg,#b45309);font-size:var(--roxy-text-xs,.75rem);border-radius:9999px;padding:1px 8px}`],m([u({attribute:!1})],q.prototype,"data",2),m([u({type:String,attribute:"house-system",reflect:!0})],q.prototype,"houseSystem",2),m([R()],q.prototype,"view",2),q=m([b("roxy-natal-chart")],q);var se=class extends f{constructor(){super();this.data=null;this.type="life-path";new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No numerology data</div>`;let t=ua[this.type]??this.type;return"coreNumbers"in e?this.renderChart(e,t):"personalYear"in e?this.renderPersonalYear(e,t):this.renderNumberCard(e,t)}renderNumberCard(e,t){let r=e.meaning?.keywords??[];return s`<article class="card" aria-label="${t}"><div class="hero">${typeof e.number=="number"?s`<div class="numeral">${e.number}</div>`:l}<div><p class="label">${t}</p>${e.meaning?.title?s`<h2 class="title">${e.meaning.title}</h2>`:l}</div></div>${e.meaning?.description?s`<p class="meaning">${e.meaning.description}</p>`:l} ${e.calculation?s`<pre class="calc">${e.calculation}</pre>`:l} ${r.length>0?s`<div class="chips">${r.map(o=>s`<span>${o}</span>`)}</div>`:l} ${e.hasKarmicDebt&&e.karmicDebtNumber?s`<div class="karmic">Karmic debt ${e.karmicDebtNumber}. ${ya(e.karmicDebtMeaning)}</div>`:l}</article>`}renderPersonalYear(e,t){return s`<article class="card" aria-label="${t}"><div class="hero">${typeof e.personalYear=="number"?s`<div class="numeral">${e.personalYear}</div>`:l}<div><p class="label">${t}</p>${e.theme?s`<h2 class="title">${e.theme}</h2>`:l}</div></div>${e.forecast?s`<p class="meaning">${e.forecast}</p>`:l} ${e.advice?s`<p>${e.advice}</p>`:l}</article>`}renderChart(e,t){let r=Object.entries(e.coreNumbers).filter(([,o])=>o!=null);return s`<article class="card" aria-label="${t}"><div><p class="label">${t}</p>${e.profile?.name?s`<h2 class="title">${e.profile.name}</h2>`:l}</div>${r.length>0?s`<div class="cores">${r.map(([o,i])=>s`<div class="item"><span>${me(o)}</span> <strong>${i.number??""}</strong></div>`)}</div>`:l}</article>`}};se.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-md,1rem);display:grid}.hero{align-items:center;gap:var(--roxy-space-md,1rem);display:flex}.numeral{font-size:4rem;line-height:1;font-weight:var(--roxy-weight-bold,600);color:var(--roxy-accent-fg,#b45309);font-variant-numeric:tabular-nums}.label{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.06em;margin:0}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.meaning{color:var(--roxy-fg,#0a0a0a);margin:0}.calc{font-family:var(--roxy-font-mono);font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 30%, transparent);padding:var(--roxy-space-sm,.5rem);border-radius:var(--roxy-radius-sm,4px);white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.chips{gap:var(--roxy-space-xs,.25rem);flex-wrap:wrap;display:flex}.chips span{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 14%, transparent);border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);padding:2px 8px}.cores{gap:var(--roxy-space-sm,.5rem);border-top:1px solid var(--roxy-border,#e4e4e7);padding-top:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));display:grid}.cores .item{align-items:baseline;gap:var(--roxy-space-xs,.25rem);font-size:var(--roxy-text-sm,.875rem);display:flex}.cores .item span:first-child{color:var(--roxy-muted,#71717a);text-transform:capitalize}.cores .item strong{color:var(--roxy-accent-fg,#b45309);font-variant-numeric:tabular-nums;font-size:var(--roxy-text-base,1rem);font-weight:var(--roxy-weight-bold,600)}.karmic{background:color-mix(in srgb, var(--roxy-warning,#ea580c) 12%, transparent);border:1px solid color-mix(in srgb, var(--roxy-warning,#ea580c) 32%, transparent);padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);border-radius:var(--roxy-radius-md,8px);font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-fg,#0a0a0a)}`],m([u({attribute:!1})],se.prototype,"data",2),m([u({type:String,reflect:!0})],se.prototype,"type",2),se=m([b("roxy-numerology-card")],se);var ua={"life-path":"Life Path",expression:"Expression","personal-year":"Personal Year",chart:"Numerology chart"};function ya(n){return n?[n.description,n.challenge,n.resolution].filter(Boolean).join(" "):""}var oe=class extends f{constructor(){super();this.data=null;this.detail="detailed";new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No panchang data</div>`;let t="sunrise"in e?e:null,r=[["Tithi",this.formatPart(e.tithi)],["Nakshatra",this.formatPart(e.nakshatra)],["Yoga",this.formatPart(e.yoga)],["Karana",this.formatPart(e.karana)]];t&&r.push(["Vara",this.formatPart(t.vara)]);let o=t?[["Brahma Muhurta",t.brahmaMuhurta],["Abhijit Muhurta",t.abhijitMuhurta],["Vijaya Muhurta",t.vijayaMuhurta],["Godhuli Muhurta",t.godhuliMuhurta],["Nishita Muhurta",t.nishitaMuhurta],["Pratah Sandhya",t.pratahSandhya],["Sayahna Sandhya",t.sayahnaSandhya]]:[],i=t?[["Rahu Kaal",t.rahuKaal],["Yamaganda",t.yamaganda],["Gulika",t.gulika]]:[],c=t&&"transitions"in t?t.transitions:void 0;return s`<div class="wrap" aria-label="Panchang"><header class="head"><h2 class="title">Panchang</h2><span class="date">${t?ot(t.date):""}</span></header><table><tbody>${r.map(([d,p])=>s`<tr><th>${d}</th><td>${p}</td></tr>`)} ${t?.sunrise?s`<tr><th>Sunrise</th><td>${I(t.sunrise)}</td></tr>`:l} ${t?.sunset?s`<tr><th>Sunset</th><td>${I(t.sunset)}</td></tr>`:l} ${t?.moonrise?s`<tr><th>Moonrise</th><td>${I(t.moonrise)}</td></tr>`:l} ${t?.moonset?s`<tr><th>Moonset</th><td>${I(t.moonset)}</td></tr>`:l}</tbody></table>${c?s`<div class="section">Next transitions</div><table><tbody>${this.renderTransitionRow("Tithi",c.tithi)} ${this.renderTransitionRow("Nakshatra",c.nakshatra)} ${this.renderTransitionRow("Yoga",c.yoga)} ${this.renderTransitionRow("Karana",c.karana)}</tbody></table>`:l} ${this.detail==="detailed"&&(o.some(d=>!!d[1])||i.some(d=>!!d[1]))?s`<div class="section">Auspicious muhurtas</div><table><tbody>${o.filter(([,d])=>!!d).map(([d,p])=>s`<tr><th>${d}</th><td>${Pt(p)}</td></tr>`)}</tbody></table><div class="section">Inauspicious periods</div><table><tbody>${i.filter(([,d])=>!!d).map(([d,p])=>s`<tr><th>${d}</th><td>${Pt(p)}</td></tr>`)}</tbody></table>`:l}</div>`}renderTransitionRow(e,t){if(!t?.endsAt)return l;let r=I(t.endsAt),o=t.next?` \u2192 ${t.next}`:"";return s`<tr><th>${e}</th><td>ends ${r}${o}</td></tr>`}formatPart(e){if(!e)return"";if(typeof e=="string")return e;if(typeof e=="object"){let t=e;return[t.name,t.paksha?`(${t.paksha} paksha)`:"",t.lord?`\xB7 ${t.lord}`:"",t.phase].filter(Boolean).join(" ")}return String(e)}};oe.styles=[v,x`.wrap{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);box-shadow:var(--roxy-shadow-sm);overflow:hidden}.head{padding:var(--roxy-space-md,1rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);justify-content:space-between;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.date{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem)}tbody tr:nth-child(odd){background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 24%, transparent)}th,td{padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);text-align:left;vertical-align:top}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:capitalize;width:38%}td{color:var(--roxy-fg,#0a0a0a);font-variant-numeric:tabular-nums}.section{border-top:1px solid var(--roxy-border,#e4e4e7);padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;letter-spacing:.06em}`],m([u({attribute:!1})],oe.prototype,"data",2),m([u({type:String,reflect:!0})],oe.prototype,"detail",2),oe=m([b("roxy-panchang-table")],oe);var _t=[{key:"sthanaBala",label:"Sthana",color:"var(--roxy-info, #0284c7)"},{key:"digBala",label:"Dig",color:"var(--roxy-success, #16a34a)"},{key:"kalaBala",label:"Kala",color:"var(--roxy-warning, #ea580c)"},{key:"chestaBala",label:"Chesta",color:"var(--roxy-accent, #f59e0b)"},{key:"naisargikaBala",label:"Naisargika",color:"var(--roxy-secondary, #475569)"},{key:"drikBala",label:"Drik",color:"var(--roxy-danger, #dc2626)"}],be=class extends f{constructor(){super();this.data=null;new $(this)}render(){if(!this.data?.planets?.length)return s`<div class="roxy-empty" role="status">No shadbala data</div>`;let e=[...this.data.planets].sort((t,r)=>t.relativeRank-r.relativeRank);return s`<div class="wrap" aria-label="Shadbala planetary strength"><div class="head"><h2 class="title">Shadbala</h2><p class="subtitle">${e.length} planets ranked by strength</p></div><div role="list" aria-label="Planet strength bars">${e.map(t=>this.renderPlanetRow(t))}</div><div class="legend" aria-label="Strength component legend">${_t.map(t=>s`<div class="legend-row"><span class="legend-swatch" style="background:${t.color}" aria-hidden="true"></span> ${t.label}</div>`)}</div></div>`}renderPlanetRow(e){let t=N[E(e.planet)]??"",r=_t.map(g=>Math.max(0,e[g.key])),o=r.reduce((g,h)=>g+h,0),i=typeof e.strengthRatio=="number"&&e.strengthRatio>=1,c=i?"adequacy-badge--adequate":"adequacy-badge--weak",d=i?"adequate":"weak",p=C(e.totalRupas,2)&&C(e.minRequired,2)?`${C(e.totalRupas,2)} / ${C(e.minRequired,2)} R`:"";return s`<div class="planet-row" role="listitem" aria-label="${e.planet} shadbala"><div class="planet-label"><span class="glyph" aria-hidden="true">${t}</span> ${e.planet} <span class="rank-badge" aria-label="rank ${e.relativeRank}">#${e.relativeRank}</span></div><div class="bar-wrap"><div class="bar" role="img" aria-label="Strength components for ${e.planet}">${o>0?_t.map((g,h)=>{let y=r[h];if(y<=0)return l;let S=y/o*100;return s`<div class="bar-segment" style="flex-grow:${S};background:${g.color}" title="${g.label}: ${C(y,1)}"></div>`}):l}</div></div><div class="pills">${p?s`<span class="rupas-label">${p}</span>`:l} <span class="${`adequacy-badge ${c}`}">${d}</span></div></div>`}};be.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:baseline;gap:var(--roxy-space-md,1rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.subtitle{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);margin:0}.planet-row{align-items:center;gap:var(--roxy-space-sm,.5rem);padding:var(--roxy-space-sm,.5rem) 0;border-bottom:1px solid var(--roxy-border,#e4e4e7);grid-template-columns:8rem 1fr auto;display:grid}.planet-row:last-of-type{border-bottom:none}.planet-label{font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600);align-items:center;gap:6px;display:flex}.glyph{font-size:1.2em;line-height:1}.bar-wrap{flex-direction:column;gap:4px;display:flex}.bar{border-radius:var(--roxy-radius-sm,4px);background:var(--roxy-border,#e4e4e7);height:12px;display:flex;overflow:hidden}.bar-segment{height:100%;transition:flex-grow var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1))}.pills{flex-direction:column;align-items:flex-end;gap:4px;display:flex}.rupas-label{font-variant-numeric:tabular-nums;font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);white-space:nowrap}.adequacy-badge{border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);padding:1px 6px;display:inline-block}.adequacy-badge--adequate{background:color-mix(in srgb, var(--roxy-success,#16a34a) 12%, transparent);color:var(--roxy-success-fg,#166534)}.adequacy-badge--weak{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 12%, transparent);color:var(--roxy-danger-fg,#991b1b)}.rank-badge{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-accent-fg,#b45309);font-weight:var(--roxy-weight-bold,600)}.legend{gap:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);border-top:1px solid var(--roxy-border,#e4e4e7);padding-top:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.legend-row{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);align-items:center;gap:6px;display:flex}.legend-swatch{border-radius:var(--roxy-radius-sm,4px);flex-shrink:0;width:10px;height:10px;display:inline-block}@container (width<=480px){.planet-row{grid-template-rows:auto auto;grid-template-columns:6rem 1fr}.pills{flex-direction:row;grid-column:1/-1;justify-content:flex-start;align-items:center}}`],m([u({attribute:!1})],be.prototype,"data",2),be=m([b("roxy-shadbala-table")],be);var Ht=360,M=Ht/2,Dt=170,xa=154,Ot=124,De=96,ve=class extends f{constructor(){super();this.data=null;new $(this)}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No synastry data</div>`;let{person1:e,person2:t,compatibilityScore:r,analysis:o}=this.data,i=this.data.interAspects??[],c=e?.planets??[],d=t?.planets??[],p=typeof r=="number"?Math.round(r):void 0,g=o?.overall,h=o?.strengths??[],y=o?.challenges??[];return c.length>0&&d.length>0?s`<div class="wrap" aria-label="Synastry compatibility chart"><div class="head"><h2 class="title">Synastry</h2>${typeof p=="number"?s`<span class="score" aria-label="${`Score ${p} of 100`}">${p} / 100</span>`:l}</div><svg viewBox="0 0 ${Ht} ${Ht}" role="img" aria-label="Dual chart wheel comparing two natal charts"><title>Synastry dual wheel</title><circle class="wheel-line" cx="${M}" cy="${M}" r="${Dt}" stroke-width="1.5"/><circle class="wheel-line" cx="${M}" cy="${M}" r="${De+14}" stroke-width="0.8"/><circle class="wheel-line" cx="${M}" cy="${M}" r="${De-14}" stroke-width="0.6"/>${this.renderSpokes()} ${this.renderSigns()} ${this.renderInterAspectLines(c,d,i)} ${this.renderRing(c,Ot,"p1",1)} ${this.renderRing(d,De,"p2",2)} ${this.renderAscendants(this.data)}</svg><div class="legend-row"><span><span class="swatch" style="background:var(--roxy-accent)"></span>Person 1</span> <span><span class="swatch" style="background:var(--roxy-info)"></span>Person 2</span> <span><span class="swatch" style="background:var(--roxy-success)"></span>harmonious</span> <span><span class="swatch" style="background:var(--roxy-danger)"></span>challenging</span></div>${g?s`<p class="summary">${g}</p>`:l} ${i.length>0?this.renderAspects(i):l} ${h.length>0||y.length>0?s`<div class="lists">${h.length?s`<div><h3>Strengths</h3><ul>${h.map(w=>s`<li>${w}</li>`)}</ul></div>`:l} ${y.length?s`<div><h3>Challenges</h3><ul>${y.map(w=>s`<li>${w}</li>`)}</ul></div>`:l}</div>`:l}</div>`:s`<div class="wrap" aria-label="Synastry compatibility chart"><div class="head"><h2 class="title">Synastry</h2>${typeof p=="number"?s`<span class="score" aria-label="${`Score ${p} of 100`}">${p} / 100</span>`:l}</div><div class="missing-planets" role="status">Synastry response missing planet positions. Pass <code>data</code> with <code>person1.planets</code> and <code>person2.planets</code> arrays from the natal-chart endpoint, or use the <code><roxy-data></code> fallback.</div>${g?s`<p class="summary">${g}</p>`:l} ${i.length>0?this.renderAspects(i):l} ${h.length>0||y.length>0?s`<div class="lists">${h.length?s`<div><h3>Strengths</h3><ul>${h.map(w=>s`<li>${w}</li>`)}</ul></div>`:l} ${y.length?s`<div><h3>Challenges</h3><ul>${y.map(w=>s`<li>${w}</li>`)}</ul></div>`:l}</div>`:l}</div>`}toAngle(e){return 180-e}renderSpokes(){return Array.from({length:12},(e,t)=>{let r=this.toAngle(t*30),o=P(M,M,De-14,r),i=P(M,M,Dt,r);return k`<line class="wheel-line" x1=${o.x} y1=${o.y} x2=${i.x} y2=${i.y} stroke-width="0.6" />`})}renderSigns(){return _.map((e,t)=>{let r=this.toAngle(t*30+15),o=P(M,M,xa,r);return k`<text class="sign" x=${o.x} y=${o.y} text-anchor="middle" dominant-baseline="central">${G[e]}</text>`})}renderRing(e,t,r,o){return e.map(i=>{if(!Number.isFinite(i.longitude))return l;let c=this.toAngle(i.longitude),d=P(M,M,t,c),g=P(M,M,t+(o===1?-12:-10),c),h=N[E(i.name)]??i.name.slice(0,2),y=K(i.longitude),S=i.isRetrograde===!0,w=`${y.degree}\xB0${String(y.minute).padStart(2,"0")}'`,ke=`${i.name}${S?" retrograde":""} - ${w} ${y.sign}`;return k`<g>
|
|
79
|
-
<text class=${r} x=${
|
|
80
|
-
<text class="planet-deg" x=${g.x} y=${g.y} text-anchor="middle" dominant-baseline="central">${y.degree}°${S?
|
|
81
|
-
</g>`})}renderAscendants(e){let t=[],r=(o,i)=>{if(!o)return;let
|
|
83
|
+
`}renderSpokes(){let e=this.data?.houses??[];return(e.length===12?e.map(r=>r.longitude):Array.from({length:12},(r,o)=>this.getAscendant()+o*30)).map(r=>{let o=this.toAngle(r),i=T(P,P,rt,o),d=T(P,P,Be,o);return w`<line class="wheel-line" x1=${i.x} y1=${i.y} x2=${d.x} y2=${d.y} stroke-width="0.8" />`})}renderSigns(){return _.map((e,t)=>{let r=this.toAngle(t*30+15),o=T(P,P,Yt,r);return w`<text class="sign-glyph" x=${o.x} y=${o.y} text-anchor="middle" dominant-baseline="central">${G[e]}</text>`})}renderHouseNumbers(){let e=this.data?.houses??[];if(e.length===12)return e.map((r,o)=>{let i=e[(o+1)%12],d=Er(r.longitude,i?i.longitude:r.longitude+30),c=T(P,P,rt-12,this.toAngle(d));return w`<text class="house-num" x=${c.x} y=${c.y} text-anchor="middle" dominant-baseline="central">${r.number}</text>`});let t=Math.floor(this.getAscendant()/30);return Array.from({length:12},(r,o)=>{let i=this.toAngle(o*30+15),d=T(P,P,rt-12,i),c=(o-t+12)%12+1;return w`<text class="house-num" x=${d.x} y=${d.y} text-anchor="middle" dominant-baseline="central">${c}</text>`})}renderTicks(){let e=[];for(let t=0;t<360;t+=5){let r=this.toAngle(t),o=t%30===0,i=o?Yt-14:Be-5,d=T(P,P,i,r),c=T(P,P,Be,r);e.push(w`<line class=${o?"tick tick-major":"tick"} x1=${d.x} y1=${d.y} x2=${c.x} y2=${c.y} stroke-width=${o?1:.5} />`)}return e}renderCuspDegrees(){let e=this.data?.houses??[];return e.length!==12?l:e.map(t=>{let r=this.toAngle(t.longitude),o=T(P,P,rt+9,r),i=V(t.longitude);return w`<text class="cusp-deg" x=${o.x} y=${o.y} text-anchor="middle" dominant-baseline="central">${i.degree}°${String(i.minute).padStart(2,"0")}'</text>`})}renderPlanets(e){let r=e.filter(i=>Number.isFinite(i.longitude)).map(i=>({p:i,trueLon:q(i.longitude),displayLon:q(i.longitude)})).sort((i,d)=>i.trueLon-d.trueLon);for(let i=1;i<r.length;i++){let d=r[i-1],c=r[i];if(!d||!c)continue;let m=d.displayLon+7;c.displayLon<m&&(c.displayLon=m)}let o=r[r.length-1];if(o&&o.displayLon>360){let i=o.displayLon-360;for(let d of r)d.displayLon-=i}return r.map(({p:i,trueLon:d,displayLon:c})=>{let m=this.toAngle(d),g=this.toAngle(c),h=T(P,P,Ke,g),y=T(P,P,Ke-13,g),S=T(P,P,Be-4,m),k=T(P,P,Ke+8,g),Ee=L[A(i.name)]??i.name.slice(0,2),at=V(i.longitude),Ve=i.isRetrograde===!0,st=`${at.degree}\xB0${String(at.minute).padStart(2,"0")}'`,ot=Math.abs(c-d)>.5;return w`<g>
|
|
84
|
+
${ot?w`<line class="planet-leader" x1=${S.x} y1=${S.y} x2=${k.x} y2=${k.y} />`:l}
|
|
85
|
+
<text class="planet-glyph" x=${h.x} y=${h.y} text-anchor="middle" dominant-baseline="central"><title>${i.name}${Ve?" retrograde":""} - ${st} ${i.sign??""}</title>${Ee}</text>
|
|
86
|
+
<text class="planet-deg" x=${y.x} y=${y.y} text-anchor="middle" dominant-baseline="central">${st}${Ve?w`<tspan class="retro"> ℞</tspan>`:l}</text>
|
|
87
|
+
</g>`})}renderDetails(){let e=this.data?.summary,t=this.data?.aspectsInterpretation;if(!e&&!t)return l;let r=e?.retrogradePlanets??[];return s`<div class="details">${e?.dominantElement||e?.dominantModality?s`<div class="pill-row">${e.dominantElement?s`<span class="pill">Dominant element: ${e.dominantElement}</span>`:l} ${e.dominantModality?s`<span class="pill">Dominant modality: ${e.dominantModality}</span>`:l}</div>`:l} ${t?s`<div class="pill-row"><span class="pill pill--success">Harmonious ${t.harmonious}</span> <span class="pill pill--danger">Challenging ${t.challenging}</span> <span class="pill pill--muted">Neutral ${t.neutral}</span></div>`:l} ${r.length>0?s`<div class="pill-row">${r.map(o=>{let i=L[o]??o.slice(0,2);return s`<span class="pill pill--muted">${i} ${o} R</span>`})}</div>`:l} ${t?.summary?s`<p class="summary">${t.summary}</p>`:l} ${this.renderElementModalityGrid()}</div>`}renderElementModalityGrid(){let e=this.getPlanets();if(e.length===0)return l;let t=["Fire","Earth","Air","Water"],r=["Cardinal","Fixed","Mutable"],o=_,i={};for(let d of t)i[d]={Cardinal:[],Fixed:[],Mutable:[]};for(let d of e){let c=o.indexOf(A(d.sign??""));if(c<0)continue;let m=t[c%4],g=r[c%3],h=L[A(d.name)]??A(d.name).slice(0,2);i[m]?.[g]?.push(h)}return s`<table class="em-grid" aria-label="Element and modality distribution"><thead><tr><th></th>${r.map(d=>s`<th scope="col">${d.slice(0,3)}</th>`)}<th scope="col">Total</th></tr></thead><tbody>${t.map(d=>{let c=r.reduce((m,g)=>m+(i[d]?.[g]?.length??0),0);return s`<tr><th scope="row">${d}</th>${r.map(m=>s`<td>${(i[d]?.[m]??[]).join(" ")}</td>`)}<td class="em-total">${c}</td></tr>`})}<tr><th scope="row">Total</th>${r.map(d=>s`<td class="em-total">${t.reduce((c,m)=>c+(i[m]?.[d]?.length??0),0)}</td>`)}<td class="em-total">${e.length}</td></tr></tbody></table>`}renderInterpretations(){let e=this.getPlanets().filter(t=>t.interpretation);return e.length===0?l:s`<section class="interpretations"><h3>Planet readings</h3>${e.map((t,r)=>{let o=t.interpretation,i=L[A(t.name)]??"",d=C(t.degree??0,1);return s`<details class="interp-card" name="natal-planet-readings" ?open="${r===0}"><summary><span>${i} ${t.name}</span> <span class="interp-aside"><small>${t.sign??""} ${d}</small> ${Y()}</span></summary><div class="interp-body">${o.summary?s`<p class="interp-summary">${o.summary}</p>`:l} ${o.detailed?s`<p class="interp-detail">${o.detailed}</p>`:l} ${o.keywords?.length?s`<div class="interp-keywords">${o.keywords.map(c=>s`<span class="kw">${c}</span>`)}</div>`:l}</div></details>`})}</section>`}renderAspects(e,t){let r=new Map;for(let o of e){if(typeof o.longitude!="number")continue;let i=A(o.name);i&&r.set(i,o.longitude)}return t.map(o=>{let i=r.get(A(o.planet1)),d=r.get(A(o.planet2));if(i===void 0||d===void 0)return l;let c=T(P,P,Ke-18,this.toAngle(i)),m=T(P,P,Ke-18,this.toAngle(d)),g=Ge(o),h=_e[g]??"aspect-other",y=C(o.orb,1);return w`<line class=${`aspect ${h}`} x1=${c.x} y1=${c.y} x2=${m.x} y2=${m.y}><title>${o.planet1} ${g||""} ${o.planet2}${y?` (orb ${y}\xB0)`:""}</title></line>`})}};F.styles=[v,fe,je,x`.wrap{gap:var(--roxy-space-md,1rem);width:100%;display:grid}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);color:var(--roxy-primary,#0f172a);margin:0}.meta{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}svg{aspect-ratio:1;width:100%;max-width:560px;height:auto;margin:0 auto;display:block}.wheel-line{fill:none;stroke:var(--roxy-border,#e4e4e7)}.sign-glyph{fill:var(--roxy-secondary,#475569);font-size:14px;font-family:var(--roxy-font-sans)}.planet-glyph{fill:var(--roxy-accent,#f59e0b);font-size:14px;font-weight:600;font-family:var(--roxy-font-sans)}.planet-deg{fill:var(--roxy-fg,#0a0a0a);font-size:7px;font-family:var(--roxy-font-sans)}@container (width<=480px){.sign-glyph,.planet-glyph{font-size:18px}.planet-deg{font-size:10px}.house-num{font-size:12px}}.planet-deg .retro{fill:var(--roxy-danger,#dc2626)}.planet-leader{stroke:var(--roxy-accent,#f59e0b);stroke-width:.5px;opacity:.55}.house-num{fill:var(--roxy-muted,#71717a);font-size:9px;font-family:var(--roxy-font-sans)}.cusp-deg{fill:var(--roxy-muted,#71717a);font-size:6px;font-family:var(--roxy-font-sans)}.tick{stroke:var(--roxy-border,#e4e4e7)}.tick-major{stroke:var(--roxy-secondary,#475569)}.aspect{stroke-width:.8px;fill:none;opacity:.55}.aspect-trine,.aspect-sextile{stroke:var(--roxy-success,#16a34a)}.aspect-square,.aspect-opposition{stroke:var(--roxy-danger,#dc2626)}.aspect-conjunction{stroke:var(--roxy-accent-ink,#b45309)}.aspect-other{stroke:var(--roxy-muted,#71717a);opacity:.4}.angle-marker{fill:var(--roxy-accent-ink,#b45309);font-size:10px;font-weight:700;font-family:var(--roxy-font-sans);letter-spacing:.04em}.angle-tick{stroke:var(--roxy-accent-ink,#b45309);stroke-width:1.5px}.legend{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);gap:var(--roxy-space-md,1rem);flex-wrap:wrap;display:flex}.legend-swatch{vertical-align:middle;border-radius:50%;width:8px;height:8px;margin-right:4px;display:inline-block}.grid-scroll{-webkit-overflow-scrolling:touch;overflow-x:auto}table.aspect-grid{border-collapse:collapse;font-size:var(--roxy-text-xs,.75rem);margin:0 auto}table.aspect-grid th,table.aspect-grid td{text-align:center;border:1px solid var(--roxy-border,#e4e4e7);width:1.6rem;height:1.6rem;padding:0}table.aspect-grid th{color:var(--roxy-secondary,#475569);font-weight:var(--roxy-weight-bold,600)}table.aspect-grid td.cell{cursor:default}table.aspect-grid td.empty{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 18%, transparent)}table.aspect-grid td .asp{font-size:.95em;line-height:1}table.aspect-grid td.aspect-trine .asp,table.aspect-grid td.aspect-sextile .asp{color:var(--roxy-success,#16a34a)}table.aspect-grid td.aspect-square .asp,table.aspect-grid td.aspect-opposition .asp{color:var(--roxy-danger,#dc2626)}table.aspect-grid td.aspect-conjunction .asp{color:var(--roxy-accent-ink,#b45309)}table.aspect-grid td.aspect-other .asp{color:var(--roxy-muted,#71717a)}.details{margin-top:var(--roxy-space-md,1rem)}.pill-row{gap:var(--roxy-space-xs,.25rem);margin-bottom:var(--roxy-space-xs,.25rem);flex-wrap:wrap;display:flex}.pill{border-radius:var(--roxy-radius-sm,4px);font-size:var(--roxy-text-xs,.75rem);background:color-mix(in srgb, var(--roxy-fg,#0f172a) 8%, transparent);color:var(--roxy-fg,#0f172a);padding:2px 8px}.pill--success{background:color-mix(in srgb, var(--roxy-success,#16a34a) 15%, transparent);color:var(--roxy-success,#16a34a)}.pill--danger{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 15%, transparent);color:var(--roxy-danger,#dc2626)}.pill--muted{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 60%, transparent);color:var(--roxy-fg,#0a0a0a)}.summary{color:var(--roxy-fg,#0f172a);font-size:var(--roxy-text-sm,.875rem);margin:var(--roxy-space-md,1rem) 0}.em-grid{border-collapse:collapse;font-size:var(--roxy-text-xs,.75rem);width:100%}.em-grid th,.em-grid td{border:1px solid var(--roxy-border,#e4e4e7);text-align:center;vertical-align:middle;padding:3px 5px}.em-grid th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;letter-spacing:.04em}.em-grid th[scope=row]{text-align:left}.em-grid td{color:var(--roxy-accent,#f59e0b);min-width:1.4rem;font-size:.95em;line-height:1.4}.em-grid .em-total{color:var(--roxy-fg,#0a0a0a);font-weight:var(--roxy-weight-bold,600);background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 25%, transparent)}.interpretations{margin-top:var(--roxy-space-md,1rem)}.interpretations h3{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.06em;margin:0 0 var(--roxy-space-sm,.5rem);font-weight:600}.interp-card{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);margin-bottom:var(--roxy-space-xs,.25rem)}.interp-card summary{cursor:pointer;color:var(--roxy-fg,#0f172a);justify-content:space-between;align-items:center;gap:var(--roxy-space-md,1rem);font-weight:500;display:flex}.interp-aside{align-items:center;gap:.6em;display:inline-flex}.interp-aside small{color:var(--roxy-muted,#71717a);font-weight:400}.interp-body{margin-top:var(--roxy-space-xs,.25rem);color:var(--roxy-fg,#0f172a);font-size:var(--roxy-text-sm,.875rem)}.interp-keywords{flex-wrap:wrap;gap:.25rem;margin-top:.5rem;display:flex}.interp-keywords .kw{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 14%, transparent);color:var(--roxy-accent-ink,#b45309);font-size:var(--roxy-text-xs,.75rem);border-radius:9999px;padding:1px 8px}`],p([u({attribute:!1})],F.prototype,"data",2),p([u({type:String,attribute:"house-system",reflect:!0})],F.prototype,"houseSystem",2),p([N()],F.prototype,"view",2),F=p([b("roxy-natal-chart")],F);var ie=class extends f{constructor(){super();this.data=null;this.type="life-path";new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No numerology data</div>`;let t=Ja[this.type]??this.type;return"coreNumbers"in e?this.renderChart(e,t):"personalYear"in e?this.renderPersonalYear(e,t):this.renderNumberCard(e,t)}renderNumberCard(e,t){let r=e.meaning?.keywords??[];return s`<article class="card" aria-label="${t}"><div class="hero">${typeof e.number=="number"?s`<div class="numeral">${e.number}</div>`:l}<div><p class="label">${t}</p>${e.meaning?.title?s`<h2 class="title">${e.meaning.title}</h2>`:l}</div></div>${e.meaning?.description?s`<p class="meaning">${e.meaning.description}</p>`:l} ${e.calculation?s`<pre class="calc">${e.calculation}</pre>`:l} ${r.length>0?s`<div class="chips">${r.map(o=>s`<span>${o}</span>`)}</div>`:l} ${e.hasKarmicDebt&&e.karmicDebtNumber?s`<div class="karmic">Karmic debt ${e.karmicDebtNumber}. ${Xa(e.karmicDebtMeaning)}</div>`:l}</article>`}renderPersonalYear(e,t){return s`<article class="card" aria-label="${t}"><div class="hero">${typeof e.personalYear=="number"?s`<div class="numeral">${e.personalYear}</div>`:l}<div><p class="label">${t}</p>${e.theme?s`<h2 class="title">${e.theme}</h2>`:l}</div></div>${e.forecast?s`<p class="meaning">${e.forecast}</p>`:l} ${e.advice?s`<p>${e.advice}</p>`:l}</article>`}renderChart(e,t){let r=Object.entries(e.coreNumbers).filter(([,o])=>o!=null);return s`<article class="card" aria-label="${t}"><div><p class="label">${t}</p>${e.profile?.name?s`<h2 class="title">${e.profile.name}</h2>`:l}</div>${r.length>0?s`<div class="cores">${r.map(([o,i])=>s`<div class="item"><span>${j(o)}</span> <strong>${i.number??""}</strong></div>`)}</div>`:l}</article>`}};ie.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-md,1rem);display:grid}.hero{align-items:center;gap:var(--roxy-space-md,1rem);display:flex}.numeral{font-size:4rem;line-height:1;font-weight:var(--roxy-weight-bold,600);color:var(--roxy-accent-ink,#b45309);font-variant-numeric:tabular-nums}.label{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.06em;margin:0}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.meaning{color:var(--roxy-fg,#0a0a0a);margin:0}.calc{font-family:var(--roxy-font-mono);font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 30%, transparent);padding:var(--roxy-space-sm,.5rem);border-radius:var(--roxy-radius-sm,4px);white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.chips{gap:var(--roxy-space-xs,.25rem);flex-wrap:wrap;display:flex}.chips span{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 14%, transparent);border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);padding:2px 8px}.cores{gap:var(--roxy-space-sm,.5rem);border-top:1px solid var(--roxy-border,#e4e4e7);padding-top:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));display:grid}.cores .item{align-items:baseline;gap:var(--roxy-space-xs,.25rem);font-size:var(--roxy-text-sm,.875rem);display:flex}.cores .item span:first-child{color:var(--roxy-muted,#71717a);text-transform:capitalize}.cores .item strong{color:var(--roxy-accent-ink,#b45309);font-variant-numeric:tabular-nums;font-size:var(--roxy-text-base,1rem);font-weight:var(--roxy-weight-bold,600)}.karmic{background:color-mix(in srgb, var(--roxy-warning,#ea580c) 12%, transparent);border:1px solid color-mix(in srgb, var(--roxy-warning,#ea580c) 32%, transparent);padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);border-radius:var(--roxy-radius-md,8px);font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-fg,#0a0a0a)}`],p([u({attribute:!1})],ie.prototype,"data",2),p([u({type:String,reflect:!0})],ie.prototype,"type",2),ie=p([b("roxy-numerology-card")],ie);var Ja={"life-path":"Life Path",expression:"Expression","personal-year":"Personal Year",chart:"Numerology chart"};function Xa(n){return n?[n.description,n.challenge,n.resolution].filter(Boolean).join(" "):""}var le=class extends f{constructor(){super();this.data=null;this.detail="detailed";new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No panchang data</div>`;let t="sunrise"in e?e:null,r=[["Tithi",this.formatPart(e.tithi)],["Nakshatra",this.formatPart(e.nakshatra)],["Yoga",this.formatPart(e.yoga)],["Karana",this.formatPart(e.karana)]];t&&r.push(["Vara",this.formatPart(t.vara)]);let o=t?[["Moon sign",this.formatRashi(t.moonSign)],["Sun sign",this.formatRashi(t.sunSign)],["Sun nakshatra",this.formatSunNakshatra(t.sunNakshatra)],["Hora",this.formatHora(t.hora)]].filter(h=>!!h[1]):[],i=t?[["Brahma Muhurta",t.brahmaMuhurta],["Abhijit Muhurta",t.abhijitMuhurta],["Vijaya Muhurta",t.vijayaMuhurta],["Godhuli Muhurta",t.godhuliMuhurta],["Nishita Muhurta",t.nishitaMuhurta],["Pratah Sandhya",t.pratahSandhya],["Sayahna Sandhya",t.sayahnaSandhya]]:[],d=t?this.expandWindows("Amrit Kalam",t.amritKalam):[],c=t?[["Rahu Kaal",t.rahuKaal],["Yamaganda",t.yamaganda],["Gulika",t.gulika]]:[],m=t?[...this.expandWindows("Dur Muhurta",t.durMuhurta),...this.expandWindows("Varjyam",t.varjyam)]:[],g=t&&"transitions"in t?t.transitions:void 0;return s`<div class="wrap" aria-label="Panchang"><header class="head"><h2 class="title">Panchang</h2><span class="date">${t?xe(t.date):""}</span></header><table><tbody>${r.map(([h,y])=>s`<tr><th>${h}</th><td>${y}</td></tr>`)} ${t?.sunrise?s`<tr><th>Sunrise</th><td>${K(t.sunrise)}</td></tr>`:l} ${t?.sunset?s`<tr><th>Sunset</th><td>${K(t.sunset)}</td></tr>`:l} ${t?.moonrise?s`<tr><th>Moonrise</th><td>${K(t.moonrise)}</td></tr>`:l} ${t?.moonset?s`<tr><th>Moonset</th><td>${K(t.moonset)}</td></tr>`:l} ${o.map(([h,y])=>s`<tr><th>${h}</th><td>${y}</td></tr>`)}</tbody></table>${g?s`<div class="section">Next transitions</div><table><tbody>${this.renderTransitionRow("Tithi",g.tithi)} ${this.renderTransitionRow("Nakshatra",g.nakshatra)} ${this.renderTransitionRow("Yoga",g.yoga)} ${this.renderTransitionRow("Karana",g.karana)}</tbody></table>`:l} ${this.detail==="detailed"&&(i.some(h=>!!h[1])||d.length>0||c.some(h=>!!h[1])||m.length>0)?s`<div class="section">Auspicious muhurtas</div><table><tbody>${this.renderPeriodRows([...i.filter(h=>!!h[1]),...d])}</tbody></table><div class="section">Inauspicious periods</div><table><tbody>${this.renderPeriodRows([...c.filter(h=>!!h[1]),...m])}</tbody></table>`:l}</div>`}renderPeriodRows(e){return e.map(([t,r])=>{let o=Bt(r);return o?s`<tr><th>${t}</th><td>${o}</td></tr>`:l})}expandWindows(e,t){return!t||t.length===0?[]:t.map((r,o)=>[t.length>1?`${e} ${o+1}`:e,r])}renderTransitionRow(e,t){if(!t?.endsAt)return l;let r=K(t.endsAt),o=t.next?` \u2192 ${t.next}`:"";return s`<tr><th>${e}</th><td>ends ${r}${o}</td></tr>`}formatPart(e){if(!e)return"";if(typeof e=="string")return e;if(typeof e=="object"){let t=e;return[t.name,t.paksha?`(${t.paksha} paksha)`:"",t.lord?`\xB7 ${t.lord}`:"",t.phase].filter(Boolean).join(" ")}return String(e)}formatRashi(e){return e?.name?e.sanskritName&&e.sanskritName!==e.name?`${e.name} (${e.sanskritName})`:e.name:""}formatSunNakshatra(e){return e?.name?[e.name,typeof e.pada=="number"?`pada ${e.pada}`:"",e.lord?`\xB7 ${e.lord}`:""].filter(Boolean).join(" "):""}formatHora(e){if(!e?.current)return"";let t=Bt(e);return t?`${e.current} (${t})`:e.current}};le.styles=[v,x`.wrap{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);box-shadow:var(--roxy-shadow-sm);overflow:hidden}.head{padding:var(--roxy-space-md,1rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);justify-content:space-between;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.date{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem)}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem)}tbody tr:nth-child(odd){background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 24%, transparent)}th,td{padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);text-align:left;vertical-align:top}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:capitalize;width:38%}td{color:var(--roxy-fg,#0a0a0a);font-variant-numeric:tabular-nums}.section{border-top:1px solid var(--roxy-border,#e4e4e7);padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;letter-spacing:.06em}`],p([u({attribute:!1})],le.prototype,"data",2),p([u({type:String,reflect:!0})],le.prototype,"detail",2),le=p([b("roxy-panchang-table")],le);var Ut=[{key:"sthanaBala",label:"Sthana",color:"var(--roxy-info, #0284c7)"},{key:"digBala",label:"Dig",color:"var(--roxy-success, #16a34a)"},{key:"kalaBala",label:"Kala",color:"var(--roxy-warning, #ea580c)"},{key:"chestaBala",label:"Chesta",color:"var(--roxy-accent, #f59e0b)"},{key:"naisargikaBala",label:"Naisargika",color:"var(--roxy-secondary, #475569)"},{key:"drikBala",label:"Drik",color:"var(--roxy-danger, #dc2626)"}],Se=class extends f{constructor(){super();this.data=null;new $(this)}render(){if(!this.data?.planets?.length)return s`<div class="roxy-empty" role="status">No shadbala data</div>`;let e=[...this.data.planets].sort((t,r)=>t.relativeRank-r.relativeRank);return s`<div class="wrap" aria-label="Shadbala planetary strength"><div class="head"><h2 class="title">Shadbala</h2><p class="subtitle">${e.length} planets ranked by strength</p></div><div role="list" aria-label="Planet strength bars">${e.map(t=>this.renderPlanetRow(t))}</div><div class="legend" aria-label="Strength component legend">${Ut.map(t=>s`<div class="legend-row"><span class="legend-swatch" style="background:${t.color}" aria-hidden="true"></span> ${t.label}</div>`)}</div></div>`}renderPlanetRow(e){let t=L[A(e.planet)]??"",r=Ut.map(g=>Math.max(0,e[g.key])),o=r.reduce((g,h)=>g+h,0),i=typeof e.strengthRatio=="number"&&e.strengthRatio>=1,d=i?"adequacy-badge--adequate":"adequacy-badge--weak",c=i?"adequate":"weak",m=C(e.totalRupas,2)&&C(e.minRequired,2)?`${C(e.totalRupas,2)} / ${C(e.minRequired,2)} R`:"";return s`<div class="planet-row" role="listitem" aria-label="${e.planet} shadbala"><div class="planet-label"><span class="glyph" aria-hidden="true">${t}</span> ${e.planet} <span class="rank-badge" aria-label="rank ${e.relativeRank}">#${e.relativeRank}</span></div><div class="bar-wrap"><div class="bar" role="img" aria-label="Strength components for ${e.planet}">${o>0?Ut.map((g,h)=>{let y=r[h];if(y<=0)return l;let S=y/o*100;return s`<div class="bar-segment" style="flex-grow:${S};background:${g.color}" title="${g.label}: ${C(y,1)}"></div>`}):l}</div></div><div class="pills">${m?s`<span class="rupas-label">${m}</span>`:l} <span class="${`adequacy-badge ${d}`}">${c}</span></div></div>`}};Se.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:baseline;gap:var(--roxy-space-md,1rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.subtitle{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);margin:0}.planet-row{align-items:center;gap:var(--roxy-space-sm,.5rem);padding:var(--roxy-space-sm,.5rem) 0;border-bottom:1px solid var(--roxy-border,#e4e4e7);grid-template-columns:8rem 1fr auto;display:grid}.planet-row:last-of-type{border-bottom:none}.planet-label{font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600);align-items:center;gap:6px;display:flex}.glyph{font-size:1.2em;line-height:1}.bar-wrap{flex-direction:column;gap:4px;display:flex}.bar{border-radius:var(--roxy-radius-sm,4px);background:var(--roxy-border,#e4e4e7);height:12px;display:flex;overflow:hidden}.bar-segment{height:100%;transition:flex-grow var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1))}.pills{flex-direction:column;align-items:flex-end;gap:4px;display:flex}.rupas-label{font-variant-numeric:tabular-nums;font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);white-space:nowrap}.adequacy-badge{border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);padding:1px 6px;display:inline-block}.adequacy-badge--adequate{background:color-mix(in srgb, var(--roxy-success,#16a34a) 12%, transparent);color:var(--roxy-success-fg,#166534)}.adequacy-badge--weak{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 12%, transparent);color:var(--roxy-danger-fg,#991b1b)}.rank-badge{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-accent-ink,#b45309);font-weight:var(--roxy-weight-bold,600)}.legend{gap:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);border-top:1px solid var(--roxy-border,#e4e4e7);padding-top:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.legend-row{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);align-items:center;gap:6px;display:flex}.legend-swatch{border-radius:var(--roxy-radius-sm,4px);flex-shrink:0;width:10px;height:10px;display:inline-block}@container (width<=480px){.planet-row{grid-template-rows:auto auto;grid-template-columns:6rem 1fr}.pills{flex-direction:row;grid-column:1/-1;justify-content:flex-start;align-items:center}}`],p([u({attribute:!1})],Se.prototype,"data",2),Se=p([b("roxy-shadbala-table")],Se);var Xt=360,M=Xt/2,Wt=170,Za=154,Jt=124,qe=96,Ae=class extends f{constructor(){super();this.data=null;new $(this)}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No synastry data</div>`;let{person1:e,person2:t,compatibilityScore:r,analysis:o}=this.data,i=this.data.interAspects??[],d=e?.planets??[],c=t?.planets??[],m=typeof r=="number"?Math.round(r):void 0,g=o?.overall,h=o?.strengths??[],y=o?.challenges??[];return d.length>0&&c.length>0?s`<div class="wrap" aria-label="Synastry compatibility chart"><div class="head"><h2 class="title">Synastry</h2>${typeof m=="number"?s`<span class="score" aria-label="${`Score ${m} of 100`}">${m} / 100</span>`:l}</div><svg viewBox="0 0 ${Xt} ${Xt}" role="img" aria-label="Dual chart wheel comparing two natal charts"><title>Synastry dual wheel</title><circle class="wheel-line" cx="${M}" cy="${M}" r="${Wt}" stroke-width="1.5"/><circle class="wheel-line" cx="${M}" cy="${M}" r="${qe+14}" stroke-width="0.8"/><circle class="wheel-line" cx="${M}" cy="${M}" r="${qe-14}" stroke-width="0.6"/>${this.renderSpokes()} ${this.renderSigns()} ${this.renderInterAspectLines(d,c,i)} ${this.renderRing(d,Jt,"p1",1)} ${this.renderRing(c,qe,"p2",2)} ${this.renderAscendants(this.data)}</svg><div class="legend-row"><span><span class="swatch" style="background:var(--roxy-accent)"></span>Person 1</span> <span><span class="swatch" style="background:var(--roxy-info)"></span>Person 2</span> <span><span class="swatch" style="background:var(--roxy-success)"></span>harmonious</span> <span><span class="swatch" style="background:var(--roxy-danger)"></span>challenging</span></div>${g?s`<p class="summary">${g}</p>`:l} ${i.length>0?this.renderAspects(i):l} ${h.length>0||y.length>0?s`<div class="lists">${h.length?s`<div><h3>Strengths</h3><ul>${h.map(k=>s`<li>${k}</li>`)}</ul></div>`:l} ${y.length?s`<div><h3>Challenges</h3><ul>${y.map(k=>s`<li>${k}</li>`)}</ul></div>`:l}</div>`:l}</div>`:s`<div class="wrap" aria-label="Synastry compatibility chart"><div class="head"><h2 class="title">Synastry</h2>${typeof m=="number"?s`<span class="score" aria-label="${`Score ${m} of 100`}">${m} / 100</span>`:l}</div><div class="missing-planets" role="status">Synastry response missing planet positions. Pass <code>data</code> with <code>person1.planets</code> and <code>person2.planets</code> arrays from the natal-chart endpoint, or use the <code><roxy-data></code> fallback.</div>${g?s`<p class="summary">${g}</p>`:l} ${i.length>0?this.renderAspects(i):l} ${h.length>0||y.length>0?s`<div class="lists">${h.length?s`<div><h3>Strengths</h3><ul>${h.map(k=>s`<li>${k}</li>`)}</ul></div>`:l} ${y.length?s`<div><h3>Challenges</h3><ul>${y.map(k=>s`<li>${k}</li>`)}</ul></div>`:l}</div>`:l}</div>`}toAngle(e){return 180-e}renderSpokes(){return Array.from({length:12},(e,t)=>{let r=this.toAngle(t*30),o=T(M,M,qe-14,r),i=T(M,M,Wt,r);return w`<line class="wheel-line" x1=${o.x} y1=${o.y} x2=${i.x} y2=${i.y} stroke-width="0.6" />`})}renderSigns(){return _.map((e,t)=>{let r=this.toAngle(t*30+15),o=T(M,M,Za,r);return w`<text class="sign" x=${o.x} y=${o.y} text-anchor="middle" dominant-baseline="central">${G[e]}</text>`})}renderRing(e,t,r,o){return e.map(i=>{if(!Number.isFinite(i.longitude))return l;let d=this.toAngle(i.longitude),c=T(M,M,t,d),g=T(M,M,t+(o===1?-12:-10),d),h=L[A(i.name)]??i.name.slice(0,2),y=V(i.longitude),S=i.isRetrograde===!0,k=`${y.degree}\xB0${String(y.minute).padStart(2,"0")}'`,Ee=`${i.name}${S?" retrograde":""} - ${k} ${y.sign}`;return w`<g>
|
|
88
|
+
<text class=${r} x=${c.x} y=${c.y} text-anchor="middle" dominant-baseline="central"><title>${Ee}</title>${h}<tspan class="person-tag" dy="-0.55em" dx="0.15em">${o}</tspan></text>
|
|
89
|
+
<text class="planet-deg" x=${g.x} y=${g.y} text-anchor="middle" dominant-baseline="central">${y.degree}°${S?w`<tspan class="retro"> ℞</tspan>`:l}</text>
|
|
90
|
+
</g>`})}renderAscendants(e){let t=[],r=(o,i)=>{if(!o)return;let d=_.findIndex(S=>S.toLowerCase()===o.sign.toLowerCase());if(d===-1)return;let c=d*30+o.degree,m=this.toAngle(c),g=i===1?Jt+14:qe+14,h=T(M,M,g,m),y=T(M,M,Wt+14,m);t.push(w`<g>
|
|
82
91
|
<line class="asc-tick" x1=${h.x} y1=${h.y} x2=${y.x} y2=${y.y} />
|
|
83
92
|
<text class="asc-label" x=${y.x} y=${y.y} text-anchor="middle" dominant-baseline="central">Asc${i}</text>
|
|
84
|
-
</g>`)};return r(e.person1?.ascendant,1),r(e.person2?.ascendant,2),t}renderInterAspectLines(e,t,r){let o=(i,c)=>{let d=E(c);for(let p of i)if(E(p.name)===d&&typeof p.longitude=="number")return p.longitude};return r.map(i=>{let c=o(e,i.planet1),d=o(t,i.planet2);if(c===void 0||d===void 0)return l;let p=P(M,M,Ot-12,this.toAngle(c)),g=P(M,M,De+8,this.toAngle(d)),h=Me(i),y=Ye[h]??"aspect-other",S=C(i.orb,1);return k`<line class=${`aspect ${y}`} x1=${p.x} y1=${p.y} x2=${g.x} y2=${g.y}><title>${i.planet1} ${h} ${i.planet2}${S?` (orb ${S}\xB0)`:""}</title></line>`})}renderAspects(e){return s`<table><thead><tr><th>Planet 1</th><th>Planet 2</th><th>Aspect</th><th>Orb</th><th>Strength</th></tr></thead><tbody>${e.slice(0,12).map(t=>s`<tr><td>${t.planet1}</td><td>${t.planet2}</td><td>${Me(t)||""}</td><td class="orb">${C(t.orb,1)}</td><td>${fa(t.strength)}</td></tr>`)}</tbody></table>`}};ve.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:center;gap:var(--roxy-space-md,1rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.score{font-variant-numeric:tabular-nums;font-weight:var(--roxy-weight-bold,600);color:var(--roxy-accent-fg,#b45309);font-size:var(--roxy-text-xl,1.5rem)}svg{aspect-ratio:1;width:100%;max-width:560px;height:auto;margin:0 auto;display:block}.wheel-line{fill:none;stroke:var(--roxy-border,#e4e4e7)}.sign{fill:var(--roxy-secondary,#475569);font-size:14px}.p1{fill:var(--roxy-accent,#f59e0b);font-size:13px;font-weight:600}.p2{fill:var(--roxy-info,#0284c7);font-size:13px;font-weight:600}.person-tag{opacity:.85;font-size:7px;font-weight:700}.planet-deg{fill:var(--roxy-muted,#71717a);font-size:7px;font-family:var(--roxy-font-sans)}.planet-deg .retro{fill:var(--roxy-danger,#dc2626)}.asc-tick{stroke:var(--roxy-accent-fg,#b45309);stroke-width:1px;opacity:.75}.asc-label{fill:var(--roxy-accent-fg,#b45309);font-size:9px;font-weight:700;font-family:var(--roxy-font-sans);letter-spacing:.04em}.aspect{stroke-width:.8px;fill:none;opacity:.5}.aspect-trine,.aspect-sextile{stroke:var(--roxy-success,#16a34a)}.aspect-square,.aspect-opposition{stroke:var(--roxy-danger,#dc2626)}.aspect-conjunction{stroke:var(--roxy-accent-fg,#b45309)}.aspect-other{stroke:var(--roxy-muted,#71717a);opacity:.35}.legend-row{gap:var(--roxy-space-md,1rem);font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);margin-top:calc(var(--roxy-space-xs,.25rem) * -1);flex-wrap:wrap;display:flex}.legend-row .swatch{vertical-align:middle;border-radius:50%;width:8px;height:8px;margin-right:4px;display:inline-block}.summary{color:var(--roxy-fg,#0a0a0a);font-size:var(--roxy-text-base,1rem);margin:0}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem)}th,td{padding:var(--roxy-space-sm,.5rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);text-align:left}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.06em}td.orb{font-variant-numeric:tabular-nums;color:var(--roxy-muted,#71717a)}.lists{gap:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));display:grid}.lists h3{margin:0 0 var(--roxy-space-xs,.25rem) 0;font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.06em}.lists ul{padding-left:var(--roxy-space-md,1rem);font-size:var(--roxy-text-sm,.875rem);margin:0}.missing-planets{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 8%, transparent);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-md,1rem);color:var(--roxy-fg,#0a0a0a);font-size:var(--roxy-text-sm,.875rem);line-height:1.5}.missing-planets code{font-family:var(--roxy-font-mono,ui-monospace, SFMono-Regular, Menlo, monospace);background:color-mix(in srgb, var(--roxy-fg,#0a0a0a) 6%, transparent);border-radius:4px;padding:0 4px;font-size:.95em}`],m([u({attribute:!1})],ve.prototype,"data",2),ve=m([b("roxy-synastry-chart")],ve);function fa(n){return typeof n=="number"?Math.round(n).toString():""}var ne=class extends f{constructor(){super();this.data=null;this.flipped=!1;this.toggleFlip=()=>{this.flipped=!this.flipped};new $(this)}render(){let e=this.data;return e?"card"in e?this.renderDailyCard(e):this.renderFullCard(e):s`<div class="roxy-empty" role="status">No tarot data</div>`}renderDailyCard(e){let t=e.card,r=this.flipped!==!!t.reversed,o=t.keywords??[];return s`<article class="card" aria-label="${t.name??"Tarot card"}"><div class="image-wrap">${t.imageUrl?s`<img class="${`image ${r?"reversed":""}`}" src="${t.imageUrl}" alt="${t.name??"Tarot card"}" tabindex="0" @click="${this.toggleFlip}" @keydown="${i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),this.toggleFlip())}}">`:s`<div class="${`image ${r?"reversed":""}`}" style="aspect-ratio:0.6;display:flex;align-items:center;justify-content:center;color:var(--roxy-muted)">${t.name??"?"}</div>`}</div><div><div class="meta">${t.arcana?s`${t.arcana} arcana`:l} ${r?s`· reversed`:l}</div><h2 class="title">${t.name??"Tarot card"}</h2>${e.dailyMessage?s`<p class="message">${e.dailyMessage}</p>`:l} ${t.meaning?s`<p>${t.meaning}</p>`:l} ${o.length>0?s`<div class="chips">${o.map(i=>s`<span>${i}</span>`)}</div>`:l} <button class="flip" type="button" @click="${this.toggleFlip}" aria-pressed="${this.flipped?"true":"false"}">Flip card</button></div></article>`}renderFullCard(e){let t=this.flipped,r=t?e.reversed:e.upright,o=t?e.keywords?.reversed??[]:e.keywords?.upright??[];return s`<article class="card" aria-label="${e.name??"Tarot card"}"><div class="image-wrap">${e.imageUrl?s`<img class="${`image ${t?"reversed":""}`}" src="${e.imageUrl}" alt="${e.name??"Tarot card"}" tabindex="0" @click="${this.toggleFlip}" @keydown="${i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),this.toggleFlip())}}">`:s`<div class="${`image ${t?"reversed":""}`}" style="aspect-ratio:0.6;display:flex;align-items:center;justify-content:center;color:var(--roxy-muted)">${e.name??"?"}</div>`}</div><div><div class="meta">${e.arcana?s`${e.arcana} arcana`:l} ${e.number!==void 0&&e.number!==null?s`· ${e.number}`:l} ${t?s`· reversed`:l}</div><h2 class="title">${e.name??"Tarot card"}</h2>${r?.description?s`<p>${r.description}</p>`:l} ${o.length>0?s`<div class="chips">${o.map(i=>s`<span>${i}</span>`)}</div>`:l} <button class="flip" type="button" @click="${this.toggleFlip}" aria-pressed="${this.flipped?"true":"false"}">Flip card</button></div></article>`}};ne.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-lg,1.5rem);grid-template-columns:minmax(0,9rem) 1fr;align-items:start;display:grid}@container (width<=480px){.card{grid-template-columns:1fr}}.image-wrap{perspective:800px}.image{border-radius:var(--roxy-radius-md,8px);background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 60%, transparent);width:100%;height:auto;transition:transform var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));cursor:pointer;display:block}.image.reversed{transform:rotate(180deg)}.image:focus-visible{outline:2px solid var(--roxy-ring,#f59e0b66);outline-offset:2px}.title{font-size:var(--roxy-text-xl,1.5rem);font-weight:var(--roxy-weight-bold,600);letter-spacing:var(--roxy-tracking-tight);margin:0}.meta{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);text-transform:uppercase;letter-spacing:.06em;margin-bottom:var(--roxy-space-sm,.5rem)}.message{color:var(--roxy-fg,#0a0a0a);margin:var(--roxy-space-sm,.5rem) 0 var(--roxy-space-md,1rem)}.chips{gap:var(--roxy-space-xs,.25rem);margin-top:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.chips span{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 14%, transparent);border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);padding:2px 8px}.flip{margin-top:var(--roxy-space-sm,.5rem);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);font-family:inherit;font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-secondary,#475569);cursor:pointer;transition:transform var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));background:0 0;padding:4px 12px}.flip:hover{transform:scale(1.02)}`],m([u({attribute:!1})],ne.prototype,"data",2),m([R()],ne.prototype,"flipped",2),ne=m([b("roxy-tarot-card")],ne);var ie=class extends f{constructor(){super();this.data=null;this.spread="three-card";new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No tarot spread</div>`;let t="answer"in e,r="cards"in e&&!("spread"in e),o=r?[]:"positions"in e?e.positions??[]:[],i=r&&"cards"in e?e.cards:[],c=t?e.answer:void 0,d=t?e.strength:void 0,p="spread"in e?e.spread:this.spread.replace(/-/g," "),g="question"in e?e.question:void 0,h="summary"in e?e.summary:void 0,y=t?e.interpretation:void 0,S=c?c.toLowerCase().replace(/[^a-z]/g,""):"";return s`<article class="wrap" aria-label="Tarot spread"><header class="head"><h2 class="title">${p}</h2>${g?s`<span class="question">"${g}"</span>`:l}</header>${t?s`<div><span class="${`answer ${S}`}">${c}</span> ${d?s`<small>· ${d}</small>`:l}</div>`:l} ${o.length>0?s`<div class="grid">${o.map(w=>s`<div class="card"><p class="label">${w.name??""}</p><div class="image">${w.card?.imageUrl?s`<img src="${w.card.imageUrl}" alt="${w.card.name??"tarot card"}" class="${w.card.reversed?"reversed":""}">`:s`${w.card?.name??"?"}`}</div><p class="name">${w.card?.name??""} ${w.card?.reversed?s`<small>(reversed)</small>`:l}</p>${w.interpretation?s`<p class="interp">${w.interpretation}</p>`:l}</div>`)}</div>`:l} ${i.length>0?s`<div class="grid">${i.map(w=>s`<div class="card"><div class="image">${w.imageUrl?s`<img src="${w.imageUrl}" alt="${w.name??"tarot card"}" class="${w.reversed?"reversed":""}">`:s`${w.name??"?"}`}</div><p class="name">${w.name??""} ${w.reversed?s`<small>(reversed)</small>`:l}</p>${w.meaning?s`<p class="interp">${w.meaning}</p>`:l}</div>`)}</div>`:l} ${h?s`<p class="reading">${h}</p>`:l} ${y?s`<p class="reading">${y}</p>`:l}</article>`}};ie.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;gap:var(--roxy-space-md,1rem);flex-wrap:wrap;align-items:baseline;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);text-transform:capitalize;margin:0}.question{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);font-style:italic}.answer{border-radius:var(--roxy-radius-full,9999px);font-weight:var(--roxy-weight-bold,600);font-size:var(--roxy-text-base,1rem);text-transform:uppercase;letter-spacing:.06em;padding:4px 14px;display:inline-block}.answer.yes{background:color-mix(in srgb, var(--roxy-success,#16a34a) 16%, transparent);color:var(--roxy-success-fg,#166534)}.answer.no{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 16%, transparent);color:var(--roxy-danger-fg,#991b1b)}.answer.maybe{background:color-mix(in srgb, var(--roxy-warning,#ea580c) 16%, transparent);color:var(--roxy-warning-fg,#9a3412)}.grid{gap:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));display:grid}.card{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-sm,.5rem);background:var(--roxy-bg,#fff);gap:var(--roxy-space-xs,.25rem);display:grid}.label{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.06em;margin:0}.image{aspect-ratio:.6;background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 60%, transparent);border-radius:var(--roxy-radius-sm,4px);width:100%;font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);justify-content:center;align-items:center;display:flex;overflow:hidden}.image img{object-fit:cover;width:100%;height:100%;transition:transform var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1))}.image img.reversed{transform:rotate(180deg)}.name{font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600);margin:0}.interp{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-secondary,#475569);margin:0}.reading{color:var(--roxy-fg,#0a0a0a);margin:0}`],m([u({attribute:!1})],ie.prototype,"data",2),m([u({type:String,reflect:!0})],ie.prototype,"spread",2),ie=m([b("roxy-tarot-spread")],ie);var le=class extends f{constructor(){super();this.data=null;this.tab="positions";new $(this)}render(){if(!this.data?.transitPlanets?.length)return s`<div class="roxy-empty" role="status">No transits data</div>`;let{transitDate:e,transitTime:t,transitPlanets:r,transitAspects:o,summary:i}=this.data,c=[ot(e),I(t)].filter(Boolean).join(" "),d=o?.length??0,p=this.tab;return s`<div class="wrap" aria-label="Transits"><div class="head"><h2 class="title">Transits</h2>${c?s`<p class="subtitle">${c}</p>`:l}</div>${d>0?s`${Ne({items:[{id:"positions",label:"Positions"},{id:"aspects",label:`Aspects (${d})`}],active:p,onSelect:g=>{this.tab=g},label:"Transit views",idPrefix:"transits",controls:!0})}<div id="transits-panel-${p}" role="tabpanel" aria-labelledby="transits-tab-${p}">${p==="positions"?s`<div class="overflow-scroll">${this.renderPlanetsTable(r)}</div>`:s`${i?this.renderSummaryPills(i):l}<div class="overflow-scroll">${this.renderAspectsList(o??[])}</div>`}</div>`:s`<div class="overflow-scroll">${this.renderPlanetsTable(r)}</div>`}</div>`}renderSummaryPills(e){return s`<div class="summary-pills" role="region" aria-label="Aspect summary"><span class="pill pill--muted">Total: ${e.totalAspects} </span><span class="pill pill--success">Harmonious: ${e.harmonious} </span><span class="pill pill--danger">Challenging: ${e.challenging} </span><span class="pill pill--muted">Neutral: ${e.neutral}</span></div>`}renderPlanetsTable(e){return s`<table class="planets-table"><thead><tr><th scope="col">Planet</th><th scope="col">Sign</th><th scope="col">Degree</th><th scope="col">Speed</th></tr></thead><tbody>${e.map(t=>{let r=N[E(t.name)]??"",o=G[E(t.sign)]??"",i=t.speed>=0?"\u2191":"\u2193";return s`<tr><td><div class="planet-cell"><span class="glyph" aria-hidden="true">${r}</span> ${t.name} ${t.isRetrograde?s`<span class="retro-badge" aria-label="retrograde">R</span>`:l}</div></td><td><div class="planet-cell"><span class="glyph" aria-hidden="true">${o}</span> ${t.sign}</div></td><td class="num">${C(t.degree,2)}</td><td class="speed"><span class="speed-arrow" aria-hidden="true">${i}</span> ${C(Math.abs(t.speed),4)}</td></tr>`})}</tbody></table>`}renderAspectsList(e){return s`<div role="list" aria-label="Transit aspects">${e.map((t,r)=>{let o=N[E(t.transitPlanet)]??"",i=N[E(t.natalPlanet)]??"",c=(t.nature??"neutral").toLowerCase(),d=t.interpretation,p=(t.type??"").toLowerCase(),g=t.isApplying?"Applying":"Separating";return s`<details class="aspect-card" role="listitem" name="transit-aspects" ?open="${r===0}"><summary><span aria-hidden="true">${o}</span> ${t.transitPlanet} <span class="nature-badge ${c}">${p}</span> <span aria-hidden="true">${i}</span> ${t.natalPlanet} <span class="meta">${g} · orb ${C(t.orb,2)}° · strength ${C(t.strength,1)} </span>${mt()}</summary><div class="interp-body">${d?.summary?s`<p>${d.summary}</p>`:l} ${d?.impact?s`<p><strong>Impact:</strong> ${d.impact}</p>`:l} ${d?.timing?s`<p><strong>Timing:</strong> ${d.timing}</p>`:l} ${d?.guidance?s`<p><strong>Guidance:</strong> ${d.guidance}</p>`:l} ${d?.keywords?.length?s`<div class="interp-keywords">${d.keywords.map(h=>s`<span class="kw">${h}</span>`)}</div>`:l}</div></details>`})}</div>`}};le.styles=[v,ge,ht,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:baseline;gap:var(--roxy-space-md,1rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.subtitle{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);margin:0}.summary-pills{gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.pill{padding:2px var(--roxy-space-sm,.5rem);border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);border:1px solid;align-items:center;gap:4px;display:inline-flex}.pill--muted{color:var(--roxy-fg,#0a0a0a);background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 60%, transparent)}.pill--success{color:var(--roxy-success-fg,#166534);background:color-mix(in srgb, var(--roxy-success,#16a34a) 10%, transparent)}.pill--danger{color:var(--roxy-danger-fg,#991b1b);background:color-mix(in srgb, var(--roxy-danger,#dc2626) 10%, transparent)}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem)}th,td{padding:var(--roxy-space-sm,.5rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);text-align:left}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.06em}.section-label{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.06em;font-weight:var(--roxy-weight-bold,600);margin:0 0 var(--roxy-space-xs,.25rem) 0}.glyph{margin-right:2px;font-size:1.1em;line-height:1}.planet-cell{white-space:nowrap;align-items:center;gap:4px;display:flex}.retro-badge{border-radius:var(--roxy-radius-sm,4px);background:color-mix(in srgb, var(--roxy-warning,#ea580c) 12%, transparent);color:var(--roxy-warning-fg,#9a3412);font-size:.7em;font-weight:var(--roxy-weight-bold,600);vertical-align:middle;margin-left:2px;padding:1px 4px;display:inline-block}.speed{font-variant-numeric:tabular-nums;color:var(--roxy-muted,#71717a);white-space:nowrap}.speed-arrow{font-size:.85em}td.num{font-variant-numeric:tabular-nums;color:var(--roxy-muted,#71717a)}.overflow-scroll{-webkit-overflow-scrolling:touch;overflow-x:auto}.aspect-card{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);margin-bottom:var(--roxy-space-xs,.25rem)}.aspect-card summary{cursor:pointer;color:var(--roxy-fg,#0a0a0a);flex-wrap:wrap;align-items:center;gap:.5em;font-weight:500;display:flex}.aspect-card summary .meta{color:var(--roxy-muted,#71717a);font-weight:400;font-size:var(--roxy-text-xs,.75rem);font-variant-numeric:tabular-nums;margin-left:auto}.aspect-card .interp-body{margin-top:var(--roxy-space-xs,.25rem);color:var(--roxy-fg,#0a0a0a);font-size:var(--roxy-text-sm,.875rem);line-height:1.45}.aspect-card .interp-body p{margin:0 0 var(--roxy-space-xs,.25rem)}.interp-keywords{flex-wrap:wrap;gap:.25rem;margin-top:.5rem;display:flex}.interp-keywords .kw{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 14%, transparent);color:var(--roxy-accent-fg,#b45309);font-size:var(--roxy-text-xs,.75rem);border-radius:9999px;padding:1px 8px}.nature-badge{font-size:var(--roxy-text-xs,.75rem);border-radius:9999px;padding:1px 8px;font-weight:600;display:inline-block}.nature-badge.harmonious{background:color-mix(in srgb, var(--roxy-success,#16a34a) 12%, transparent);color:var(--roxy-success-fg,#166534)}.nature-badge.challenging{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 12%, transparent);color:var(--roxy-danger-fg,#991b1b)}.nature-badge.neutral{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 60%, transparent);color:var(--roxy-fg,#0a0a0a)}`],m([u({attribute:!1})],le.prototype,"data",2),m([R()],le.prototype,"tab",2),le=m([b("roxy-transits-table")],le);var de=class extends f{constructor(){super();this.data=null;this.chartStyle="north";this.setStyle=e=>{this.chartStyle=e};new $(this)}viewModel(){return this.data?.meta?lt(this.data.meta,"D1 Rashi"):null}render(){let e=this.viewModel();return e?s`<div class="wrap"><div class="header"><h2 class="title">Vedic kundli</h2>${ct(this.chartStyle,this.setStyle)}</div><svg viewBox="0 0 400 400" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Vedic birth chart with twelve sign houses"><title>Vedic kundli</title>${dt(e,this.chartStyle)}</svg></div>`:s`<div class="roxy-empty" role="status">No kundli data</div>`}};de.styles=[v,pt,ge],m([u({attribute:!1})],de.prototype,"data",2),m([u({type:String,reflect:!0,attribute:"chart-style"})],de.prototype,"chartStyle",2),de=m([b("roxy-vedic-kundli")],de);var ba=["Lagna","Sun","Moon","Mars","Mercury","Jupiter","Venus","Saturn","Rahu","Ketu"],$e=class extends f{constructor(){super();this.data=null;new $(this)}orderedRows(){let e=this.data?.meta??{},t=new Set,r=[];for(let o of ba){let i=e[o];i&&(r.push([o,i]),t.add(o))}for(let[o,i]of Object.entries(e))t.has(o)||r.push([o,i]);return r}render(){if(!this.data?.meta)return s`<div class="roxy-empty" role="status">No chart data</div>`;let e=this.orderedRows();return s`<div class="wrap" aria-label="Vedic planetary positions" tabindex="0"><header class="head"><h2 class="title">Planetary positions</h2></header><table role="table"><thead><tr><th scope="col">Graha</th><th scope="col">Rashi</th><th scope="col">Degree</th><th scope="col">Nakshatra</th><th scope="col">Pada</th><th scope="col">Nak. lord</th><th scope="col">House</th><th scope="col">Avastha</th><th scope="col">Retro</th></tr></thead><tbody>${e.map(([t,r])=>{let o=(r.graha??t)==="Lagna",i=N[E(r.graha??t)]??"",c=G[E(r.rashi??"")]??"";return s`<tr class="${o?"lagna":""}"><td class="graha">${i?s`<span class="glyph">${i}</span>`:l}${r.graha??t}</td><td>${c?s`<span class="glyph">${c}</span>`:l}${r.rashi??""}</td><td class="num">${typeof r.longitude=="number"?nt(r.longitude):""}</td><td>${r.nakshatra?.name??""}</td><td class="num">${r.nakshatra?.pada??""}</td><td>${r.nakshatra?.lord??""}</td><td class="num">${typeof r.house=="number"?r.house:""}</td><td>${r.awastha??""}</td><td>${r.isRetrograde?s`<span class="retro">R</span>`:l}</td></tr>`})}</tbody></table></div>`}};$e.styles=[v,x`.wrap{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);box-shadow:var(--roxy-shadow-sm);overflow:auto}.head{padding:var(--roxy-space-md,1rem);border-bottom:1px solid var(--roxy-border,#e4e4e7)}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem);min-width:620px}thead{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 20%, transparent)}th,td{padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);text-align:left;white-space:nowrap}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.04em}tbody tr{border-top:1px solid var(--roxy-border,#e4e4e7)}tbody tr.lagna{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 10%, transparent)}td.graha{font-weight:var(--roxy-weight-bold,600);color:var(--roxy-fg,#0a0a0a)}.glyph{color:var(--roxy-muted,#71717a);margin-right:.4em}tbody tr.lagna .glyph{color:var(--roxy-accent-fg,#b45309)}.retro{color:var(--roxy-warning-fg,#9a3412);font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600)}.num{font-variant-numeric:tabular-nums}`],m([u({attribute:!1})],$e.prototype,"data",2),$e=m([b("roxy-vedic-planets-table")],$e);var we=class extends f{constructor(){super();this.data=null;new $(this)}rows(){let e=this.data;if(!e)return[];let t=(e.planets??[]).map(r=>({name:r.name,sign:r.sign,longitude:r.longitude,house:r.house,speed:r.speed,isRetrograde:r.isRetrograde}));for(let[r,o]of[["Ascendant",e.ascendant],["Midheaven",e.midheaven],["Part of Fortune",e.partOfFortune],["Vertex",e.vertex]])o&&t.push({name:r,sign:o.sign,longitude:o.longitude,isPoint:!0});return t}render(){if(!this.data?.planets)return s`<div class="roxy-empty" role="status">No chart data</div>`;let e=this.rows();return s`<div class="wrap" aria-label="Western planetary positions" tabindex="0"><header class="head"><h2 class="title">Planetary positions</h2></header><table role="table"><thead><tr><th scope="col">Body</th><th scope="col">Sign</th><th scope="col">Degree</th><th scope="col">House</th><th scope="col">Motion</th></tr></thead><tbody>${e.map(t=>{let r=N[E(t.name)]??"",o=G[E(t.sign??"")]??"",i=typeof t.speed=="number"?C(t.speed,3):"";return s`<tr class="${t.isPoint?"point":""}"><td class="body">${r?s`<span class="glyph">${r}</span>`:l}${t.name}</td><td>${o?s`<span class="glyph">${o}</span>`:l}${t.sign??""}</td><td class="num">${typeof t.longitude=="number"?nt(t.longitude):""}</td><td class="num">${typeof t.house=="number"?t.house:""}</td><td class="num">${i?s`${i}°/day`:l} ${t.isRetrograde?s`<span class="retro">℞</span>`:l}</td></tr>`})}</tbody></table></div>`}};we.styles=[v,x`.wrap{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);box-shadow:var(--roxy-shadow-sm);overflow:auto}.head{padding:var(--roxy-space-md,1rem);border-bottom:1px solid var(--roxy-border,#e4e4e7)}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem);min-width:460px}thead{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 20%, transparent)}th,td{padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);text-align:left;white-space:nowrap}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.04em}tbody tr{border-top:1px solid var(--roxy-border,#e4e4e7)}tbody tr.point{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 8%, transparent)}td.body{font-weight:var(--roxy-weight-bold,600);color:var(--roxy-fg,#0a0a0a)}.glyph{color:var(--roxy-muted,#71717a);margin-right:.4em}.retro{color:var(--roxy-danger,#dc2626);font-weight:var(--roxy-weight-bold,600)}.num{font-variant-numeric:tabular-nums}`],m([u({attribute:!1})],we.prototype,"data",2),we=m([b("roxy-western-planets-table")],we);var ce=class extends f{constructor(){super();this.data=null;this.filter="";this.handleInput=e=>{this.filter=e.target.value};new $(this)}renderQualityChip(e){let t=`quality-chip quality-${e}`;return s`<span class="${t}">${e}</span>`}renderDetailCard(e){return s`<div class="detail-card"><p class="detail-name">${e.name} ${e.quality?this.renderQualityChip(e.quality):l}</p>${e.description?s`<p class="description">${e.description}</p>`:l} ${e.result?s`<details><summary>Effects</summary><div class="result-body">${e.result}</div></details>`:l}</div>`}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No yoga data</div>`;let e=this.data,t=this.filter.toLowerCase();if("description"in e&&typeof e.description=="string"){let r=e;return s`<div class="wrap">${this.renderDetailCard(r)}</div>`}if("yogas"in e&&Array.isArray(e.yogas)){let r=e.yogas;if(r.length>0&&"description"in r[0]){let p=r,g=t?p.filter(y=>y.name.toLowerCase().includes(t)):p,h=e.total;return s`<div class="wrap"><div class="head"><h2 class="title">Yoga catalog</h2>${h!==void 0?s`<span class="count">${h} total</span>`:l}</div><div class="search-wrap"><input class="search" type="search" placeholder="Filter yogas..." aria-label="Filter yoga list by name" .value="${this.filter}" @input="${this.handleInput}"></div><div class="detail-grid" role="region" aria-live="polite" aria-label="Yoga results">${g.length>0?g.map(y=>this.renderDetailCard(y)):s`<p class="no-results">No yogas match your search.</p>`}</div></div>`}let i=r,c=t?i.filter(p=>p.name.toLowerCase().includes(t)):i,d=e.total;return s`<div class="wrap"><div class="head"><h2 class="title">Yoga catalog</h2>${d!==void 0?s`<span class="count">${d} total</span>`:l}</div><div class="search-wrap"><input class="search" type="search" placeholder="Filter yogas..." aria-label="Filter yoga list by name" .value="${this.filter}" @input="${this.handleInput}"></div><div class="grid" role="region" aria-live="polite" aria-label="Yoga results">${c.length>0?c.map(p=>s`<div class="yoga-chip">${p.name} <span class="yoga-id">${p.id}</span></div>`):s`<p class="no-results">No yogas match your search.</p>`}</div></div>`}return s`<div class="roxy-empty" role="status">No yoga data</div>`}};ce.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:baseline;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.count{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a)}.search-wrap{align-items:center;gap:var(--roxy-space-sm,.5rem);display:flex}.search{width:100%;max-width:280px;font-size:var(--roxy-text-sm,.875rem);font-family:var(--roxy-font-sans);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);color:var(--roxy-fg,#0a0a0a);outline:none;padding:.35em .75em}.search::placeholder{color:var(--roxy-fg,#0a0a0a);opacity:.65}.search:focus{border-color:var(--roxy-accent,#f59e0b);box-shadow:0 0 0 2px color-mix(in srgb, var(--roxy-accent,#f59e0b) 30%, transparent)}.grid{gap:var(--roxy-space-sm,.5rem);grid-template-columns:repeat(auto-fill,minmax(180px,1fr));display:grid}.yoga-chip{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);font-size:var(--roxy-text-sm,.875rem);background:var(--roxy-bg,#fff);color:var(--roxy-fg,#0a0a0a);word-break:break-word;padding:.4em .8em}.yoga-chip .yoga-id{color:var(--roxy-fg,#0a0a0a);opacity:.75;margin-top:.15em;font-size:.7em;display:block}.detail-card{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-md,1rem);background:var(--roxy-bg,#fff);gap:var(--roxy-space-sm,.5rem);display:grid}.detail-name{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);align-items:center;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;margin:0;display:flex}.quality-chip{font-size:var(--roxy-text-xs,.75rem);border-radius:999px;padding:.15em .6em;font-weight:600;display:inline-block}.quality-Positive{background:color-mix(in srgb, var(--roxy-success,#22c55e) 18%, transparent);color:var(--roxy-success-fg,#15803d);border:1px solid color-mix(in srgb, var(--roxy-success,#22c55e) 40%, transparent)}.quality-Negative{background:color-mix(in srgb, var(--roxy-danger,#ef4444) 18%, transparent);color:var(--roxy-danger-fg,#b91c1c);border:1px solid color-mix(in srgb, var(--roxy-danger,#ef4444) 40%, transparent)}.quality-Both{background:color-mix(in srgb, var(--roxy-warning,#f59e0b) 18%, transparent);color:var(--roxy-warning-fg,#b45309);border:1px solid color-mix(in srgb, var(--roxy-warning,#f59e0b) 40%, transparent)}.description{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);line-height:var(--roxy-leading-normal,1.5);margin:0}details{font-size:var(--roxy-text-sm,.875rem)}details summary{cursor:pointer;color:var(--roxy-accent-fg,#b45309);align-items:center;gap:.4em;padding:.25em 0;font-weight:500;list-style:none;display:flex}details summary:before{content:"+";font-size:1.1em;line-height:1}details[open] summary:before{content:"-"}details .result-body{padding-top:var(--roxy-space-xs,.25rem);color:var(--roxy-fg,#0a0a0a);line-height:var(--roxy-leading-normal,1.5)}.no-results{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);padding:var(--roxy-space-md,1rem) 0;text-align:center}.detail-grid{gap:var(--roxy-space-sm,.5rem);display:grid}`],m([u({attribute:!1})],ce.prototype,"data",2),m([R()],ce.prototype,"filter",2),ce=m([b("roxy-yoga-list")],ce);var gt=[{pascal:"RoxyNatalChart",tag:"roxy-natal-chart",slug:"natal-chart",heading:"Natal chart",description:"Western natal chart wheel for /astrology/natal-chart responses",docsLabel:"Western",endpointLabel:"POST /astrology/natal-chart",docsSummary:"Natal chart wheel with planet glyphs and aspect lines",topic:"Astrology"},{pascal:"RoxySynastryChart",tag:"roxy-synastry-chart",slug:"synastry-chart",heading:"Synastry",description:"Dual-wheel synastry chart with inter-aspects table",docsLabel:"Western",endpointLabel:"POST /astrology/synastry",docsSummary:"Dual-wheel synastry with inter-aspects table",topic:"Astrology"},{pascal:"RoxyWesternPlanetsTable",tag:"roxy-western-planets-table",slug:"western-planets-table",heading:"Western planets",description:"Western planetary positions table with sign, degree, house, and motion plus the chart angles",docsLabel:"Western",endpointLabel:"POST /astrology/natal-chart",docsSummary:"Sign, degree, house, motion columns plus ASC, MC, PoF, Vertex",topic:"Astrology"},{pascal:"RoxyTransitsTable",tag:"roxy-transits-table",slug:"transits-table",heading:"Transits",description:"Live planet positions plus aspects to a natal chart",docsLabel:"Western",endpointLabel:"POST /astrology/transits",docsSummary:"Transit planet positions plus optional aspects to a natal chart",topic:"Astrology"},{pascal:"RoxyMoonPhase",tag:"roxy-moon-phase",slug:"moon-phase",heading:"Moon phase",description:"Moon phase card and calendar",docsLabel:"Western",endpointLabel:"GET /astrology/moon-phase/{current,upcoming,calendar/...}",docsSummary:"Moon phase card and calendar",topic:"Astrology"},{pascal:"RoxyHoroscopeCard",tag:"roxy-horoscope-card",slug:"horoscope-card",heading:"Daily horoscope",description:"Daily, weekly, or monthly horoscope card for /astrology/horoscope/...",docsLabel:"Western",endpointLabel:"GET /astrology/horoscope/{sign}/{daily,weekly,monthly}",docsSummary:"Daily, weekly, or monthly horoscope card",topic:"Astrology"},{pascal:"RoxyCompatibilityCard",tag:"roxy-compatibility-card",slug:"compatibility-card",heading:"Compatibility score",description:"Cross-domain compatibility score card",docsLabel:"Cross",endpointLabel:"POST /astrology/compatibility-score, /numerology/compatibility, /biorhythm/compatibility",docsSummary:"Score card with category breakdown",topic:"Astrology"},{pascal:"RoxyVedicKundli",tag:"roxy-vedic-kundli",slug:"vedic-kundli",heading:"Vedic kundli",description:"South, North, or East Indian Vedic kundli for /vedic-astrology/birth-chart with per-planet degree and nakshatra detail",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/birth-chart",docsSummary:"South, North, or East Indian kundli with degree detail",topic:"Vedic"},{pascal:"RoxyDivisionalChart",tag:"roxy-divisional-chart",slug:"divisional-chart",heading:"Divisional chart",description:"D2 to D60 varga chart wheel with Vargottama markers",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/divisional-chart",docsSummary:"Generic divisional varga wheel from D2 Hora to D60 Shashtiamsa",topic:"Vedic"},{pascal:"RoxyKpChart",tag:"roxy-kp-chart",slug:"kp-chart",heading:"KP chart",description:"Full KP chart with Ascendant, Placidus cusps, and planets in tabbed stellar-hierarchy tables",docsLabel:"Vedic (KP)",endpointLabel:"POST /vedic-astrology/kp/chart",docsSummary:"Ascendant, cusps, and planets with KP stellar hierarchy",topic:"Vedic"},{pascal:"RoxyVedicPlanetsTable",tag:"roxy-vedic-planets-table",slug:"vedic-planets-table",heading:"Vedic planets",description:"Vedic planetary positions table with degree, nakshatra, pada, nakshatra lord, bhava, and avastha",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/birth-chart",docsSummary:"Degree, nakshatra, pada, lord, bhava, avastha columns",topic:"Vedic"},{pascal:"RoxyKpPlanetsTable",tag:"roxy-kp-planets-table",slug:"kp-planets-table",heading:"KP planets",description:"KP planets table with sub-lord and sub-sub-lord columns",docsLabel:"Vedic (KP)",endpointLabel:"POST /vedic-astrology/kp/planets",docsSummary:"Sub-lord and sub-sub-lord columns",topic:"Vedic"},{pascal:"RoxyKpRulingPlanets",tag:"roxy-kp-ruling-planets",slug:"kp-ruling-planets",heading:"KP ruling planets",description:"KP ruling planets with day lord, Moon and Lagna stellar hierarchies, and house significators",docsLabel:"Vedic (KP)",endpointLabel:"POST /vedic-astrology/kp/ruling-planets",docsSummary:"Day lord, Moon/Lagna hierarchies, ruling planets, significators",topic:"Vedic"},{pascal:"RoxyAshtakavargaGrid",tag:"roxy-ashtakavarga-grid",slug:"ashtakavarga-grid",heading:"Ashtakavarga",description:"Sarva and Bhinna ashtakavarga heatmap with bindu scores",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/ashtakavarga",docsSummary:"Sarva, Bhinna, and Shodhya Pinda views in a tabbed heatmap",topic:"Vedic"},{pascal:"RoxyShadbalaTable",tag:"roxy-shadbala-table",slug:"shadbala-table",heading:"Shadbala",description:"Six-fold planetary strength with adequacy badge per planet",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/shadbala",docsSummary:"Six-fold planetary strength bar plus rupas and adequacy badge",topic:"Vedic"},{pascal:"RoxyDashaTimeline",tag:"roxy-dasha-timeline",slug:"dasha-timeline",heading:"Vimshottari dasha",description:"Vimshottari dasha timeline with active mahadasha highlighted",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/dasha/{current,major,sub/...}",docsSummary:"Vimshottari mahadasha + antardasha + pratyantardasha",topic:"Vedic"},{pascal:"RoxyGunaMilan",tag:"roxy-guna-milan",slug:"guna-milan",heading:"Guna milan",description:"36-point Ashtakoota matrimonial compatibility breakdown",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/compatibility",docsSummary:"36-point Ashtakoota with eight sub-scores",topic:"Vedic"},{pascal:"RoxyPanchangTable",tag:"roxy-panchang-table",slug:"panchang-table",heading:"Panchang",description:"Panchang muhurta table with auspicious and inauspicious periods",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/panchang/{basic,detailed}",docsSummary:"15+ muhurtas in detailed mode",topic:"Vedic"},{pascal:"RoxyChoghadiyaGrid",tag:"roxy-choghadiya-grid",slug:"choghadiya-grid",heading:"Choghadiya",description:"Day and night Choghadiya muhurta tiles for activity timing",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/panchang/choghadiya",docsSummary:"Day and night Choghadiya muhurta tiles colored by effect",topic:"Vedic"},{pascal:"RoxyYogaList",tag:"roxy-yoga-list",slug:"yoga-list",heading:"Yoga catalog",description:"Yoga reference cards from the catalog with optional detail mode",docsLabel:"Vedic",endpointLabel:"GET /vedic-astrology/yoga, /yoga/{id}",docsSummary:"Filterable yoga cards from the 300 plus yoga catalog",topic:"Vedic"},{pascal:"RoxyNakshatraCard",tag:"roxy-nakshatra-card",slug:"nakshatra-card",heading:"Nakshatra",description:"Nakshatra reference card with lord, deity, symbol, characteristics, and remedies",docsLabel:"Vedic",endpointLabel:"GET /vedic-astrology/nakshatras/{id}",docsSummary:"Lord, deity, symbol, characteristics, remedies",topic:"Vedic"},{pascal:"RoxyDoshaCard",tag:"roxy-dosha-card",slug:"dosha-card",heading:"Manglik dosha",description:"Manglik, Kaal Sarp, or Sade Sati presence card",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/dosha/{manglik,kalsarpa,sadhesati}",docsSummary:"Presence, severity, remedies, scoped effects",topic:"Vedic"},{pascal:"RoxyNumerologyCard",tag:"roxy-numerology-card",slug:"numerology-card",heading:"Life path number",description:"Numerology card for life path, expression, personal year, or full chart",docsLabel:"Numerology",endpointLabel:"POST /numerology/{life-path,expression,personal-year,chart}",docsSummary:"Life path, expression, personal year, full chart",topic:"Numerology"},{pascal:"RoxyTarotCard",tag:"roxy-tarot-card",slug:"tarot-card",heading:"Daily tarot card",description:"Single tarot card with upright/reversed flip animation",docsLabel:"Tarot",endpointLabel:"GET /tarot/cards/{id}, POST /tarot/daily",docsSummary:"Single card with upright and reversed flip",topic:"Tarot"},{pascal:"RoxyTarotSpread",tag:"roxy-tarot-spread",slug:"tarot-spread",heading:"Three-card spread",description:"Tarot spread renderer for three-card, Celtic Cross, love, or yes/no",docsLabel:"Tarot",endpointLabel:"POST /tarot/spreads/{three-card,celtic-cross,love}, /tarot/yes-no, /tarot/draw",docsSummary:"Spreads with positions and reading",topic:"Tarot"},{pascal:"RoxyBiorhythmChart",tag:"roxy-biorhythm-chart",slug:"biorhythm-chart",heading:"Daily biorhythm",description:"Daily biorhythm bars or multi-day forecast cycle lines",docsLabel:"Biorhythm",endpointLabel:"POST /biorhythm/{daily,forecast,critical-days}",docsSummary:"Daily bars, forecast cycle lines, critical days",topic:"Biorhythm"},{pascal:"RoxyHexagram",tag:"roxy-hexagram",slug:"hexagram",heading:"I Ching hexagram",description:"I Ching hexagram with trigram glyphs, judgment, image, and changing lines",docsLabel:"I Ching",endpointLabel:"GET /iching/hexagrams/{number}, /iching/cast, POST /iching/daily, /iching/daily/cast",docsSummary:"Hexagram with trigrams, judgment, image, changing lines",topic:"I Ching"},{pascal:"RoxyEndpointForm",tag:"roxy-endpoint-form",slug:"endpoint-form",heading:"Schema-driven form",description:"Schema-driven form that emits roxy-submit with a validated payload",docsLabel:"Helper",endpointLabel:"Any endpoint via x-roxy-ui hints",docsSummary:"Schema-driven form, emits roxy-submit",topic:"Helpers",selfFetching:!0},{pascal:"RoxyLocationSearch",tag:"roxy-location-search",slug:"location-search",heading:"City search",description:"City search input with debounced /location/search calls",docsLabel:"Helper",endpointLabel:"GET /location/search",docsSummary:"Debounced city search input, emits roxy-location-select",topic:"Helpers",selfFetching:!0},{pascal:"RoxyData",tag:"roxy-data",slug:"data",heading:"Generic renderer",description:"Generic fallback renderer for any OpenAPI response shape",docsLabel:"Helper",endpointLabel:"Any response shape",docsSummary:"Generic fallback renderer for unknown shapes",topic:"Helpers",selfFetching:!0}];var gr="0.6.1";var va=gt.map(n=>n.slug);return br($a);})();
|
|
93
|
+
</g>`)};return r(e.person1?.ascendant,1),r(e.person2?.ascendant,2),t}renderInterAspectLines(e,t,r){let o=(i,d)=>{let c=A(d);for(let m of i)if(A(m.name)===c&&typeof m.longitude=="number")return m.longitude};return r.map(i=>{let d=o(e,i.planet1),c=o(t,i.planet2);if(d===void 0||c===void 0)return l;let m=T(M,M,Jt-12,this.toAngle(d)),g=T(M,M,qe+8,this.toAngle(c)),h=Ge(i),y=_e[h]??"aspect-other",S=C(i.orb,1);return w`<line class=${`aspect ${y}`} x1=${m.x} y1=${m.y} x2=${g.x} y2=${g.y}><title>${i.planet1} ${h} ${i.planet2}${S?` (orb ${S}\xB0)`:""}</title></line>`})}renderAspects(e){return s`<table><thead><tr><th>Planet 1</th><th>Planet 2</th><th>Aspect</th><th>Orb</th><th>Strength</th></tr></thead><tbody>${e.slice(0,12).map(t=>s`<tr><td>${t.planet1}</td><td>${t.planet2}</td><td>${Ge(t)||""}</td><td class="orb">${C(t.orb,1)}</td><td>${Qa(t.strength)}</td></tr>`)}</tbody></table>`}};Ae.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:center;gap:var(--roxy-space-md,1rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.score{font-variant-numeric:tabular-nums;font-weight:var(--roxy-weight-bold,600);color:var(--roxy-accent-ink,#b45309);font-size:var(--roxy-text-xl,1.5rem)}svg{aspect-ratio:1;width:100%;max-width:560px;height:auto;margin:0 auto;display:block}.wheel-line{fill:none;stroke:var(--roxy-border,#e4e4e7)}.sign{fill:var(--roxy-secondary,#475569);font-size:14px}.p1{fill:var(--roxy-accent,#f59e0b);font-size:13px;font-weight:600}.p2{fill:var(--roxy-info,#0284c7);font-size:13px;font-weight:600}.person-tag{opacity:.85;font-size:7px;font-weight:700}.planet-deg{fill:var(--roxy-muted,#71717a);font-size:7px;font-family:var(--roxy-font-sans)}.planet-deg .retro{fill:var(--roxy-danger,#dc2626)}.asc-tick{stroke:var(--roxy-accent-ink,#b45309);stroke-width:1px;opacity:.75}.asc-label{fill:var(--roxy-accent-ink,#b45309);font-size:9px;font-weight:700;font-family:var(--roxy-font-sans);letter-spacing:.04em}.aspect{stroke-width:.8px;fill:none;opacity:.5}.aspect-trine,.aspect-sextile{stroke:var(--roxy-success,#16a34a)}.aspect-square,.aspect-opposition{stroke:var(--roxy-danger,#dc2626)}.aspect-conjunction{stroke:var(--roxy-accent-ink,#b45309)}.aspect-other{stroke:var(--roxy-muted,#71717a);opacity:.35}.legend-row{gap:var(--roxy-space-md,1rem);font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);margin-top:calc(var(--roxy-space-xs,.25rem) * -1);flex-wrap:wrap;display:flex}.legend-row .swatch{vertical-align:middle;border-radius:50%;width:8px;height:8px;margin-right:4px;display:inline-block}.summary{color:var(--roxy-fg,#0a0a0a);font-size:var(--roxy-text-base,1rem);margin:0}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem)}th,td{padding:var(--roxy-space-sm,.5rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);text-align:left}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.06em}td.orb{font-variant-numeric:tabular-nums;color:var(--roxy-muted,#71717a)}.lists{gap:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));display:grid}.lists h3{margin:0 0 var(--roxy-space-xs,.25rem) 0;font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.06em}.lists ul{padding-left:var(--roxy-space-md,1rem);font-size:var(--roxy-text-sm,.875rem);margin:0}.missing-planets{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 8%, transparent);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-md,1rem);color:var(--roxy-fg,#0a0a0a);font-size:var(--roxy-text-sm,.875rem);line-height:1.5}.missing-planets code{font-family:var(--roxy-font-mono,ui-monospace, SFMono-Regular, Menlo, monospace);background:color-mix(in srgb, var(--roxy-fg,#0a0a0a) 6%, transparent);border-radius:4px;padding:0 4px;font-size:.95em}`],p([u({attribute:!1})],Ae.prototype,"data",2),Ae=p([b("roxy-synastry-chart")],Ae);function Qa(n){return typeof n=="number"?Math.round(n).toString():""}var de=class extends f{constructor(){super();this.data=null;this.flipped=!1;this.toggleFlip=()=>{this.flipped=!this.flipped};new $(this)}render(){let e=this.data;return e?"card"in e?this.renderDailyCard(e):this.renderFullCard(e):s`<div class="roxy-empty" role="status">No tarot data</div>`}renderDailyCard(e){let t=e.card,r=this.flipped!==!!t.reversed,o=t.keywords??[];return s`<article class="card" aria-label="${t.name??"Tarot card"}"><div class="image-wrap">${t.imageUrl?s`<img class="${`image ${r?"reversed":""}`}" src="${t.imageUrl}" alt="${t.name??"Tarot card"}" tabindex="0" @click="${this.toggleFlip}" @keydown="${i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),this.toggleFlip())}}">`:s`<div class="${`image ${r?"reversed":""}`}" style="aspect-ratio:0.6;display:flex;align-items:center;justify-content:center;color:var(--roxy-muted)">${t.name??"?"}</div>`}</div><div><div class="meta">${t.arcana?s`${t.arcana} arcana`:l} ${r?s`· reversed`:l}</div><h2 class="title">${t.name??"Tarot card"}</h2>${e.dailyMessage?s`<p class="message">${e.dailyMessage}</p>`:l} ${t.meaning?s`<p>${t.meaning}</p>`:l} ${o.length>0?s`<div class="chips">${o.map(i=>s`<span>${i}</span>`)}</div>`:l} <button class="flip" type="button" @click="${this.toggleFlip}" aria-pressed="${this.flipped?"true":"false"}">Flip card</button></div></article>`}renderFullCard(e){let t=this.flipped,r=t?e.reversed:e.upright,o=t?e.keywords?.reversed??[]:e.keywords?.upright??[];return s`<article class="card" aria-label="${e.name??"Tarot card"}"><div class="image-wrap">${e.imageUrl?s`<img class="${`image ${t?"reversed":""}`}" src="${e.imageUrl}" alt="${e.name??"Tarot card"}" tabindex="0" @click="${this.toggleFlip}" @keydown="${i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),this.toggleFlip())}}">`:s`<div class="${`image ${t?"reversed":""}`}" style="aspect-ratio:0.6;display:flex;align-items:center;justify-content:center;color:var(--roxy-muted)">${e.name??"?"}</div>`}</div><div><div class="meta">${e.arcana?s`${e.arcana} arcana`:l} ${e.number!==void 0&&e.number!==null?s`· ${e.number}`:l} ${t?s`· reversed`:l}</div><h2 class="title">${e.name??"Tarot card"}</h2>${r?.description?s`<p>${r.description}</p>`:l} ${o.length>0?s`<div class="chips">${o.map(i=>s`<span>${i}</span>`)}</div>`:l} <button class="flip" type="button" @click="${this.toggleFlip}" aria-pressed="${this.flipped?"true":"false"}">Flip card</button></div></article>`}};de.styles=[v,x`.card{background:var(--roxy-bg,#fff);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-lg,1.5rem);box-shadow:var(--roxy-shadow-sm);gap:var(--roxy-space-lg,1.5rem);grid-template-columns:minmax(0,9rem) 1fr;align-items:start;display:grid}@container (width<=480px){.card{grid-template-columns:1fr}}.image-wrap{perspective:800px}.image{border-radius:var(--roxy-radius-md,8px);background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 60%, transparent);width:100%;height:auto;transition:transform var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));cursor:pointer;display:block}.image.reversed{transform:rotate(180deg)}.image:focus-visible{outline:2px solid var(--roxy-ring,#f59e0b66);outline-offset:2px}.title{font-size:var(--roxy-text-xl,1.5rem);font-weight:var(--roxy-weight-bold,600);letter-spacing:var(--roxy-tracking-tight);margin:0}.meta{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);text-transform:uppercase;letter-spacing:.06em;margin-bottom:var(--roxy-space-sm,.5rem)}.message{color:var(--roxy-fg,#0a0a0a);margin:var(--roxy-space-sm,.5rem) 0 var(--roxy-space-md,1rem)}.chips{gap:var(--roxy-space-xs,.25rem);margin-top:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.chips span{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 14%, transparent);border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);padding:2px 8px}.flip{margin-top:var(--roxy-space-sm,.5rem);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);font-family:inherit;font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-secondary,#475569);cursor:pointer;transition:transform var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1));background:0 0;padding:4px 12px}.flip:hover{transform:scale(1.02)}`],p([u({attribute:!1})],de.prototype,"data",2),p([N()],de.prototype,"flipped",2),de=p([b("roxy-tarot-card")],de);var ce=class extends f{constructor(){super();this.data=null;this.spread="three-card";new $(this)}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No tarot spread</div>`;let t="answer"in e,r="cards"in e&&!("spread"in e),o=r?[]:"positions"in e?e.positions??[]:[],i=r&&"cards"in e?e.cards:[],d=t?e.answer:void 0,c=t?e.strength:void 0,m="spread"in e?e.spread:this.spread.replace(/-/g," "),g="question"in e?e.question:void 0,h="summary"in e?e.summary:void 0,y=t?e.interpretation:void 0,S=d?d.toLowerCase().replace(/[^a-z]/g,""):"";return s`<article class="wrap" aria-label="Tarot spread"><header class="head"><h2 class="title">${m}</h2>${g?s`<span class="question">"${g}"</span>`:l}</header>${t?s`<div><span class="${`answer ${S}`}">${d}</span> ${c?s`<small>· ${c}</small>`:l}</div>`:l} ${o.length>0?s`<div class="grid">${o.map(k=>s`<div class="card"><p class="label">${k.name??""}</p><div class="image">${k.card?.imageUrl?s`<img src="${k.card.imageUrl}" alt="${k.card.name??"tarot card"}" class="${k.card.reversed?"reversed":""}">`:s`${k.card?.name??"?"}`}</div><p class="name">${k.card?.name??""} ${k.card?.reversed?s`<small>(reversed)</small>`:l}</p>${k.interpretation?s`<p class="interp">${k.interpretation}</p>`:l}</div>`)}</div>`:l} ${i.length>0?s`<div class="grid">${i.map(k=>s`<div class="card"><div class="image">${k.imageUrl?s`<img src="${k.imageUrl}" alt="${k.name??"tarot card"}" class="${k.reversed?"reversed":""}">`:s`${k.name??"?"}`}</div><p class="name">${k.name??""} ${k.reversed?s`<small>(reversed)</small>`:l}</p>${k.meaning?s`<p class="interp">${k.meaning}</p>`:l}</div>`)}</div>`:l} ${h?s`<p class="reading">${h}</p>`:l} ${y?s`<p class="reading">${y}</p>`:l}</article>`}};ce.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;gap:var(--roxy-space-md,1rem);flex-wrap:wrap;align-items:baseline;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);text-transform:capitalize;margin:0}.question{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);font-style:italic}.answer{border-radius:var(--roxy-radius-full,9999px);font-weight:var(--roxy-weight-bold,600);font-size:var(--roxy-text-base,1rem);text-transform:uppercase;letter-spacing:.06em;padding:4px 14px;display:inline-block}.answer.yes{background:color-mix(in srgb, var(--roxy-success,#16a34a) 16%, transparent);color:var(--roxy-success-fg,#166534)}.answer.no{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 16%, transparent);color:var(--roxy-danger-fg,#991b1b)}.answer.maybe{background:color-mix(in srgb, var(--roxy-warning,#ea580c) 16%, transparent);color:var(--roxy-warning-fg,#9a3412)}.grid{gap:var(--roxy-space-md,1rem);grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));display:grid}.card{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-sm,.5rem);background:var(--roxy-bg,#fff);gap:var(--roxy-space-xs,.25rem);display:grid}.label{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.06em;margin:0}.image{aspect-ratio:.6;background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 60%, transparent);border-radius:var(--roxy-radius-sm,4px);width:100%;font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);justify-content:center;align-items:center;display:flex;overflow:hidden}.image img{object-fit:cover;width:100%;height:100%;transition:transform var(--roxy-motion-duration,.2s) var(--roxy-motion-easing,cubic-bezier(.4, 0, .2, 1))}.image img.reversed{transform:rotate(180deg)}.name{font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600);margin:0}.interp{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-secondary,#475569);margin:0}.reading{color:var(--roxy-fg,#0a0a0a);margin:0}`],p([u({attribute:!1})],ce.prototype,"data",2),p([u({type:String,reflect:!0})],ce.prototype,"spread",2),ce=p([b("roxy-tarot-spread")],ce);var pe=class extends f{constructor(){super();this.data=null;this.tab="positions";new $(this)}render(){if(!this.data?.transitPlanets?.length)return s`<div class="roxy-empty" role="status">No transits data</div>`;let{transitDate:e,transitTime:t,transitPlanets:r,transitAspects:o,summary:i}=this.data,d=[xe(e),K(t)].filter(Boolean).join(" "),c=o?.length??0,m=this.tab;return s`<div class="wrap" aria-label="Transits"><div class="head"><h2 class="title">Transits</h2>${d?s`<p class="subtitle">${d}</p>`:l}</div>${c>0?s`${Ie({items:[{id:"positions",label:"Positions"},{id:"aspects",label:`Aspects (${c})`}],active:m,onSelect:g=>{this.tab=g},label:"Transit views",idPrefix:"transits",controls:!0})}<div id="transits-panel-${m}" role="tabpanel" aria-labelledby="transits-tab-${m}">${m==="positions"?s`<div class="overflow-scroll">${this.renderPlanetsTable(r)}</div>`:s`${i?this.renderSummaryPills(i):l}<div class="overflow-scroll">${this.renderAspectsList(o??[])}</div>`}</div>`:s`<div class="overflow-scroll">${this.renderPlanetsTable(r)}</div>`}</div>`}renderSummaryPills(e){return s`<div class="summary-pills" role="region" aria-label="Aspect summary"><span class="pill pill--muted">Total: ${e.totalAspects} </span><span class="pill pill--success">Harmonious: ${e.harmonious} </span><span class="pill pill--danger">Challenging: ${e.challenging} </span><span class="pill pill--muted">Neutral: ${e.neutral}</span></div>`}renderPlanetsTable(e){return s`<table class="planets-table"><thead><tr><th scope="col">Planet</th><th scope="col">Sign</th><th scope="col">Degree</th><th scope="col">Speed</th></tr></thead><tbody>${e.map(t=>{let r=L[A(t.name)]??"",o=G[A(t.sign)]??"",i=t.speed>=0?"\u2191":"\u2193";return s`<tr><td><div class="planet-cell"><span class="glyph" aria-hidden="true">${r}</span> ${t.name} ${t.isRetrograde?s`<span class="retro-badge" aria-label="retrograde">R</span>`:l}</div></td><td><div class="planet-cell"><span class="glyph" aria-hidden="true">${o}</span> ${t.sign}</div></td><td class="num">${C(t.degree,2)}</td><td class="speed"><span class="speed-arrow" aria-hidden="true">${i}</span> ${C(Math.abs(t.speed),4)}</td></tr>`})}</tbody></table>`}renderAspectsList(e){return s`<div role="list" aria-label="Transit aspects">${e.map((t,r)=>{let o=L[A(t.transitPlanet)]??"",i=L[A(t.natalPlanet)]??"",d=(t.nature??"neutral").toLowerCase(),c=t.interpretation,m=(t.type??"").toLowerCase(),g=t.isApplying?"Applying":"Separating";return s`<details class="aspect-card" role="listitem" name="transit-aspects" ?open="${r===0}"><summary><span aria-hidden="true">${o}</span> ${t.transitPlanet} <span class="nature-badge ${d}">${m}</span> <span aria-hidden="true">${i}</span> ${t.natalPlanet} <span class="meta">${g} · orb ${C(t.orb,2)}° · strength ${C(t.strength,1)} </span>${Y()}</summary><div class="interp-body">${c?.summary?s`<p>${c.summary}</p>`:l} ${c?.impact?s`<p><strong>Impact:</strong> ${c.impact}</p>`:l} ${c?.timing?s`<p><strong>Timing:</strong> ${c.timing}</p>`:l} ${c?.guidance?s`<p><strong>Guidance:</strong> ${c.guidance}</p>`:l} ${c?.keywords?.length?s`<div class="interp-keywords">${c.keywords.map(h=>s`<span class="kw">${h}</span>`)}</div>`:l}</div></details>`})}</div>`}};pe.styles=[v,fe,je,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:baseline;gap:var(--roxy-space-md,1rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.subtitle{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);margin:0}.summary-pills{gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.pill{padding:2px var(--roxy-space-sm,.5rem);border-radius:var(--roxy-radius-full,9999px);font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);border:1px solid;align-items:center;gap:4px;display:inline-flex}.pill--muted{color:var(--roxy-fg,#0a0a0a);background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 60%, transparent)}.pill--success{color:var(--roxy-success-fg,#166534);background:color-mix(in srgb, var(--roxy-success,#16a34a) 10%, transparent)}.pill--danger{color:var(--roxy-danger-fg,#991b1b);background:color-mix(in srgb, var(--roxy-danger,#dc2626) 10%, transparent)}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem)}th,td{padding:var(--roxy-space-sm,.5rem);border-bottom:1px solid var(--roxy-border,#e4e4e7);text-align:left}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.06em}.section-label{font-size:var(--roxy-text-xs,.75rem);color:var(--roxy-muted,#71717a);text-transform:uppercase;letter-spacing:.06em;font-weight:var(--roxy-weight-bold,600);margin:0 0 var(--roxy-space-xs,.25rem) 0}.glyph{margin-right:2px;font-size:1.1em;line-height:1}.planet-cell{white-space:nowrap;align-items:center;gap:4px;display:flex}.retro-badge{border-radius:var(--roxy-radius-sm,4px);background:color-mix(in srgb, var(--roxy-warning,#ea580c) 12%, transparent);color:var(--roxy-warning-fg,#9a3412);font-size:.7em;font-weight:var(--roxy-weight-bold,600);vertical-align:middle;margin-left:2px;padding:1px 4px;display:inline-block}.speed{font-variant-numeric:tabular-nums;color:var(--roxy-muted,#71717a);white-space:nowrap}.speed-arrow{font-size:.85em}td.num{font-variant-numeric:tabular-nums;color:var(--roxy-muted,#71717a)}.overflow-scroll{-webkit-overflow-scrolling:touch;overflow-x:auto}.aspect-card{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);margin-bottom:var(--roxy-space-xs,.25rem)}.aspect-card summary{cursor:pointer;color:var(--roxy-fg,#0a0a0a);flex-wrap:wrap;align-items:center;gap:.5em;font-weight:500;display:flex}.aspect-card summary .meta{color:var(--roxy-muted,#71717a);font-weight:400;font-size:var(--roxy-text-xs,.75rem);font-variant-numeric:tabular-nums;margin-left:auto}.aspect-card .interp-body{margin-top:var(--roxy-space-xs,.25rem);color:var(--roxy-fg,#0a0a0a);font-size:var(--roxy-text-sm,.875rem);line-height:1.45}.aspect-card .interp-body p{margin:0 0 var(--roxy-space-xs,.25rem)}.interp-keywords{flex-wrap:wrap;gap:.25rem;margin-top:.5rem;display:flex}.interp-keywords .kw{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 14%, transparent);color:var(--roxy-accent-ink,#b45309);font-size:var(--roxy-text-xs,.75rem);border-radius:9999px;padding:1px 8px}.nature-badge{font-size:var(--roxy-text-xs,.75rem);border-radius:9999px;padding:1px 8px;font-weight:600;display:inline-block}.nature-badge.harmonious{background:color-mix(in srgb, var(--roxy-success,#16a34a) 12%, transparent);color:var(--roxy-success-fg,#166534)}.nature-badge.challenging{background:color-mix(in srgb, var(--roxy-danger,#dc2626) 12%, transparent);color:var(--roxy-danger-fg,#991b1b)}.nature-badge.neutral{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 60%, transparent);color:var(--roxy-fg,#0a0a0a)}`],p([u({attribute:!1})],pe.prototype,"data",2),p([N()],pe.prototype,"tab",2),pe=p([b("roxy-transits-table")],pe);var me=class extends f{constructor(){super();this.data=null;this.chartStyle="north";this.setStyle=e=>{this.chartStyle=e};new $(this)}viewModel(){return this.data?.meta?vt(this.data.meta,"D1 Rashi"):null}render(){let e=this.viewModel();return e?s`<div class="wrap"><div class="header"><h2 class="title">Vedic kundli</h2>${wt(this.chartStyle,this.setStyle)}</div><svg viewBox="0 0 400 400" preserveAspectRatio="xMidYMid meet" role="img" aria-label="Vedic birth chart with twelve sign houses"><title>Vedic kundli</title>${$t(e,this.chartStyle)}</svg></div>`:s`<div class="roxy-empty" role="status">No kundli data</div>`}};me.styles=[v,kt,fe],p([u({attribute:!1})],me.prototype,"data",2),p([u({type:String,reflect:!0,attribute:"chart-style"})],me.prototype,"chartStyle",2),me=p([b("roxy-vedic-kundli")],me);var es=["Lagna","Sun","Moon","Mars","Mercury","Jupiter","Venus","Saturn","Rahu","Ketu"],Ce=class extends f{constructor(){super();this.data=null;new $(this)}orderedRows(){let e=this.data?.meta??{},t=new Set,r=[];for(let o of es){let i=e[o];i&&(r.push([o,i]),t.add(o))}for(let[o,i]of Object.entries(e))t.has(o)||r.push([o,i]);return r}render(){if(!this.data?.meta)return s`<div class="roxy-empty" role="status">No chart data</div>`;let e=this.orderedRows();return s`<div class="wrap" aria-label="Vedic planetary positions"><header class="head"><h2 class="title">Planetary positions</h2></header><div class="scroll" tabindex="0"><table role="table"><thead><tr><th scope="col">Graha</th><th scope="col">Rashi</th><th scope="col">Degree</th><th scope="col">Nakshatra</th><th scope="col">Pada</th><th scope="col">Nak. lord</th><th scope="col">House</th><th scope="col">Avastha</th><th scope="col">Retro</th></tr></thead><tbody>${e.map(([t,r])=>{let o=(r.graha??t)==="Lagna",i=L[A(r.graha??t)]??"",d=G[A(r.rashi??"")]??"";return s`<tr class="${o?"lagna":""}"><td class="graha">${i?s`<span class="glyph">${i}</span>`:l}${r.graha??t}</td><td>${d?s`<span class="glyph">${d}</span>`:l}${r.rashi??""}</td><td class="num">${typeof r.longitude=="number"?ft(r.longitude):""}</td><td>${r.nakshatra?.name??""}</td><td class="num">${r.nakshatra?.pada??""}</td><td>${r.nakshatra?.lord??""}</td><td class="num">${typeof r.house=="number"?r.house:""}</td><td>${r.awastha??""}</td><td>${r.isRetrograde?s`<span class="retro">R</span>`:l}</td></tr>`})}</tbody></table></div>${this.renderCombustion()} ${this.renderPlanetaryWar()} ${this.renderInterpretations()} ${this.renderYogas()} ${this.renderHouses()}</div>`}renderCombustion(){let e=this.data?.combustion??[];return e.length===0?l:s`<details class="panel"><summary>Combust grahas<span class="summary-count">${e.length}</span>${Y()}</summary><div class="panel-body">${e.map(t=>{let r=L[A(t.planet)]??"",o=C(t.distanceFromSun,2),i=C(t.orb,1);return s`<div class="condition"><span class="planet">${r?`${r} `:""}${t.planet}</span> <span class="detail">${o} deg from Sun, within ${i} deg orb</span></div>`})}</div></details>`}renderPlanetaryWar(){let e=this.data?.planetaryWar??[];return e.length===0?l:s`<details class="panel"><summary>Planetary wars<span class="summary-count">${e.length}</span>${Y()}</summary><div class="panel-body">${e.map(t=>{let r=C(t.distance,2);return s`<div class="condition"><span class="planet">${t.planet1} vs ${t.planet2}</span> <span class="detail">${r} deg apart</span> <span class="winner">${t.winner} wins</span></div>`})}</div></details>`}renderInterpretations(){let e=this.data?.interpretations??{},t=this.orderedRows().map(([r,o])=>[o.graha??r,e[o.graha??r]]).filter(([,r])=>r!=null);return t.length===0?l:s`<details class="panel"><summary>Interpretations<span class="summary-count">${t.length}</span>${Y()}</summary><div class="panel-body">${t.map(([r,o])=>{let i=L[A(r)]??"";return s`<div class="interp"><span class="planet">${i?`${i} `:""}${r}</span> ${o.rashi?s`<p><span class="label">Rashi.</span> ${o.rashi}</p>`:l} ${o.nakshatra?s`<p><span class="label">Nakshatra.</span> ${o.nakshatra}</p>`:l}</div>`})}</div></details>`}renderHouses(){let e=(this.data?.houses??[]).filter(t=>t.name||t.description);return e.length===0?l:s`<details class="panel"><summary>Bhava significations<span class="summary-count">${e.length}</span>${Y()}</summary><div class="panel-body">${e.map(t=>s`<div class="bhava"><span class="name">${t.number}. ${t.name??""}</span> ${t.description?s`<p class="desc">${t.description}</p>`:l}</div>`)}</div></details>`}renderYogas(){let e=(this.data?.yogas??[]).filter(t=>t.present);return e.length===0?l:s`<details class="panel"><summary>Yogas<span class="summary-count">${e.length}</span>${Y()}</summary><div class="panel-body">${e.map(t=>s`<div class="bhava"><span class="name">${t.name} ${t.quality?s`<span class="quality ${t.quality.toLowerCase()}">${t.quality}</span>`:l}</span> ${t.result?s`<p class="desc">${t.result}</p>`:l}</div>`)}</div></details>`}};Ce.styles=[v,je,x`.wrap{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);box-shadow:var(--roxy-shadow-sm);overflow:hidden}.head{padding:var(--roxy-space-md,1rem);border-bottom:1px solid var(--roxy-border,#e4e4e7)}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.scroll{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem);min-width:620px}thead{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 20%, transparent)}th,td{padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);text-align:left;white-space:nowrap}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.04em}tbody tr{border-top:1px solid var(--roxy-border,#e4e4e7)}tbody tr.lagna{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 10%, transparent)}td.graha{font-weight:var(--roxy-weight-bold,600);color:var(--roxy-fg,#0a0a0a)}.glyph{color:var(--roxy-muted,#71717a);margin-right:.4em}tbody tr.lagna .glyph{color:var(--roxy-accent-ink,#b45309)}.retro{color:var(--roxy-warning-fg,#9a3412);font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600)}.num{font-variant-numeric:tabular-nums}details.panel{border-top:1px solid var(--roxy-border,#e4e4e7)}details.panel>summary{justify-content:space-between;align-items:center;gap:var(--roxy-space-sm,.5rem);padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);cursor:pointer;font-size:var(--roxy-text-sm,.875rem);font-weight:var(--roxy-weight-bold,600);color:var(--roxy-fg,#0a0a0a);display:flex}details.panel>summary:focus-visible{outline:2px solid var(--roxy-ring,#f59e0b66);outline-offset:-2px}.summary-count{margin-left:auto;margin-right:var(--roxy-space-xs,.25rem);font-weight:var(--roxy-weight-normal,400);color:var(--roxy-muted,#71717a);font-variant-numeric:tabular-nums}.panel-body{padding:0 var(--roxy-space-md,1rem) var(--roxy-space-md,1rem);gap:var(--roxy-space-sm,.5rem);display:grid}.condition{font-size:var(--roxy-text-sm,.875rem);flex-wrap:wrap;align-items:baseline;gap:.4em;display:flex}.condition .planet{font-weight:var(--roxy-weight-bold,600)}.condition .detail{color:var(--roxy-muted,#71717a);font-variant-numeric:tabular-nums}.condition .winner{color:var(--roxy-success-fg,#166534);font-weight:var(--roxy-weight-bold,600)}.interp{gap:.15em;display:grid}.interp .planet{font-weight:var(--roxy-weight-bold,600);font-size:var(--roxy-text-sm,.875rem)}.interp p{font-size:var(--roxy-text-sm,.875rem);line-height:var(--roxy-leading-normal,1.5);margin:0}.interp .label{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600)}.bhava{gap:.15em;display:grid}.bhava .name{font-weight:var(--roxy-weight-bold,600);font-size:var(--roxy-text-sm,.875rem)}.bhava .desc{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);line-height:var(--roxy-leading-normal,1.5);margin:0}.quality{font-size:var(--roxy-text-xs,.75rem);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;letter-spacing:.04em}.quality.positive{color:var(--roxy-success-fg,#166534)}.quality.negative{color:var(--roxy-danger-fg,#991b1b)}.quality.both{color:var(--roxy-muted,#71717a)}`],p([u({attribute:!1})],Ce.prototype,"data",2),Ce=p([b("roxy-vedic-planets-table")],Ce);var Pe=class extends f{constructor(){super();this.data=null;new $(this)}rows(){let e=this.data;if(!e)return[];let t=(e.planets??[]).map(r=>({name:r.name,sign:r.sign,longitude:r.longitude,house:r.house,speed:r.speed,isRetrograde:r.isRetrograde}));for(let[r,o]of[["Ascendant",e.ascendant],["Midheaven",e.midheaven],["Part of Fortune",e.partOfFortune],["Vertex",e.vertex]])o&&t.push({name:r,sign:o.sign,longitude:o.longitude,isPoint:!0});return t}render(){if(!this.data?.planets)return s`<div class="roxy-empty" role="status">No chart data</div>`;let e=this.rows();return s`<div class="wrap" aria-label="Western planetary positions" tabindex="0"><header class="head"><h2 class="title">Planetary positions</h2></header><table role="table"><thead><tr><th scope="col">Body</th><th scope="col">Sign</th><th scope="col">Degree</th><th scope="col">House</th><th scope="col">Motion</th></tr></thead><tbody>${e.map(t=>{let r=L[A(t.name)]??"",o=G[A(t.sign??"")]??"",i=typeof t.speed=="number"?C(t.speed,3):"";return s`<tr class="${t.isPoint?"point":""}"><td class="body">${r?s`<span class="glyph">${r}</span>`:l}${t.name}</td><td>${o?s`<span class="glyph">${o}</span>`:l}${t.sign??""}</td><td class="num">${typeof t.longitude=="number"?ft(t.longitude):""}</td><td class="num">${typeof t.house=="number"?t.house:""}</td><td class="num">${i?s`${i}°/day`:l} ${t.isRetrograde?s`<span class="retro">℞</span>`:l}</td></tr>`})}</tbody></table></div>`}};Pe.styles=[v,x`.wrap{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);box-shadow:var(--roxy-shadow-sm);overflow:auto}.head{padding:var(--roxy-space-md,1rem);border-bottom:1px solid var(--roxy-border,#e4e4e7)}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}table{border-collapse:collapse;width:100%;font-size:var(--roxy-text-sm,.875rem);min-width:460px}thead{background:color-mix(in srgb, var(--roxy-border,#e4e4e7) 20%, transparent)}th,td{padding:var(--roxy-space-sm,.5rem) var(--roxy-space-md,1rem);text-align:left;white-space:nowrap}th{color:var(--roxy-muted,#71717a);font-weight:var(--roxy-weight-bold,600);text-transform:uppercase;font-size:var(--roxy-text-xs,.75rem);letter-spacing:.04em}tbody tr{border-top:1px solid var(--roxy-border,#e4e4e7)}tbody tr.point{background:color-mix(in srgb, var(--roxy-accent,#f59e0b) 8%, transparent)}td.body{font-weight:var(--roxy-weight-bold,600);color:var(--roxy-fg,#0a0a0a)}.glyph{color:var(--roxy-muted,#71717a);margin-right:.4em}.retro{color:var(--roxy-danger,#dc2626);font-weight:var(--roxy-weight-bold,600)}.num{font-variant-numeric:tabular-nums}`],p([u({attribute:!1})],Pe.prototype,"data",2),Pe=p([b("roxy-western-planets-table")],Pe);var he=class extends f{constructor(){super();this.data=null;this.filter="";this.handleInput=e=>{this.filter=e.target.value};new $(this)}renderQualityChip(e){let t=`quality-chip quality-${e}`;return s`<span class="${t}">${e}</span>`}renderDetailCard(e){return s`<div class="detail-card"><p class="detail-name">${e.name} ${e.quality?this.renderQualityChip(e.quality):l}</p>${e.description?s`<p class="description">${e.description}</p>`:l} ${e.result?s`<details><summary>Effects</summary><div class="result-body">${e.result}</div></details>`:l}</div>`}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No yoga data</div>`;let e=this.data,t=this.filter.toLowerCase();if("description"in e&&typeof e.description=="string"){let r=e;return s`<div class="wrap">${this.renderDetailCard(r)}</div>`}if("yogas"in e&&Array.isArray(e.yogas)){let r=e.yogas;if(r.length>0&&"description"in r[0]){let m=r,g=t?m.filter(y=>y.name.toLowerCase().includes(t)):m,h=e.total;return s`<div class="wrap"><div class="head"><h2 class="title">Yoga catalog</h2>${h!==void 0?s`<span class="count">${h} total</span>`:l}</div><div class="search-wrap"><input class="search" type="search" placeholder="Filter yogas..." aria-label="Filter yoga list by name" .value="${this.filter}" @input="${this.handleInput}"></div><div class="detail-grid" role="region" aria-live="polite" aria-label="Yoga results">${g.length>0?g.map(y=>this.renderDetailCard(y)):s`<p class="no-results">No yogas match your search.</p>`}</div></div>`}let i=r,d=t?i.filter(m=>m.name.toLowerCase().includes(t)):i,c=e.total;return s`<div class="wrap"><div class="head"><h2 class="title">Yoga catalog</h2>${c!==void 0?s`<span class="count">${c} total</span>`:l}</div><div class="search-wrap"><input class="search" type="search" placeholder="Filter yogas..." aria-label="Filter yoga list by name" .value="${this.filter}" @input="${this.handleInput}"></div><div class="grid" role="region" aria-live="polite" aria-label="Yoga results">${d.length>0?d.map(m=>s`<div class="yoga-chip">${m.name} <span class="yoga-id">${m.id}</span></div>`):s`<p class="no-results">No yogas match your search.</p>`}</div></div>`}return s`<div class="roxy-empty" role="status">No yoga data</div>`}};he.styles=[v,x`.wrap{gap:var(--roxy-space-md,1rem);display:grid}.head{justify-content:space-between;align-items:baseline;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;display:flex}.title{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);margin:0}.count{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a)}.search-wrap{align-items:center;gap:var(--roxy-space-sm,.5rem);display:flex}.search{width:100%;max-width:280px;font-size:var(--roxy-text-sm,.875rem);font-family:var(--roxy-font-sans);border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);background:var(--roxy-bg,#fff);color:var(--roxy-fg,#0a0a0a);outline:none;padding:.35em .75em}.search::placeholder{color:var(--roxy-fg,#0a0a0a);opacity:.65}.search:focus{border-color:var(--roxy-accent,#f59e0b);box-shadow:0 0 0 2px color-mix(in srgb, var(--roxy-accent,#f59e0b) 30%, transparent)}.grid{gap:var(--roxy-space-sm,.5rem);grid-template-columns:repeat(auto-fill,minmax(180px,1fr));display:grid}.yoga-chip{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);font-size:var(--roxy-text-sm,.875rem);background:var(--roxy-bg,#fff);color:var(--roxy-fg,#0a0a0a);word-break:break-word;padding:.4em .8em}.yoga-chip .yoga-id{color:var(--roxy-fg,#0a0a0a);opacity:.75;margin-top:.15em;font-size:.7em;display:block}.detail-card{border:1px solid var(--roxy-border,#e4e4e7);border-radius:var(--roxy-radius-md,8px);padding:var(--roxy-space-md,1rem);background:var(--roxy-bg,#fff);gap:var(--roxy-space-sm,.5rem);display:grid}.detail-name{font-size:var(--roxy-text-lg,1.125rem);font-weight:var(--roxy-weight-bold,600);align-items:center;gap:var(--roxy-space-sm,.5rem);flex-wrap:wrap;margin:0;display:flex}.quality-chip{font-size:var(--roxy-text-xs,.75rem);border-radius:999px;padding:.15em .6em;font-weight:600;display:inline-block}.quality-Positive{background:color-mix(in srgb, var(--roxy-success,#22c55e) 18%, transparent);color:var(--roxy-success-fg,#15803d);border:1px solid color-mix(in srgb, var(--roxy-success,#22c55e) 40%, transparent)}.quality-Negative{background:color-mix(in srgb, var(--roxy-danger,#ef4444) 18%, transparent);color:var(--roxy-danger-fg,#b91c1c);border:1px solid color-mix(in srgb, var(--roxy-danger,#ef4444) 40%, transparent)}.quality-Both{background:color-mix(in srgb, var(--roxy-warning,#f59e0b) 18%, transparent);color:var(--roxy-warning-fg,#b45309);border:1px solid color-mix(in srgb, var(--roxy-warning,#f59e0b) 40%, transparent)}.description{font-size:var(--roxy-text-sm,.875rem);color:var(--roxy-muted,#71717a);line-height:var(--roxy-leading-normal,1.5);margin:0}details{font-size:var(--roxy-text-sm,.875rem)}details summary{cursor:pointer;color:var(--roxy-accent-ink,#b45309);align-items:center;gap:.4em;padding:.25em 0;font-weight:500;list-style:none;display:flex}details summary:before{content:"+";font-size:1.1em;line-height:1}details[open] summary:before{content:"-"}details .result-body{padding-top:var(--roxy-space-xs,.25rem);color:var(--roxy-fg,#0a0a0a);line-height:var(--roxy-leading-normal,1.5)}.no-results{color:var(--roxy-muted,#71717a);font-size:var(--roxy-text-sm,.875rem);padding:var(--roxy-space-md,1rem) 0;text-align:center}.detail-grid{gap:var(--roxy-space-sm,.5rem);display:grid}`],p([u({attribute:!1})],he.prototype,"data",2),p([N()],he.prototype,"filter",2),he=p([b("roxy-yoga-list")],he);var St=[{pascal:"RoxyNatalChart",tag:"roxy-natal-chart",slug:"natal-chart",heading:"Natal chart",description:"Western natal chart wheel for /astrology/natal-chart responses",docsLabel:"Western",endpointLabel:"POST /astrology/natal-chart",docsSummary:"Natal chart wheel with planet glyphs and aspect lines",topic:"Astrology"},{pascal:"RoxySynastryChart",tag:"roxy-synastry-chart",slug:"synastry-chart",heading:"Synastry",description:"Dual-wheel synastry chart with inter-aspects table",docsLabel:"Western",endpointLabel:"POST /astrology/synastry",docsSummary:"Dual-wheel synastry with inter-aspects table",topic:"Astrology"},{pascal:"RoxyWesternPlanetsTable",tag:"roxy-western-planets-table",slug:"western-planets-table",heading:"Western planets",description:"Western planetary positions table with sign, degree, house, and motion plus the chart angles",docsLabel:"Western",endpointLabel:"POST /astrology/natal-chart",docsSummary:"Sign, degree, house, motion columns plus ASC, MC, PoF, Vertex",topic:"Astrology"},{pascal:"RoxyTransitsTable",tag:"roxy-transits-table",slug:"transits-table",heading:"Transits",description:"Live planet positions plus aspects to a natal chart",docsLabel:"Western",endpointLabel:"POST /astrology/transits",docsSummary:"Transit planet positions plus optional aspects to a natal chart",topic:"Astrology"},{pascal:"RoxyMoonPhase",tag:"roxy-moon-phase",slug:"moon-phase",heading:"Moon phase",description:"Moon phase card and calendar",docsLabel:"Western",endpointLabel:"GET /astrology/moon-phase/{current,upcoming,calendar/...}",docsSummary:"Moon phase card and calendar",topic:"Astrology"},{pascal:"RoxyHoroscopeCard",tag:"roxy-horoscope-card",slug:"horoscope-card",heading:"Daily horoscope",description:"Daily, weekly, or monthly horoscope card for /astrology/horoscope/...",docsLabel:"Western",endpointLabel:"GET /astrology/horoscope/{sign}/{daily,weekly,monthly}",docsSummary:"Daily, weekly, or monthly horoscope card",topic:"Astrology"},{pascal:"RoxyCompatibilityCard",tag:"roxy-compatibility-card",slug:"compatibility-card",heading:"Compatibility score",description:"Cross-domain compatibility score card",docsLabel:"Cross",endpointLabel:"POST /astrology/compatibility-score, /numerology/compatibility, /biorhythm/compatibility",docsSummary:"Score card with category breakdown",topic:"Astrology"},{pascal:"RoxyVedicKundli",tag:"roxy-vedic-kundli",slug:"vedic-kundli",heading:"Vedic kundli",description:"South, North, or East Indian Vedic kundli for /vedic-astrology/birth-chart with per-planet degree and nakshatra detail",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/birth-chart",docsSummary:"South, North, or East Indian kundli with degree detail",topic:"Vedic"},{pascal:"RoxyDivisionalChart",tag:"roxy-divisional-chart",slug:"divisional-chart",heading:"Divisional chart",description:"D2 to D60 varga chart wheel with Vargottama markers",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/divisional-chart",docsSummary:"Generic divisional varga wheel from D2 Hora to D60 Shashtiamsa",topic:"Vedic"},{pascal:"RoxyKpChart",tag:"roxy-kp-chart",slug:"kp-chart",heading:"KP chart",description:"Full KP chart with Ascendant, Placidus cusps, and planets in tabbed stellar-hierarchy tables",docsLabel:"Vedic (KP)",endpointLabel:"POST /vedic-astrology/kp/chart",docsSummary:"Ascendant, cusps, and planets with KP stellar hierarchy",topic:"Vedic"},{pascal:"RoxyVedicPlanetsTable",tag:"roxy-vedic-planets-table",slug:"vedic-planets-table",heading:"Vedic planets",description:"Vedic planetary positions table with degree, nakshatra, pada, nakshatra lord, bhava, and avastha",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/birth-chart",docsSummary:"Degree, nakshatra, pada, lord, bhava, avastha columns",topic:"Vedic"},{pascal:"RoxyKpPlanetsTable",tag:"roxy-kp-planets-table",slug:"kp-planets-table",heading:"KP planets",description:"KP planets table with sub-lord and sub-sub-lord columns",docsLabel:"Vedic (KP)",endpointLabel:"POST /vedic-astrology/kp/planets",docsSummary:"Sub-lord and sub-sub-lord columns",topic:"Vedic"},{pascal:"RoxyKpRulingPlanets",tag:"roxy-kp-ruling-planets",slug:"kp-ruling-planets",heading:"KP ruling planets",description:"KP ruling planets with day lord, Moon and Lagna stellar hierarchies, and house significators",docsLabel:"Vedic (KP)",endpointLabel:"POST /vedic-astrology/kp/ruling-planets",docsSummary:"Day lord, Moon/Lagna hierarchies, ruling planets, significators",topic:"Vedic"},{pascal:"RoxyAshtakavargaGrid",tag:"roxy-ashtakavarga-grid",slug:"ashtakavarga-grid",heading:"Ashtakavarga",description:"Sarva and Bhinna ashtakavarga heatmap with bindu scores",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/ashtakavarga",docsSummary:"Sarva, Bhinna, and Shodhya Pinda views in a tabbed heatmap",topic:"Vedic"},{pascal:"RoxyShadbalaTable",tag:"roxy-shadbala-table",slug:"shadbala-table",heading:"Shadbala",description:"Six-fold planetary strength with adequacy badge per planet",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/shadbala",docsSummary:"Six-fold planetary strength bar plus rupas and adequacy badge",topic:"Vedic"},{pascal:"RoxyDashaTimeline",tag:"roxy-dasha-timeline",slug:"dasha-timeline",heading:"Vimshottari dasha",description:"Vimshottari dasha timeline with active mahadasha highlighted",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/dasha/{current,major,sub/...}",docsSummary:"Vimshottari mahadasha + antardasha + pratyantardasha",topic:"Vedic"},{pascal:"RoxyGunaMilan",tag:"roxy-guna-milan",slug:"guna-milan",heading:"Guna milan",description:"36-point Ashtakoota matrimonial compatibility breakdown",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/compatibility",docsSummary:"36-point Ashtakoota with eight sub-scores",topic:"Vedic"},{pascal:"RoxyPanchangTable",tag:"roxy-panchang-table",slug:"panchang-table",heading:"Panchang",description:"Panchang muhurta table with auspicious and inauspicious periods",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/panchang/{basic,detailed}",docsSummary:"15+ muhurtas in detailed mode",topic:"Vedic"},{pascal:"RoxyChoghadiyaGrid",tag:"roxy-choghadiya-grid",slug:"choghadiya-grid",heading:"Choghadiya",description:"Day and night Choghadiya muhurta tiles for activity timing",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/panchang/choghadiya",docsSummary:"Day and night Choghadiya muhurta tiles colored by effect",topic:"Vedic"},{pascal:"RoxyYogaList",tag:"roxy-yoga-list",slug:"yoga-list",heading:"Yoga catalog",description:"Yoga reference cards from the catalog with optional detail mode",docsLabel:"Vedic",endpointLabel:"GET /vedic-astrology/yoga, /yoga/{id}",docsSummary:"Filterable yoga cards from the 300 plus yoga catalog",topic:"Vedic"},{pascal:"RoxyNakshatraCard",tag:"roxy-nakshatra-card",slug:"nakshatra-card",heading:"Nakshatra",description:"Nakshatra reference card with lord, deity, symbol, characteristics, and remedies",docsLabel:"Vedic",endpointLabel:"GET /vedic-astrology/nakshatras/{id}",docsSummary:"Lord, deity, symbol, characteristics, remedies",topic:"Vedic"},{pascal:"RoxyDoshaCard",tag:"roxy-dosha-card",slug:"dosha-card",heading:"Manglik dosha",description:"Manglik, Kaal Sarp, or Sade Sati presence card",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/dosha/{manglik,kalsarpa,sadhesati}",docsSummary:"Presence, severity, remedies, scoped effects",topic:"Vedic"},{pascal:"RoxyNumerologyCard",tag:"roxy-numerology-card",slug:"numerology-card",heading:"Life path number",description:"Numerology card for life path, expression, personal year, or full chart",docsLabel:"Numerology",endpointLabel:"POST /numerology/{life-path,expression,personal-year,chart}",docsSummary:"Life path, expression, personal year, full chart",topic:"Numerology"},{pascal:"RoxyTarotCard",tag:"roxy-tarot-card",slug:"tarot-card",heading:"Daily tarot card",description:"Single tarot card with upright/reversed flip animation",docsLabel:"Tarot",endpointLabel:"GET /tarot/cards/{id}, POST /tarot/daily",docsSummary:"Single card with upright and reversed flip",topic:"Tarot"},{pascal:"RoxyTarotSpread",tag:"roxy-tarot-spread",slug:"tarot-spread",heading:"Three-card spread",description:"Tarot spread renderer for three-card, Celtic Cross, love, or yes/no",docsLabel:"Tarot",endpointLabel:"POST /tarot/spreads/{three-card,celtic-cross,love}, /tarot/yes-no, /tarot/draw",docsSummary:"Spreads with positions and reading",topic:"Tarot"},{pascal:"RoxyBodygraph",tag:"roxy-bodygraph",slug:"bodygraph",heading:"Bodygraph",description:"Human Design bodygraph with nine centers, channels, and activated gates plus a type, authority, and profile summary",docsLabel:"Human Design",endpointLabel:"POST /human-design/bodygraph",docsSummary:"Nine-center chart with defined and open centers, active channels, gates, and a type and authority summary",topic:"Human Design"},{pascal:"RoxyForecastTimeline",tag:"roxy-forecast-timeline",slug:"forecast-timeline",heading:"Forecast timeline",description:"Cross-domain forecast event strip colored by domain and weighted by significance",docsLabel:"Forecast",endpointLabel:"POST /forecast/timeline",docsSummary:"Date-grouped events across Western, Vedic, and biorhythm domains, weighted by significance",topic:"Forecast"},{pascal:"RoxyBiorhythmChart",tag:"roxy-biorhythm-chart",slug:"biorhythm-chart",heading:"Daily biorhythm",description:"Daily biorhythm bars or multi-day forecast cycle lines",docsLabel:"Biorhythm",endpointLabel:"POST /biorhythm/{daily,forecast,critical-days}",docsSummary:"Daily bars, forecast cycle lines, critical days",topic:"Biorhythm"},{pascal:"RoxyHexagram",tag:"roxy-hexagram",slug:"hexagram",heading:"I Ching hexagram",description:"I Ching hexagram with trigram glyphs, judgment, image, and changing lines",docsLabel:"I Ching",endpointLabel:"GET /iching/hexagrams/{number}, /iching/cast, POST /iching/daily, /iching/daily/cast",docsSummary:"Hexagram with trigrams, judgment, image, changing lines",topic:"I Ching"},{pascal:"RoxyEndpointForm",tag:"roxy-endpoint-form",slug:"endpoint-form",heading:"Schema-driven form",description:"Schema-driven form that emits roxy-submit with a validated payload",docsLabel:"Helper",endpointLabel:"Any endpoint via x-roxy-ui hints",docsSummary:"Schema-driven form, emits roxy-submit",topic:"Helpers",selfFetching:!0},{pascal:"RoxyLocationSearch",tag:"roxy-location-search",slug:"location-search",heading:"City search",description:"City search input with debounced /location/search calls",docsLabel:"Helper",endpointLabel:"GET /location/search",docsSummary:"Debounced city search input, emits roxy-location-select",topic:"Helpers",selfFetching:!0},{pascal:"RoxyData",tag:"roxy-data",slug:"data",heading:"Generic renderer",description:"Generic fallback renderer for any OpenAPI response shape",docsLabel:"Helper",endpointLabel:"Any response shape",docsSummary:"Generic fallback renderer for unknown shapes",topic:"Helpers",selfFetching:!0}];var Mr="0.8.0";var ts=St.map(n=>n.slug);return Hr(rs);})();
|
|
85
94
|
/*! Bundled license information:
|
|
86
95
|
|
|
87
96
|
@lit/reactive-element/css-tag.js:
|