@roxyapi/ui 0.2.1 → 0.2.3

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.
@@ -1,6 +1,6 @@
1
- "use strict";var RoxyUI=(()=>{var Ae=Object.defineProperty;var mt=Object.getOwnPropertyDescriptor;var Gt=Object.getOwnPropertyNames;var jt=Object.prototype.hasOwnProperty;var It=(i,r)=>{for(var e in r)Ae(i,e,{get:r[e],enumerable:!0})},Bt=(i,r,e,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of Gt(r))!jt.call(i,s)&&s!==e&&Ae(i,s,{get:()=>r[s],enumerable:!(t=mt(r,s))||t.enumerable});return i};var qt=i=>Bt(Ae({},"__esModule",{value:!0}),i),c=(i,r,e,t)=>{for(var s=t>1?void 0:t?mt(r,e):r,o=i.length-1,l;o>=0;o--)(l=i[o])&&(s=(t?l(r,e,s):l(s))||s);return t&&s&&Ae(r,e,s),s};var Cr={};It(Cr,{ROXY_COMPONENTS:()=>Be,ROXY_UI_COMPONENTS:()=>Ar,ROXY_UI_VERSION:()=>Ht,RoxyAshtakavargaGrid:()=>M,RoxyBiorhythmChart:()=>D,RoxyChoghadiyaGrid:()=>te,RoxyCompatibilityCard:()=>H,RoxyDashaTimeline:()=>G,RoxyData:()=>j,RoxyDivisionalChart:()=>I,RoxyDoshaCard:()=>B,RoxyEndpointForm:()=>_,RoxyGunaMilan:()=>re,RoxyHexagram:()=>q,RoxyHoroscopeCard:()=>U,RoxyKpPlanetsTable:()=>ae,RoxyLocationSearch:()=>T,RoxyMoonPhase:()=>Y,RoxyNatalChart:()=>K,RoxyNumerologyCard:()=>V,RoxyPanchangTable:()=>F,RoxyShadbalaTable:()=>se,RoxySynastryChart:()=>oe,RoxyTarotCard:()=>W,RoxyTarotSpread:()=>J,RoxyTransitsTable:()=>ie,RoxyVedicKundli:()=>X,RoxyYogaList:()=>Z});var Ce=globalThis,Ee=Ce.ShadowRoot&&(Ce.ShadyCSS===void 0||Ce.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,qe=Symbol(),ht=new WeakMap,ye=class{constructor(r,e,t){if(this._$cssResult$=!0,t!==qe)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=r,this.t=e}get styleSheet(){let r=this.o,e=this.t;if(Ee&&r===void 0){let t=e!==void 0&&e.length===1;t&&(r=ht.get(e)),r===void 0&&((this.o=r=new CSSStyleSheet).replaceSync(this.cssText),t&&ht.set(e,r))}return r}toString(){return this.cssText}},gt=i=>new ye(typeof i=="string"?i:i+"",void 0,qe),x=(i,...r)=>{let e=i.length===1?i[0]:r.reduce((t,s,o)=>t+(l=>{if(l._$cssResult$===!0)return l.cssText;if(typeof l=="number")return l;throw Error("Value passed to 'css' function must be a 'css' function result: "+l+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(s)+i[o+1],i[0]);return new ye(e,i,qe)},yt=(i,r)=>{if(Ee)i.adoptedStyleSheets=r.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let e of r){let t=document.createElement("style"),s=Ce.litNonce;s!==void 0&&t.setAttribute("nonce",s),t.textContent=e.cssText,i.appendChild(t)}},Ue=Ee?i=>i:i=>i instanceof CSSStyleSheet?(r=>{let e="";for(let t of r.cssRules)e+=t.cssText;return gt(e)})(i):i;var{is:Ut,defineProperty:Yt,getOwnPropertyDescriptor:Kt,getOwnPropertyNames:Vt,getOwnPropertySymbols:Ft,getPrototypeOf:Wt}=Object,Re=globalThis,ut=Re.trustedTypes,Jt=ut?ut.emptyScript:"",Xt=Re.reactiveElementPolyfillSupport,ue=(i,r)=>i,xe={toAttribute(i,r){switch(r){case Boolean:i=i?Jt:null;break;case Object:case Array:i=i==null?i:JSON.stringify(i)}return i},fromAttribute(i,r){let e=i;switch(r){case Boolean:e=i!==null;break;case Number:e=i===null?null:Number(i);break;case Object:case Array:try{e=JSON.parse(i)}catch{e=null}}return e}},Pe=(i,r)=>!Ut(i,r),xt={attribute:!0,type:String,converter:xe,reflect:!1,useDefault:!1,hasChanged:Pe};Symbol.metadata??=Symbol("metadata"),Re.litPropertyMetadata??=new WeakMap;var z=class extends HTMLElement{static addInitializer(r){this._$Ei(),(this.l??=[]).push(r)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(r,e=xt){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(r)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(r,e),!e.noAccessor){let t=Symbol(),s=this.getPropertyDescriptor(r,t,e);s!==void 0&&Yt(this.prototype,r,s)}}static getPropertyDescriptor(r,e,t){let{get:s,set:o}=Kt(this.prototype,r)??{get(){return this[e]},set(l){this[e]=l}};return{get:s,set(l){let d=s?.call(this);o?.call(this,l),this.requestUpdate(r,d,t)},configurable:!0,enumerable:!0}}static getPropertyOptions(r){return this.elementProperties.get(r)??xt}static _$Ei(){if(this.hasOwnProperty(ue("elementProperties")))return;let r=Wt(this);r.finalize(),r.l!==void 0&&(this.l=[...r.l]),this.elementProperties=new Map(r.elementProperties)}static finalize(){if(this.hasOwnProperty(ue("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(ue("properties"))){let e=this.properties,t=[...Vt(e),...Ft(e)];for(let s of t)this.createProperty(s,e[s])}let r=this[Symbol.metadata];if(r!==null){let e=litPropertyMetadata.get(r);if(e!==void 0)for(let[t,s]of e)this.elementProperties.set(t,s)}this._$Eh=new Map;for(let[e,t]of this.elementProperties){let s=this._$Eu(e,t);s!==void 0&&this._$Eh.set(s,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(r){let e=[];if(Array.isArray(r)){let t=new Set(r.flat(1/0).reverse());for(let s of t)e.unshift(Ue(s))}else r!==void 0&&e.push(Ue(r));return e}static _$Eu(r,e){let t=e.attribute;return t===!1?void 0:typeof t=="string"?t:typeof r=="string"?r.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(r=>this.enableUpdating=r),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(r=>r(this))}addController(r){(this._$EO??=new Set).add(r),this.renderRoot!==void 0&&this.isConnected&&r.hostConnected?.()}removeController(r){this._$EO?.delete(r)}_$E_(){let r=new Map,e=this.constructor.elementProperties;for(let t of e.keys())this.hasOwnProperty(t)&&(r.set(t,this[t]),delete this[t]);r.size>0&&(this._$Ep=r)}createRenderRoot(){let r=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return yt(r,this.constructor.elementStyles),r}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(r=>r.hostConnected?.())}enableUpdating(r){}disconnectedCallback(){this._$EO?.forEach(r=>r.hostDisconnected?.())}attributeChangedCallback(r,e,t){this._$AK(r,t)}_$ET(r,e){let t=this.constructor.elementProperties.get(r),s=this.constructor._$Eu(r,t);if(s!==void 0&&t.reflect===!0){let o=(t.converter?.toAttribute!==void 0?t.converter:xe).toAttribute(e,t.type);this._$Em=r,o==null?this.removeAttribute(s):this.setAttribute(s,o),this._$Em=null}}_$AK(r,e){let t=this.constructor,s=t._$Eh.get(r);if(s!==void 0&&this._$Em!==s){let o=t.getPropertyOptions(s),l=typeof o.converter=="function"?{fromAttribute:o.converter}:o.converter?.fromAttribute!==void 0?o.converter:xe;this._$Em=s;let d=l.fromAttribute(e,o.type);this[s]=d??this._$Ej?.get(s)??d,this._$Em=null}}requestUpdate(r,e,t,s=!1,o){if(r!==void 0){let l=this.constructor;if(s===!1&&(o=this[r]),t??=l.getPropertyOptions(r),!((t.hasChanged??Pe)(o,e)||t.useDefault&&t.reflect&&o===this._$Ej?.get(r)&&!this.hasAttribute(l._$Eu(r,t))))return;this.C(r,e,t)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(r,e,{useDefault:t,reflect:s,wrapped:o},l){t&&!(this._$Ej??=new Map).has(r)&&(this._$Ej.set(r,l??e??this[r]),o!==!0||l!==void 0)||(this._$AL.has(r)||(this.hasUpdated||t||(e=void 0),this._$AL.set(r,e)),s===!0&&this._$Em!==r&&(this._$Eq??=new Set).add(r))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let r=this.scheduleUpdate();return r!=null&&await r,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[s,o]of this._$Ep)this[s]=o;this._$Ep=void 0}let t=this.constructor.elementProperties;if(t.size>0)for(let[s,o]of t){let{wrapped:l}=o,d=this[s];l!==!0||this._$AL.has(s)||d===void 0||this.C(s,void 0,o,d)}}let r=!1,e=this._$AL;try{r=this.shouldUpdate(e),r?(this.willUpdate(e),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(e)):this._$EM()}catch(t){throw r=!1,this._$EM(),t}r&&this._$AE(e)}willUpdate(r){}_$AE(r){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(r)),this.updated(r)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(r){return!0}update(r){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(r){}firstUpdated(r){}};z.elementStyles=[],z.shadowRootOptions={mode:"open"},z[ue("elementProperties")]=new Map,z[ue("finalized")]=new Map,Xt?.({ReactiveElement:z}),(Re.reactiveElementVersions??=[]).push("2.1.2");var Xe=globalThis,ft=i=>i,Te=Xe.trustedTypes,vt=Te?Te.createPolicy("lit-html",{createHTML:i=>i}):void 0,At="$lit$",Q=`lit$${Math.random().toFixed(9).slice(2)}$`,Ct="?"+Q,Zt=`<${Ct}>`,de=document,ve=()=>de.createComment(""),be=i=>i===null||typeof i!="object"&&typeof i!="function",Ze=Array.isArray,Qt=i=>Ze(i)||typeof i?.[Symbol.iterator]=="function",Ye=`[
2
- \f\r]`,fe=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,bt=/-->/g,$t=/>/g,ne=RegExp(`>|${Ye}(?:([^\\s"'>=/]+)(${Ye}*=${Ye}*(?:[^
3
- \f\r"'\`<>=]|("|')|))|$)`,"g"),wt=/'/g,kt=/"/g,Et=/^(?:script|style|textarea|title)$/i,Qe=i=>(r,...e)=>({_$litType$:i,strings:r,values:e}),a=Qe(1),S=Qe(2),_r=Qe(3),ce=Symbol.for("lit-noChange"),n=Symbol.for("lit-nothing"),St=new WeakMap,le=de.createTreeWalker(de,129);function Rt(i,r){if(!Ze(i)||!i.hasOwnProperty("raw"))throw Error("invalid template strings array");return vt!==void 0?vt.createHTML(r):r}var er=(i,r)=>{let e=i.length-1,t=[],s,o=r===2?"<svg>":r===3?"<math>":"",l=fe;for(let d=0;d<e;d++){let p=i[d],m,h,g=-1,f=0;for(;f<p.length&&(l.lastIndex=f,h=l.exec(p),h!==null);)f=l.lastIndex,l===fe?h[1]==="!--"?l=bt:h[1]!==void 0?l=$t:h[2]!==void 0?(Et.test(h[2])&&(s=RegExp("</"+h[2],"g")),l=ne):h[3]!==void 0&&(l=ne):l===ne?h[0]===">"?(l=s??fe,g=-1):h[1]===void 0?g=-2:(g=l.lastIndex-h[2].length,m=h[1],l=h[3]===void 0?ne:h[3]==='"'?kt:wt):l===kt||l===wt?l=ne:l===bt||l===$t?l=fe:(l=ne,s=void 0);let k=l===ne&&i[d+1].startsWith("/>")?" ":"";o+=l===fe?p+Zt:g>=0?(t.push(m),p.slice(0,g)+At+p.slice(g)+Q+k):p+Q+(g===-2?d:k)}return[Rt(i,o+(i[e]||"<?>")+(r===2?"</svg>":r===3?"</math>":"")),t]},$e=class i{constructor({strings:r,_$litType$:e},t){let s;this.parts=[];let o=0,l=0,d=r.length-1,p=this.parts,[m,h]=er(r,e);if(this.el=i.createElement(m,t),le.currentNode=this.el.content,e===2||e===3){let g=this.el.content.firstChild;g.replaceWith(...g.childNodes)}for(;(s=le.nextNode())!==null&&p.length<d;){if(s.nodeType===1){if(s.hasAttributes())for(let g of s.getAttributeNames())if(g.endsWith(At)){let f=h[l++],k=s.getAttribute(g).split(Q),$=/([.?@])?(.*)/.exec(f);p.push({type:1,index:o,name:$[2],strings:k,ctor:$[1]==="."?Ve:$[1]==="?"?Fe:$[1]==="@"?We:ge}),s.removeAttribute(g)}else g.startsWith(Q)&&(p.push({type:6,index:o}),s.removeAttribute(g));if(Et.test(s.tagName)){let g=s.textContent.split(Q),f=g.length-1;if(f>0){s.textContent=Te?Te.emptyScript:"";for(let k=0;k<f;k++)s.append(g[k],ve()),le.nextNode(),p.push({type:2,index:++o});s.append(g[f],ve())}}}else if(s.nodeType===8)if(s.data===Ct)p.push({type:2,index:o});else{let g=-1;for(;(g=s.data.indexOf(Q,g+1))!==-1;)p.push({type:7,index:o}),g+=Q.length-1}o++}}static createElement(r,e){let t=de.createElement("template");return t.innerHTML=r,t}};function he(i,r,e=i,t){if(r===ce)return r;let s=t!==void 0?e._$Co?.[t]:e._$Cl,o=be(r)?void 0:r._$litDirective$;return s?.constructor!==o&&(s?._$AO?.(!1),o===void 0?s=void 0:(s=new o(i),s._$AT(i,e,t)),t!==void 0?(e._$Co??=[])[t]=s:e._$Cl=s),s!==void 0&&(r=he(i,s._$AS(i,r.values),s,t)),r}var Ke=class{constructor(r,e){this._$AV=[],this._$AN=void 0,this._$AD=r,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(r){let{el:{content:e},parts:t}=this._$AD,s=(r?.creationScope??de).importNode(e,!0);le.currentNode=s;let o=le.nextNode(),l=0,d=0,p=t[0];for(;p!==void 0;){if(l===p.index){let m;p.type===2?m=new we(o,o.nextSibling,this,r):p.type===1?m=new p.ctor(o,p.name,p.strings,this,r):p.type===6&&(m=new Je(o,this,r)),this._$AV.push(m),p=t[++d]}l!==p?.index&&(o=le.nextNode(),l++)}return le.currentNode=de,s}p(r){let e=0;for(let t of this._$AV)t!==void 0&&(t.strings!==void 0?(t._$AI(r,t,e),e+=t.strings.length-2):t._$AI(r[e])),e++}},we=class i{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(r,e,t,s){this.type=2,this._$AH=n,this._$AN=void 0,this._$AA=r,this._$AB=e,this._$AM=t,this.options=s,this._$Cv=s?.isConnected??!0}get parentNode(){let r=this._$AA.parentNode,e=this._$AM;return e!==void 0&&r?.nodeType===11&&(r=e.parentNode),r}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(r,e=this){r=he(this,r,e),be(r)?r===n||r==null||r===""?(this._$AH!==n&&this._$AR(),this._$AH=n):r!==this._$AH&&r!==ce&&this._(r):r._$litType$!==void 0?this.$(r):r.nodeType!==void 0?this.T(r):Qt(r)?this.k(r):this._(r)}O(r){return this._$AA.parentNode.insertBefore(r,this._$AB)}T(r){this._$AH!==r&&(this._$AR(),this._$AH=this.O(r))}_(r){this._$AH!==n&&be(this._$AH)?this._$AA.nextSibling.data=r:this.T(de.createTextNode(r)),this._$AH=r}$(r){let{values:e,_$litType$:t}=r,s=typeof t=="number"?this._$AC(r):(t.el===void 0&&(t.el=$e.createElement(Rt(t.h,t.h[0]),this.options)),t);if(this._$AH?._$AD===s)this._$AH.p(e);else{let o=new Ke(s,this),l=o.u(this.options);o.p(e),this.T(l),this._$AH=o}}_$AC(r){let e=St.get(r.strings);return e===void 0&&St.set(r.strings,e=new $e(r)),e}k(r){Ze(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,t,s=0;for(let o of r)s===e.length?e.push(t=new i(this.O(ve()),this.O(ve()),this,this.options)):t=e[s],t._$AI(o),s++;s<e.length&&(this._$AR(t&&t._$AB.nextSibling,s),e.length=s)}_$AR(r=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);r!==this._$AB;){let t=ft(r).nextSibling;ft(r).remove(),r=t}}setConnected(r){this._$AM===void 0&&(this._$Cv=r,this._$AP?.(r))}},ge=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(r,e,t,s,o){this.type=1,this._$AH=n,this._$AN=void 0,this.element=r,this.name=e,this._$AM=s,this.options=o,t.length>2||t[0]!==""||t[1]!==""?(this._$AH=Array(t.length-1).fill(new String),this.strings=t):this._$AH=n}_$AI(r,e=this,t,s){let o=this.strings,l=!1;if(o===void 0)r=he(this,r,e,0),l=!be(r)||r!==this._$AH&&r!==ce,l&&(this._$AH=r);else{let d=r,p,m;for(r=o[0],p=0;p<o.length-1;p++)m=he(this,d[t+p],e,p),m===ce&&(m=this._$AH[p]),l||=!be(m)||m!==this._$AH[p],m===n?r=n:r!==n&&(r+=(m??"")+o[p+1]),this._$AH[p]=m}l&&!s&&this.j(r)}j(r){r===n?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,r??"")}},Ve=class extends ge{constructor(){super(...arguments),this.type=3}j(r){this.element[this.name]=r===n?void 0:r}},Fe=class extends ge{constructor(){super(...arguments),this.type=4}j(r){this.element.toggleAttribute(this.name,!!r&&r!==n)}},We=class extends ge{constructor(r,e,t,s,o){super(r,e,t,s,o),this.type=5}_$AI(r,e=this){if((r=he(this,r,e,0)??n)===ce)return;let t=this._$AH,s=r===n&&t!==n||r.capture!==t.capture||r.once!==t.once||r.passive!==t.passive,o=r!==n&&(t===n||s);s&&this.element.removeEventListener(this.name,this,t),o&&this.element.addEventListener(this.name,this,r),this._$AH=r}handleEvent(r){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,r):this._$AH.handleEvent(r)}},Je=class{constructor(r,e,t){this.element=r,this.type=6,this._$AN=void 0,this._$AM=e,this.options=t}get _$AU(){return this._$AM._$AU}_$AI(r){he(this,r)}};var tr=Xe.litHtmlPolyfillSupport;tr?.($e,we),(Xe.litHtmlVersions??=[]).push("3.3.2");var Pt=(i,r,e)=>{let t=e?.renderBefore??r,s=t._$litPart$;if(s===void 0){let o=e?.renderBefore??null;t._$litPart$=s=new we(r.insertBefore(ve(),o),o,void 0,e??{})}return s._$AI(i),s};var et=globalThis,u=class extends z{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let r=super.createRenderRoot();return this.renderOptions.renderBefore??=r.firstChild,r}update(r){let e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(r),this._$Do=Pt(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return ce}};u._$litElement$=!0,u.finalized=!0,et.litElementHydrateSupport?.({LitElement:u});var rr=et.litElementPolyfillSupport;rr?.({LitElement:u});(et.litElementVersions??=[]).push("4.2.2");var v=i=>(r,e)=>{e!==void 0?e.addInitializer(()=>{customElements.define(i,r)}):customElements.define(i,r)};var ar={attribute:!0,type:String,converter:xe,reflect:!1,hasChanged:Pe},sr=(i=ar,r,e)=>{let{kind:t,metadata:s}=e,o=globalThis.litPropertyMetadata.get(s);if(o===void 0&&globalThis.litPropertyMetadata.set(s,o=new Map),t==="setter"&&((i=Object.create(i)).wrapped=!0),o.set(e.name,i),t==="accessor"){let{name:l}=e;return{set(d){let p=r.get.call(this);r.set.call(this,d),this.requestUpdate(l,p,i,!0,d)},init(d){return d!==void 0&&this.C(l,void 0,i,d),d}}}if(t==="setter"){let{name:l}=e;return function(d){let p=this[l];r.call(this,d),this.requestUpdate(l,p,i,!0,d)}}throw Error("Unsupported decorator location: "+t)};function y(i){return(r,e)=>typeof e=="object"?sr(i,r,e):((t,s,o)=>{let l=s.hasOwnProperty(o);return s.constructor.createProperty(o,t),l?Object.getOwnPropertyDescriptor(s,o):void 0})(i,r,e)}function E(i){return y({...i,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"},tt={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"},N={Aries:"\u2648",Taurus:"\u2649",Gemini:"\u264A",Cancer:"\u264B",Leo:"\u264C",Virgo:"\u264D",Libra:"\u264E",Scorpio:"\u264F",Sagittarius:"\u2650",Capricorn:"\u2651",Aquarius:"\u2652",Pisces:"\u2653"},rt={Aries:"Ar",Taurus:"Ta",Gemini:"Ge",Cancer:"Cn",Leo:"Le",Virgo:"Vi",Libra:"Li",Scorpio:"Sc",Sagittarius:"Sg",Capricorn:"Cp",Aquarius:"Aq",Pisces:"Pi"},pe=["Aries","Taurus","Gemini","Cancer","Leo","Virgo","Libra","Scorpio","Sagittarius","Capricorn","Aquarius","Pisces"],_e=pe.map(i=>i.toLowerCase());var at={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"},Tt={"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 b=x`
1
+ "use strict";var RoxyUI=(()=>{var Ae=Object.defineProperty;var pr=Object.getOwnPropertyDescriptor;var Gr=Object.getOwnPropertyNames;var jr=Object.prototype.hasOwnProperty;var Ir=(i,a)=>{for(var e in a)Ae(i,e,{get:a[e],enumerable:!0})},Br=(i,a,e,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of Gr(a))!jr.call(i,s)&&s!==e&&Ae(i,s,{get:()=>a[s],enumerable:!(r=pr(a,s))||r.enumerable});return i};var qr=i=>Br(Ae({},"__esModule",{value:!0}),i),p=(i,a,e,r)=>{for(var s=r>1?void 0:r?pr(a,e):a,o=i.length-1,l;o>=0;o--)(l=i[o])&&(s=(r?l(a,e,s):l(s))||s);return r&&s&&Ae(a,e,s),s};var Ct={};Ir(Ct,{ROXY_COMPONENTS:()=>Ie,ROXY_UI_COMPONENTS:()=>At,ROXY_UI_VERSION:()=>Hr,RoxyAshtakavargaGrid:()=>M,RoxyBiorhythmChart:()=>D,RoxyChoghadiyaGrid:()=>re,RoxyCompatibilityCard:()=>H,RoxyDashaTimeline:()=>G,RoxyData:()=>j,RoxyDivisionalChart:()=>I,RoxyDoshaCard:()=>B,RoxyEndpointForm:()=>_,RoxyGunaMilan:()=>te,RoxyHexagram:()=>q,RoxyHoroscopeCard:()=>U,RoxyKpPlanetsTable:()=>ae,RoxyLocationSearch:()=>T,RoxyMoonPhase:()=>Y,RoxyNatalChart:()=>K,RoxyNumerologyCard:()=>V,RoxyPanchangTable:()=>F,RoxyShadbalaTable:()=>se,RoxySynastryChart:()=>oe,RoxyTarotCard:()=>W,RoxyTarotSpread:()=>J,RoxyTransitsTable:()=>ie,RoxyVedicKundli:()=>X,RoxyYogaList:()=>Z});var Ce=globalThis,Ee=Ce.ShadowRoot&&(Ce.ShadyCSS===void 0||Ce.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,Be=Symbol(),mr=new WeakMap,ye=class{constructor(a,e,r){if(this._$cssResult$=!0,r!==Be)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(Ee&&a===void 0){let r=e!==void 0&&e.length===1;r&&(a=mr.get(e)),a===void 0&&((this.o=a=new CSSStyleSheet).replaceSync(this.cssText),r&&mr.set(e,a))}return a}toString(){return this.cssText}},hr=i=>new ye(typeof i=="string"?i:i+"",void 0,Be),x=(i,...a)=>{let e=i.length===1?i[0]:a.reduce((r,s,o)=>r+(l=>{if(l._$cssResult$===!0)return l.cssText;if(typeof l=="number")return l;throw Error("Value passed to 'css' function must be a 'css' function result: "+l+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(s)+i[o+1],i[0]);return new ye(e,i,Be)},gr=(i,a)=>{if(Ee)i.adoptedStyleSheets=a.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let e of a){let r=document.createElement("style"),s=Ce.litNonce;s!==void 0&&r.setAttribute("nonce",s),r.textContent=e.cssText,i.appendChild(r)}},qe=Ee?i=>i:i=>i instanceof CSSStyleSheet?(a=>{let e="";for(let r of a.cssRules)e+=r.cssText;return hr(e)})(i):i;var{is:Ur,defineProperty:Yr,getOwnPropertyDescriptor:Kr,getOwnPropertyNames:Vr,getOwnPropertySymbols:Fr,getPrototypeOf:Wr}=Object,Re=globalThis,yr=Re.trustedTypes,Jr=yr?yr.emptyScript:"",Xr=Re.reactiveElementPolyfillSupport,ue=(i,a)=>i,xe={toAttribute(i,a){switch(a){case Boolean:i=i?Jr:null;break;case Object:case Array:i=i==null?i:JSON.stringify(i)}return i},fromAttribute(i,a){let e=i;switch(a){case Boolean:e=i!==null;break;case Number:e=i===null?null:Number(i);break;case Object:case Array:try{e=JSON.parse(i)}catch{e=null}}return e}},Pe=(i,a)=>!Ur(i,a),ur={attribute:!0,type:String,converter:xe,reflect:!1,useDefault:!1,hasChanged:Pe};Symbol.metadata??=Symbol("metadata"),Re.litPropertyMetadata??=new WeakMap;var N=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=ur){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 r=Symbol(),s=this.getPropertyDescriptor(a,r,e);s!==void 0&&Yr(this.prototype,a,s)}}static getPropertyDescriptor(a,e,r){let{get:s,set:o}=Kr(this.prototype,a)??{get(){return this[e]},set(l){this[e]=l}};return{get:s,set(l){let d=s?.call(this);o?.call(this,l),this.requestUpdate(a,d,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(a){return this.elementProperties.get(a)??ur}static _$Ei(){if(this.hasOwnProperty(ue("elementProperties")))return;let a=Wr(this);a.finalize(),a.l!==void 0&&(this.l=[...a.l]),this.elementProperties=new Map(a.elementProperties)}static finalize(){if(this.hasOwnProperty(ue("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(ue("properties"))){let e=this.properties,r=[...Vr(e),...Fr(e)];for(let s of r)this.createProperty(s,e[s])}let a=this[Symbol.metadata];if(a!==null){let e=litPropertyMetadata.get(a);if(e!==void 0)for(let[r,s]of e)this.elementProperties.set(r,s)}this._$Eh=new Map;for(let[e,r]of this.elementProperties){let s=this._$Eu(e,r);s!==void 0&&this._$Eh.set(s,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(a){let e=[];if(Array.isArray(a)){let r=new Set(a.flat(1/0).reverse());for(let s of r)e.unshift(qe(s))}else a!==void 0&&e.push(qe(a));return e}static _$Eu(a,e){let r=e.attribute;return r===!1?void 0:typeof r=="string"?r: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 r of e.keys())this.hasOwnProperty(r)&&(a.set(r,this[r]),delete this[r]);a.size>0&&(this._$Ep=a)}createRenderRoot(){let a=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return gr(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,r){this._$AK(a,r)}_$ET(a,e){let r=this.constructor.elementProperties.get(a),s=this.constructor._$Eu(a,r);if(s!==void 0&&r.reflect===!0){let o=(r.converter?.toAttribute!==void 0?r.converter:xe).toAttribute(e,r.type);this._$Em=a,o==null?this.removeAttribute(s):this.setAttribute(s,o),this._$Em=null}}_$AK(a,e){let r=this.constructor,s=r._$Eh.get(a);if(s!==void 0&&this._$Em!==s){let o=r.getPropertyOptions(s),l=typeof o.converter=="function"?{fromAttribute:o.converter}:o.converter?.fromAttribute!==void 0?o.converter:xe;this._$Em=s;let d=l.fromAttribute(e,o.type);this[s]=d??this._$Ej?.get(s)??d,this._$Em=null}}requestUpdate(a,e,r,s=!1,o){if(a!==void 0){let l=this.constructor;if(s===!1&&(o=this[a]),r??=l.getPropertyOptions(a),!((r.hasChanged??Pe)(o,e)||r.useDefault&&r.reflect&&o===this._$Ej?.get(a)&&!this.hasAttribute(l._$Eu(a,r))))return;this.C(a,e,r)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(a,e,{useDefault:r,reflect:s,wrapped:o},l){r&&!(this._$Ej??=new Map).has(a)&&(this._$Ej.set(a,l??e??this[a]),o!==!0||l!==void 0)||(this._$AL.has(a)||(this.hasUpdated||r||(e=void 0),this._$AL.set(a,e)),s===!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[s,o]of this._$Ep)this[s]=o;this._$Ep=void 0}let r=this.constructor.elementProperties;if(r.size>0)for(let[s,o]of r){let{wrapped:l}=o,d=this[s];l!==!0||this._$AL.has(s)||d===void 0||this.C(s,void 0,o,d)}}let a=!1,e=this._$AL;try{a=this.shouldUpdate(e),a?(this.willUpdate(e),this._$EO?.forEach(r=>r.hostUpdate?.()),this.update(e)):this._$EM()}catch(r){throw a=!1,this._$EM(),r}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){}};N.elementStyles=[],N.shadowRootOptions={mode:"open"},N[ue("elementProperties")]=new Map,N[ue("finalized")]=new Map,Xr?.({ReactiveElement:N}),(Re.reactiveElementVersions??=[]).push("2.1.2");var Je=globalThis,xr=i=>i,Te=Je.trustedTypes,fr=Te?Te.createPolicy("lit-html",{createHTML:i=>i}):void 0,Sr="$lit$",Q=`lit$${Math.random().toFixed(9).slice(2)}$`,Ar="?"+Q,Zr=`<${Ar}>`,de=document,ve=()=>de.createComment(""),be=i=>i===null||typeof i!="object"&&typeof i!="function",Xe=Array.isArray,Qr=i=>Xe(i)||typeof i?.[Symbol.iterator]=="function",Ue=`[
2
+ \f\r]`,fe=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,vr=/-->/g,br=/>/g,ne=RegExp(`>|${Ue}(?:([^\\s"'>=/]+)(${Ue}*=${Ue}*(?:[^
3
+ \f\r"'\`<>=]|("|')|))|$)`,"g"),$r=/'/g,wr=/"/g,Cr=/^(?:script|style|textarea|title)$/i,Ze=i=>(a,...e)=>({_$litType$:i,strings:a,values:e}),t=Ze(1),S=Ze(2),_t=Ze(3),ce=Symbol.for("lit-noChange"),n=Symbol.for("lit-nothing"),kr=new WeakMap,le=de.createTreeWalker(de,129);function Er(i,a){if(!Xe(i)||!i.hasOwnProperty("raw"))throw Error("invalid template strings array");return fr!==void 0?fr.createHTML(a):a}var et=(i,a)=>{let e=i.length-1,r=[],s,o=a===2?"<svg>":a===3?"<math>":"",l=fe;for(let d=0;d<e;d++){let c=i[d],m,h,g=-1,f=0;for(;f<c.length&&(l.lastIndex=f,h=l.exec(c),h!==null);)f=l.lastIndex,l===fe?h[1]==="!--"?l=vr:h[1]!==void 0?l=br:h[2]!==void 0?(Cr.test(h[2])&&(s=RegExp("</"+h[2],"g")),l=ne):h[3]!==void 0&&(l=ne):l===ne?h[0]===">"?(l=s??fe,g=-1):h[1]===void 0?g=-2:(g=l.lastIndex-h[2].length,m=h[1],l=h[3]===void 0?ne:h[3]==='"'?wr:$r):l===wr||l===$r?l=ne:l===vr||l===br?l=fe:(l=ne,s=void 0);let k=l===ne&&i[d+1].startsWith("/>")?" ":"";o+=l===fe?c+Zr:g>=0?(r.push(m),c.slice(0,g)+Sr+c.slice(g)+Q+k):c+Q+(g===-2?d:k)}return[Er(i,o+(i[e]||"<?>")+(a===2?"</svg>":a===3?"</math>":"")),r]},$e=class i{constructor({strings:a,_$litType$:e},r){let s;this.parts=[];let o=0,l=0,d=a.length-1,c=this.parts,[m,h]=et(a,e);if(this.el=i.createElement(m,r),le.currentNode=this.el.content,e===2||e===3){let g=this.el.content.firstChild;g.replaceWith(...g.childNodes)}for(;(s=le.nextNode())!==null&&c.length<d;){if(s.nodeType===1){if(s.hasAttributes())for(let g of s.getAttributeNames())if(g.endsWith(Sr)){let f=h[l++],k=s.getAttribute(g).split(Q),$=/([.?@])?(.*)/.exec(f);c.push({type:1,index:o,name:$[2],strings:k,ctor:$[1]==="."?Ke:$[1]==="?"?Ve:$[1]==="@"?Fe:ge}),s.removeAttribute(g)}else g.startsWith(Q)&&(c.push({type:6,index:o}),s.removeAttribute(g));if(Cr.test(s.tagName)){let g=s.textContent.split(Q),f=g.length-1;if(f>0){s.textContent=Te?Te.emptyScript:"";for(let k=0;k<f;k++)s.append(g[k],ve()),le.nextNode(),c.push({type:2,index:++o});s.append(g[f],ve())}}}else if(s.nodeType===8)if(s.data===Ar)c.push({type:2,index:o});else{let g=-1;for(;(g=s.data.indexOf(Q,g+1))!==-1;)c.push({type:7,index:o}),g+=Q.length-1}o++}}static createElement(a,e){let r=de.createElement("template");return r.innerHTML=a,r}};function he(i,a,e=i,r){if(a===ce)return a;let s=r!==void 0?e._$Co?.[r]:e._$Cl,o=be(a)?void 0:a._$litDirective$;return s?.constructor!==o&&(s?._$AO?.(!1),o===void 0?s=void 0:(s=new o(i),s._$AT(i,e,r)),r!==void 0?(e._$Co??=[])[r]=s:e._$Cl=s),s!==void 0&&(a=he(i,s._$AS(i,a.values),s,r)),a}var Ye=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:r}=this._$AD,s=(a?.creationScope??de).importNode(e,!0);le.currentNode=s;let o=le.nextNode(),l=0,d=0,c=r[0];for(;c!==void 0;){if(l===c.index){let m;c.type===2?m=new we(o,o.nextSibling,this,a):c.type===1?m=new c.ctor(o,c.name,c.strings,this,a):c.type===6&&(m=new We(o,this,a)),this._$AV.push(m),c=r[++d]}l!==c?.index&&(o=le.nextNode(),l++)}return le.currentNode=de,s}p(a){let e=0;for(let r of this._$AV)r!==void 0&&(r.strings!==void 0?(r._$AI(a,r,e),e+=r.strings.length-2):r._$AI(a[e])),e++}},we=class i{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(a,e,r,s){this.type=2,this._$AH=n,this._$AN=void 0,this._$AA=a,this._$AB=e,this._$AM=r,this.options=s,this._$Cv=s?.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=he(this,a,e),be(a)?a===n||a==null||a===""?(this._$AH!==n&&this._$AR(),this._$AH=n):a!==this._$AH&&a!==ce&&this._(a):a._$litType$!==void 0?this.$(a):a.nodeType!==void 0?this.T(a):Qr(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!==n&&be(this._$AH)?this._$AA.nextSibling.data=a:this.T(de.createTextNode(a)),this._$AH=a}$(a){let{values:e,_$litType$:r}=a,s=typeof r=="number"?this._$AC(a):(r.el===void 0&&(r.el=$e.createElement(Er(r.h,r.h[0]),this.options)),r);if(this._$AH?._$AD===s)this._$AH.p(e);else{let o=new Ye(s,this),l=o.u(this.options);o.p(e),this.T(l),this._$AH=o}}_$AC(a){let e=kr.get(a.strings);return e===void 0&&kr.set(a.strings,e=new $e(a)),e}k(a){Xe(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,r,s=0;for(let o of a)s===e.length?e.push(r=new i(this.O(ve()),this.O(ve()),this,this.options)):r=e[s],r._$AI(o),s++;s<e.length&&(this._$AR(r&&r._$AB.nextSibling,s),e.length=s)}_$AR(a=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);a!==this._$AB;){let r=xr(a).nextSibling;xr(a).remove(),a=r}}setConnected(a){this._$AM===void 0&&(this._$Cv=a,this._$AP?.(a))}},ge=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(a,e,r,s,o){this.type=1,this._$AH=n,this._$AN=void 0,this.element=a,this.name=e,this._$AM=s,this.options=o,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=n}_$AI(a,e=this,r,s){let o=this.strings,l=!1;if(o===void 0)a=he(this,a,e,0),l=!be(a)||a!==this._$AH&&a!==ce,l&&(this._$AH=a);else{let d=a,c,m;for(a=o[0],c=0;c<o.length-1;c++)m=he(this,d[r+c],e,c),m===ce&&(m=this._$AH[c]),l||=!be(m)||m!==this._$AH[c],m===n?a=n:a!==n&&(a+=(m??"")+o[c+1]),this._$AH[c]=m}l&&!s&&this.j(a)}j(a){a===n?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,a??"")}},Ke=class extends ge{constructor(){super(...arguments),this.type=3}j(a){this.element[this.name]=a===n?void 0:a}},Ve=class extends ge{constructor(){super(...arguments),this.type=4}j(a){this.element.toggleAttribute(this.name,!!a&&a!==n)}},Fe=class extends ge{constructor(a,e,r,s,o){super(a,e,r,s,o),this.type=5}_$AI(a,e=this){if((a=he(this,a,e,0)??n)===ce)return;let r=this._$AH,s=a===n&&r!==n||a.capture!==r.capture||a.once!==r.once||a.passive!==r.passive,o=a!==n&&(r===n||s);s&&this.element.removeEventListener(this.name,this,r),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)}},We=class{constructor(a,e,r){this.element=a,this.type=6,this._$AN=void 0,this._$AM=e,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(a){he(this,a)}};var rt=Je.litHtmlPolyfillSupport;rt?.($e,we),(Je.litHtmlVersions??=[]).push("3.3.2");var Rr=(i,a,e)=>{let r=e?.renderBefore??a,s=r._$litPart$;if(s===void 0){let o=e?.renderBefore??null;r._$litPart$=s=new we(a.insertBefore(ve(),o),o,void 0,e??{})}return s._$AI(i),s};var Qe=globalThis,u=class extends N{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 ce}};u._$litElement$=!0,u.finalized=!0,Qe.litElementHydrateSupport?.({LitElement:u});var tt=Qe.litElementPolyfillSupport;tt?.({LitElement:u});(Qe.litElementVersions??=[]).push("4.2.2");var v=i=>(a,e)=>{e!==void 0?e.addInitializer(()=>{customElements.define(i,a)}):customElements.define(i,a)};var at={attribute:!0,type:String,converter:xe,reflect:!1,hasChanged:Pe},st=(i=at,a,e)=>{let{kind:r,metadata:s}=e,o=globalThis.litPropertyMetadata.get(s);if(o===void 0&&globalThis.litPropertyMetadata.set(s,o=new Map),r==="setter"&&((i=Object.create(i)).wrapped=!0),o.set(e.name,i),r==="accessor"){let{name:l}=e;return{set(d){let c=a.get.call(this);a.set.call(this,d),this.requestUpdate(l,c,i,!0,d)},init(d){return d!==void 0&&this.C(l,void 0,i,d),d}}}if(r==="setter"){let{name:l}=e;return function(d){let c=this[l];a.call(this,d),this.requestUpdate(l,c,i,!0,d)}}throw Error("Unsupported decorator location: "+r)};function y(i){return(a,e)=>typeof e=="object"?st(i,a,e):((r,s,o)=>{let l=s.hasOwnProperty(o);return s.constructor.createProperty(o,r),l?Object.getOwnPropertyDescriptor(s,o):void 0})(i,a,e)}function E(i){return y({...i,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"},er={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"},z={Aries:"\u2648",Taurus:"\u2649",Gemini:"\u264A",Cancer:"\u264B",Leo:"\u264C",Virgo:"\u264D",Libra:"\u264E",Scorpio:"\u264F",Sagittarius:"\u2650",Capricorn:"\u2651",Aquarius:"\u2652",Pisces:"\u2653"},rr={Aries:"Ar",Taurus:"Ta",Gemini:"Ge",Cancer:"Cn",Leo:"Le",Virgo:"Vi",Libra:"Li",Scorpio:"Sc",Sagittarius:"Sg",Capricorn:"Cp",Aquarius:"Aq",Pisces:"Pi"},pe=["Aries","Taurus","Gemini","Cancer","Leo","Virgo","Libra","Scorpio","Sagittarius","Capricorn","Aquarius","Pisces"],_e=pe.map(i=>i.toLowerCase());var tr={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"},Pr={"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 b=x`
4
4
  :host {
5
5
  display: block;
6
6
  container-type: inline-size;
@@ -82,10 +82,10 @@
82
82
  outline: 2px solid var(--roxy-ring, rgba(245, 158, 11, 0.4));
83
83
  outline-offset: 2px;
84
84
  }
85
- `;var or={sarva:"Sarvashtakavarga",bhinna:"Bhinnashtakavarga",pinda:"Shodhya Pinda"},me=["sarva","bhinna","pinda"],M=class extends u{constructor(){super(...arguments);this.data=null;this.activeTab="sarva"}render(){if(!this.data)return a`<div class="roxy-empty" role="status">No ashtakavarga data</div>`;let e=this.data.signs??[];return a`<div class="wrap" aria-label="Ashtakavarga grid">
85
+ `;var ot={sarva:"Sarvashtakavarga",bhinna:"Bhinnashtakavarga",pinda:"Shodhya Pinda"},me=["sarva","bhinna","pinda"],M=class extends u{constructor(){super(...arguments);this.data=null;this.activeTab="sarva"}render(){if(!this.data)return t`<div class="roxy-empty" role="status">No ashtakavarga data</div>`;let e=this.data.signs??[];return t`<div class="wrap" aria-label="Ashtakavarga grid">
86
86
  <div class="head">
87
87
  <h2 class="title">Ashtakavarga</h2>
88
- ${e.length?a`<p class="subtitle">${e.length} signs</p>`:n}
88
+ ${e.length?t`<p class="subtitle">${e.length} signs</p>`:n}
89
89
  </div>
90
90
 
91
91
  <div
@@ -94,16 +94,16 @@
94
94
  aria-label="Ashtakavarga views"
95
95
  @keydown=${this.onTabKeyDown}
96
96
  >
97
- ${me.map(t=>a`<button
97
+ ${me.map(r=>t`<button
98
98
  class="tab"
99
99
  role="tab"
100
- id="tab-${t}"
101
- aria-selected=${this.activeTab===t?"true":"false"}
102
- aria-controls="panel-${t}"
103
- tabindex=${this.activeTab===t?"0":"-1"}
104
- @click=${()=>{this.activeTab=t}}
100
+ id="tab-${r}"
101
+ aria-selected=${this.activeTab===r?"true":"false"}
102
+ aria-controls="panel-${r}"
103
+ tabindex=${this.activeTab===r?"0":"-1"}
104
+ @click=${()=>{this.activeTab=r}}
105
105
  >
106
- ${or[t]}
106
+ ${ot[r]}
107
107
  </button>`)}
108
108
  </div>
109
109
 
@@ -114,7 +114,7 @@
114
114
  >
115
115
  ${this.activeTab==="sarva"?this.renderSarva(e):this.activeTab==="bhinna"?this.renderBhinna(e):this.renderPinda()}
116
116
  </div>
117
- </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()})}heatClass(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"}renderSarva(e){let t=this.data.sarvashtakavarga;return t?a`<div class="overflow-scroll">
117
+ </div>`}onTabKeyDown(e){let r=me.indexOf(this.activeTab);e.key==="ArrowRight"?(e.preventDefault(),this.activeTab=me[(r+1)%me.length],this.focusActiveTab()):e.key==="ArrowLeft"&&(e.preventDefault(),this.activeTab=me[(r-1+me.length)%me.length],this.focusActiveTab())}focusActiveTab(){requestAnimationFrame(()=>{this.shadowRoot?.querySelector(`#tab-${this.activeTab}`)?.focus()})}heatClass(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"}renderSarva(e){let r=this.data.sarvashtakavarga;return r?t`<div class="overflow-scroll">
118
118
  <table aria-label="Sarvashtakavarga bindu counts per sign">
119
119
  <thead>
120
120
  <tr>
@@ -123,10 +123,10 @@
123
123
  </tr>
124
124
  </thead>
125
125
  <tbody>
126
- ${e.map((s,o)=>{let l=t.bindus[o]??0,d=this.heatClass(l);return a`<tr>
126
+ ${e.map((s,o)=>{let l=r.bindus[o]??0,d=this.heatClass(l);return t`<tr>
127
127
  <td>
128
128
  <div class="planet-cell">
129
- <span class="glyph" aria-hidden="true">${N[s]??""}</span>
129
+ <span class="glyph" aria-hidden="true">${z[s]??""}</span>
130
130
  ${s}
131
131
  </div>
132
132
  </td>
@@ -136,28 +136,28 @@
136
136
  <tfoot>
137
137
  <tr class="total-row">
138
138
  <td>Total</td>
139
- <td>${t.total}</td>
139
+ <td>${r.total}</td>
140
140
  </tr>
141
141
  </tfoot>
142
142
  </table>
143
- </div>`:a`<p class="roxy-empty">No sarvashtakavarga data</p>`}renderBhinna(e){let t=this.data.bhinnashtakavarga;return t?.length?a`<div class="overflow-scroll">
143
+ </div>`:t`<p class="roxy-empty">No sarvashtakavarga data</p>`}renderBhinna(e){let r=this.data.bhinnashtakavarga;return r?.length?t`<div class="overflow-scroll">
144
144
  <table class="bhinna-table" aria-label="Bhinnashtakavarga planet-by-sign grid">
145
145
  <thead>
146
146
  <tr>
147
147
  <th scope="col">Planet</th>
148
- ${e.map(s=>a`<th scope="col" title=${s}>${N[s]??s.slice(0,2)}</th>`)}
148
+ ${e.map(s=>t`<th scope="col" title=${s}>${z[s]??s.slice(0,2)}</th>`)}
149
149
  <th scope="col">Total</th>
150
150
  </tr>
151
151
  </thead>
152
152
  <tbody>
153
- ${t.map(s=>a`<tr>
153
+ ${r.map(s=>t`<tr>
154
154
  <td>${s.planet}</td>
155
- ${s.bindus.map(o=>{let l=this.heatClass(o);return a`<td class="${`heat-cell ${l}`}">${o}</td>`})}
155
+ ${s.bindus.map(o=>{let l=this.heatClass(o);return t`<td class="${`heat-cell ${l}`}">${o}</td>`})}
156
156
  <td>${s.total}</td>
157
157
  </tr>`)}
158
158
  </tbody>
159
159
  </table>
160
- </div>`:a`<p class="roxy-empty">No bhinnashtakavarga data</p>`}renderPinda(){let e=this.data.shodhyaPinda;return e?.length?a`<div class="overflow-scroll">
160
+ </div>`:t`<p class="roxy-empty">No bhinnashtakavarga data</p>`}renderPinda(){let e=this.data.shodhyaPinda;return e?.length?t`<div class="overflow-scroll">
161
161
  <table aria-label="Shodhya Pinda planet strength scores">
162
162
  <thead>
163
163
  <tr>
@@ -168,15 +168,15 @@
168
168
  </tr>
169
169
  </thead>
170
170
  <tbody>
171
- ${e.map(t=>a`<tr>
172
- <td>${t.planet}</td>
173
- <td>${t.rashiPinda}</td>
174
- <td>${t.grahaPinda}</td>
175
- <td>${t.shodhyaPinda}</td>
171
+ ${e.map(r=>t`<tr>
172
+ <td>${r.planet}</td>
173
+ <td>${r.rashiPinda}</td>
174
+ <td>${r.grahaPinda}</td>
175
+ <td>${r.shodhyaPinda}</td>
176
176
  </tr>`)}
177
177
  </tbody>
178
178
  </table>
179
- </div>`:a`<p class="roxy-empty">No shodhya pinda data</p>`}};M.styles=[b,x`
179
+ </div>`:t`<p class="roxy-empty">No shodhya pinda data</p>`}};M.styles=[b,x`
180
180
  .wrap {
181
181
  display: grid;
182
182
  gap: var(--roxy-space-md, 1rem);
@@ -304,26 +304,26 @@
304
304
  .bhinna-table td:first-child {
305
305
  min-width: 5rem;
306
306
  }
307
- `],c([y({attribute:!1})],M.prototype,"data",2),c([E()],M.prototype,"activeTab",2),M=c([v("roxy-ashtakavarga-grid")],M);var Lt={physical:"#dc2626",emotional:"#0284c7",intellectual:"#16a34a",intuitive:"#a855f7",aesthetic:"#f59e0b",awareness:"#ec4899",spiritual:"#14b8a6",passion:"#ef4444",mastery:"#6366f1",wisdom:"#475569"},D=class extends u{constructor(){super(...arguments);this.data=null;this.mode="daily"}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):a`<div class="roxy-empty" role="status">No biorhythm data</div>`}renderDaily(e){let t=e.quickRead??{},s=Object.entries(t).map(([o,l])=>{let d=typeof l=="number"?l:0,p=Math.abs(d)>1?d/100:d;return[o,p]});return a`<section class="wrap" aria-label="Daily biorhythm">
307
+ `],p([y({attribute:!1})],M.prototype,"data",2),p([E()],M.prototype,"activeTab",2),M=p([v("roxy-ashtakavarga-grid")],M);var Tr={physical:"#dc2626",emotional:"#0284c7",intellectual:"#16a34a",intuitive:"#a855f7",aesthetic:"#f59e0b",awareness:"#ec4899",spiritual:"#14b8a6",passion:"#ef4444",mastery:"#6366f1",wisdom:"#475569"},D=class extends u{constructor(){super(...arguments);this.data=null;this.mode="daily"}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):t`<div class="roxy-empty" role="status">No biorhythm data</div>`}renderDaily(e){let r=e.quickRead??{},s=Object.entries(r).map(([o,l])=>{let d=typeof l=="number"?l:0,c=Math.abs(d)>1?d/100:d;return[o,c]});return t`<section class="wrap" aria-label="Daily biorhythm">
308
308
  <header class="head">
309
309
  <h2 class="title">Biorhythm</h2>
310
- ${typeof e.energyRating=="number"?a`<span class="energy">Energy ${e.energyRating}/10</span>`:n}
310
+ ${typeof e.energyRating=="number"?t`<span class="energy">Energy ${e.energyRating}/10</span>`:n}
311
311
  </header>
312
312
  <div class="bars" role="list">
313
- ${s.map(([o,l])=>{let d=(l+1)/2*100,p=Lt[o]??"var(--roxy-accent, #f59e0b)";return a`<div class="bar" role="listitem">
313
+ ${s.map(([o,l])=>{let d=(l+1)/2*100,c=Tr[o]??"var(--roxy-accent, #f59e0b)";return t`<div class="bar" role="listitem">
314
314
  <span style="text-transform: capitalize">${o}</span>
315
315
  <span class="track">
316
316
  <span
317
317
  class="fill"
318
- style="width: ${d}%; background: ${p}"
318
+ style="width: ${d}%; background: ${c}"
319
319
  ></span>
320
320
  </span>
321
321
  <span class="value">${Math.round(l*100)}%</span>
322
322
  </div>`})}
323
323
  </div>
324
- ${e.dailyMessage?a`<p class="advice">${e.dailyMessage}</p>`:n}
325
- ${e.advice?a`<p class="advice">${e.advice}</p>`:n}
326
- </section>`}renderForecast(e){let t=e.days??[];if(t.length===0)return a`<div class="roxy-empty" role="status">No forecast</div>`;let s=600,o=160,l=s/Math.max(t.length-1,1),d=["physical","emotional","intellectual","intuitive"];return a`<section class="wrap" aria-label="Biorhythm forecast">
324
+ ${e.dailyMessage?t`<p class="advice">${e.dailyMessage}</p>`:n}
325
+ ${e.advice?t`<p class="advice">${e.advice}</p>`:n}
326
+ </section>`}renderForecast(e){let r=e.days??[];if(r.length===0)return t`<div class="roxy-empty" role="status">No forecast</div>`;let s=600,o=160,l=s/Math.max(r.length-1,1),d=["physical","emotional","intellectual","intuitive"];return t`<section class="wrap" aria-label="Biorhythm forecast">
327
327
  <header class="head">
328
328
  <h2 class="title">Forecast</h2>
329
329
  <span class="energy">${e.startDate} - ${e.endDate}</span>
@@ -342,17 +342,17 @@
342
342
  stroke="var(--roxy-border, #e4e4e7)"
343
343
  stroke-width="1"
344
344
  />
345
- ${d.map(p=>{let m=t.map((g,f)=>{let k=g[p]??0,$=f*l,pt=o/2-k/100*(o/2-8);return`${$.toFixed(2)},${pt.toFixed(2)}`}).join(" "),h=Lt[p]??"#475569";return S`<polyline points=${m} fill="none" stroke=${h} stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />`})}
345
+ ${d.map(c=>{let m=r.map((g,f)=>{let k=g[c]??0,$=f*l,cr=o/2-k/100*(o/2-8);return`${$.toFixed(2)},${cr.toFixed(2)}`}).join(" "),h=Tr[c]??"#475569";return S`<polyline points=${m} fill="none" stroke=${h} stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />`})}
346
346
  </svg>
347
- ${e.summary?.periodAdvice?a`<p class="advice">${e.summary.periodAdvice}</p>`:n}
348
- </section>`}renderCritical(e){return a`<section class="wrap" aria-label="Critical days">
347
+ ${e.summary?.periodAdvice?t`<p class="advice">${e.summary.periodAdvice}</p>`:n}
348
+ </section>`}renderCritical(e){return t`<section class="wrap" aria-label="Critical days">
349
349
  <header class="head">
350
350
  <h2 class="title">Critical days</h2>
351
351
  <span class="energy">${e.totalCriticalDays} total</span>
352
352
  </header>
353
353
  <div>
354
- ${e.criticalDays.map(t=>a`<span class="crit"
355
- >${t.date} · ${t.cycle} ${t.severity}</span
354
+ ${e.criticalDays.map(r=>t`<span class="crit"
355
+ >${r.date} · ${r.cycle} ${r.severity}</span
356
356
  >`)}
357
357
  </div>
358
358
  </section>`}};D.styles=[b,x`
@@ -431,35 +431,35 @@
431
431
  display: inline-block;
432
432
  margin: 2px;
433
433
  }
434
- `],c([y({attribute:!1})],D.prototype,"data",2),c([y({type:String,reflect:!0})],D.prototype,"mode",2),D=c([v("roxy-biorhythm-chart")],D);function C(i){return i?i.charAt(0).toUpperCase()+i.slice(1).toLowerCase():""}function ee(i){return i.replace(/[_-]+/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/^\w/,r=>r.toUpperCase())}function _t(i){try{let r=new Date(i);return Number.isNaN(r.getTime())?i:r.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}catch{return i}}var te=class extends u{constructor(){super(...arguments);this.data=null}renderTile(e){let t=e.effect==="Good"?"good":e.effect==="Bad"?"bad":"neutral",s=L[C(e.lord)]??"",o=`${_t(e.start)} - ${_t(e.end)}`;return a`<div class="cho-tile ${t}" role="listitem">
434
+ `],p([y({attribute:!1})],D.prototype,"data",2),p([y({type:String,reflect:!0})],D.prototype,"mode",2),D=p([v("roxy-biorhythm-chart")],D);function C(i){return i?i.charAt(0).toUpperCase()+i.slice(1).toLowerCase():""}function ee(i){return i.replace(/[_-]+/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/^\w/,a=>a.toUpperCase())}function Lr(i){try{let a=new Date(i);return Number.isNaN(a.getTime())?i:a.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}catch{return i}}var re=class extends u{constructor(){super(...arguments);this.data=null}renderTile(e){let r=e.effect==="Good"?"good":e.effect==="Bad"?"bad":"neutral",s=L[C(e.lord)]??"",o=`${Lr(e.start)} - ${Lr(e.end)}`;return t`<div class="cho-tile ${r}" role="listitem">
435
435
  <span class="tile-name">${e.name}</span>
436
436
  <span class="tile-time" aria-label="Time range">${o}</span>
437
437
  <span class="tile-lord">
438
- ${s?a`<span aria-hidden="true">${s}</span>`:n}
438
+ ${s?t`<span aria-hidden="true">${s}</span>`:n}
439
439
  ${e.lord}
440
440
  </span>
441
- </div>`}render(){if(!this.data)return a`<div class="roxy-empty" role="status">No choghadiya data</div>`;let{date:e,dayChoghadiya:t,nightChoghadiya:s}=this.data;return a`<div class="wrap">
441
+ </div>`}render(){if(!this.data)return t`<div class="roxy-empty" role="status">No choghadiya data</div>`;let{date:e,dayChoghadiya:r,nightChoghadiya:s}=this.data;return t`<div class="wrap">
442
442
  <div class="header">
443
443
  <h2 class="title">Choghadiya</h2>
444
- ${e?a`<p class="subtitle">${e}</p>`:n}
444
+ ${e?t`<p class="subtitle">${e}</p>`:n}
445
445
  </div>
446
446
 
447
447
  <div class="cho-grid">
448
448
  <section class="period-col" aria-label="Day muhurta periods">
449
449
  <h3 class="period-heading">Day</h3>
450
450
  <div role="list" aria-label="Daytime choghadiya">
451
- ${t&&t.length>0?t.map(o=>this.renderTile(o)):a`<p class="roxy-empty" role="status">No daytime periods</p>`}
451
+ ${r&&r.length>0?r.map(o=>this.renderTile(o)):t`<p class="roxy-empty" role="status">No daytime periods</p>`}
452
452
  </div>
453
453
  </section>
454
454
 
455
455
  <section class="period-col" aria-label="Night muhurta periods">
456
456
  <h3 class="period-heading">Night</h3>
457
457
  <div role="list" aria-label="Nighttime choghadiya">
458
- ${s&&s.length>0?s.map(o=>this.renderTile(o)):a`<p class="roxy-empty" role="status">No nighttime periods</p>`}
458
+ ${s&&s.length>0?s.map(o=>this.renderTile(o)):t`<p class="roxy-empty" role="status">No nighttime periods</p>`}
459
459
  </div>
460
460
  </section>
461
461
  </div>
462
- </div>`}};te.styles=[b,x`
462
+ </div>`}};re.styles=[b,x`
463
463
  .wrap {
464
464
  display: grid;
465
465
  gap: var(--roxy-space-md, 1rem);
@@ -543,20 +543,20 @@
543
543
  align-items: center;
544
544
  gap: 0.25em;
545
545
  }
546
- `],c([y({attribute:!1})],te.prototype,"data",2),te=c([v("roxy-choghadiya-grid")],te);function O(i){if(typeof i!="string"||i.length===0||/^\d{4}-\d{2}-\d{2}$/.test(i))return"";let e=/^\d{2}:\d{2}(:\d{2})?$/.test(i)?`1970-01-01T${i}`:i,t=new Date(e);return Number.isNaN(t.getTime())?i:t.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit",hour12:!0})}function Ne(i){if(typeof i!="string"||i.length===0)return"";let r=new Date(/^\d{4}-\d{2}-\d{2}$/.test(i)?`${i}T00:00:00`:i);return Number.isNaN(r.getTime())?i:r.toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})}function st(i){if(!i)return"";let r=O(i.start),e=O(i.end);return r&&e?`${r} - ${e}`:r||e||""}function w(i,r=1){return typeof i!="number"||!Number.isFinite(i)?"":i.toFixed(r).replace(/\.?0+$/,"")}function Nt(i,r=1){let e=w(i,r);return e?`${e}%`:""}var ze={conjunction:"aspect-conjunction",sextile:"aspect-sextile",square:"aspect-square",trine:"aspect-trine",opposition:"aspect-opposition"};function ke(i){return(i.type??"").toLowerCase().replace(/_/g,"-")}var H=class extends u{constructor(){super(...arguments);this.data=null;this.mode="astrology"}getBreakdown(){let e=this.data;if(!e)return{};if("categories"in e&&e.categories){let t={};for(let[s,o]of Object.entries(e.categories))typeof o=="number"&&Number.isFinite(o)&&(t[s]=o);return t}return{}}render(){let e=this.data;if(!e)return a`<div class="roxy-empty" role="status">No compatibility data</div>`;let t=e.overallScore,s=this.getBreakdown(),o="rating"in e?e.rating:void 0,l="archetype"in e?e.archetype:void 0,d="advice"in e?e.advice:void 0,p="summary"in e?e.summary:void 0,m="interpretation"in e?e.interpretation:void 0,h="strengths"in e?e.strengths:void 0,g="challenges"in e?e.challenges:void 0,f="keyAspects"in e?e.keyAspects:void 0;return a`<article
546
+ `],p([y({attribute:!1})],re.prototype,"data",2),re=p([v("roxy-choghadiya-grid")],re);function O(i){if(typeof i!="string"||i.length===0||/^\d{4}-\d{2}-\d{2}$/.test(i))return"";let e=/^\d{2}:\d{2}(:\d{2})?$/.test(i)?`1970-01-01T${i}`:i,r=new Date(e);return Number.isNaN(r.getTime())?i:r.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit",hour12:!0})}function ze(i){if(typeof i!="string"||i.length===0)return"";let a=new Date(/^\d{4}-\d{2}-\d{2}$/.test(i)?`${i}T00:00:00`:i);return Number.isNaN(a.getTime())?i:a.toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})}function ar(i){if(!i)return"";let a=O(i.start),e=O(i.end);return a&&e?`${a} - ${e}`:a||e||""}function w(i,a=1){return typeof i!="number"||!Number.isFinite(i)?"":i.toFixed(a).replace(/\.?0+$/,"")}function _r(i,a=1){let e=w(i,a);return e?`${e}%`:""}var Ne={conjunction:"aspect-conjunction",sextile:"aspect-sextile",square:"aspect-square",trine:"aspect-trine",opposition:"aspect-opposition"};function ke(i){return(i.type??"").toLowerCase().replace(/_/g,"-")}var H=class extends u{constructor(){super(...arguments);this.data=null;this.mode="astrology"}getBreakdown(){let e=this.data;if(!e)return{};if("categories"in e&&e.categories){let r={};for(let[s,o]of Object.entries(e.categories))typeof o=="number"&&Number.isFinite(o)&&(r[s]=o);return r}return{}}render(){let e=this.data;if(!e)return t`<div class="roxy-empty" role="status">No compatibility data</div>`;let r=e.overallScore,s=this.getBreakdown(),o="rating"in e?e.rating:void 0,l="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,h="strengths"in e?e.strengths:void 0,g="challenges"in e?e.challenges:void 0,f="keyAspects"in e?e.keyAspects:void 0;return t`<article
547
547
  class="card"
548
548
  aria-label=${`Compatibility (${this.mode})`}
549
549
  >
550
550
  <div class="head">
551
551
  <h2>${this.mode} compatibility</h2>
552
552
  <div>
553
- ${typeof t=="number"?a`<div class="score">${w(t,0)}</div>`:n}
554
- ${o?a`<div class="rating">${o}</div>`:n}
553
+ ${typeof r=="number"?t`<div class="score">${w(r,0)}</div>`:n}
554
+ ${o?t`<div class="rating">${o}</div>`:n}
555
555
  </div>
556
556
  </div>
557
557
 
558
- ${Object.keys(s).length>0?a`<div role="list">
559
- ${Object.entries(s).map(([k,$])=>a`<div class="bar-row" role="listitem">
558
+ ${Object.keys(s).length>0?t`<div role="list">
559
+ ${Object.entries(s).map(([k,$])=>t`<div class="bar-row" role="listitem">
560
560
  <span style="text-transform: capitalize">${k}</span>
561
561
  <span class="bar"
562
562
  ><span style="width: ${Math.max(0,Math.min(100,$))}%"></span
@@ -564,31 +564,31 @@
564
564
  <span>${w($,0)}</span>
565
565
  </div>`)}
566
566
  </div>`:n}
567
- ${l?a`<p>
567
+ ${l?t`<p>
568
568
  <span class="archetype">${l.label}</span>
569
- ${l.description?a` · ${l.description}`:n}
569
+ ${l.description?t` · ${l.description}`:n}
570
570
  </p>`:n}
571
- ${p?a`<p>${p}</p>`:n}
572
- ${m&&!p?a`<p>${m}</p>`:n}
573
- ${d?a`<p>${d}</p>`:n}
574
- ${(h?.length??0)>0||(g?.length??0)>0?a`<div class="lists">
575
- ${h?.length?a`<div>
571
+ ${c?t`<p>${c}</p>`:n}
572
+ ${m&&!c?t`<p>${m}</p>`:n}
573
+ ${d?t`<p>${d}</p>`:n}
574
+ ${(h?.length??0)>0||(g?.length??0)>0?t`<div class="lists">
575
+ ${h?.length?t`<div>
576
576
  <h3>Strengths</h3>
577
577
  <ul>
578
- ${h.map(k=>a`<li>${k}</li>`)}
578
+ ${h.map(k=>t`<li>${k}</li>`)}
579
579
  </ul>
580
580
  </div>`:n}
581
- ${g?.length?a`<div>
581
+ ${g?.length?t`<div>
582
582
  <h3>Challenges</h3>
583
583
  <ul>
584
- ${g.map(k=>a`<li>${k}</li>`)}
584
+ ${g.map(k=>t`<li>${k}</li>`)}
585
585
  </ul>
586
586
  </div>`:n}
587
587
  </div>`:n}
588
- ${f?.length?a`<div>
588
+ ${f?.length?t`<div>
589
589
  <h3 style="margin: 0 0 0.25rem; font-size: var(--roxy-text-xs); color: var(--roxy-muted); text-transform: uppercase; letter-spacing: 0.06em;">Key aspects</h3>
590
590
  <ul style="margin: 0; padding-left: 1rem; font-size: var(--roxy-text-sm);">
591
- ${f.slice(0,6).map(k=>a`<li>${ir(k)}</li>`)}
591
+ ${f.slice(0,6).map(k=>t`<li>${it(k)}</li>`)}
592
592
  </ul>
593
593
  </div>`:n}
594
594
  </article>`}};H.styles=[b,x`
@@ -675,43 +675,43 @@
675
675
  margin: 0;
676
676
  padding-left: var(--roxy-space-md, 1rem);
677
677
  }
678
- `],c([y({attribute:!1})],H.prototype,"data",2),c([y({type:String,reflect:!0})],H.prototype,"mode",2),H=c([v("roxy-compatibility-card")],H);function ir(i){let r=i.type.toLowerCase().replace(/_/g,"-"),e=typeof i.orb=="number"?` (orb ${w(i.orb,1)}\xB0)`:"",t=[i.planet1,r,i.planet2].filter(Boolean).join(" ");return i.description?`${t}${e} \xB7 ${i.description}`:`${t}${e}`}var G=class extends u{constructor(){super(...arguments);this.data=null;this.period="current"}render(){let e=this.data;if(!e)return a`<div class="roxy-empty" role="status">No dasha data</div>`;let t=this.collectPeriods(e),s=t.length?Math.max(...t.map(o=>o.durationYears)):0;return a`<div class="wrap" aria-label="Dasha timeline">
678
+ `],p([y({attribute:!1})],H.prototype,"data",2),p([y({type:String,reflect:!0})],H.prototype,"mode",2),H=p([v("roxy-compatibility-card")],H);function it(i){let a=i.type.toLowerCase().replace(/_/g,"-"),e=typeof i.orb=="number"?` (orb ${w(i.orb,1)}\xB0)`:"",r=[i.planet1,a,i.planet2].filter(Boolean).join(" ");return i.description?`${r}${e} \xB7 ${i.description}`:`${r}${e}`}var G=class extends u{constructor(){super(...arguments);this.data=null;this.period="current"}render(){let e=this.data;if(!e)return t`<div class="roxy-empty" role="status">No dasha data</div>`;let r=this.collectPeriods(e),s=r.length?Math.max(...r.map(o=>o.durationYears)):0;return t`<div class="wrap" aria-label="Dasha timeline">
679
679
  <header class="head">
680
680
  <h2 class="title">
681
681
  ${this.period==="major"?"Vimshottari Mahadasha":this.period==="sub"?"Antardasha":"Active dashas"}
682
682
  </h2>
683
- ${"nakshatraName"in e&&e.nakshatraName?a`<div class="nakshatra">
683
+ ${"nakshatraName"in e&&e.nakshatraName?t`<div class="nakshatra">
684
684
  Moon nakshatra: ${e.nakshatraName}
685
- ${"nakshatraLord"in e&&e.nakshatraLord?a`(lord ${e.nakshatraLord})`:n}
685
+ ${"nakshatraLord"in e&&e.nakshatraLord?t`(lord ${e.nakshatraLord})`:n}
686
686
  </div>`:n}
687
687
  </header>
688
688
 
689
689
  ${this.period==="current"?this.renderCurrent(e):n}
690
- ${t.length>0?a`<div class="timeline" role="list">
691
- ${t.map(o=>this.renderBar(o,s))}
690
+ ${r.length>0?t`<div class="timeline" role="list">
691
+ ${r.map(o=>this.renderBar(o,s))}
692
692
  </div>`:n}
693
- </div>`}renderCurrent(e){return"mahadasha"in e?a`<div class="current">
694
- ${"mahadasha"in e&&e.mahadasha?a`<div>
693
+ </div>`}renderCurrent(e){return"mahadasha"in e?t`<div class="current">
694
+ ${"mahadasha"in e&&e.mahadasha?t`<div>
695
695
  <span>Mahadasha</span>
696
696
  <strong>${e.mahadasha.planet}</strong>
697
- ${"remainingInMahadasha"in e&&e.remainingInMahadasha?a`<small>${w(e.remainingInMahadasha.years+e.remainingInMahadasha.months/12,1)} years left</small>`:n}
697
+ ${"remainingInMahadasha"in e&&e.remainingInMahadasha?t`<small>${w(e.remainingInMahadasha.years+e.remainingInMahadasha.months/12,1)} years left</small>`:n}
698
698
  </div>`:n}
699
- ${"antardasha"in e&&e.antardasha?a`<div>
699
+ ${"antardasha"in e&&e.antardasha?t`<div>
700
700
  <span>Antardasha</span>
701
701
  <strong>${e.antardasha.planet}</strong>
702
- ${"remainingInAntardasha"in e&&e.remainingInAntardasha?a`<small>${w(e.remainingInAntardasha.years+e.remainingInAntardasha.months/12,1)} years left</small>`:n}
702
+ ${"remainingInAntardasha"in e&&e.remainingInAntardasha?t`<small>${w(e.remainingInAntardasha.years+e.remainingInAntardasha.months/12,1)} years left</small>`:n}
703
703
  </div>`:n}
704
- ${"pratyantardasha"in e&&e.pratyantardasha?a`<div>
704
+ ${"pratyantardasha"in e&&e.pratyantardasha?t`<div>
705
705
  <span>Pratyantardasha</span>
706
706
  <strong>${e.pratyantardasha.planet}</strong>
707
- ${"remainingInPratyantardasha"in e&&e.remainingInPratyantardasha?a`<small>${w(e.remainingInPratyantardasha.years+e.remainingInPratyantardasha.months/12,1)} years left</small>`:n}
707
+ ${"remainingInPratyantardasha"in e&&e.remainingInPratyantardasha?t`<small>${w(e.remainingInPratyantardasha.years+e.remainingInPratyantardasha.months/12,1)} years left</small>`:n}
708
708
  </div>`:n}
709
- </div>`:n}collectPeriods(e){return"mahadashas"in e&&e.mahadashas?.length?e.mahadashas:"antardashas"in e&&e.antardashas?.length?e.antardashas:[]}renderBar(e,t){let s=e.durationYears,o=t>0?s/t*100:0;return a`<div class="bar" role="listitem">
709
+ </div>`:n}collectPeriods(e){return"mahadashas"in e&&e.mahadashas?.length?e.mahadashas:"antardashas"in e&&e.antardashas?.length?e.antardashas:[]}renderBar(e,r){let s=e.durationYears,o=r>0?s/r*100:0;return t`<div class="bar" role="listitem">
710
710
  <span>${e.planet}</span>
711
711
  <span class="bar-track"><span style="width: ${o}%"></span></span>
712
712
  <span class="dates">
713
- ${e.startDate?zt(e.startDate):""}
714
- ${e.endDate?a`- ${zt(e.endDate)}`:""}
713
+ ${e.startDate?zr(e.startDate):""}
714
+ ${e.endDate?t`- ${zr(e.endDate)}`:""}
715
715
  </span>
716
716
  </div>`}};G.styles=[b,x`
717
717
  .wrap {
@@ -788,44 +788,44 @@
788
788
  font-variant-numeric: tabular-nums;
789
789
  text-align: right;
790
790
  }
791
- `],c([y({attribute:!1})],G.prototype,"data",2),c([y({type:String,reflect:!0})],G.prototype,"period",2),G=c([v("roxy-dasha-timeline")],G);function zt(i){let r=i.match(/^(\d{4})/);return r?r[1]:i}var nr=["title","name","label","heading","overview","summary"],lr=["imageUrl","image","icon","symbol"],dr=["imageUrl","image"],cr=6,j=class extends u{constructor(){super(...arguments);this.data=null;this.depth=0}render(){return this.data==null?a`<div class="roxy-empty" role="status">No data</div>`:this.depth>=cr?a`<div class="roxy-empty" role="status">…</div>`:a`<div
791
+ `],p([y({attribute:!1})],G.prototype,"data",2),p([y({type:String,reflect:!0})],G.prototype,"period",2),G=p([v("roxy-dasha-timeline")],G);function zr(i){let a=i.match(/^(\d{4})/);return a?a[1]:i}var nt=["title","name","label","heading","overview","summary"],lt=["imageUrl","image","icon","symbol"],dt=["imageUrl","image"],ct=6,j=class extends u{constructor(){super(...arguments);this.data=null;this.depth=0}render(){return this.data==null?t`<div class="roxy-empty" role="status">No data</div>`:this.depth>=ct?t`<div class="roxy-empty" role="status">…</div>`:t`<div
792
792
  class="roxy-card"
793
793
  aria-label="Generic data display"
794
794
  >
795
795
  ${this.renderValue(this.data)}
796
- </div>`}renderValue(e){return e==null?n:typeof e=="string"?a`<p>${e}</p>`:typeof e=="number"||typeof e=="boolean"?a`<p>${String(e)}</p>`:Array.isArray(e)?this.renderArray(e):this.renderObject(e)}renderArray(e){return e.length===0?a`<div class="roxy-empty" role="status">Empty list</div>`:e.every(o=>o===null||["string","number","boolean"].includes(typeof o))?a`<ul class="roxy-chips">
797
- ${e.map(o=>a`<li>${String(o)}</li>`)}
798
- </ul>`:e.every(o=>o!==null&&typeof o=="object"&&!Array.isArray(o))?this.renderTable(e):a`<ol>
799
- ${e.map(o=>a`<li>${this.renderValue(o)}</li>`)}
800
- </ol>`}renderTable(e){let t=this.collectKeys(e);return a`<table class="roxy-table" role="table">
796
+ </div>`}renderValue(e){return e==null?n:typeof e=="string"?t`<p>${e}</p>`:typeof e=="number"||typeof e=="boolean"?t`<p>${String(e)}</p>`:Array.isArray(e)?this.renderArray(e):this.renderObject(e)}renderArray(e){return e.length===0?t`<div class="roxy-empty" role="status">Empty list</div>`:e.every(o=>o===null||["string","number","boolean"].includes(typeof o))?t`<ul class="roxy-chips">
797
+ ${e.map(o=>t`<li>${String(o)}</li>`)}
798
+ </ul>`:e.every(o=>o!==null&&typeof o=="object"&&!Array.isArray(o))?this.renderTable(e):t`<ol>
799
+ ${e.map(o=>t`<li>${this.renderValue(o)}</li>`)}
800
+ </ol>`}renderTable(e){let r=this.collectKeys(e);return t`<table class="roxy-table" role="table">
801
801
  <thead>
802
802
  <tr>
803
- ${t.map(s=>a`<th>${ee(s)}</th>`)}
803
+ ${r.map(s=>t`<th>${ee(s)}</th>`)}
804
804
  </tr>
805
805
  </thead>
806
806
  <tbody>
807
- ${e.map(s=>a`<tr>
808
- ${t.map(o=>a`<td>${this.formatPrimitive(s[o])}</td>`)}
807
+ ${e.map(s=>t`<tr>
808
+ ${r.map(o=>t`<td>${this.formatPrimitive(s[o])}</td>`)}
809
809
  </tr>`)}
810
810
  </tbody>
811
- </table>`}renderObject(e){let t=nr.find(d=>typeof e[d]=="string"),s=lr.find(d=>typeof e[d]=="string"&&e[d].startsWith("http")),o=t!=="summary"&&typeof e.summary=="string"?"summary":null,l=Object.entries(e).filter(([d,p])=>d!==t&&d!==o&&!dr.includes(d)&&p!==null&&p!==void 0);return a`
812
- ${s?a`<img
811
+ </table>`}renderObject(e){let r=nt.find(d=>typeof e[d]=="string"),s=lt.find(d=>typeof e[d]=="string"&&e[d].startsWith("http")),o=r!=="summary"&&typeof e.summary=="string"?"summary":null,l=Object.entries(e).filter(([d,c])=>d!==r&&d!==o&&!dt.includes(d)&&c!==null&&c!==void 0);return t`
812
+ ${s?t`<img
813
813
  class="roxy-image"
814
814
  src=${String(e[s])}
815
- alt=${t?String(e[t]):"illustration"}
815
+ alt=${r?String(e[r]):"illustration"}
816
816
  loading="lazy"
817
817
  />`:n}
818
- ${t?a`<h3 class="roxy-title">${e[t]}</h3>`:n}
819
- ${o?a`<p class="roxy-summary">${e[o]}</p>`:n}
820
- ${l.length>0?a`<dl class="roxy-rows">
821
- ${l.map(([d,p])=>a`
818
+ ${r?t`<h3 class="roxy-title">${e[r]}</h3>`:n}
819
+ ${o?t`<p class="roxy-summary">${e[o]}</p>`:n}
820
+ ${l.length>0?t`<dl class="roxy-rows">
821
+ ${l.map(([d,c])=>t`
822
822
  <dt>${ee(d)}</dt>
823
- <dd>${this.renderField(p)}</dd>
823
+ <dd>${this.renderField(c)}</dd>
824
824
  `)}
825
825
  </dl>`:n}
826
- `}renderField(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):Array.isArray(e)&&e.every(s=>["string","number","boolean"].includes(typeof s))?a`<ul class="roxy-chips">
827
- ${e.map(s=>a`<li>${String(s)}</li>`)}
828
- </ul>`:a`<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 s of e)for(let o of Object.keys(s))t.add(o);return Array.from(t)}};j.styles=[b,x`
826
+ `}renderField(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):Array.isArray(e)&&e.every(s=>["string","number","boolean"].includes(typeof s))?t`<ul class="roxy-chips">
827
+ ${e.map(s=>t`<li>${String(s)}</li>`)}
828
+ </ul>`:t`<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 r=new Set;for(let s of e)for(let o of Object.keys(s))r.add(o);return Array.from(r)}};j.styles=[b,x`
829
829
  .roxy-card {
830
830
  background: var(--roxy-bg, #fff);
831
831
  border: 1px solid var(--roxy-border, #e4e4e7);
@@ -919,16 +919,16 @@
919
919
  margin: 0 0 var(--roxy-space-xs, 0.25rem) 0;
920
920
  text-transform: capitalize;
921
921
  }
922
- `],c([y({attribute:!1})],j.prototype,"data",2),c([y({attribute:!1})],j.prototype,"depth",2),j=c([v("roxy-data")],j);var Me=Object.fromEntries(pe.map(i=>[i.toLowerCase(),i])),pr={1:{x:150,y:58},2:{x:205,y:52},3:{x:253,y:112},4:{x:243,y:150},5:{x:253,y:188},6:{x:205,y:248},7:{x:150,y:242},8:{x:95,y:248},9:{x:47,y:188},10:{x:57,y:150},11:{x:47,y:112},12:{x:95,y:52}},mr={1:{x:150,y:35},2:{x:222,y:40},3:{x:265,y:100},4:{x:265,y:150},5:{x:265,y:200},6:{x:222,y:260},7:{x:150,y:265},8:{x:78,y:260},9:{x:35,y:200},10:{x:35,y:150},11:{x:35,y:100},12:{x:78,y:40}},hr={1:{x:150,y:60},2:{x:225,y:100},3:{x:255,y:150},4:{x:225,y:200},5:{x:150,y:240},6:{x:75,y:200},7:{x:45,y:150},8:{x:75,y:100},9:{x:100,y:80},10:{x:150,y:108},11:{x:200,y:80},12:{x:200,y:220}};function De(i){let r=pr[i.number],e=mr[i.number];if(!r||!e)return n;let t=rt[i.sign]??"",s=i.planets;return S`
922
+ `],p([y({attribute:!1})],j.prototype,"data",2),p([y({attribute:!1})],j.prototype,"depth",2),j=p([v("roxy-data")],j);var Me=Object.fromEntries(pe.map(i=>[i.toLowerCase(),i])),pt={1:{x:150,y:58},2:{x:205,y:52},3:{x:253,y:112},4:{x:243,y:150},5:{x:253,y:188},6:{x:205,y:248},7:{x:150,y:242},8:{x:95,y:248},9:{x:47,y:188},10:{x:57,y:150},11:{x:47,y:112},12:{x:95,y:52}},mt={1:{x:150,y:35},2:{x:222,y:40},3:{x:265,y:100},4:{x:265,y:150},5:{x:265,y:200},6:{x:222,y:260},7:{x:150,y:265},8:{x:78,y:260},9:{x:35,y:200},10:{x:35,y:150},11:{x:35,y:100},12:{x:78,y:40}},ht={1:{x:150,y:60},2:{x:225,y:100},3:{x:255,y:150},4:{x:225,y:200},5:{x:150,y:240},6:{x:75,y:200},7:{x:45,y:150},8:{x:75,y:100},9:{x:100,y:80},10:{x:150,y:108},11:{x:200,y:80},12:{x:200,y:220}};function De(i){let a=pt[i.number],e=mt[i.number];if(!a||!e)return n;let r=rr[i.sign]??"",s=i.planets;return S`
923
923
  <g>
924
924
  ${i.isLagna?S`<rect
925
925
  class="lagna-bg"
926
- x=${r.x-30} y=${r.y-28}
926
+ x=${a.x-30} y=${a.y-28}
927
927
  width="60" height="56" rx="6"
928
928
  />`:n}
929
- ${t?S`<text class="sign-text" x=${e.x} y=${e.y} text-anchor="middle" dominant-baseline="central">${t}</text>`:n}
930
- ${i.isLagna?S`<text class="lagna-marker" x=${r.x} y=${r.y-18} text-anchor="middle" dominant-baseline="central">LAGNA</text>`:n}
931
- ${s.map((o,l)=>{let d=tt[C(o)]??o.slice(0,2),p=13,g=(i.isLagna?r.y+8:r.y)-(s.length-1)*p/2+l*p;return S`<text class="planet-text" x=${r.x} y=${g} text-anchor="middle" dominant-baseline="central">${d}</text>`})}
929
+ ${r?S`<text class="sign-text" x=${e.x} y=${e.y} text-anchor="middle" dominant-baseline="central">${r}</text>`:n}
930
+ ${i.isLagna?S`<text class="lagna-marker" x=${a.x} y=${a.y-18} text-anchor="middle" dominant-baseline="central">LAGNA</text>`:n}
931
+ ${s.map((o,l)=>{let d=er[C(o)]??o.slice(0,2),c=13,g=(i.isLagna?a.y+8:a.y)-(s.length-1)*c/2+l*c;return S`<text class="planet-text" x=${a.x} y=${g} text-anchor="middle" dominant-baseline="central">${d}</text>`})}
932
932
  </g>
933
933
  `}function Oe(){return S`
934
934
  <polygon class="line" points="150,10 290,150 150,290 10,150" stroke-width="1.5" />
@@ -938,12 +938,12 @@
938
938
  <line class="line" x1="150" y1="10" x2="290" y2="150" stroke-width="0.6" stroke-dasharray="3,3" />
939
939
  <line class="line" x1="150" y1="290" x2="10" y2="150" stroke-width="0.6" stroke-dasharray="3,3" />
940
940
  <line class="line" x1="150" y1="290" x2="290" y2="150" stroke-width="0.6" stroke-dasharray="3,3" />
941
- `}function He(i){let r=hr[i.number];if(!r)return n;let e=rt[i.sign]??"",t=i.planets;return S`
941
+ `}function He(i){let a=ht[i.number];if(!a)return n;let e=rr[i.sign]??"",r=i.planets;return S`
942
942
  <g>
943
- ${i.isLagna?S`<circle class="lagna-bg" cx=${r.x} cy=${r.y} r="22" />`:n}
944
- ${e?S`<text class="sign-text" x=${r.x} y=${r.y-10} text-anchor="middle" dominant-baseline="central">${e}</text>`:n}
945
- <text class="house-num" x=${r.x} y=${r.y+2} text-anchor="middle" dominant-baseline="central">${i.number}</text>
946
- ${t.map((s,o)=>{let l=tt[C(s)]??s.slice(0,2),d=11,m=r.y+14-(t.length-1)*d/2+o*d;return S`<text class="planet-text" x=${r.x} y=${m} text-anchor="middle" dominant-baseline="central">${l}</text>`})}
943
+ ${i.isLagna?S`<circle class="lagna-bg" cx=${a.x} cy=${a.y} r="22" />`:n}
944
+ ${e?S`<text class="sign-text" x=${a.x} y=${a.y-10} text-anchor="middle" dominant-baseline="central">${e}</text>`:n}
945
+ <text class="house-num" x=${a.x} y=${a.y+2} text-anchor="middle" dominant-baseline="central">${i.number}</text>
946
+ ${r.map((s,o)=>{let l=er[C(s)]??s.slice(0,2),d=11,m=a.y+14-(r.length-1)*d/2+o*d;return S`<text class="planet-text" x=${a.x} y=${m} text-anchor="middle" dominant-baseline="central">${l}</text>`})}
947
947
  </g>
948
948
  `}function Ge(){return S`
949
949
  <polygon class="line" points="150,10 290,150 150,290 10,150" stroke-width="1.5" />
@@ -956,13 +956,13 @@
956
956
  <line class="line" x1="150" y1="290" x2="80" y2="220" stroke-width="1" />
957
957
  <line class="line" x1="10" y1="150" x2="80" y2="220" stroke-width="1" />
958
958
  <line class="line" x1="10" y1="150" x2="80" y2="80" stroke-width="1" />
959
- `}var I=class extends u{constructor(){super(...arguments);this.data=null;this.chartStyle="south"}buildHouses(){if(!this.data)return[];let e=this.data.chart,s=(this.data.chart.meta??{}).Lagna?.rashi??"",o=[];for(let l=0;l<12;l++){let d=_e[l],m=(e[d]?.signs??[]).map(g=>g.graha).filter(Boolean),h=Me[d]??"";o.push({number:l+1,sign:h,planets:m,isLagna:s?s.toLowerCase()===h.toLowerCase():!1})}return o}render(){if(!this.data)return a`<div class="roxy-empty" role="status">No divisional chart data</div>`;let{division:e,vargottama:t}=this.data,s=this.buildHouses(),o=this.chartStyle==="north";return a`<div class="wrap">
959
+ `}var I=class extends u{constructor(){super(...arguments);this.data=null;this.chartStyle="south"}buildHouses(){if(!this.data)return[];let e=this.data.chart,s=(this.data.chart.meta??{}).Lagna?.rashi??"",o=[];for(let l=0;l<12;l++){let d=_e[l],m=(e[d]?.signs??[]).map(g=>g.graha).filter(Boolean),h=Me[d]??"";o.push({number:l+1,sign:h,planets:m,isLagna:s?s.toLowerCase()===h.toLowerCase():!1})}return o}render(){if(!this.data)return t`<div class="roxy-empty" role="status">No divisional chart data</div>`;let{division:e,vargottama:r}=this.data,s=this.buildHouses(),o=this.chartStyle==="north";return t`<div class="wrap">
960
960
  <div class="header">
961
961
  <h2 class="title">
962
962
  D${e.number} ${e.name}
963
- ${e.sanskritName&&e.sanskritName!==e.name?a`<span class="division-meta"> · ${e.sanskritName}</span>`:n}
963
+ ${e.sanskritName&&e.sanskritName!==e.name?t`<span class="division-meta"> · ${e.sanskritName}</span>`:n}
964
964
  </h2>
965
- ${e.significance?a`<p class="significance">${e.significance}</p>`:n}
965
+ ${e.significance?t`<p class="significance">${e.significance}</p>`:n}
966
966
  </div>
967
967
 
968
968
  <svg
@@ -975,9 +975,9 @@
975
975
  ${o?s.map(l=>He(l)):s.map(l=>De(l))}
976
976
  </svg>
977
977
 
978
- ${t&&t.length>0?a`<div class="vargottama-row" role="list" aria-label="Vargottama planets">
978
+ ${r&&r.length>0?t`<div class="vargottama-row" role="list" aria-label="Vargottama planets">
979
979
  <span class="vargottama-label">Vargottama:</span>
980
- ${t.map(l=>a`<span class="vargottama-pill" role="listitem">
980
+ ${r.map(l=>t`<span class="vargottama-pill" role="listitem">
981
981
  ${L[l]??""} ${l}
982
982
  </span>`)}
983
983
  </div>`:n}
@@ -1071,17 +1071,17 @@
1071
1071
  color: var(--roxy-fg, #0a0a0a);
1072
1072
  border: 1px solid color-mix(in srgb, var(--roxy-accent, #f59e0b) 45%, transparent);
1073
1073
  }
1074
- `],c([y({attribute:!1})],I.prototype,"data",2),c([y({type:String,reflect:!0,attribute:"chart-style"})],I.prototype,"chartStyle",2),I=c([v("roxy-divisional-chart")],I);var gr={manglik:"Mangal Dosha",kalsarpa:"Kaal Sarp Dosha",sadhesati:"Sade Sati"},B=class extends u{constructor(){super(...arguments);this.data=null;this.type="manglik"}render(){let e=this.data;if(!e)return a`<div class="roxy-empty" role="status">No dosha data</div>`;let t=!!e.present,s=gr[this.type]??this.type,o=(e.severity??"").toLowerCase(),l=o==="severe"?3:o==="moderate"?2:o==="mild"?1:0,d=l*33,p=l===3?"var(--roxy-danger)":l===2?"var(--roxy-warning)":l===1?"var(--roxy-success)":"transparent";return a`<article
1074
+ `],p([y({attribute:!1})],I.prototype,"data",2),p([y({type:String,reflect:!0,attribute:"chart-style"})],I.prototype,"chartStyle",2),I=p([v("roxy-divisional-chart")],I);var gt={manglik:"Mangal Dosha",kalsarpa:"Kaal Sarp Dosha",sadhesati:"Sade Sati"},B=class extends u{constructor(){super(...arguments);this.data=null;this.type="manglik"}render(){let e=this.data;if(!e)return t`<div class="roxy-empty" role="status">No dosha data</div>`;let r=!!e.present,s=gt[this.type]??this.type,o=(e.severity??"").toLowerCase(),l=o==="severe"?3:o==="moderate"?2:o==="mild"?1:0,d=l*33,c=l===3?"var(--roxy-danger)":l===2?"var(--roxy-warning)":l===1?"var(--roxy-success)":"transparent";return t`<article
1075
1075
  class="card"
1076
1076
  aria-label=${s}
1077
1077
  >
1078
1078
  <header class="head">
1079
1079
  <h2 class="title">${s}</h2>
1080
- <span class=${`badge ${t?"present":"absent"}`}>
1081
- ${t?"Present":"Absent"}
1080
+ <span class=${`badge ${r?"present":"absent"}`}>
1081
+ ${r?"Present":"Absent"}
1082
1082
  </span>
1083
1083
  </header>
1084
- ${e.severity?a`<div
1084
+ ${e.severity?t`<div
1085
1085
  class="severity-bar"
1086
1086
  role="meter"
1087
1087
  aria-valuemin="0"
@@ -1089,24 +1089,24 @@
1089
1089
  aria-valuenow="${l}"
1090
1090
  aria-label="Severity ${e.severity}"
1091
1091
  >
1092
- <span class="severity-fill" style="width: ${d}%; background: ${p};"></span>
1092
+ <span class="severity-fill" style="width: ${d}%; background: ${c};"></span>
1093
1093
  </div>`:n}
1094
- ${e.description?a`<p class="description">${e.description}</p>`:n}
1094
+ ${e.description?t`<p class="description">${e.description}</p>`:n}
1095
1095
  ${this.renderEffects(e)}
1096
- ${e.remedies&&e.remedies.length>0?a`<div>
1096
+ ${e.remedies&&e.remedies.length>0?t`<div>
1097
1097
  <h3>Remedies</h3>
1098
1098
  <ul>
1099
- ${e.remedies.map(m=>a`<li>${m}</li>`)}
1099
+ ${e.remedies.map(m=>t`<li>${m}</li>`)}
1100
1100
  </ul>
1101
1101
  </div>`:n}
1102
- ${"exceptions"in e&&e.exceptions&&e.exceptions.length>0?a`<div>
1102
+ ${"exceptions"in e&&e.exceptions&&e.exceptions.length>0?t`<div>
1103
1103
  <h3>Exceptions</h3>
1104
1104
  <ul>
1105
- ${e.exceptions.map(m=>a`<li>${m}</li>`)}
1105
+ ${e.exceptions.map(m=>t`<li>${m}</li>`)}
1106
1106
  </ul>
1107
1107
  </div>`:n}
1108
- </article>`}renderEffects(e){if(!e.effects)return n;let t=Object.entries(e.effects).filter(([,s])=>typeof s=="string"&&s.length>0);return t.length===0?n:a`<div class="effects">
1109
- ${t.map(([s,o])=>a`<div>
1108
+ </article>`}renderEffects(e){if(!e.effects)return n;let r=Object.entries(e.effects).filter(([,s])=>typeof s=="string"&&s.length>0);return r.length===0?n:t`<div class="effects">
1109
+ ${r.map(([s,o])=>t`<div>
1110
1110
  <h3>${s}</h3>
1111
1111
  <p>${o}</p>
1112
1112
  </div>`)}
@@ -1198,36 +1198,36 @@
1198
1198
  margin: 0;
1199
1199
  font-size: var(--roxy-text-sm, 0.875rem);
1200
1200
  }
1201
- `],c([y({attribute:!1})],B.prototype,"data",2),c([y({type:String,reflect:!0})],B.prototype,"type",2),B=c([v("roxy-dosha-card")],B);var ot=new Map;async function yr(i){let r=ot.get(i);return r||(r=fetch(i).then(async e=>{if(!e.ok)throw new Error(`HTTP ${e.status}`);return await e.json()}).catch(e=>{throw ot.delete(i),e}),ot.set(i,r)),r}var _=class extends u{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(s=>s.required).filter(s=>this.values[s.name]===void 0||this.values[s.name]==="");if(t.length>0){this.dispatchEvent(new CustomEvent("roxy-validation-error",{detail:{missing:t.map(s=>s.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 yr(this.specUrl),t=`/${this.endpoint.replace(/^\//,"")}`,s=e.paths?.[t]?.[this.method.toLowerCase()];if(!s)throw new Error(`Endpoint ${this.method} ${t} not found in OpenAPI spec`);let o=e.components?.schemas??{},l=[],d;if(s.requestBody){let m=s.requestBody.content?.["application/json"]?.schema;d=this.resolve(m,o)}if(d?.properties){let m=new Set(d.required??[]);for(let[h,g]of Object.entries(d.properties)){let f=this.resolve(g,o)??{};l.push({name:h,type:this.fieldType(f),required:m.has(h),description:f.description,enum:f.enum,min:f.minimum,max:f.maximum,default:f.default})}}for(let m of s.parameters??[])if(m.in==="path"||m.in==="query"){let h=this.resolve(m.schema,o)??{};l.push({name:m.name,type:this.fieldType(h),required:!!m.required,description:h.description,enum:h.enum,default:h.default})}this.fields=l,this.hasLocation=l.some(m=>m.name==="latitude")&&l.some(m=>m.name==="longitude")&&l.some(m=>m.name==="timezone");let p={};for(let m of l)m.default!==void 0&&(p[m.name]=m.default);this.values=p,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 s=e.$ref.split("/").pop();return s?t[s]: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 a`<form><div class="roxy-skeleton" style="height: 8rem"></div></form>`;if(this.specError)return a`<div class="spec-error" role="alert">
1201
+ `],p([y({attribute:!1})],B.prototype,"data",2),p([y({type:String,reflect:!0})],B.prototype,"type",2),B=p([v("roxy-dosha-card")],B);var sr=new Map;async function yt(i){let a=sr.get(i);return a||(a=fetch(i).then(async e=>{if(!e.ok)throw new Error(`HTTP ${e.status}`);return await e.json()}).catch(e=>{throw sr.delete(i),e}),sr.set(i,a)),a}var _=class extends u{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 r=e.detail;r&&(this.values={...this.values,latitude:r.latitude,longitude:r.longitude,timezone:r.timezone??r.utcOffset})};this.onSubmit=e=>{e.preventDefault();let r=this.fields.filter(s=>s.required).filter(s=>this.values[s.name]===void 0||this.values[s.name]==="");if(r.length>0){this.dispatchEvent(new CustomEvent("roxy-validation-error",{detail:{missing:r.map(s=>s.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 yt(this.specUrl),r=`/${this.endpoint.replace(/^\//,"")}`,s=e.paths?.[r]?.[this.method.toLowerCase()];if(!s)throw new Error(`Endpoint ${this.method} ${r} not found in OpenAPI spec`);let o=e.components?.schemas??{},l=[],d;if(s.requestBody){let m=s.requestBody.content?.["application/json"]?.schema;d=this.resolve(m,o)}if(d?.properties){let m=new Set(d.required??[]);for(let[h,g]of Object.entries(d.properties)){let f=this.resolve(g,o)??{};l.push({name:h,type:this.fieldType(f),required:m.has(h),description:f.description,enum:f.enum,min:f.minimum,max:f.maximum,default:f.default})}}for(let m of s.parameters??[])if(m.in==="path"||m.in==="query"){let h=this.resolve(m.schema,o)??{};l.push({name:m.name,type:this.fieldType(h),required:!!m.required,description:h.description,enum:h.enum,default:h.default})}this.fields=l,this.hasLocation=l.some(m=>m.name==="latitude")&&l.some(m=>m.name==="longitude")&&l.some(m=>m.name==="timezone");let c={};for(let m of l)m.default!==void 0&&(c[m.name]=m.default);this.values=c,this.loaded=!0}catch(e){let r=e instanceof Error?e.message:String(e);this.specError=r,this.loaded=!0,this.dispatchEvent(new CustomEvent("roxy-spec-error",{detail:{url:this.specUrl,message:r},bubbles:!0,composed:!0}))}}resolve(e,r){if(e){if("$ref"in e&&e.$ref){let s=e.$ref.split("/").pop();return s?r[s]: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,r){this.values={...this.values,[e]:r}}render(){if(!this.loaded)return t`<form><div class="roxy-skeleton" style="height: 8rem"></div></form>`;if(this.specError)return t`<div class="spec-error" role="alert">
1202
1202
  Schema load failed: ${this.specError}
1203
1203
  <button type="button" class="submit" @click=${this.retryLoadSchema}>Retry</button>
1204
- </div>`;let e=t=>{if(this.hasLocation&&(t.name==="latitude"||t.name==="longitude"||t.name==="timezone"))return n;let s=`roxy-form-${t.name}`;return a`<div class="field">
1204
+ </div>`;let e=r=>{if(this.hasLocation&&(r.name==="latitude"||r.name==="longitude"||r.name==="timezone"))return n;let s=`roxy-form-${r.name}`;return t`<div class="field">
1205
1205
  <label for=${s}>
1206
- ${ee(t.name)}${t.required?a`<span class="req" aria-hidden="true">*</span>`:n}
1206
+ ${ee(r.name)}${r.required?t`<span class="req" aria-hidden="true">*</span>`:n}
1207
1207
  </label>
1208
- ${t.enum?a`<select
1208
+ ${r.enum?t`<select
1209
1209
  id=${s}
1210
- ?required=${t.required}
1211
- @change=${o=>this.setValue(t.name,o.target.value)}
1210
+ ?required=${r.required}
1211
+ @change=${o=>this.setValue(r.name,o.target.value)}
1212
1212
  >
1213
1213
  <option value="">Choose</option>
1214
- ${t.enum.map(o=>a`<option value=${o} ?selected=${this.values[t.name]===o}>
1214
+ ${r.enum.map(o=>t`<option value=${o} ?selected=${this.values[r.name]===o}>
1215
1215
  ${o}
1216
1216
  </option>`)}
1217
- </select>`:a`<input
1217
+ </select>`:t`<input
1218
1218
  id=${s}
1219
- type=${this.htmlType(t.type)}
1220
- ?required=${t.required}
1221
- min=${t.min??""}
1222
- max=${t.max??""}
1223
- step=${t.type==="number"?"any":""}
1224
- .value=${this.values[t.name]??""}
1225
- @input=${o=>this.setValue(t.name,this.coerce(t.type,o.target.value))}
1219
+ type=${this.htmlType(r.type)}
1220
+ ?required=${r.required}
1221
+ min=${r.min??""}
1222
+ max=${r.max??""}
1223
+ step=${r.type==="number"?"any":""}
1224
+ .value=${this.values[r.name]??""}
1225
+ @input=${o=>this.setValue(r.name,this.coerce(r.type,o.target.value))}
1226
1226
  />`}
1227
- ${t.description?a`<small class="help">${t.description}</small>`:n}
1228
- </div>`};return a`<form @submit=${this.onSubmit}>
1227
+ ${r.description?t`<small class="help">${r.description}</small>`:n}
1228
+ </div>`};return t`<form @submit=${this.onSubmit}>
1229
1229
  <h2 class="title">${ee(this.endpoint.split("/").pop()??"")}</h2>
1230
- ${this.hasLocation?a`<div class="location-block">
1230
+ ${this.hasLocation?t`<div class="location-block">
1231
1231
  <label>Birth location</label>
1232
1232
  <roxy-location-search
1233
1233
  @roxy-location-select=${this.onLocation}
@@ -1238,10 +1238,10 @@
1238
1238
  </small>
1239
1239
  </div>`:n}
1240
1240
  <div class="fields">
1241
- ${this.fields.map(t=>e(t))}
1241
+ ${this.fields.map(r=>e(r))}
1242
1242
  </div>
1243
1243
  <button class="submit" type="submit">${this.submitLabel}</button>
1244
- </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 s=Number(t);return Number.isFinite(s)?s:void 0}return t}}};_.styles=[b,x`
1244
+ </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,r){if(r!==""){if(e==="number"){let s=Number(r);return Number.isFinite(s)?s:void 0}return r}}};_.styles=[b,x`
1245
1245
  form {
1246
1246
  display: grid;
1247
1247
  gap: var(--roxy-space-md, 1rem);
@@ -1343,24 +1343,24 @@
1343
1343
  color: var(--roxy-danger-fg, #991b1b);
1344
1344
  font-size: var(--roxy-text-sm, 0.875rem);
1345
1345
  }
1346
- `],c([y({type:String,attribute:"data-endpoint"})],_.prototype,"endpoint",2),c([y({type:String})],_.prototype,"method",2),c([y({type:String,attribute:"spec-url"})],_.prototype,"specUrl",2),c([y({type:String,attribute:"submit-label"})],_.prototype,"submitLabel",2),c([E()],_.prototype,"fields",2),c([E()],_.prototype,"values",2),c([E()],_.prototype,"hasLocation",2),c([E()],_.prototype,"loaded",2),c([E()],_.prototype,"specError",2),_=c([v("roxy-endpoint-form")],_);var re=class extends u{constructor(){super(...arguments);this.data=null}render(){let e=this.data;if(!e)return a`<div class="roxy-empty" role="status">No Guna Milan data</div>`;let t=(e.breakdown??[]).filter(g=>g?.category!==void 0),s=e.total??0,o=e.maxScore??36,l=s/o*100,d="color-mix(in srgb, var(--roxy-border) 50%, transparent)",p=l>=70?"var(--roxy-success)":l>=50?"var(--roxy-warning)":"var(--roxy-danger)",m=l*2.827,h=(100-l)*2.827;return a`<article class="card" aria-label="Guna Milan score">
1346
+ `],p([y({type:String,attribute:"data-endpoint"})],_.prototype,"endpoint",2),p([y({type:String})],_.prototype,"method",2),p([y({type:String,attribute:"spec-url"})],_.prototype,"specUrl",2),p([y({type:String,attribute:"submit-label"})],_.prototype,"submitLabel",2),p([E()],_.prototype,"fields",2),p([E()],_.prototype,"values",2),p([E()],_.prototype,"hasLocation",2),p([E()],_.prototype,"loaded",2),p([E()],_.prototype,"specError",2),_=p([v("roxy-endpoint-form")],_);var te=class extends u{constructor(){super(...arguments);this.data=null}render(){let e=this.data;if(!e)return t`<div class="roxy-empty" role="status">No Guna Milan data</div>`;let r=(e.breakdown??[]).filter(g=>g?.category!==void 0),s=e.total??0,o=e.maxScore??36,l=s/o*100,d="color-mix(in srgb, var(--roxy-border) 50%, transparent)",c=l>=70?"var(--roxy-success)":l>=50?"var(--roxy-warning)":"var(--roxy-danger)",m=l*2.827,h=(100-l)*2.827;return t`<article class="card" aria-label="Guna Milan score">
1347
1347
  <div class="score-header">
1348
1348
  <div class="score-info">
1349
1349
  <div class="score-bar">
1350
1350
  <div>
1351
1351
  <span class="total">${w(e.total,1)}</span>
1352
1352
  <span class="over"> / ${e.maxScore}</span>
1353
- ${typeof e.percentage=="number"?a`<small style="margin-left: 0.5rem; color: var(--roxy-muted)">
1354
- ${Nt(e.percentage,1)}
1353
+ ${typeof e.percentage=="number"?t`<small style="margin-left: 0.5rem; color: var(--roxy-muted)">
1354
+ ${_r(e.percentage,1)}
1355
1355
  </small>`:n}
1356
1356
  </div>
1357
- ${e.recommendation?a`<span class="recommendation">${e.recommendation}</span>`:n}
1357
+ ${e.recommendation?t`<span class="recommendation">${e.recommendation}</span>`:n}
1358
1358
  </div>
1359
1359
  </div>
1360
1360
  <div class="score-ring" role="meter" aria-label="Guna milan score" aria-valuemin="0" aria-valuemax="36" aria-valuenow="${s}">
1361
1361
  <svg viewBox="0 0 100 100" aria-hidden="true">
1362
1362
  <circle class="ring-track" cx="50" cy="50" r="45" fill="none" stroke="${d}" stroke-width="8"/>
1363
- <circle class="ring-fill" cx="50" cy="50" r="45" fill="none" stroke="${p}" stroke-width="8"
1363
+ <circle class="ring-fill" cx="50" cy="50" r="45" fill="none" stroke="${c}" stroke-width="8"
1364
1364
  stroke-dasharray="${m},${h}" stroke-linecap="round"
1365
1365
  transform="rotate(-90 50 50)"/>
1366
1366
  <text x="50" y="50" text-anchor="middle" dominant-baseline="central" class="ring-text">${s}</text>
@@ -1369,7 +1369,7 @@
1369
1369
  </div>
1370
1370
  </div>
1371
1371
 
1372
- ${t.length>0?a`<table>
1372
+ ${r.length>0?t`<table>
1373
1373
  <thead>
1374
1374
  <tr>
1375
1375
  <th>Category</th>
@@ -1378,7 +1378,7 @@
1378
1378
  </tr>
1379
1379
  </thead>
1380
1380
  <tbody>
1381
- ${t.map(g=>{let f=g.score??0,k=g.maxScore??ur(g.category),$=k?f/k*100:0;return a`<tr>
1381
+ ${r.map(g=>{let f=g.score??0,k=g.maxScore??ut(g.category),$=k?f/k*100:0;return t`<tr>
1382
1382
  <td>${g.category}</td>
1383
1383
  <td class="bar-cell">
1384
1384
  <div class="mini-bar">
@@ -1389,11 +1389,11 @@
1389
1389
  </tr>`})}
1390
1390
  </tbody>
1391
1391
  </table>`:n}
1392
- ${(e.doshas?.length??0)>0||(e.doshaCancellations?.length??0)>0?a`<div class="tags">
1393
- ${e.doshas?.map(g=>a`<span class="dosha">${g}</span>`)}
1394
- ${e.doshaCancellations?.map(g=>a`<span class="cancel" title=${g.reason}>${g.dosha} cancelled</span>`)}
1392
+ ${(e.doshas?.length??0)>0||(e.doshaCancellations?.length??0)>0?t`<div class="tags">
1393
+ ${e.doshas?.map(g=>t`<span class="dosha">${g}</span>`)}
1394
+ ${e.doshaCancellations?.map(g=>t`<span class="cancel" title=${g.reason}>${g.dosha} cancelled</span>`)}
1395
1395
  </div>`:n}
1396
- </article>`}};re.styles=[b,x`
1396
+ </article>`}};te.styles=[b,x`
1397
1397
  .card {
1398
1398
  background: var(--roxy-bg, #fff);
1399
1399
  border: 1px solid var(--roxy-border, #e4e4e7);
@@ -1514,48 +1514,48 @@
1514
1514
  background: color-mix(in srgb, var(--roxy-success, #16a34a) 18%, transparent);
1515
1515
  color: var(--roxy-success-fg, #166534);
1516
1516
  }
1517
- `],c([y({attribute:!1})],re.prototype,"data",2),re=c([v("roxy-guna-milan")],re);function ur(i){if(!i)return 1;switch(i.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 q=class extends u{constructor(){super(...arguments);this.data=null;this.mode="lookup"}resolveHexagram(){let e=this.data;if(!e)return null;if("hexagram"in e&&e.hexagram){if("lines"in e){let s=e;return{hex:s.hexagram,lines:s.lines,changingLinePositions:s.changingLinePositions,resultingHexagram:s.resultingHexagram}}let t=e;return{hex:t.hexagram,dailyMessage:t.dailyMessage}}return{hex:e}}render(){let e=this.resolveHexagram();if(!e)return a`<div class="roxy-empty" role="status">No hexagram data</div>`;let{hex:t,lines:s,changingLinePositions:o,dailyMessage:l,resultingHexagram:d}=e,p=s??this.derivedLines(t),m=new Set(o??[]);return a`<article class="card" aria-label="I Ching hexagram">
1517
+ `],p([y({attribute:!1})],te.prototype,"data",2),te=p([v("roxy-guna-milan")],te);function ut(i){if(!i)return 1;switch(i.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 q=class extends u{constructor(){super(...arguments);this.data=null;this.mode="lookup"}resolveHexagram(){let e=this.data;if(!e)return null;if("hexagram"in e&&e.hexagram){if("lines"in e){let s=e;return{hex:s.hexagram,lines:s.lines,changingLinePositions:s.changingLinePositions,resultingHexagram:s.resultingHexagram}}let r=e;return{hex:r.hexagram,dailyMessage:r.dailyMessage}}return{hex:e}}render(){let e=this.resolveHexagram();if(!e)return t`<div class="roxy-empty" role="status">No hexagram data</div>`;let{hex:r,lines:s,changingLinePositions:o,dailyMessage:l,resultingHexagram:d}=e,c=s??this.derivedLines(r),m=new Set(o??[]);return t`<article class="card" aria-label="I Ching hexagram">
1518
1518
  <div class="glyphs">
1519
- ${t.symbol?a`<div class="symbol">${t.symbol}</div>`:n}
1519
+ ${r.symbol?t`<div class="symbol">${r.symbol}</div>`:n}
1520
1520
  <div class="lines" aria-hidden="true">
1521
- ${p.slice().reverse().map((h,g)=>{let f=p.length-1-g+1,k=m.has(f),$=h===6||h===8;return a`<div class="line ${`${$?"broken":"solid"}${k?" changing":""}`}">
1521
+ ${c.slice().reverse().map((h,g)=>{let f=c.length-1-g+1,k=m.has(f),$=h===6||h===8;return t`<div class="line ${`${$?"broken":"solid"}${k?" changing":""}`}">
1522
1522
  ${$?S`<span class="seg"></span><span class="seg"></span>`:S`<span class="seg"></span>`}
1523
1523
  </div>`})}
1524
1524
  </div>
1525
1525
  </div>
1526
1526
  <div>
1527
1527
  <h2 class="title">
1528
- ${t.number?a`${t.number}. `:n}${t.english??t.chinese??"Hexagram"}
1528
+ ${r.number?t`${r.number}. `:n}${r.english??r.chinese??"Hexagram"}
1529
1529
  </h2>
1530
1530
  <p class="subtitle">
1531
- ${t.chinese?a`${t.chinese}`:n}
1532
- ${t.pinyin?a` · ${t.pinyin}`:n}
1531
+ ${r.chinese?t`${r.chinese}`:n}
1532
+ ${r.pinyin?t` · ${r.pinyin}`:n}
1533
1533
  </p>
1534
1534
  <div class="trigrams">
1535
- ${t.upperTrigram?a`<div>
1535
+ ${r.upperTrigram?t`<div>
1536
1536
  Upper
1537
1537
  <span class="tri-glyph"
1538
- >${at[t.upperTrigram]??""}</span
1539
- >${t.upperTrigram}
1538
+ >${tr[r.upperTrigram]??""}</span
1539
+ >${r.upperTrigram}
1540
1540
  </div>`:n}
1541
- ${t.lowerTrigram?a`<div>
1541
+ ${r.lowerTrigram?t`<div>
1542
1542
  Lower
1543
1543
  <span class="tri-glyph"
1544
- >${at[t.lowerTrigram]??""}</span
1545
- >${t.lowerTrigram}
1544
+ >${tr[r.lowerTrigram]??""}</span
1545
+ >${r.lowerTrigram}
1546
1546
  </div>`:n}
1547
1547
  </div>
1548
- ${t.judgment?a`<p class="judgment">${t.judgment}</p>`:n}
1549
- ${t.image?a`<p class="image">${t.image}</p>`:n}
1550
- ${l?a`<p class="message">${l}</p>`:n}
1551
- ${t.interpretation?.general?a`<p>${t.interpretation.general}</p>`:n}
1552
- ${m.size>0?a`<div class="changing">
1548
+ ${r.judgment?t`<p class="judgment">${r.judgment}</p>`:n}
1549
+ ${r.image?t`<p class="image">${r.image}</p>`:n}
1550
+ ${l?t`<p class="message">${l}</p>`:n}
1551
+ ${r.interpretation?.general?t`<p>${r.interpretation.general}</p>`:n}
1552
+ ${m.size>0?t`<div class="changing">
1553
1553
  Changing lines: ${Array.from(m).sort((h,g)=>h-g).join(", ")}.
1554
- ${d?.english?a` Becomes hexagram ${d.number}
1554
+ ${d?.english?t` Becomes hexagram ${d.number}
1555
1555
  ${d.english}.`:n}
1556
1556
  </div>`:n}
1557
1557
  </div>
1558
- </article>`}derivedLines(e){let t=e.symbol.codePointAt(0)??0;if(t>=19904&&t<=19967){let s=t-19904,o=[];for(let l=0;l<6;l++){let d=s>>l&1;o.push(d?8:7)}return o}return Array.from({length:6},()=>7)}};q.styles=[b,x`
1558
+ </article>`}derivedLines(e){let r=e.symbol.codePointAt(0)??0;if(r>=19904&&r<=19967){let s=r-19904,o=[];for(let l=0;l<6;l++){let d=s>>l&1;o.push(d?8:7)}return o}return Array.from({length:6},()=>7)}};q.styles=[b,x`
1559
1559
  .card {
1560
1560
  background: var(--roxy-bg, #fff);
1561
1561
  border: 1px solid var(--roxy-border, #e4e4e7);
@@ -1662,17 +1662,17 @@
1662
1662
  color: var(--roxy-accent-fg, #b45309);
1663
1663
  font-size: var(--roxy-text-sm, 0.875rem);
1664
1664
  }
1665
- `],c([y({attribute:!1})],q.prototype,"data",2),c([y({type:String,reflect:!0})],q.prototype,"mode",2),q=c([v("roxy-hexagram")],q);var U=class extends u{constructor(){super(...arguments);this.data=null;this.period="daily"}render(){let e=this.data;if(!e)return a`<div class="roxy-empty" role="status">No horoscope data</div>`;let t=e.sign??"",s=t?N[C(t)]??"":"",o="energyRating"in e&&typeof e.energyRating=="number"?e.energyRating:null,l="date"in e&&e.date||"week"in e&&e.week||"month"in e&&e.month||"";return a`<article
1665
+ `],p([y({attribute:!1})],q.prototype,"data",2),p([y({type:String,reflect:!0})],q.prototype,"mode",2),q=p([v("roxy-hexagram")],q);var U=class extends u{constructor(){super(...arguments);this.data=null;this.period="daily"}render(){let e=this.data;if(!e)return t`<div class="roxy-empty" role="status">No horoscope data</div>`;let r=e.sign??"",s=r?z[C(r)]??"":"",o="energyRating"in e&&typeof e.energyRating=="number"?e.energyRating:null,l="date"in e&&e.date||"week"in e&&e.week||"month"in e&&e.month||"";return t`<article
1666
1666
  class="card"
1667
- aria-label=${`${this.period} horoscope for ${t}`}
1667
+ aria-label=${`${this.period} horoscope for ${r}`}
1668
1668
  >
1669
1669
  <header class="head">
1670
1670
  <span class="glyph" aria-hidden="true">${s}</span>
1671
1671
  <div>
1672
- <h2 class="title">${t} ${this.period}</h2>
1673
- ${l?a`<div class="date">${l}</div>`:n}
1672
+ <h2 class="title">${r} ${this.period}</h2>
1673
+ ${l?t`<div class="date">${l}</div>`:n}
1674
1674
  </div>
1675
- ${o!==null?a`<span class="energy" aria-label=${`Energy ${o} of 10`}>
1675
+ ${o!==null?t`<span class="energy" aria-label=${`Energy ${o} of 10`}>
1676
1676
  Energy ${o}/10
1677
1677
  <span class="energy-bar"
1678
1678
  ><span style="width: ${o/10*100}%"></span
@@ -1680,45 +1680,45 @@
1680
1680
  </span>`:n}
1681
1681
  </header>
1682
1682
 
1683
- ${e.overview?a`<p class="overview">${e.overview}</p>`:n}
1683
+ ${e.overview?t`<p class="overview">${e.overview}</p>`:n}
1684
1684
 
1685
1685
  <div class="sections">
1686
- ${e.love?a`<div class="section">
1686
+ ${e.love?t`<div class="section">
1687
1687
  <h3>Love</h3>
1688
1688
  <p>${e.love}</p>
1689
1689
  </div>`:n}
1690
- ${e.career?a`<div class="section">
1690
+ ${e.career?t`<div class="section">
1691
1691
  <h3>Career</h3>
1692
1692
  <p>${e.career}</p>
1693
1693
  </div>`:n}
1694
- ${e.health?a`<div class="section">
1694
+ ${e.health?t`<div class="section">
1695
1695
  <h3>Health</h3>
1696
1696
  <p>${e.health}</p>
1697
1697
  </div>`:n}
1698
- ${e.finance?a`<div class="section">
1698
+ ${e.finance?t`<div class="section">
1699
1699
  <h3>Finance</h3>
1700
1700
  <p>${e.finance}</p>
1701
1701
  </div>`:n}
1702
- ${"advice"in e&&e.advice?a`<div class="section">
1702
+ ${"advice"in e&&e.advice?t`<div class="section">
1703
1703
  <h3>Advice</h3>
1704
1704
  <p>${e.advice}</p>
1705
1705
  </div>`:n}
1706
1706
  </div>
1707
1707
 
1708
- ${(()=>{let d="luckyNumber"in e&&e.luckyNumber!==void 0?e.luckyNumber:void 0,p="luckyColor"in e&&e.luckyColor?e.luckyColor:"",m="luckyNumbers"in e&&e.luckyNumbers?e.luckyNumbers:[],h="luckyDays"in e&&e.luckyDays?e.luckyDays:[],g=e.compatibleSigns??[];return d===void 0&&!p&&m.length===0&&h.length===0&&g.length===0?n:a`<div class="lucky">
1709
- ${d!==void 0?a`<span>Lucky number <strong>${d}</strong></span>`:n}
1710
- ${p?a`<span>Lucky color <strong>${p}</strong></span>`:n}
1711
- ${m.length?a`<span
1708
+ ${(()=>{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:[],h="luckyDays"in e&&e.luckyDays?e.luckyDays:[],g=e.compatibleSigns??[];return d===void 0&&!c&&m.length===0&&h.length===0&&g.length===0?n:t`<div class="lucky">
1709
+ ${d!==void 0?t`<span>Lucky number <strong>${d}</strong></span>`:n}
1710
+ ${c?t`<span>Lucky color <strong>${c}</strong></span>`:n}
1711
+ ${m.length?t`<span
1712
1712
  >Lucky numbers
1713
1713
  <strong>${m.join(", ")}</strong></span
1714
1714
  >`:n}
1715
- ${h.length?a`<span
1715
+ ${h.length?t`<span
1716
1716
  >Lucky days <strong>${h.join(", ")}</strong></span
1717
1717
  >`:n}
1718
- ${g.length?a`<span class="compat-wrap">
1718
+ ${g.length?t`<span class="compat-wrap">
1719
1719
  Best with
1720
1720
  <span class="compat"
1721
- >${g.map(f=>a`<span>${f}</span>`)}</span
1721
+ >${g.map(f=>t`<span>${f}</span>`)}</span
1722
1722
  >
1723
1723
  </span>`:n}
1724
1724
  </div>`})()}
@@ -1844,14 +1844,14 @@
1844
1844
  font-size: var(--roxy-text-xs, 0.75rem);
1845
1845
  text-transform: capitalize;
1846
1846
  }
1847
- `],c([y({attribute:!1})],U.prototype,"data",2),c([y({type:String,reflect:!0})],U.prototype,"period",2),U=c([v("roxy-horoscope-card")],U);var ae=class extends u{constructor(){super(...arguments);this.data=null}render(){if(!this.data)return a`<div class="roxy-empty" role="status">No KP data</div>`;let e=this.data.planets??[];return a`<div
1847
+ `],p([y({attribute:!1})],U.prototype,"data",2),p([y({type:String,reflect:!0})],U.prototype,"period",2),U=p([v("roxy-horoscope-card")],U);var ae=class extends u{constructor(){super(...arguments);this.data=null}render(){if(!this.data)return t`<div class="roxy-empty" role="status">No KP data</div>`;let e=this.data.planets??[];return t`<div
1848
1848
  class="wrap"
1849
1849
  aria-label="KP planets table"
1850
1850
  tabindex="0"
1851
1851
  >
1852
1852
  <header class="head">
1853
1853
  <h2 class="title">KP planets</h2>
1854
- ${typeof this.data.ayanamsa=="number"?a`<span class="ayanamsa">Ayanamsa: ${w(this.data.ayanamsa,2)}°</span>`:n}
1854
+ ${typeof this.data.ayanamsa=="number"?t`<span class="ayanamsa">Ayanamsa: ${w(this.data.ayanamsa,2)}°</span>`:n}
1855
1855
  </header>
1856
1856
  <table role="table">
1857
1857
  <thead>
@@ -1867,18 +1867,18 @@
1867
1867
  </tr>
1868
1868
  </thead>
1869
1869
  <tbody>
1870
- ${e.map(t=>a`<tr>
1870
+ ${e.map(r=>t`<tr>
1871
1871
  <td class="planet">
1872
- ${t.planet}
1873
- ${t.retrograde?a`<span class="retro">R</span>`:n}
1872
+ ${r.planet}
1873
+ ${r.retrograde?t`<span class="retro">R</span>`:n}
1874
1874
  </td>
1875
- <td>${t.sign??""}</td>
1876
- <td>${t.signLord??""}</td>
1877
- <td>${t.nakshatra??""}</td>
1878
- <td>${t.nakshatraLord??""}</td>
1879
- <td>${t.subLord??""}</td>
1880
- <td>${t.subSubLord??""}</td>
1881
- <td>${t.kpNumber??""}</td>
1875
+ <td>${r.sign??""}</td>
1876
+ <td>${r.signLord??""}</td>
1877
+ <td>${r.nakshatra??""}</td>
1878
+ <td>${r.nakshatraLord??""}</td>
1879
+ <td>${r.subLord??""}</td>
1880
+ <td>${r.subSubLord??""}</td>
1881
+ <td>${r.kpNumber??""}</td>
1882
1882
  </tr>`)}
1883
1883
  </tbody>
1884
1884
  </table>
@@ -1941,7 +1941,7 @@
1941
1941
  font-size: var(--roxy-text-xs, 0.75rem);
1942
1942
  margin-left: 4px;
1943
1943
  }
1944
- `],c([y({attribute:!1})],ae.prototype,"data",2),ae=c([v("roxy-kp-planets-table")],ae);function je(i,r){let e,t=((...s)=>{e&&clearTimeout(e),e=setTimeout(()=>{e=void 0,i(...s)},r)});return t.cancel=()=>{e&&(clearTimeout(e),e=void 0)},t}var T=class extends u{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=je(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 s=new URL(this.endpoint);s.searchParams.set("q",e),s.searchParams.set("limit","8");let o={Accept:"application/json"};this.apiKey&&(o["X-API-Key"]=this.apiKey),this.publishableKey&&(o["X-API-Key"]=this.publishableKey);let l=await fetch(s,{headers:o,signal:t.signal});if(!l.ok)throw new Error(`HTTP ${l.status}`);let d=await l.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(s){if(s?.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 a`<div class="field">
1944
+ `],p([y({attribute:!1})],ae.prototype,"data",2),ae=p([v("roxy-kp-planets-table")],ae);function Nr(i,a){let e,r=((...s)=>{e&&clearTimeout(e),e=setTimeout(()=>{e=void 0,i(...s)},a)});return r.cancel=()=>{e&&(clearTimeout(e),e=void 0)},r}var T=class extends u{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=Nr(e=>{this.fetchResults(e)},300);this.onInput=e=>{let r=e.target.value;if(this.query=r,r.length<2){this.results=[],this.isOpen=!1,this.highlight=-1;return}this.debouncedFetch(r)};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 r=this.results[this.highlight]??this.results[0];r&&this.select(r)}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 r=new AbortController;this.abortController=r,this.isLoading=!0;try{let s=new URL(this.endpoint);s.searchParams.set("q",e),s.searchParams.set("limit","8");let o={Accept:"application/json"};this.apiKey&&(o["X-API-Key"]=this.apiKey),this.publishableKey&&(o["X-API-Key"]=this.publishableKey);let l=await fetch(s,{headers:o,signal:r.signal});if(!l.ok)throw new Error(`HTTP ${l.status}`);let d=await l.json();if(r.signal.aborted)return;this.results=d.cities??[],this.isOpen=this.results.length>0,this.highlight=this.results.length>0?0:-1}catch(s){if(s?.name==="AbortError")return;this.results=[],this.isOpen=!1}finally{this.abortController===r&&(this.abortController=void 0),r.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 t`<div class="field">
1945
1945
  <input
1946
1946
  type="text"
1947
1947
  role="combobox"
@@ -1955,24 +1955,24 @@
1955
1955
  @keydown=${this.onKeyDown}
1956
1956
  @focus=${()=>{this.results.length>0&&(this.isOpen=!0)}}
1957
1957
  />
1958
- ${this.isLoading?a`<span class="spinner" role="status" aria-label="Loading"></span>`:n}
1959
- ${this.isOpen?a`<ul
1958
+ ${this.isLoading?t`<span class="spinner" role="status" aria-label="Loading"></span>`:n}
1959
+ ${this.isOpen?t`<ul
1960
1960
  id="roxy-location-listbox"
1961
1961
  class="results"
1962
1962
  role="listbox"
1963
1963
  >
1964
- ${this.results.length===0?a`<li class="empty" role="status">No cities found</li>`:this.results.map((e,t)=>a`<li role="presentation">
1964
+ ${this.results.length===0?t`<li class="empty" role="status">No cities found</li>`:this.results.map((e,r)=>t`<li role="presentation">
1965
1965
  <button
1966
1966
  type="button"
1967
1967
  class="option"
1968
1968
  role="option"
1969
- aria-selected=${this.highlight===t?"true":"false"}
1969
+ aria-selected=${this.highlight===r?"true":"false"}
1970
1970
  @click=${()=>this.select(e)}
1971
- @mouseenter=${()=>{this.highlight=t}}
1971
+ @mouseenter=${()=>{this.highlight=r}}
1972
1972
  >
1973
1973
  <span class="city">${e.city}</span>
1974
1974
  <span class="where"
1975
- >${e.province?a`${e.province}, `:""}${e.country}</span
1975
+ >${e.province?t`${e.province}, `:""}${e.country}</span
1976
1976
  >
1977
1977
  <span class="tz"
1978
1978
  >UTC${e.utcOffset>=0?"+":""}${e.utcOffset}</span
@@ -2081,46 +2081,46 @@
2081
2081
  color: var(--roxy-muted, #71717a);
2082
2082
  font-size: var(--roxy-text-sm, 0.875rem);
2083
2083
  }
2084
- `],c([y({type:String,attribute:"api-key"})],T.prototype,"apiKey",2),c([y({type:String,attribute:"publishable-key"})],T.prototype,"publishableKey",2),c([y({type:String})],T.prototype,"endpoint",2),c([y({type:String})],T.prototype,"placeholder",2),c([y({type:String,attribute:"default-value"})],T.prototype,"defaultValue",2),c([E()],T.prototype,"query",2),c([E()],T.prototype,"results",2),c([E()],T.prototype,"isOpen",2),c([E()],T.prototype,"isLoading",2),c([E()],T.prototype,"highlight",2),T=c([v("roxy-location-search")],T);var Y=class extends u{constructor(){super(...arguments);this.data=null;this.mode="current"}render(){let e=this.data;if(!e)return a`<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 s="month"in e?e.month:void 0,o="year"in e?e.year:void 0;return a`<article
2084
+ `],p([y({type:String,attribute:"api-key"})],T.prototype,"apiKey",2),p([y({type:String,attribute:"publishable-key"})],T.prototype,"publishableKey",2),p([y({type:String})],T.prototype,"endpoint",2),p([y({type:String})],T.prototype,"placeholder",2),p([y({type:String,attribute:"default-value"})],T.prototype,"defaultValue",2),p([E()],T.prototype,"query",2),p([E()],T.prototype,"results",2),p([E()],T.prototype,"isOpen",2),p([E()],T.prototype,"isLoading",2),p([E()],T.prototype,"highlight",2),T=p([v("roxy-location-search")],T);var Y=class extends u{constructor(){super(...arguments);this.data=null;this.mode="current"}render(){let e=this.data;if(!e)return t`<div class="roxy-empty" role="status">No moon phase data</div>`;let r="phases"in e?e.phases:"calendar"in e?e.calendar:[];if(this.mode!=="current"&&r.length>0){let s="month"in e?e.month:void 0,o="year"in e?e.year:void 0;return t`<article
2085
2085
  class="card"
2086
2086
  aria-label="Moon phase calendar"
2087
2087
  >
2088
2088
  <h2 class="label">${s??"Moon phases"} ${o??""}</h2>
2089
2089
  <div class="list" role="list">
2090
- ${t.map(l=>this.renderListItem(l))}
2090
+ ${r.map(l=>this.renderListItem(l))}
2091
2091
  </div>
2092
- </article>`}return"phase"in e?this.renderSingle(e):n}renderSingle(e){let t=Mt(e.phase);return a`<article class="card" aria-label="Current moon phase">
2092
+ </article>`}return"phase"in e?this.renderSingle(e):n}renderSingle(e){let r=Mr(e.phase);return t`<article class="card" aria-label="Current moon phase">
2093
2093
  <div class="hero">
2094
- <span class="emoji" aria-hidden="true">${t}</span>
2094
+ <span class="emoji" aria-hidden="true">${r}</span>
2095
2095
  <div>
2096
2096
  <h2 class="label">${e.phase??"Moon"}</h2>
2097
- ${e.date?a`<div class="date">${e.date}</div>`:n}
2097
+ ${e.date?t`<div class="date">${e.date}</div>`:n}
2098
2098
  </div>
2099
2099
  </div>
2100
2100
  <div class="stats">
2101
- ${typeof e.illumination=="number"?a`<div>
2101
+ ${typeof e.illumination=="number"?t`<div>
2102
2102
  <span>Illumination</span>
2103
- <strong>${xr(e.illumination)}</strong>
2103
+ <strong>${xt(e.illumination)}</strong>
2104
2104
  </div>`:n}
2105
- ${typeof e.age=="number"?a`<div>
2105
+ ${typeof e.age=="number"?t`<div>
2106
2106
  <span>Age</span>
2107
2107
  <strong>${w(e.age,1)} days</strong>
2108
2108
  </div>`:n}
2109
- ${e.sign?a`<div>
2109
+ ${e.sign?t`<div>
2110
2110
  <span>Sign</span>
2111
2111
  <strong>${e.sign}</strong>
2112
2112
  </div>`:n}
2113
- ${typeof e.distance=="number"?a`<div>
2113
+ ${typeof e.distance=="number"?t`<div>
2114
2114
  <span>Distance</span>
2115
2115
  <strong>${(e.distance/1e3).toFixed(0)}k km</strong>
2116
2116
  </div>`:n}
2117
2117
  </div>
2118
- ${e.meaning?.description?a`<p class="meaning">${e.meaning.description}</p>`:n}
2119
- ${e.meaning?.keywords?.length?a`<div class="keywords">
2120
- ${e.meaning.keywords.map(s=>a`<span>${s}</span>`)}
2118
+ ${e.meaning?.description?t`<p class="meaning">${e.meaning.description}</p>`:n}
2119
+ ${e.meaning?.keywords?.length?t`<div class="keywords">
2120
+ ${e.meaning.keywords.map(s=>t`<span>${s}</span>`)}
2121
2121
  </div>`:n}
2122
- </article>`}renderListItem(e){let t=Mt(e.phase);return a`<div class="list-item" role="listitem">
2123
- <span aria-hidden="true">${t}</span>
2122
+ </article>`}renderListItem(e){let r=Mr(e.phase);return t`<div class="list-item" role="listitem">
2123
+ <span aria-hidden="true">${r}</span>
2124
2124
  <span>${e.phase}</span>
2125
2125
  <span>${e.date??""}</span>
2126
2126
  </div>`}};Y.styles=[b,x`
@@ -2205,15 +2205,15 @@
2205
2205
  .list-item:last-child {
2206
2206
  border-bottom: none;
2207
2207
  }
2208
- `],c([y({attribute:!1})],Y.prototype,"data",2),c([y({type:String,reflect:!0})],Y.prototype,"mode",2),Y=c([v("roxy-moon-phase")],Y);function Mt(i){return i?Tt[i.toLowerCase()]??"\u{1F319}":"\u{1F319}"}function xr(i){let r=i<=1?i*100:i;return`${Math.round(r)}%`}function R(i,r,e,t){let s=t*Math.PI/180;return{x:i+e*Math.cos(s),y:r+e*Math.sin(s)}}var lt=420,A=lt/2,it=164,fr=146,nt=120,Ie=96,vr=178,br=196,K=class extends u{constructor(){super(...arguments);this.data=null;this.houseSystem="placidus"}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 a`<div class="roxy-empty" role="status">No chart data</div>`;let e=this.getPlanets(),t=this.data.aspects??[];return a`<div class="wrap">
2208
+ `],p([y({attribute:!1})],Y.prototype,"data",2),p([y({type:String,reflect:!0})],Y.prototype,"mode",2),Y=p([v("roxy-moon-phase")],Y);function Mr(i){return i?Pr[i.toLowerCase()]??"\u{1F319}":"\u{1F319}"}function xt(i){let a=i<=1?i*100:i;return`${Math.round(a)}%`}function R(i,a,e,r){let s=r*Math.PI/180;return{x:i+e*Math.cos(s),y:a+e*Math.sin(s)}}var nr=420,A=nr/2,or=164,ft=146,ir=120,je=96,vt=178,bt=196,K=class extends u{constructor(){super(...arguments);this.data=null;this.houseSystem="placidus"}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 t`<div class="roxy-empty" role="status">No chart data</div>`;let e=this.getPlanets(),r=this.data.aspects??[];return t`<div class="wrap">
2209
2209
  <header>
2210
2210
  <h2 class="title">Natal chart</h2>
2211
- ${this.data.birthDetails?a`<div class="meta">
2211
+ ${this.data.birthDetails?t`<div class="meta">
2212
2212
  ${[this.data.birthDetails.date,this.data.birthDetails.time].filter(Boolean).join(" \xB7 ")}
2213
2213
  </div>`:n}
2214
2214
  </header>
2215
2215
  <svg
2216
- viewBox="0 0 ${lt} ${lt}"
2216
+ viewBox="0 0 ${nr} ${nr}"
2217
2217
  role="img"
2218
2218
  aria-label="Natal chart wheel with twelve houses, planets, and aspects"
2219
2219
  >
@@ -2226,83 +2226,83 @@
2226
2226
  class="wheel-line"
2227
2227
  cx=${A}
2228
2228
  cy=${A}
2229
- r=${it}
2229
+ r=${or}
2230
2230
  stroke-width="1.5"
2231
2231
  />
2232
2232
  <circle
2233
2233
  class="wheel-line"
2234
2234
  cx=${A}
2235
2235
  cy=${A}
2236
- r=${nt}
2236
+ r=${ir}
2237
2237
  stroke-width="1"
2238
2238
  />
2239
2239
  <circle
2240
2240
  class="wheel-line"
2241
2241
  cx=${A}
2242
2242
  cy=${A}
2243
- r=${Ie-16}
2243
+ r=${je-16}
2244
2244
  stroke-width="0.5"
2245
2245
  />
2246
2246
  ${this.renderSpokes()} ${this.renderSigns()} ${this.renderHouseNumbers()}
2247
- ${this.renderAspects(e,t)} ${this.renderPlanets(e)}
2247
+ ${this.renderAspects(e,r)} ${this.renderPlanets(e)}
2248
2248
  ${this.renderAngles()}
2249
2249
  </svg>
2250
2250
  <div class="legend">
2251
2251
  <span>${e.length} planets</span>
2252
- <span>${t.length} aspects</span>
2252
+ <span>${r.length} aspects</span>
2253
2253
  <span><span class="legend-swatch" style="background: var(--roxy-success)"></span>harmonious</span>
2254
2254
  <span><span class="legend-swatch" style="background: var(--roxy-danger)"></span>challenging</span>
2255
2255
  </div>
2256
2256
  ${this.renderDetails()}
2257
2257
  ${this.renderInterpretations()}
2258
- </div>`}renderAngles(){let e=this.getAscendant(),t=this.getMidheaven(),s=[this.renderAngleMark(e,"ASC")];return t!==null&&s.push(this.renderAngleMark(t,"MC")),s}renderAngleMark(e,t){let s=this.toAngle(e),o=R(A,A,it,s),l=R(A,A,vr,s),d=R(A,A,br,s);return S`
2258
+ </div>`}renderAngles(){let e=this.getAscendant(),r=this.getMidheaven(),s=[this.renderAngleMark(e,"ASC")];return r!==null&&s.push(this.renderAngleMark(r,"MC")),s}renderAngleMark(e,r){let s=this.toAngle(e),o=R(A,A,or,s),l=R(A,A,vt,s),d=R(A,A,bt,s);return S`
2259
2259
  <g>
2260
2260
  <line class="angle-tick" x1=${o.x} y1=${o.y} x2=${l.x} y2=${l.y} />
2261
- <text class="angle-marker" x=${d.x} y=${d.y} text-anchor="middle" dominant-baseline="central">${t}</text>
2261
+ <text class="angle-marker" x=${d.x} y=${d.y} text-anchor="middle" dominant-baseline="central">${r}</text>
2262
2262
  </g>
2263
- `}renderSpokes(){return Array.from({length:12},(e,t)=>{let s=this.toAngle(t*30),o=R(A,A,nt,s),l=R(A,A,it,s);return S`<line class="wheel-line" x1=${o.x} y1=${o.y} x2=${l.x} y2=${l.y} stroke-width="0.8" />`})}renderSigns(){return pe.map((e,t)=>{let s=this.toAngle(t*30+15),o=R(A,A,fr,s);return S`<text class="sign-glyph" x=${o.x} y=${o.y} text-anchor="middle" dominant-baseline="central">${N[e]}</text>`})}renderHouseNumbers(){let e=Math.floor(this.getAscendant()/30);return Array.from({length:12},(t,s)=>{let o=this.toAngle(s*30+15),l=R(A,A,nt-12,o),d=(s-e+12)%12+1;return S`<text class="house-num" x=${l.x} y=${l.y} text-anchor="middle" dominant-baseline="central">${d}</text>`})}renderPlanets(e){return e.map(t=>{if(!Number.isFinite(t.longitude))return n;let s=this.toAngle(t.longitude),o=R(A,A,Ie,s),l=L[C(t.name)]??t.name.slice(0,2),d=t.isRetrograde?" R":"",p=d?`${l}\u1D3F`:l;return S`<text class="planet-glyph" x=${o.x} y=${o.y} text-anchor="middle" dominant-baseline="central"><title>${t.name}${d}</title>${p}</text>`})}renderDetails(){let e=this.data?.summary,t=this.data?.aspectsInterpretation;if(!e&&!t)return n;let s=e?.retrogradePlanets??[],o=e?.elementDistribution??{},l=e?.modalityDistribution??{},d=Math.max(1,...Object.values(o)),p=Math.max(1,...Object.values(l));return a`<div class="details">
2264
- ${e?.dominantElement||e?.dominantModality?a`<div class="pill-row">
2265
- ${e.dominantElement?a`<span class="pill">Dominant element: ${e.dominantElement}</span>`:n}
2266
- ${e.dominantModality?a`<span class="pill">Dominant modality: ${e.dominantModality}</span>`:n}
2263
+ `}renderSpokes(){return Array.from({length:12},(e,r)=>{let s=this.toAngle(r*30),o=R(A,A,ir,s),l=R(A,A,or,s);return S`<line class="wheel-line" x1=${o.x} y1=${o.y} x2=${l.x} y2=${l.y} stroke-width="0.8" />`})}renderSigns(){return pe.map((e,r)=>{let s=this.toAngle(r*30+15),o=R(A,A,ft,s);return S`<text class="sign-glyph" x=${o.x} y=${o.y} text-anchor="middle" dominant-baseline="central">${z[e]}</text>`})}renderHouseNumbers(){let e=Math.floor(this.getAscendant()/30);return Array.from({length:12},(r,s)=>{let o=this.toAngle(s*30+15),l=R(A,A,ir-12,o),d=(s-e+12)%12+1;return S`<text class="house-num" x=${l.x} y=${l.y} text-anchor="middle" dominant-baseline="central">${d}</text>`})}renderPlanets(e){return e.map(r=>{if(!Number.isFinite(r.longitude))return n;let s=this.toAngle(r.longitude),o=R(A,A,je,s),l=L[C(r.name)]??r.name.slice(0,2),d=r.isRetrograde?" R":"",c=d?`${l}\u1D3F`:l;return S`<text class="planet-glyph" x=${o.x} y=${o.y} text-anchor="middle" dominant-baseline="central"><title>${r.name}${d}</title>${c}</text>`})}renderDetails(){let e=this.data?.summary,r=this.data?.aspectsInterpretation;if(!e&&!r)return n;let s=e?.retrogradePlanets??[],o=e?.elementDistribution??{},l=e?.modalityDistribution??{},d=Math.max(1,...Object.values(o)),c=Math.max(1,...Object.values(l));return t`<div class="details">
2264
+ ${e?.dominantElement||e?.dominantModality?t`<div class="pill-row">
2265
+ ${e.dominantElement?t`<span class="pill">Dominant element: ${e.dominantElement}</span>`:n}
2266
+ ${e.dominantModality?t`<span class="pill">Dominant modality: ${e.dominantModality}</span>`:n}
2267
2267
  </div>`:n}
2268
- ${t?a`<div class="pill-row">
2269
- <span class="pill pill--success">Harmonious ${t.harmonious}</span>
2270
- <span class="pill pill--danger">Challenging ${t.challenging}</span>
2271
- <span class="pill pill--muted">Neutral ${t.neutral}</span>
2268
+ ${r?t`<div class="pill-row">
2269
+ <span class="pill pill--success">Harmonious ${r.harmonious}</span>
2270
+ <span class="pill pill--danger">Challenging ${r.challenging}</span>
2271
+ <span class="pill pill--muted">Neutral ${r.neutral}</span>
2272
2272
  </div>`:n}
2273
- ${s.length>0?a`<div class="pill-row">
2274
- ${s.map(m=>{let h=L[m]??m.slice(0,2);return a`<span class="pill pill--muted">${h} ${m} R</span>`})}
2273
+ ${s.length>0?t`<div class="pill-row">
2274
+ ${s.map(m=>{let h=L[m]??m.slice(0,2);return t`<span class="pill pill--muted">${h} ${m} R</span>`})}
2275
2275
  </div>`:n}
2276
- ${t?.summary?a`<p class="summary">${t.summary}</p>`:n}
2277
- ${Object.keys(o).length>0||Object.keys(l).length>0?a`<div class="dist-grid">
2278
- ${Object.keys(o).length>0?a`<div class="dist-section">
2276
+ ${r?.summary?t`<p class="summary">${r.summary}</p>`:n}
2277
+ ${Object.keys(o).length>0||Object.keys(l).length>0?t`<div class="dist-grid">
2278
+ ${Object.keys(o).length>0?t`<div class="dist-section">
2279
2279
  <h3>Elements</h3>
2280
- ${Object.entries(o).map(([m,h])=>a`<div class="dist-row">
2280
+ ${Object.entries(o).map(([m,h])=>t`<div class="dist-row">
2281
2281
  <span>${m}</span>
2282
2282
  <div class="dist-bar"><span style="width: ${Math.round(h/d*100)}%"></span></div>
2283
2283
  <span>${h}</span>
2284
2284
  </div>`)}
2285
2285
  </div>`:n}
2286
- ${Object.keys(l).length>0?a`<div class="dist-section">
2286
+ ${Object.keys(l).length>0?t`<div class="dist-section">
2287
2287
  <h3>Modalities</h3>
2288
- ${Object.entries(l).map(([m,h])=>a`<div class="dist-row">
2288
+ ${Object.entries(l).map(([m,h])=>t`<div class="dist-row">
2289
2289
  <span>${m}</span>
2290
- <div class="dist-bar"><span style="width: ${Math.round(h/p*100)}%"></span></div>
2290
+ <div class="dist-bar"><span style="width: ${Math.round(h/c*100)}%"></span></div>
2291
2291
  <span>${h}</span>
2292
2292
  </div>`)}
2293
2293
  </div>`:n}
2294
2294
  </div>`:n}
2295
- </div>`}renderInterpretations(){let e=this.getPlanets().filter(t=>t.interpretation);return e.length===0?n:a`<section class="interpretations">
2295
+ </div>`}renderInterpretations(){let e=this.getPlanets().filter(r=>r.interpretation);return e.length===0?n:t`<section class="interpretations">
2296
2296
  <h3>Planet readings</h3>
2297
- ${e.map(t=>{let s=t.interpretation,o=L[C(t.name)]??"",l=w(t.degree??0,1);return a`<details class="interp-card">
2298
- <summary>${o} ${t.name} <small>${t.sign??""} ${l}</small></summary>
2297
+ ${e.map((r,s)=>{let o=r.interpretation,l=L[C(r.name)]??"",d=w(r.degree??0,1);return t`<details class="interp-card" name="natal-planet-readings" ?open=${s===0}>
2298
+ <summary>${l} ${r.name} <small>${r.sign??""} ${d}</small></summary>
2299
2299
  <div class="interp-body">
2300
- ${s.summary?a`<p class="interp-summary">${s.summary}</p>`:n}
2301
- ${s.detailed?a`<p class="interp-detail">${s.detailed}</p>`:n}
2302
- ${s.keywords?.length?a`<div class="interp-keywords">${s.keywords.map(d=>a`<span class="kw">${d}</span>`)}</div>`:n}
2300
+ ${o.summary?t`<p class="interp-summary">${o.summary}</p>`:n}
2301
+ ${o.detailed?t`<p class="interp-detail">${o.detailed}</p>`:n}
2302
+ ${o.keywords?.length?t`<div class="interp-keywords">${o.keywords.map(c=>t`<span class="kw">${c}</span>`)}</div>`:n}
2303
2303
  </div>
2304
2304
  </details>`})}
2305
- </section>`}renderAspects(e,t){let s=new Map;for(let o of e){if(typeof o.longitude!="number")continue;let l=C(o.name);l&&s.set(l,o.longitude)}return t.map(o=>{let l=s.get(C(o.planet1)),d=s.get(C(o.planet2));if(l===void 0||d===void 0)return n;let p=R(A,A,Ie-18,this.toAngle(l)),m=R(A,A,Ie-18,this.toAngle(d)),h=ke(o),g=ze[h]??"aspect-other",f=w(o.orb,1);return S`<line class=${`aspect ${g}`} x1=${p.x} y1=${p.y} x2=${m.x} y2=${m.y}><title>${o.planet1} ${h||""} ${o.planet2}${f?` (orb ${f}\xB0)`:""}</title></line>`})}};K.styles=[b,x`
2305
+ </section>`}renderAspects(e,r){let s=new Map;for(let o of e){if(typeof o.longitude!="number")continue;let l=C(o.name);l&&s.set(l,o.longitude)}return r.map(o=>{let l=s.get(C(o.planet1)),d=s.get(C(o.planet2));if(l===void 0||d===void 0)return n;let c=R(A,A,je-18,this.toAngle(l)),m=R(A,A,je-18,this.toAngle(d)),h=ke(o),g=Ne[h]??"aspect-other",f=w(o.orb,1);return S`<line class=${`aspect ${g}`} x1=${c.x} y1=${c.y} x2=${m.x} y2=${m.y}><title>${o.planet1} ${h||""} ${o.planet2}${f?` (orb ${f}\xB0)`:""}</title></line>`})}};K.styles=[b,x`
2306
2306
  .wrap {
2307
2307
  width: 100%;
2308
2308
  display: grid;
@@ -2531,40 +2531,40 @@
2531
2531
  color: var(--roxy-accent-fg, #b45309);
2532
2532
  font-size: var(--roxy-text-xs, 0.75rem);
2533
2533
  }
2534
- `],c([y({attribute:!1})],K.prototype,"data",2),c([y({type:String,attribute:"house-system",reflect:!0})],K.prototype,"houseSystem",2),K=c([v("roxy-natal-chart")],K);var V=class extends u{constructor(){super(...arguments);this.data=null;this.type="life-path"}render(){let e=this.data;if(!e)return a`<div class="roxy-empty" role="status">No numerology data</div>`;let t=$r[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 s=e.meaning?.keywords??[];return a`<article class="card" aria-label=${t}>
2534
+ `],p([y({attribute:!1})],K.prototype,"data",2),p([y({type:String,attribute:"house-system",reflect:!0})],K.prototype,"houseSystem",2),K=p([v("roxy-natal-chart")],K);var V=class extends u{constructor(){super(...arguments);this.data=null;this.type="life-path"}render(){let e=this.data;if(!e)return t`<div class="roxy-empty" role="status">No numerology data</div>`;let r=$t[this.type]??this.type;return"coreNumbers"in e?this.renderChart(e,r):"personalYear"in e?this.renderPersonalYear(e,r):this.renderNumberCard(e,r)}renderNumberCard(e,r){let s=e.meaning?.keywords??[];return t`<article class="card" aria-label=${r}>
2535
2535
  <div class="hero">
2536
- ${typeof e.number=="number"?a`<div class="numeral">${e.number}</div>`:n}
2536
+ ${typeof e.number=="number"?t`<div class="numeral">${e.number}</div>`:n}
2537
2537
  <div>
2538
- <p class="label">${t}</p>
2539
- ${e.meaning?.title?a`<h2 class="title">${e.meaning.title}</h2>`:n}
2538
+ <p class="label">${r}</p>
2539
+ ${e.meaning?.title?t`<h2 class="title">${e.meaning.title}</h2>`:n}
2540
2540
  </div>
2541
2541
  </div>
2542
- ${e.meaning?.description?a`<p class="meaning">${e.meaning.description}</p>`:n}
2543
- ${e.calculation?a`<pre class="calc">${e.calculation}</pre>`:n}
2544
- ${s.length>0?a`<div class="chips">
2545
- ${s.map(o=>a`<span>${o}</span>`)}
2542
+ ${e.meaning?.description?t`<p class="meaning">${e.meaning.description}</p>`:n}
2543
+ ${e.calculation?t`<pre class="calc">${e.calculation}</pre>`:n}
2544
+ ${s.length>0?t`<div class="chips">
2545
+ ${s.map(o=>t`<span>${o}</span>`)}
2546
2546
  </div>`:n}
2547
- ${e.hasKarmicDebt&&e.karmicDebtNumber?a`<div class="karmic">
2547
+ ${e.hasKarmicDebt&&e.karmicDebtNumber?t`<div class="karmic">
2548
2548
  Karmic debt ${e.karmicDebtNumber}.
2549
- ${wr(e.karmicDebtMeaning)}
2549
+ ${wt(e.karmicDebtMeaning)}
2550
2550
  </div>`:n}
2551
- </article>`}renderPersonalYear(e,t){return a`<article class="card" aria-label=${t}>
2551
+ </article>`}renderPersonalYear(e,r){return t`<article class="card" aria-label=${r}>
2552
2552
  <div class="hero">
2553
- ${typeof e.personalYear=="number"?a`<div class="numeral">${e.personalYear}</div>`:n}
2553
+ ${typeof e.personalYear=="number"?t`<div class="numeral">${e.personalYear}</div>`:n}
2554
2554
  <div>
2555
- <p class="label">${t}</p>
2556
- ${e.theme?a`<h2 class="title">${e.theme}</h2>`:n}
2555
+ <p class="label">${r}</p>
2556
+ ${e.theme?t`<h2 class="title">${e.theme}</h2>`:n}
2557
2557
  </div>
2558
2558
  </div>
2559
- ${e.forecast?a`<p class="meaning">${e.forecast}</p>`:n}
2560
- ${e.advice?a`<p>${e.advice}</p>`:n}
2561
- </article>`}renderChart(e,t){let s=Object.entries(e.coreNumbers).filter(([,o])=>o!=null);return a`<article class="card" aria-label=${t}>
2559
+ ${e.forecast?t`<p class="meaning">${e.forecast}</p>`:n}
2560
+ ${e.advice?t`<p>${e.advice}</p>`:n}
2561
+ </article>`}renderChart(e,r){let s=Object.entries(e.coreNumbers).filter(([,o])=>o!=null);return t`<article class="card" aria-label=${r}>
2562
2562
  <div>
2563
- <p class="label">${t}</p>
2564
- ${e.profile?.name?a`<h2 class="title">${e.profile.name}</h2>`:n}
2563
+ <p class="label">${r}</p>
2564
+ ${e.profile?.name?t`<h2 class="title">${e.profile.name}</h2>`:n}
2565
2565
  </div>
2566
- ${s.length>0?a`<div class="cores">
2567
- ${s.map(([o,l])=>a`<div class="item">
2566
+ ${s.length>0?t`<div class="cores">
2567
+ ${s.map(([o,l])=>t`<div class="item">
2568
2568
  <span>${ee(o)}</span>
2569
2569
  <strong>${l.number??""}</strong>
2570
2570
  </div>`)}
@@ -2665,56 +2665,56 @@
2665
2665
  font-size: var(--roxy-text-sm, 0.875rem);
2666
2666
  color: var(--roxy-fg, #0a0a0a);
2667
2667
  }
2668
- `],c([y({attribute:!1})],V.prototype,"data",2),c([y({type:String,reflect:!0})],V.prototype,"type",2),V=c([v("roxy-numerology-card")],V);var $r={"life-path":"Life Path",expression:"Expression","personal-year":"Personal Year",chart:"Numerology chart"};function wr(i){return i?[i.description,i.challenge,i.resolution].filter(Boolean).join(" "):""}var F=class extends u{constructor(){super(...arguments);this.data=null;this.detail="detailed"}render(){let e=this.data;if(!e)return a`<div class="roxy-empty" role="status">No panchang data</div>`;let t="sunrise"in e?e:null,s=[["Tithi",this.formatPart(e.tithi)],["Nakshatra",this.formatPart(e.nakshatra)],["Yoga",this.formatPart(e.yoga)],["Karana",this.formatPart(e.karana)]];t&&s.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]]:[],l=t?[["Rahu Kaal",t.rahuKaal],["Yamaganda",t.yamaganda],["Gulika",t.gulika]]:[];return a`<div class="wrap" aria-label="Panchang">
2668
+ `],p([y({attribute:!1})],V.prototype,"data",2),p([y({type:String,reflect:!0})],V.prototype,"type",2),V=p([v("roxy-numerology-card")],V);var $t={"life-path":"Life Path",expression:"Expression","personal-year":"Personal Year",chart:"Numerology chart"};function wt(i){return i?[i.description,i.challenge,i.resolution].filter(Boolean).join(" "):""}var F=class extends u{constructor(){super(...arguments);this.data=null;this.detail="detailed"}render(){let e=this.data;if(!e)return t`<div class="roxy-empty" role="status">No panchang data</div>`;let r="sunrise"in e?e:null,s=[["Tithi",this.formatPart(e.tithi)],["Nakshatra",this.formatPart(e.nakshatra)],["Yoga",this.formatPart(e.yoga)],["Karana",this.formatPart(e.karana)]];r&&s.push(["Vara",this.formatPart(r.vara)]);let o=r?[["Brahma Muhurta",r.brahmaMuhurta],["Abhijit Muhurta",r.abhijitMuhurta],["Vijaya Muhurta",r.vijayaMuhurta],["Godhuli Muhurta",r.godhuliMuhurta],["Nishita Muhurta",r.nishitaMuhurta],["Pratah Sandhya",r.pratahSandhya],["Sayahna Sandhya",r.sayahnaSandhya]]:[],l=r?[["Rahu Kaal",r.rahuKaal],["Yamaganda",r.yamaganda],["Gulika",r.gulika]]:[];return t`<div class="wrap" aria-label="Panchang">
2669
2669
  <header class="head">
2670
2670
  <h2 class="title">Panchang</h2>
2671
- <span class="date">${t?Ne(t.date):""}</span>
2671
+ <span class="date">${r?ze(r.date):""}</span>
2672
2672
  </header>
2673
2673
  <table>
2674
2674
  <tbody>
2675
- ${s.map(([d,p])=>a`<tr>
2675
+ ${s.map(([d,c])=>t`<tr>
2676
2676
  <th>${d}</th>
2677
- <td>${p}</td>
2677
+ <td>${c}</td>
2678
2678
  </tr>`)}
2679
- ${t?.sunrise?a`<tr>
2679
+ ${r?.sunrise?t`<tr>
2680
2680
  <th>Sunrise</th>
2681
- <td>${O(t.sunrise)}</td>
2681
+ <td>${O(r.sunrise)}</td>
2682
2682
  </tr>`:n}
2683
- ${t?.sunset?a`<tr>
2683
+ ${r?.sunset?t`<tr>
2684
2684
  <th>Sunset</th>
2685
- <td>${O(t.sunset)}</td>
2685
+ <td>${O(r.sunset)}</td>
2686
2686
  </tr>`:n}
2687
- ${t?.moonrise?a`<tr>
2687
+ ${r?.moonrise?t`<tr>
2688
2688
  <th>Moonrise</th>
2689
- <td>${O(t.moonrise)}</td>
2689
+ <td>${O(r.moonrise)}</td>
2690
2690
  </tr>`:n}
2691
- ${t?.moonset?a`<tr>
2691
+ ${r?.moonset?t`<tr>
2692
2692
  <th>Moonset</th>
2693
- <td>${O(t.moonset)}</td>
2693
+ <td>${O(r.moonset)}</td>
2694
2694
  </tr>`:n}
2695
2695
  </tbody>
2696
2696
  </table>
2697
- ${this.detail==="detailed"&&(o.some(d=>!!d[1])||l.some(d=>!!d[1]))?a`
2697
+ ${this.detail==="detailed"&&(o.some(d=>!!d[1])||l.some(d=>!!d[1]))?t`
2698
2698
  <div class="section">Auspicious muhurtas</div>
2699
2699
  <table>
2700
2700
  <tbody>
2701
- ${o.filter(([,d])=>!!d).map(([d,p])=>a`<tr>
2701
+ ${o.filter(([,d])=>!!d).map(([d,c])=>t`<tr>
2702
2702
  <th>${d}</th>
2703
- <td>${st(p)}</td>
2703
+ <td>${ar(c)}</td>
2704
2704
  </tr>`)}
2705
2705
  </tbody>
2706
2706
  </table>
2707
2707
  <div class="section">Inauspicious periods</div>
2708
2708
  <table>
2709
2709
  <tbody>
2710
- ${l.filter(([,d])=>!!d).map(([d,p])=>a`<tr>
2710
+ ${l.filter(([,d])=>!!d).map(([d,c])=>t`<tr>
2711
2711
  <th>${d}</th>
2712
- <td>${st(p)}</td>
2712
+ <td>${ar(c)}</td>
2713
2713
  </tr>`)}
2714
2714
  </tbody>
2715
2715
  </table>
2716
2716
  `:n}
2717
- </div>`}formatPart(e){if(!e)return"";if(typeof e=="string")return e;if(typeof e=="object"){let t=e;return[t.name,t.lord?`(${t.lord})`:"",t.phase].filter(Boolean).join(" ")}return String(e)}};F.styles=[b,x`
2717
+ </div>`}formatPart(e){if(!e)return"";if(typeof e=="string")return e;if(typeof e=="object"){let r=e;return[r.name,r.lord?`(${r.lord})`:"",r.phase].filter(Boolean).join(" ")}return String(e)}};F.styles=[b,x`
2718
2718
  .wrap {
2719
2719
  border: 1px solid var(--roxy-border, #e4e4e7);
2720
2720
  border-radius: var(--roxy-radius-md, 8px);
@@ -2772,35 +2772,35 @@
2772
2772
  text-transform: uppercase;
2773
2773
  letter-spacing: 0.06em;
2774
2774
  }
2775
- `],c([y({attribute:!1})],F.prototype,"data",2),c([y({type:String,reflect:!0})],F.prototype,"detail",2),F=c([v("roxy-panchang-table")],F);var dt=[{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 u{constructor(){super(...arguments);this.data=null}render(){if(!this.data?.planets?.length)return a`<div class="roxy-empty" role="status">No shadbala data</div>`;let e=[...this.data.planets].sort((t,s)=>t.relativeRank-s.relativeRank);return a`<div class="wrap" aria-label="Shadbala planetary strength">
2775
+ `],p([y({attribute:!1})],F.prototype,"data",2),p([y({type:String,reflect:!0})],F.prototype,"detail",2),F=p([v("roxy-panchang-table")],F);var lr=[{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 u{constructor(){super(...arguments);this.data=null}render(){if(!this.data?.planets?.length)return t`<div class="roxy-empty" role="status">No shadbala data</div>`;let e=[...this.data.planets].sort((r,s)=>r.relativeRank-s.relativeRank);return t`<div class="wrap" aria-label="Shadbala planetary strength">
2776
2776
  <div class="head">
2777
2777
  <h2 class="title">Shadbala</h2>
2778
2778
  <p class="subtitle">${e.length} planets ranked by strength</p>
2779
2779
  </div>
2780
2780
 
2781
2781
  <div role="list" aria-label="Planet strength bars">
2782
- ${e.map(t=>this.renderPlanetRow(t))}
2782
+ ${e.map(r=>this.renderPlanetRow(r))}
2783
2783
  </div>
2784
2784
 
2785
2785
  <div class="legend" aria-label="Strength component legend">
2786
- ${dt.map(t=>a`<div class="legend-row">
2786
+ ${lr.map(r=>t`<div class="legend-row">
2787
2787
  <span
2788
2788
  class="legend-swatch"
2789
- style="background: ${t.color}"
2789
+ style="background: ${r.color}"
2790
2790
  aria-hidden="true"
2791
2791
  ></span>
2792
- ${t.label}
2792
+ ${r.label}
2793
2793
  </div>`)}
2794
2794
  </div>
2795
- </div>`}renderPlanetRow(e){let t=L[C(e.planet)]??"",s=dt.map(h=>Math.max(0,e[h.key])),o=s.reduce((h,g)=>h+g,0),l=typeof e.strengthRatio=="number"&&e.strengthRatio>=1,d=l?"adequacy-badge--adequate":"adequacy-badge--weak",p=l?"adequate":"weak",m=w(e.totalRupas,2)&&w(e.minRequired,2)?`${w(e.totalRupas,2)} / ${w(e.minRequired,2)} R`:"";return a`<div class="planet-row" role="listitem" aria-label="${e.planet} shadbala">
2795
+ </div>`}renderPlanetRow(e){let r=L[C(e.planet)]??"",s=lr.map(h=>Math.max(0,e[h.key])),o=s.reduce((h,g)=>h+g,0),l=typeof e.strengthRatio=="number"&&e.strengthRatio>=1,d=l?"adequacy-badge--adequate":"adequacy-badge--weak",c=l?"adequate":"weak",m=w(e.totalRupas,2)&&w(e.minRequired,2)?`${w(e.totalRupas,2)} / ${w(e.minRequired,2)} R`:"";return t`<div class="planet-row" role="listitem" aria-label="${e.planet} shadbala">
2796
2796
  <div class="planet-label">
2797
- <span class="glyph" aria-hidden="true">${t}</span>
2797
+ <span class="glyph" aria-hidden="true">${r}</span>
2798
2798
  ${e.planet}
2799
2799
  <span class="rank-badge" aria-label="rank ${e.relativeRank}">#${e.relativeRank}</span>
2800
2800
  </div>
2801
2801
  <div class="bar-wrap">
2802
2802
  <div class="bar" role="img" aria-label="Strength components for ${e.planet}">
2803
- ${o>0?dt.map((h,g)=>{let f=s[g];if(f<=0)return n;let k=f/o*100;return a`<div
2803
+ ${o>0?lr.map((h,g)=>{let f=s[g];if(f<=0)return n;let k=f/o*100;return t`<div
2804
2804
  class="bar-segment"
2805
2805
  style="flex-grow: ${k}; background: ${h.color};"
2806
2806
  title="${h.label}: ${w(f,1)}"
@@ -2808,8 +2808,8 @@
2808
2808
  </div>
2809
2809
  </div>
2810
2810
  <div class="pills">
2811
- ${m?a`<span class="rupas-label">${m}</span>`:n}
2812
- <span class="${`adequacy-badge ${d}`}">${p}</span>
2811
+ ${m?t`<span class="rupas-label">${m}</span>`:n}
2812
+ <span class="${`adequacy-badge ${d}`}">${c}</span>
2813
2813
  </div>
2814
2814
  </div>`}};se.styles=[b,x`
2815
2815
  .wrap {
@@ -2957,18 +2957,18 @@
2957
2957
  justify-content: flex-start;
2958
2958
  }
2959
2959
  }
2960
- `],c([y({attribute:!1})],se.prototype,"data",2),se=c([v("roxy-shadbala-table")],se);var ct=360,P=ct/2,Dt=170,kr=154,Ot=124,Se=96,oe=class extends u{constructor(){super(...arguments);this.data=null}render(){if(!this.data)return a`<div class="roxy-empty" role="status">No synastry data</div>`;let{person1:e,person2:t,compatibilityScore:s,analysis:o}=this.data,l=this.data.interAspects??[],d=e?.planets??[],p=t?.planets??[],m=typeof s=="number"?Math.round(s):void 0,h=o?.overall,g=o?.strengths??[],f=o?.challenges??[];return d.length>0&&p.length>0?a`<div
2960
+ `],p([y({attribute:!1})],se.prototype,"data",2),se=p([v("roxy-shadbala-table")],se);var dr=360,P=dr/2,Dr=170,kt=154,Or=124,Se=96,oe=class extends u{constructor(){super(...arguments);this.data=null}render(){if(!this.data)return t`<div class="roxy-empty" role="status">No synastry data</div>`;let{person1:e,person2:r,compatibilityScore:s,analysis:o}=this.data,l=this.data.interAspects??[],d=e?.planets??[],c=r?.planets??[],m=typeof s=="number"?Math.round(s):void 0,h=o?.overall,g=o?.strengths??[],f=o?.challenges??[];return d.length>0&&c.length>0?t`<div
2961
2961
  class="wrap"
2962
2962
  aria-label="Synastry compatibility chart"
2963
2963
  >
2964
2964
  <div class="head">
2965
2965
  <h2 class="title">Synastry</h2>
2966
- ${typeof m=="number"?a`<span class="score" aria-label=${`Score ${m} of 100`}
2966
+ ${typeof m=="number"?t`<span class="score" aria-label=${`Score ${m} of 100`}
2967
2967
  >${m} / 100</span
2968
2968
  >`:n}
2969
2969
  </div>
2970
2970
  <svg
2971
- viewBox="0 0 ${ct} ${ct}"
2971
+ viewBox="0 0 ${dr} ${dr}"
2972
2972
  role="img"
2973
2973
  aria-label="Dual chart wheel comparing two natal charts"
2974
2974
  >
@@ -2977,7 +2977,7 @@
2977
2977
  class="wheel-line"
2978
2978
  cx=${P}
2979
2979
  cy=${P}
2980
- r=${Dt}
2980
+ r=${Dr}
2981
2981
  stroke-width="1.5"
2982
2982
  />
2983
2983
  <circle
@@ -2995,8 +2995,8 @@
2995
2995
  stroke-width="0.6"
2996
2996
  />
2997
2997
  ${this.renderSpokes()} ${this.renderSigns()}
2998
- ${this.renderInterAspectLines(d,p,l)}
2999
- ${this.renderRing(d,Ot,"p1")} ${this.renderRing(p,Se,"p2")}
2998
+ ${this.renderInterAspectLines(d,c,l)}
2999
+ ${this.renderRing(d,Or,"p1")} ${this.renderRing(c,Se,"p2")}
3000
3000
  </svg>
3001
3001
  <div class="legend-row">
3002
3002
  <span><span class="swatch" style="background: var(--roxy-accent)"></span>Person 1</span>
@@ -3004,29 +3004,29 @@
3004
3004
  <span><span class="swatch" style="background: var(--roxy-success)"></span>harmonious</span>
3005
3005
  <span><span class="swatch" style="background: var(--roxy-danger)"></span>challenging</span>
3006
3006
  </div>
3007
- ${h?a`<p class="summary">${h}</p>`:n}
3007
+ ${h?t`<p class="summary">${h}</p>`:n}
3008
3008
  ${l.length>0?this.renderAspects(l):n}
3009
- ${g.length>0||f.length>0?a`<div class="lists">
3010
- ${g.length?a`<div>
3009
+ ${g.length>0||f.length>0?t`<div class="lists">
3010
+ ${g.length?t`<div>
3011
3011
  <h3>Strengths</h3>
3012
3012
  <ul>
3013
- ${g.map($=>a`<li>${$}</li>`)}
3013
+ ${g.map($=>t`<li>${$}</li>`)}
3014
3014
  </ul>
3015
3015
  </div>`:n}
3016
- ${f.length?a`<div>
3016
+ ${f.length?t`<div>
3017
3017
  <h3>Challenges</h3>
3018
3018
  <ul>
3019
- ${f.map($=>a`<li>${$}</li>`)}
3019
+ ${f.map($=>t`<li>${$}</li>`)}
3020
3020
  </ul>
3021
3021
  </div>`:n}
3022
3022
  </div>`:n}
3023
- </div>`:a`<div
3023
+ </div>`:t`<div
3024
3024
  class="wrap"
3025
3025
  aria-label="Synastry compatibility chart"
3026
3026
  >
3027
3027
  <div class="head">
3028
3028
  <h2 class="title">Synastry</h2>
3029
- ${typeof m=="number"?a`<span class="score" aria-label=${`Score ${m} of 100`}
3029
+ ${typeof m=="number"?t`<span class="score" aria-label=${`Score ${m} of 100`}
3030
3030
  >${m} / 100</span
3031
3031
  >`:n}
3032
3032
  </div>
@@ -3036,23 +3036,23 @@
3036
3036
  <code>person2.planets</code> arrays from the natal-chart endpoint, or
3037
3037
  use the <code>&lt;roxy-data&gt;</code> fallback.
3038
3038
  </div>
3039
- ${h?a`<p class="summary">${h}</p>`:n}
3039
+ ${h?t`<p class="summary">${h}</p>`:n}
3040
3040
  ${l.length>0?this.renderAspects(l):n}
3041
- ${g.length>0||f.length>0?a`<div class="lists">
3042
- ${g.length?a`<div>
3041
+ ${g.length>0||f.length>0?t`<div class="lists">
3042
+ ${g.length?t`<div>
3043
3043
  <h3>Strengths</h3>
3044
3044
  <ul>
3045
- ${g.map($=>a`<li>${$}</li>`)}
3045
+ ${g.map($=>t`<li>${$}</li>`)}
3046
3046
  </ul>
3047
3047
  </div>`:n}
3048
- ${f.length?a`<div>
3048
+ ${f.length?t`<div>
3049
3049
  <h3>Challenges</h3>
3050
3050
  <ul>
3051
- ${f.map($=>a`<li>${$}</li>`)}
3051
+ ${f.map($=>t`<li>${$}</li>`)}
3052
3052
  </ul>
3053
3053
  </div>`:n}
3054
3054
  </div>`:n}
3055
- </div>`}toAngle(e){return 180-e}renderSpokes(){return Array.from({length:12},(e,t)=>{let s=this.toAngle(t*30),o=R(P,P,Se-14,s),l=R(P,P,Dt,s);return S`<line class="wheel-line" x1=${o.x} y1=${o.y} x2=${l.x} y2=${l.y} stroke-width="0.6" />`})}renderSigns(){return pe.map((e,t)=>{let s=this.toAngle(t*30+15),o=R(P,P,kr,s);return S`<text class="sign" x=${o.x} y=${o.y} text-anchor="middle" dominant-baseline="central">${N[e]}</text>`})}renderRing(e,t,s){return e.map(o=>{if(!Number.isFinite(o.longitude))return n;let l=R(P,P,t,this.toAngle(o.longitude)),d=L[C(o.name)]??o.name.slice(0,2);return S`<text class=${s} x=${l.x} y=${l.y} text-anchor="middle" dominant-baseline="central"><title>${o.name}</title>${d}</text>`})}renderInterAspectLines(e,t,s){let o=(l,d)=>{let p=C(d);for(let m of l)if(C(m.name)===p&&typeof m.longitude=="number")return m.longitude};return s.map(l=>{let d=o(e,l.planet1),p=o(t,l.planet2);if(d===void 0||p===void 0)return n;let m=R(P,P,Ot-12,this.toAngle(d)),h=R(P,P,Se+8,this.toAngle(p)),g=ke(l),f=ze[g]??"aspect-other",k=w(l.orb,1);return S`<line class=${`aspect ${f}`} x1=${m.x} y1=${m.y} x2=${h.x} y2=${h.y}><title>${l.planet1} ${g} ${l.planet2}${k?` (orb ${k}\xB0)`:""}</title></line>`})}renderAspects(e){return a`<table>
3055
+ </div>`}toAngle(e){return 180-e}renderSpokes(){return Array.from({length:12},(e,r)=>{let s=this.toAngle(r*30),o=R(P,P,Se-14,s),l=R(P,P,Dr,s);return S`<line class="wheel-line" x1=${o.x} y1=${o.y} x2=${l.x} y2=${l.y} stroke-width="0.6" />`})}renderSigns(){return pe.map((e,r)=>{let s=this.toAngle(r*30+15),o=R(P,P,kt,s);return S`<text class="sign" x=${o.x} y=${o.y} text-anchor="middle" dominant-baseline="central">${z[e]}</text>`})}renderRing(e,r,s){return e.map(o=>{if(!Number.isFinite(o.longitude))return n;let l=R(P,P,r,this.toAngle(o.longitude)),d=L[C(o.name)]??o.name.slice(0,2);return S`<text class=${s} x=${l.x} y=${l.y} text-anchor="middle" dominant-baseline="central"><title>${o.name}</title>${d}</text>`})}renderInterAspectLines(e,r,s){let o=(l,d)=>{let c=C(d);for(let m of l)if(C(m.name)===c&&typeof m.longitude=="number")return m.longitude};return s.map(l=>{let d=o(e,l.planet1),c=o(r,l.planet2);if(d===void 0||c===void 0)return n;let m=R(P,P,Or-12,this.toAngle(d)),h=R(P,P,Se+8,this.toAngle(c)),g=ke(l),f=Ne[g]??"aspect-other",k=w(l.orb,1);return S`<line class=${`aspect ${f}`} x1=${m.x} y1=${m.y} x2=${h.x} y2=${h.y}><title>${l.planet1} ${g} ${l.planet2}${k?` (orb ${k}\xB0)`:""}</title></line>`})}renderAspects(e){return t`<table>
3056
3056
  <thead>
3057
3057
  <tr>
3058
3058
  <th>Planet 1</th>
@@ -3063,12 +3063,12 @@
3063
3063
  </tr>
3064
3064
  </thead>
3065
3065
  <tbody>
3066
- ${e.slice(0,12).map(t=>a`<tr>
3067
- <td>${t.planet1}</td>
3068
- <td>${t.planet2}</td>
3069
- <td>${ke(t)||""}</td>
3070
- <td class="orb">${w(t.orb,1)}</td>
3071
- <td>${Sr(t.strength)}</td>
3066
+ ${e.slice(0,12).map(r=>t`<tr>
3067
+ <td>${r.planet1}</td>
3068
+ <td>${r.planet2}</td>
3069
+ <td>${ke(r)||""}</td>
3070
+ <td class="orb">${w(r.orb,1)}</td>
3071
+ <td>${St(r.strength)}</td>
3072
3072
  </tr>`)}
3073
3073
  </tbody>
3074
3074
  </table>`}};oe.styles=[b,x`
@@ -3223,32 +3223,32 @@
3223
3223
  padding: 0 4px;
3224
3224
  border-radius: 4px;
3225
3225
  }
3226
- `],c([y({attribute:!1})],oe.prototype,"data",2),oe=c([v("roxy-synastry-chart")],oe);function Sr(i){return typeof i=="number"?Math.round(i).toString():""}var W=class extends u{constructor(){super(...arguments);this.data=null;this.flipped=!1;this.toggleFlip=()=>{this.flipped=!this.flipped}}render(){let e=this.data;return e?"card"in e?this.renderDailyCard(e):this.renderFullCard(e):a`<div class="roxy-empty" role="status">No tarot data</div>`}renderDailyCard(e){let t=e.card,s=this.flipped!==!!t.reversed,o=t.keywords??[];return a`<article class="card" aria-label=${t.name??"Tarot card"}>
3226
+ `],p([y({attribute:!1})],oe.prototype,"data",2),oe=p([v("roxy-synastry-chart")],oe);function St(i){return typeof i=="number"?Math.round(i).toString():""}var W=class extends u{constructor(){super(...arguments);this.data=null;this.flipped=!1;this.toggleFlip=()=>{this.flipped=!this.flipped}}render(){let e=this.data;return e?"card"in e?this.renderDailyCard(e):this.renderFullCard(e):t`<div class="roxy-empty" role="status">No tarot data</div>`}renderDailyCard(e){let r=e.card,s=this.flipped!==!!r.reversed,o=r.keywords??[];return t`<article class="card" aria-label=${r.name??"Tarot card"}>
3227
3227
  <div class="image-wrap">
3228
- ${t.imageUrl?a`<img
3228
+ ${r.imageUrl?t`<img
3229
3229
  class=${`image ${s?"reversed":""}`}
3230
- src=${t.imageUrl}
3231
- alt=${t.name??"Tarot card"}
3230
+ src=${r.imageUrl}
3231
+ alt=${r.name??"Tarot card"}
3232
3232
  tabindex="0"
3233
3233
  @click=${this.toggleFlip}
3234
3234
  @keydown=${l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),this.toggleFlip())}}
3235
- />`:a`<div
3235
+ />`:t`<div
3236
3236
  class=${`image ${s?"reversed":""}`}
3237
3237
  style="aspect-ratio: 0.6; display: flex; align-items: center; justify-content: center; color: var(--roxy-muted)"
3238
3238
  >
3239
- ${t.name??"?"}
3239
+ ${r.name??"?"}
3240
3240
  </div>`}
3241
3241
  </div>
3242
3242
  <div>
3243
3243
  <div class="meta">
3244
- ${t.arcana?a`${t.arcana} arcana`:n}
3245
- ${s?a` · reversed`:n}
3244
+ ${r.arcana?t`${r.arcana} arcana`:n}
3245
+ ${s?t` · reversed`:n}
3246
3246
  </div>
3247
- <h2 class="title">${t.name??"Tarot card"}</h2>
3248
- ${e.dailyMessage?a`<p class="message">${e.dailyMessage}</p>`:n}
3249
- ${t.meaning?a`<p>${t.meaning}</p>`:n}
3250
- ${o.length>0?a`<div class="chips">
3251
- ${o.map(l=>a`<span>${l}</span>`)}
3247
+ <h2 class="title">${r.name??"Tarot card"}</h2>
3248
+ ${e.dailyMessage?t`<p class="message">${e.dailyMessage}</p>`:n}
3249
+ ${r.meaning?t`<p>${r.meaning}</p>`:n}
3250
+ ${o.length>0?t`<div class="chips">
3251
+ ${o.map(l=>t`<span>${l}</span>`)}
3252
3252
  </div>`:n}
3253
3253
  <button
3254
3254
  class="flip"
@@ -3259,17 +3259,17 @@
3259
3259
  Flip card
3260
3260
  </button>
3261
3261
  </div>
3262
- </article>`}renderFullCard(e){let t=this.flipped,s=t?e.reversed:e.upright,o=t?e.keywords?.reversed??[]:e.keywords?.upright??[];return a`<article class="card" aria-label=${e.name??"Tarot card"}>
3262
+ </article>`}renderFullCard(e){let r=this.flipped,s=r?e.reversed:e.upright,o=r?e.keywords?.reversed??[]:e.keywords?.upright??[];return t`<article class="card" aria-label=${e.name??"Tarot card"}>
3263
3263
  <div class="image-wrap">
3264
- ${e.imageUrl?a`<img
3265
- class=${`image ${t?"reversed":""}`}
3264
+ ${e.imageUrl?t`<img
3265
+ class=${`image ${r?"reversed":""}`}
3266
3266
  src=${e.imageUrl}
3267
3267
  alt=${e.name??"Tarot card"}
3268
3268
  tabindex="0"
3269
3269
  @click=${this.toggleFlip}
3270
3270
  @keydown=${l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),this.toggleFlip())}}
3271
- />`:a`<div
3272
- class=${`image ${t?"reversed":""}`}
3271
+ />`:t`<div
3272
+ class=${`image ${r?"reversed":""}`}
3273
3273
  style="aspect-ratio: 0.6; display: flex; align-items: center; justify-content: center; color: var(--roxy-muted)"
3274
3274
  >
3275
3275
  ${e.name??"?"}
@@ -3277,14 +3277,14 @@
3277
3277
  </div>
3278
3278
  <div>
3279
3279
  <div class="meta">
3280
- ${e.arcana?a`${e.arcana} arcana`:n}
3281
- ${e.number!==void 0&&e.number!==null?a` · ${e.number}`:n}
3282
- ${t?a` · reversed`:n}
3280
+ ${e.arcana?t`${e.arcana} arcana`:n}
3281
+ ${e.number!==void 0&&e.number!==null?t` · ${e.number}`:n}
3282
+ ${r?t` · reversed`:n}
3283
3283
  </div>
3284
3284
  <h2 class="title">${e.name??"Tarot card"}</h2>
3285
- ${s?.description?a`<p>${s.description}</p>`:n}
3286
- ${o.length>0?a`<div class="chips">
3287
- ${o.map(l=>a`<span>${l}</span>`)}
3285
+ ${s?.description?t`<p>${s.description}</p>`:n}
3286
+ ${o.length>0?t`<div class="chips">
3287
+ ${o.map(l=>t`<span>${l}</span>`)}
3288
3288
  </div>`:n}
3289
3289
  <button
3290
3290
  class="flip"
@@ -3385,50 +3385,50 @@
3385
3385
  .flip:hover {
3386
3386
  transform: scale(1.02);
3387
3387
  }
3388
- `],c([y({attribute:!1})],W.prototype,"data",2),c([E()],W.prototype,"flipped",2),W=c([v("roxy-tarot-card")],W);var J=class extends u{constructor(){super(...arguments);this.data=null;this.spread="three-card"}render(){let e=this.data;if(!e)return a`<div class="roxy-empty" role="status">No tarot spread</div>`;let t="answer"in e,s="cards"in e&&!("spread"in e),o=s?[]:"positions"in e?e.positions??[]:[],l=s&&"cards"in e?e.cards:[],d=t?e.answer:void 0,p=t?e.strength:void 0,m="spread"in e?e.spread:this.spread.replace(/-/g," "),h="question"in e?e.question:void 0,g="summary"in e?e.summary:void 0,f=t?e.interpretation:void 0,k=d?d.toLowerCase().replace(/[^a-z]/g,""):"";return a`<article class="wrap" aria-label="Tarot spread">
3388
+ `],p([y({attribute:!1})],W.prototype,"data",2),p([E()],W.prototype,"flipped",2),W=p([v("roxy-tarot-card")],W);var J=class extends u{constructor(){super(...arguments);this.data=null;this.spread="three-card"}render(){let e=this.data;if(!e)return t`<div class="roxy-empty" role="status">No tarot spread</div>`;let r="answer"in e,s="cards"in e&&!("spread"in e),o=s?[]:"positions"in e?e.positions??[]:[],l=s&&"cards"in e?e.cards:[],d=r?e.answer:void 0,c=r?e.strength:void 0,m="spread"in e?e.spread:this.spread.replace(/-/g," "),h="question"in e?e.question:void 0,g="summary"in e?e.summary:void 0,f=r?e.interpretation:void 0,k=d?d.toLowerCase().replace(/[^a-z]/g,""):"";return t`<article class="wrap" aria-label="Tarot spread">
3389
3389
  <header class="head">
3390
3390
  <h2 class="title">${m}</h2>
3391
- ${h?a`<span class="question">"${h}"</span>`:n}
3391
+ ${h?t`<span class="question">"${h}"</span>`:n}
3392
3392
  </header>
3393
- ${t?a`<div>
3393
+ ${r?t`<div>
3394
3394
  <span class=${`answer ${k}`}>${d}</span>
3395
- ${p?a`<small> · ${p}</small>`:n}
3395
+ ${c?t`<small> · ${c}</small>`:n}
3396
3396
  </div>`:n}
3397
- ${o.length>0?a`<div class="grid">
3398
- ${o.map($=>a`<div class="card">
3397
+ ${o.length>0?t`<div class="grid">
3398
+ ${o.map($=>t`<div class="card">
3399
3399
  <p class="label">${$.name??""}</p>
3400
3400
  <div class="image">
3401
- ${$.card?.imageUrl?a`<img
3401
+ ${$.card?.imageUrl?t`<img
3402
3402
  src=${$.card.imageUrl}
3403
3403
  alt=${$.card.name??"tarot card"}
3404
3404
  class=${$.card.reversed?"reversed":""}
3405
- />`:a`${$.card?.name??"?"}`}
3405
+ />`:t`${$.card?.name??"?"}`}
3406
3406
  </div>
3407
3407
  <p class="name">
3408
3408
  ${$.card?.name??""}
3409
- ${$.card?.reversed?a`<small>(reversed)</small>`:n}
3409
+ ${$.card?.reversed?t`<small>(reversed)</small>`:n}
3410
3410
  </p>
3411
- ${$.interpretation?a`<p class="interp">${$.interpretation}</p>`:n}
3411
+ ${$.interpretation?t`<p class="interp">${$.interpretation}</p>`:n}
3412
3412
  </div>`)}
3413
3413
  </div>`:n}
3414
- ${l.length>0?a`<div class="grid">
3415
- ${l.map($=>a`<div class="card">
3414
+ ${l.length>0?t`<div class="grid">
3415
+ ${l.map($=>t`<div class="card">
3416
3416
  <div class="image">
3417
- ${$.imageUrl?a`<img
3417
+ ${$.imageUrl?t`<img
3418
3418
  src=${$.imageUrl}
3419
3419
  alt=${$.name??"tarot card"}
3420
3420
  class=${$.reversed?"reversed":""}
3421
- />`:a`${$.name??"?"}`}
3421
+ />`:t`${$.name??"?"}`}
3422
3422
  </div>
3423
3423
  <p class="name">
3424
3424
  ${$.name??""}
3425
- ${$.reversed?a`<small>(reversed)</small>`:n}
3425
+ ${$.reversed?t`<small>(reversed)</small>`:n}
3426
3426
  </p>
3427
- ${$.meaning?a`<p class="interp">${$.meaning}</p>`:n}
3427
+ ${$.meaning?t`<p class="interp">${$.meaning}</p>`:n}
3428
3428
  </div>`)}
3429
3429
  </div>`:n}
3430
- ${g?a`<p class="reading">${g}</p>`:n}
3431
- ${f?a`<p class="reading">${f}</p>`:n}
3430
+ ${g?t`<p class="reading">${g}</p>`:n}
3431
+ ${f?t`<p class="reading">${f}</p>`:n}
3432
3432
  </article>`}};J.styles=[b,x`
3433
3433
  .wrap {
3434
3434
  display: grid;
@@ -3535,10 +3535,10 @@
3535
3535
  margin: 0;
3536
3536
  color: var(--roxy-fg, #0a0a0a);
3537
3537
  }
3538
- `],c([y({attribute:!1})],J.prototype,"data",2),c([y({type:String,reflect:!0})],J.prototype,"spread",2),J=c([v("roxy-tarot-spread")],J);var ie=class extends u{constructor(){super(...arguments);this.data=null}render(){if(!this.data?.transitPlanets?.length)return a`<div class="roxy-empty" role="status">No transits data</div>`;let{transitDate:e,transitTime:t,transitPlanets:s,transitAspects:o,summary:l}=this.data,d=[Ne(e),O(t)].filter(Boolean).join(" ");return a`<div class="wrap" aria-label="Transit positions table">
3538
+ `],p([y({attribute:!1})],J.prototype,"data",2),p([y({type:String,reflect:!0})],J.prototype,"spread",2),J=p([v("roxy-tarot-spread")],J);var ie=class extends u{constructor(){super(...arguments);this.data=null}render(){if(!this.data?.transitPlanets?.length)return t`<div class="roxy-empty" role="status">No transits data</div>`;let{transitDate:e,transitTime:r,transitPlanets:s,transitAspects:o,summary:l}=this.data,d=[ze(e),O(r)].filter(Boolean).join(" ");return t`<div class="wrap" aria-label="Transit positions table">
3539
3539
  <div class="head">
3540
3540
  <h2 class="title">Transits</h2>
3541
- ${d?a`<p class="subtitle">${d}</p>`:n}
3541
+ ${d?t`<p class="subtitle">${d}</p>`:n}
3542
3542
  </div>
3543
3543
 
3544
3544
  ${l?this.renderSummaryPills(l):n}
@@ -3550,13 +3550,13 @@
3550
3550
  </div>
3551
3551
  </div>
3552
3552
 
3553
- ${o?.length?a`<div>
3553
+ ${o?.length?t`<div>
3554
3554
  <p class="section-label">Transit aspects</p>
3555
3555
  <div class="overflow-scroll">
3556
- ${this.renderAspectsTable(o)}
3556
+ ${this.renderAspectsList(o)}
3557
3557
  </div>
3558
3558
  </div>`:n}
3559
- </div>`}renderSummaryPills(e){return a`<div class="summary-pills" role="region" aria-label="Aspect summary">
3559
+ </div>`}renderSummaryPills(e){return t`<div class="summary-pills" role="region" aria-label="Aspect summary">
3560
3560
  <span class="pill pill--muted">
3561
3561
  Total: ${e.totalAspects}
3562
3562
  </span>
@@ -3569,7 +3569,7 @@
3569
3569
  <span class="pill pill--muted">
3570
3570
  Neutral: ${e.neutral}
3571
3571
  </span>
3572
- </div>`}renderPlanetsTable(e){return a`<table class="planets-table">
3572
+ </div>`}renderPlanetsTable(e){return t`<table class="planets-table">
3573
3573
  <thead>
3574
3574
  <tr>
3575
3575
  <th scope="col">Planet</th>
@@ -3579,62 +3579,50 @@
3579
3579
  </tr>
3580
3580
  </thead>
3581
3581
  <tbody>
3582
- ${e.map(t=>{let s=L[C(t.name)]??"",o=N[C(t.sign)]??"",l=t.speed>=0?"\u2191":"\u2193";return a`<tr>
3582
+ ${e.map(r=>{let s=L[C(r.name)]??"",o=z[C(r.sign)]??"",l=r.speed>=0?"\u2191":"\u2193";return t`<tr>
3583
3583
  <td>
3584
3584
  <div class="planet-cell">
3585
3585
  <span class="glyph" aria-hidden="true">${s}</span>
3586
- ${t.name}
3587
- ${t.isRetrograde?a`<span class="retro-badge" aria-label="retrograde">R</span>`:n}
3586
+ ${r.name}
3587
+ ${r.isRetrograde?t`<span class="retro-badge" aria-label="retrograde">R</span>`:n}
3588
3588
  </div>
3589
3589
  </td>
3590
3590
  <td>
3591
3591
  <div class="planet-cell">
3592
3592
  <span class="glyph" aria-hidden="true">${o}</span>
3593
- ${t.sign}
3593
+ ${r.sign}
3594
3594
  </div>
3595
3595
  </td>
3596
- <td class="num">${w(t.degree,2)}</td>
3596
+ <td class="num">${w(r.degree,2)}</td>
3597
3597
  <td class="speed">
3598
3598
  <span class="speed-arrow" aria-hidden="true">${l}</span>
3599
- ${w(Math.abs(t.speed),4)}
3599
+ ${w(Math.abs(r.speed),4)}
3600
3600
  </td>
3601
3601
  </tr>`})}
3602
3602
  </tbody>
3603
- </table>`}renderAspectsTable(e){return a`<table class="aspects-table">
3604
- <thead>
3605
- <tr>
3606
- <th scope="col">Transit Planet</th>
3607
- <th scope="col">Natal Planet</th>
3608
- <th scope="col">Type</th>
3609
- <th scope="col">Orb</th>
3610
- <th scope="col">Status</th>
3611
- <th scope="col">Strength</th>
3612
- </tr>
3613
- </thead>
3614
- <tbody>
3615
- ${e.map(t=>{let s=L[C(t.transitPlanet)]??"",o=L[C(t.natalPlanet)]??"",l=`nature-${(t.nature??"").toLowerCase()}`,d=t.interpretation?.summary??"";return a`<tr class=${d?"aspect-row":"aspect-row no-interp"}>
3616
- <td>
3617
- <div class="arrow-cell">
3618
- <span class="glyph" aria-hidden="true">${s}</span>
3619
- ${t.transitPlanet}
3620
- </div>
3621
- </td>
3622
- <td>
3623
- <div class="arrow-cell">
3624
- <span class="glyph" aria-hidden="true">${o}</span>
3625
- ${t.natalPlanet}
3626
- </div>
3627
- </td>
3628
- <td class=${l}>${(t.type??"").toLowerCase()}</td>
3629
- <td class="num">${w(t.orb,2)}</td>
3630
- <td>${t.isApplying?"Applying":"Separating"}</td>
3631
- <td class="num">${w(t.strength,1)}</td>
3632
- </tr>
3633
- ${d?a`<tr class="interp-row">
3634
- <td colspan="6">${d}</td>
3635
- </tr>`:n}`})}
3636
- </tbody>
3637
- </table>`}};ie.styles=[b,x`
3603
+ </table>`}renderAspectsList(e){return t`<div role="list" aria-label="Transit aspects">
3604
+ ${e.map((r,s)=>{let o=L[C(r.transitPlanet)]??"",l=L[C(r.natalPlanet)]??"",d=(r.nature??"neutral").toLowerCase(),c=r.interpretation,m=(r.type??"").toLowerCase(),h=r.isApplying?"Applying":"Separating";return t`<details class="aspect-card" role="listitem" name="transit-aspects" ?open=${s===0}>
3605
+ <summary>
3606
+ <span aria-hidden="true">${o}</span>
3607
+ ${r.transitPlanet}
3608
+ <span class="nature-badge ${d}">${m}</span>
3609
+ <span aria-hidden="true">${l}</span>
3610
+ ${r.natalPlanet}
3611
+ <span class="meta">
3612
+ ${h} · orb ${w(r.orb,2)}° · strength ${w(r.strength,1)}
3613
+ </span>
3614
+ </summary>
3615
+ <div class="interp-body">
3616
+ ${c?.summary?t`<p>${c.summary}</p>`:n}
3617
+ ${c?.impact?t`<p><strong>Impact:</strong> ${c.impact}</p>`:n}
3618
+ ${c?.timing?t`<p><strong>Timing:</strong> ${c.timing}</p>`:n}
3619
+ ${c?.guidance?t`<p><strong>Guidance:</strong> ${c.guidance}</p>`:n}
3620
+ ${c?.keywords?.length?t`<div class="interp-keywords">
3621
+ ${c.keywords.map(g=>t`<span class="kw">${g}</span>`)}
3622
+ </div>`:n}
3623
+ </div>
3624
+ </details>`})}
3625
+ </div>`}};ie.styles=[b,x`
3638
3626
  .wrap {
3639
3627
  display: grid;
3640
3628
  gap: var(--roxy-space-md, 1rem);
@@ -3762,49 +3750,75 @@
3762
3750
  color: var(--roxy-muted, #71717a);
3763
3751
  }
3764
3752
 
3765
- .nature-harmonious {
3766
- color: var(--roxy-success-fg, #166534);
3767
- }
3768
-
3769
- .nature-challenging {
3770
- color: var(--roxy-danger-fg, #991b1b);
3753
+ .overflow-scroll {
3754
+ overflow-x: auto;
3755
+ -webkit-overflow-scrolling: touch;
3771
3756
  }
3772
3757
 
3773
- .nature-neutral {
3774
- color: var(--roxy-muted, #71717a);
3758
+ .aspect-card {
3759
+ border: 1px solid var(--roxy-border, #e4e4e7);
3760
+ border-radius: var(--roxy-radius-md, 8px);
3761
+ padding: var(--roxy-space-sm, 0.5rem) var(--roxy-space-md, 1rem);
3762
+ margin-bottom: var(--roxy-space-xs, 0.25rem);
3775
3763
  }
3776
-
3777
- .arrow-cell {
3778
- display: inline-flex;
3764
+ .aspect-card summary {
3765
+ cursor: pointer;
3766
+ font-weight: 500;
3767
+ color: var(--roxy-fg, #0a0a0a);
3768
+ display: flex;
3769
+ flex-wrap: wrap;
3779
3770
  align-items: center;
3780
- gap: 4px;
3781
- white-space: nowrap;
3771
+ gap: 0.5em;
3782
3772
  }
3783
-
3784
- .interp-row td {
3785
- padding-top: 0;
3786
- padding-bottom: var(--roxy-space-sm, 0.5rem);
3787
- border-bottom: 1px solid var(--roxy-border, #e4e4e7);
3788
- color: var(--roxy-secondary, #475569);
3773
+ .aspect-card summary .meta {
3774
+ color: var(--roxy-muted, #71717a);
3775
+ font-weight: 400;
3789
3776
  font-size: var(--roxy-text-xs, 0.75rem);
3777
+ margin-left: auto;
3778
+ font-variant-numeric: tabular-nums;
3779
+ }
3780
+ .aspect-card .interp-body {
3781
+ margin-top: var(--roxy-space-xs, 0.25rem);
3782
+ color: var(--roxy-fg, #0a0a0a);
3783
+ font-size: var(--roxy-text-sm, 0.875rem);
3790
3784
  line-height: 1.45;
3791
3785
  }
3792
-
3793
- .aspect-row td {
3794
- border-bottom: none;
3795
- padding-bottom: 4px;
3786
+ .aspect-card .interp-body p {
3787
+ margin: 0 0 var(--roxy-space-xs, 0.25rem);
3796
3788
  }
3797
-
3798
- .aspect-row.no-interp td {
3799
- border-bottom: 1px solid var(--roxy-border, #e4e4e7);
3800
- padding-bottom: var(--roxy-space-sm, 0.5rem);
3789
+ .interp-keywords {
3790
+ display: flex;
3791
+ flex-wrap: wrap;
3792
+ gap: 0.25rem;
3793
+ margin-top: 0.5rem;
3801
3794
  }
3802
-
3803
- .overflow-scroll {
3804
- overflow-x: auto;
3805
- -webkit-overflow-scrolling: touch;
3795
+ .interp-keywords .kw {
3796
+ padding: 1px 8px;
3797
+ border-radius: 9999px;
3798
+ background: color-mix(in srgb, var(--roxy-accent, #f59e0b) 14%, transparent);
3799
+ color: var(--roxy-accent-fg, #b45309);
3800
+ font-size: var(--roxy-text-xs, 0.75rem);
3801
+ }
3802
+ .nature-badge {
3803
+ display: inline-block;
3804
+ padding: 1px 8px;
3805
+ border-radius: 9999px;
3806
+ font-size: var(--roxy-text-xs, 0.75rem);
3807
+ font-weight: 600;
3808
+ }
3809
+ .nature-badge.harmonious {
3810
+ background: color-mix(in srgb, var(--roxy-success, #16a34a) 12%, transparent);
3811
+ color: var(--roxy-success-fg, #166534);
3812
+ }
3813
+ .nature-badge.challenging {
3814
+ background: color-mix(in srgb, var(--roxy-danger, #dc2626) 12%, transparent);
3815
+ color: var(--roxy-danger-fg, #991b1b);
3816
+ }
3817
+ .nature-badge.neutral {
3818
+ background: color-mix(in srgb, var(--roxy-border, #e4e4e7) 60%, transparent);
3819
+ color: var(--roxy-fg, #0a0a0a);
3806
3820
  }
3807
- `],c([y({attribute:!1})],ie.prototype,"data",2),ie=c([v("roxy-transits-table")],ie);var X=class extends u{constructor(){super(...arguments);this.data=null;this.chartStyle="south"}buildHouses(){if(!this.data)return[];let e=this.data,t=this.data?.meta?.Lagna?.rashi??"",s=[];for(let o=0;o<12;o++){let l=_e[o],p=(e[l]?.signs??[]).map(h=>h.graha).filter(Boolean),m=Me[l]??"";s.push({number:o+1,sign:m,planets:p,isLagna:t?t.toLowerCase()===m.toLowerCase():!1})}return s}render(){if(!this.data)return a`<div class="roxy-empty" role="status">No kundli data</div>`;let e=this.buildHouses(),t=this.chartStyle==="north";return a`<div class="wrap">
3821
+ `],p([y({attribute:!1})],ie.prototype,"data",2),ie=p([v("roxy-transits-table")],ie);var X=class extends u{constructor(){super(...arguments);this.data=null;this.chartStyle="south"}buildHouses(){if(!this.data)return[];let e=this.data,r=this.data?.meta?.Lagna?.rashi??"",s=[];for(let o=0;o<12;o++){let l=_e[o],c=(e[l]?.signs??[]).map(h=>h.graha).filter(Boolean),m=Me[l]??"";s.push({number:o+1,sign:m,planets:c,isLagna:r?r.toLowerCase()===m.toLowerCase():!1})}return s}render(){if(!this.data)return t`<div class="roxy-empty" role="status">No kundli data</div>`;let e=this.buildHouses(),r=this.chartStyle==="north";return t`<div class="wrap">
3808
3822
  <h2 class="title">Vedic kundli</h2>
3809
3823
  <svg
3810
3824
  viewBox="0 0 300 300"
@@ -3812,8 +3826,8 @@
3812
3826
  aria-label="Vedic birth chart with twelve sign houses"
3813
3827
  >
3814
3828
  <title>Vedic kundli</title>
3815
- ${t?Oe():Ge()}
3816
- ${t?e.map(s=>He(s)):e.map(s=>De(s))}
3829
+ ${r?Oe():Ge()}
3830
+ ${r?e.map(s=>He(s)):e.map(s=>De(s))}
3817
3831
  </svg>
3818
3832
  </div>`}};X.styles=[b,x`
3819
3833
  .wrap {
@@ -3865,20 +3879,20 @@
3865
3879
  stroke: color-mix(in srgb, var(--roxy-accent, #f59e0b) 45%, transparent);
3866
3880
  stroke-width: 0.8;
3867
3881
  }
3868
- `],c([y({attribute:!1})],X.prototype,"data",2),c([y({type:String,reflect:!0,attribute:"chart-style"})],X.prototype,"chartStyle",2),X=c([v("roxy-vedic-kundli")],X);var Z=class extends u{constructor(){super(...arguments);this.data=null;this.filter="";this.handleInput=je(e=>{this.filter=e.target.value},200)}renderQualityChip(e){let t=`quality-chip quality-${e}`;return a`<span class=${t}>${e}</span>`}renderDetailCard(e){return a`<div class="detail-card">
3882
+ `],p([y({attribute:!1})],X.prototype,"data",2),p([y({type:String,reflect:!0,attribute:"chart-style"})],X.prototype,"chartStyle",2),X=p([v("roxy-vedic-kundli")],X);var Z=class extends u{constructor(){super(...arguments);this.data=null;this.filter="";this.handleInput=e=>{this.filter=e.target.value}}renderQualityChip(e){let r=`quality-chip quality-${e}`;return t`<span class=${r}>${e}</span>`}renderDetailCard(e){return t`<div class="detail-card">
3869
3883
  <p class="detail-name">
3870
3884
  ${e.name}
3871
3885
  ${e.quality?this.renderQualityChip(e.quality):n}
3872
3886
  </p>
3873
- ${e.description?a`<p class="description">${e.description}</p>`:n}
3874
- ${e.result?a`<details>
3887
+ ${e.description?t`<p class="description">${e.description}</p>`:n}
3888
+ ${e.result?t`<details>
3875
3889
  <summary>Effects</summary>
3876
3890
  <div class="result-body">${e.result}</div>
3877
3891
  </details>`:n}
3878
- </div>`}render(){if(!this.data)return a`<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 s=e;return a`<div class="wrap">${this.renderDetailCard(s)}</div>`}if("yogas"in e&&Array.isArray(e.yogas)){let s=e.yogas;if(s.length>0&&"description"in s[0]){let m=s,h=t?m.filter(f=>f.name.toLowerCase().includes(t)):m,g=e.total;return a`<div class="wrap">
3892
+ </div>`}render(){if(!this.data)return t`<div class="roxy-empty" role="status">No yoga data</div>`;let e=this.data,r=this.filter.toLowerCase();if("description"in e&&typeof e.description=="string"){let s=e;return t`<div class="wrap">${this.renderDetailCard(s)}</div>`}if("yogas"in e&&Array.isArray(e.yogas)){let s=e.yogas;if(s.length>0&&"description"in s[0]){let m=s,h=r?m.filter(f=>f.name.toLowerCase().includes(r)):m,g=e.total;return t`<div class="wrap">
3879
3893
  <div class="head">
3880
3894
  <h2 class="title">Yoga catalog</h2>
3881
- ${g!==void 0?a`<span class="count">${g} total</span>`:n}
3895
+ ${g!==void 0?t`<span class="count">${g} total</span>`:n}
3882
3896
  </div>
3883
3897
  <div class="search-wrap">
3884
3898
  <input
@@ -3896,12 +3910,12 @@
3896
3910
  aria-live="polite"
3897
3911
  aria-label="Yoga results"
3898
3912
  >
3899
- ${h.length>0?h.map(f=>this.renderDetailCard(f)):a`<p class="no-results">No yogas match your search.</p>`}
3913
+ ${h.length>0?h.map(f=>this.renderDetailCard(f)):t`<p class="no-results">No yogas match your search.</p>`}
3900
3914
  </div>
3901
- </div>`}let l=s,d=t?l.filter(m=>m.name.toLowerCase().includes(t)):l,p=e.total;return a`<div class="wrap">
3915
+ </div>`}let l=s,d=r?l.filter(m=>m.name.toLowerCase().includes(r)):l,c=e.total;return t`<div class="wrap">
3902
3916
  <div class="head">
3903
3917
  <h2 class="title">Yoga catalog</h2>
3904
- ${p!==void 0?a`<span class="count">${p} total</span>`:n}
3918
+ ${c!==void 0?t`<span class="count">${c} total</span>`:n}
3905
3919
  </div>
3906
3920
  <div class="search-wrap">
3907
3921
  <input
@@ -3919,12 +3933,12 @@
3919
3933
  aria-live="polite"
3920
3934
  aria-label="Yoga results"
3921
3935
  >
3922
- ${d.length>0?d.map(m=>a`<div class="yoga-chip">
3936
+ ${d.length>0?d.map(m=>t`<div class="yoga-chip">
3923
3937
  ${m.name}
3924
3938
  <span class="yoga-id">${m.id}</span>
3925
- </div>`):a`<p class="no-results">No yogas match your search.</p>`}
3939
+ </div>`):t`<p class="no-results">No yogas match your search.</p>`}
3926
3940
  </div>
3927
- </div>`}return a`<div class="roxy-empty" role="status">No yoga data</div>`}};Z.styles=[b,x`
3941
+ </div>`}return t`<div class="roxy-empty" role="status">No yoga data</div>`}};Z.styles=[b,x`
3928
3942
  .wrap {
3929
3943
  display: grid;
3930
3944
  gap: var(--roxy-space-md, 1rem);
@@ -4072,7 +4086,7 @@
4072
4086
  display: grid;
4073
4087
  gap: var(--roxy-space-sm, 0.5rem);
4074
4088
  }
4075
- `],c([y({attribute:!1})],Z.prototype,"data",2),c([E()],Z.prototype,"filter",2),Z=c([v("roxy-yoga-list")],Z);var Be=[{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:"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:"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:"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:"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:"RoxyVedicKundli",tag:"roxy-vedic-kundli",slug:"vedic-kundli",heading:"Vedic kundli",description:"South or North Indian Vedic kundli for /vedic-astrology/birth-chart",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/birth-chart",docsSummary:"South or North Indian kundli",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:"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:"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:"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:"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:"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:"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:"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:"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:"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:"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 Ht="0.2.1";var Ar=Be.map(i=>i.slug);return qt(Cr);})();
4089
+ `],p([y({attribute:!1})],Z.prototype,"data",2),p([E()],Z.prototype,"filter",2),Z=p([v("roxy-yoga-list")],Z);var Ie=[{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:"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:"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:"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:"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:"RoxyVedicKundli",tag:"roxy-vedic-kundli",slug:"vedic-kundli",heading:"Vedic kundli",description:"South or North Indian Vedic kundli for /vedic-astrology/birth-chart",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/birth-chart",docsSummary:"South or North Indian kundli",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:"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:"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:"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:"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:"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:"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:"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:"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:"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:"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 Hr="0.2.3";var At=Ie.map(i=>i.slug);return qr(Ct);})();
4076
4090
  /*! Bundled license information:
4077
4091
 
4078
4092
  @lit/reactive-element/css-tag.js: