@roxyapi/ui 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/AGENTS.md +6 -0
  2. package/README.md +9 -3
  3. package/dist/cdn/components/ashtakavarga-grid.js +349 -0
  4. package/dist/cdn/components/ashtakavarga-grid.js.map +7 -0
  5. package/dist/cdn/components/choghadiya-grid.js +239 -0
  6. package/dist/cdn/components/choghadiya-grid.js.map +7 -0
  7. package/dist/cdn/components/compatibility-card.js +6 -6
  8. package/dist/cdn/components/compatibility-card.js.map +1 -1
  9. package/dist/cdn/components/dasha-timeline.js +4 -4
  10. package/dist/cdn/components/dasha-timeline.js.map +1 -1
  11. package/dist/cdn/components/data.js +9 -9
  12. package/dist/cdn/components/data.js.map +4 -4
  13. package/dist/cdn/components/divisional-chart.js +279 -0
  14. package/dist/cdn/components/divisional-chart.js.map +7 -0
  15. package/dist/cdn/components/dosha-card.js +39 -39
  16. package/dist/cdn/components/dosha-card.js.map +3 -3
  17. package/dist/cdn/components/endpoint-form.js +8 -8
  18. package/dist/cdn/components/endpoint-form.js.map +4 -4
  19. package/dist/cdn/components/guna-milan.js +64 -22
  20. package/dist/cdn/components/guna-milan.js.map +3 -3
  21. package/dist/cdn/components/hexagram.js +9 -9
  22. package/dist/cdn/components/hexagram.js.map +3 -3
  23. package/dist/cdn/components/horoscope-card.js +28 -21
  24. package/dist/cdn/components/horoscope-card.js.map +4 -4
  25. package/dist/cdn/components/kp-planets-table.js +4 -4
  26. package/dist/cdn/components/kp-planets-table.js.map +1 -1
  27. package/dist/cdn/components/location-search.js.map +2 -2
  28. package/dist/cdn/components/moon-phase.js +13 -13
  29. package/dist/cdn/components/moon-phase.js.map +3 -3
  30. package/dist/cdn/components/natal-chart.js +196 -22
  31. package/dist/cdn/components/natal-chart.js.map +4 -4
  32. package/dist/cdn/components/numerology-card.js +6 -6
  33. package/dist/cdn/components/numerology-card.js.map +4 -4
  34. package/dist/cdn/components/panchang-table.js +9 -9
  35. package/dist/cdn/components/panchang-table.js.map +1 -1
  36. package/dist/cdn/components/shadbala-table.js +312 -0
  37. package/dist/cdn/components/shadbala-table.js.map +7 -0
  38. package/dist/cdn/components/synastry-chart.js +21 -21
  39. package/dist/cdn/components/synastry-chart.js.map +4 -4
  40. package/dist/cdn/components/transits-table.js +391 -0
  41. package/dist/cdn/components/transits-table.js.map +7 -0
  42. package/dist/cdn/components/vedic-kundli.js +51 -29
  43. package/dist/cdn/components/vedic-kundli.js.map +4 -4
  44. package/dist/cdn/components/yoga-list.js +334 -0
  45. package/dist/cdn/components/yoga-list.js.map +7 -0
  46. package/dist/cdn/roxy-ui.js +1872 -522
  47. package/dist/cdn/roxy-ui.js.map +4 -4
  48. package/dist/components/ashtakavarga-grid.d.ts +26 -0
  49. package/dist/components/ashtakavarga-grid.d.ts.map +1 -0
  50. package/dist/components/ashtakavarga-grid.js +457 -0
  51. package/dist/components/ashtakavarga-grid.js.map +7 -0
  52. package/dist/components/choghadiya-grid.d.ts +19 -0
  53. package/dist/components/choghadiya-grid.d.ts.map +1 -0
  54. package/dist/components/choghadiya-grid.js +304 -0
  55. package/dist/components/choghadiya-grid.js.map +7 -0
  56. package/dist/components/compatibility-card.js.map +1 -1
  57. package/dist/components/dasha-timeline.js.map +1 -1
  58. package/dist/components/data.d.ts +5 -7
  59. package/dist/components/data.d.ts.map +1 -1
  60. package/dist/components/data.js +7 -5
  61. package/dist/components/data.js.map +3 -3
  62. package/dist/components/divisional-chart.d.ts +20 -0
  63. package/dist/components/divisional-chart.d.ts.map +1 -0
  64. package/dist/components/divisional-chart.js +471 -0
  65. package/dist/components/divisional-chart.js.map +7 -0
  66. package/dist/components/dosha-card.d.ts.map +1 -1
  67. package/dist/components/dosha-card.js +33 -30
  68. package/dist/components/dosha-card.js.map +2 -2
  69. package/dist/components/endpoint-form.d.ts.map +1 -1
  70. package/dist/components/endpoint-form.js +5 -3
  71. package/dist/components/endpoint-form.js.map +3 -3
  72. package/dist/components/guna-milan.d.ts.map +1 -1
  73. package/dist/components/guna-milan.js +61 -12
  74. package/dist/components/guna-milan.js.map +3 -3
  75. package/dist/components/hexagram.js +17 -0
  76. package/dist/components/hexagram.js.map +2 -2
  77. package/dist/components/horoscope-card.d.ts.map +1 -1
  78. package/dist/components/horoscope-card.js +30 -3
  79. package/dist/components/horoscope-card.js.map +3 -3
  80. package/dist/components/kp-planets-table.js.map +1 -1
  81. package/dist/components/location-search.d.ts +2 -3
  82. package/dist/components/location-search.d.ts.map +1 -1
  83. package/dist/components/location-search.js.map +2 -2
  84. package/dist/components/moon-phase.js +17 -0
  85. package/dist/components/moon-phase.js.map +2 -2
  86. package/dist/components/natal-chart.d.ts +2 -0
  87. package/dist/components/natal-chart.d.ts.map +1 -1
  88. package/dist/components/natal-chart.js +243 -36
  89. package/dist/components/natal-chart.js.map +3 -3
  90. package/dist/components/numerology-card.d.ts.map +1 -1
  91. package/dist/components/numerology-card.js +5 -3
  92. package/dist/components/numerology-card.js.map +3 -3
  93. package/dist/components/panchang-table.js.map +1 -1
  94. package/dist/components/shadbala-table.d.ts +18 -0
  95. package/dist/components/shadbala-table.d.ts.map +1 -0
  96. package/dist/components/shadbala-table.js +400 -0
  97. package/dist/components/shadbala-table.js.map +7 -0
  98. package/dist/components/synastry-chart.d.ts.map +1 -1
  99. package/dist/components/synastry-chart.js +34 -29
  100. package/dist/components/synastry-chart.js.map +3 -3
  101. package/dist/components/transits-table.d.ts +21 -0
  102. package/dist/components/transits-table.d.ts.map +1 -0
  103. package/dist/components/transits-table.js +515 -0
  104. package/dist/components/transits-table.js.map +7 -0
  105. package/dist/components/vedic-kundli.d.ts +3 -6
  106. package/dist/components/vedic-kundli.d.ts.map +1 -1
  107. package/dist/components/vedic-kundli.js +132 -80
  108. package/dist/components/vedic-kundli.js.map +3 -3
  109. package/dist/components/yoga-list.d.ts +29 -0
  110. package/dist/components/yoga-list.d.ts.map +1 -0
  111. package/dist/components/yoga-list.js +389 -0
  112. package/dist/components/yoga-list.js.map +7 -0
  113. package/dist/index.cjs +2693 -971
  114. package/dist/index.cjs.map +4 -4
  115. package/dist/index.d.ts +7 -2
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +2712 -990
  118. package/dist/index.js.map +4 -4
  119. package/dist/manifest.d.ts +4 -10
  120. package/dist/manifest.d.ts.map +1 -1
  121. package/dist/manifest.json +7 -2
  122. package/dist/styles/tokens.css +26 -0
  123. package/dist/tokens/index.d.ts +6 -0
  124. package/dist/tokens/index.d.ts.map +1 -1
  125. package/dist/types/types.gen.d.ts +2 -2
  126. package/dist/utils/format.d.ts +15 -1
  127. package/dist/utils/format.d.ts.map +1 -1
  128. package/dist/utils/kundli-render.d.ts +63 -0
  129. package/dist/utils/kundli-render.d.ts.map +1 -0
  130. package/dist/utils/string.d.ts +14 -0
  131. package/dist/utils/string.d.ts.map +1 -0
  132. package/dist/version.d.ts +1 -1
  133. package/package.json +1 -1
  134. package/src/components/ashtakavarga-grid.ts +354 -0
  135. package/src/components/choghadiya-grid.ts +185 -0
  136. package/src/components/data.ts +8 -15
  137. package/src/components/divisional-chart.ts +214 -0
  138. package/src/components/dosha-card.ts +53 -36
  139. package/src/components/endpoint-form.ts +1 -7
  140. package/src/components/guna-milan.ts +74 -16
  141. package/src/components/horoscope-card.ts +8 -4
  142. package/src/components/location-search.ts +2 -3
  143. package/src/components/natal-chart.ts +251 -42
  144. package/src/components/numerology-card.ts +1 -7
  145. package/src/components/shadbala-table.ts +286 -0
  146. package/src/components/synastry-chart.ts +13 -39
  147. package/src/components/transits-table.ts +350 -0
  148. package/src/components/vedic-kundli.ts +38 -143
  149. package/src/components/yoga-list.ts +328 -0
  150. package/src/index.ts +8 -6
  151. package/src/manifest.ts +74 -100
  152. package/src/styles/tokens.css +26 -0
  153. package/src/tokens/index.ts +9 -0
  154. package/src/types/types.gen.ts +2 -2
  155. package/src/utils/format.ts +21 -3
  156. package/src/utils/kundli-render.ts +197 -0
  157. package/src/utils/string.ts +23 -0
  158. package/src/version.ts +1 -1
  159. package/dist/utils/motion.d.ts +0 -13
  160. package/dist/utils/motion.d.ts.map +0 -1
  161. package/src/utils/motion.ts +0 -18
package/AGENTS.md CHANGED
@@ -24,6 +24,12 @@ Use the table below. Match the user request against the endpoint, render the mat
24
24
  | `<roxy-dosha-card>` | Vedic | POST /vedic-astrology/dosha/{manglik,kalsarpa,sadhesati} | Presence, severity, remedies, scoped effects |
25
25
  | `<roxy-guna-milan>` | Vedic | POST /vedic-astrology/compatibility | 36-point Ashtakoota with eight sub-scores |
26
26
  | `<roxy-kp-planets-table>` | Vedic (KP) | POST /vedic-astrology/kp/planets | Sub-lord and sub-sub-lord columns |
27
+ | `<roxy-transits-table>` | Western | POST /astrology/transits | Transit planet positions plus optional aspects to a natal chart |
28
+ | `<roxy-divisional-chart>` | Vedic | POST /vedic-astrology/divisional-chart | Generic divisional varga wheel from D2 Hora to D60 Shashtiamsa |
29
+ | `<roxy-ashtakavarga-grid>` | Vedic | POST /vedic-astrology/ashtakavarga | Sarva, Bhinna, and Shodhya Pinda views in a tabbed heatmap |
30
+ | `<roxy-shadbala-table>` | Vedic | POST /vedic-astrology/shadbala | Six-fold planetary strength bar plus rupas and adequacy badge |
31
+ | `<roxy-yoga-list>` | Vedic | GET /vedic-astrology/yoga, /yoga/{id} | Filterable yoga cards from the 300 plus yoga catalog |
32
+ | `<roxy-choghadiya-grid>` | Vedic | POST /vedic-astrology/panchang/choghadiya | Day and night Choghadiya muhurta tiles colored by effect |
27
33
  | `<roxy-numerology-card>` | Numerology | POST /numerology/{life-path,expression,personal-year,chart} | Life path, expression, personal year, full chart |
28
34
  | `<roxy-tarot-card>` | Tarot | GET /tarot/cards/{id}, POST /tarot/daily | Single card with upright and reversed flip |
29
35
  | `<roxy-tarot-spread>` | Tarot | POST /tarot/spreads/{three-card,celtic-cross,love}, /tarot/yes-no, /tarot/draw | Spreads with positions and reading |
package/README.md CHANGED
@@ -15,7 +15,7 @@
15
15
 
16
16
  > Live demo: **<https://roxyapi.github.io/ui/>**. Every component rendered against real API responses, light + dark, with the React/shadcn install command per card.
17
17
 
18
- Web components for the RoxyAPI catalog. Drop astrology, tarot, numerology, and every other RoxyAPI domain into any framework with one script tag or one npm install. Stateless components, typed responses, theme-agnostic. Beautiful defaults out of the box; the look is yours after that.
18
+ UI component library for the RoxyAPI catalog. Drop astrology, tarot, numerology, and every other RoxyAPI domain into any framework with one script tag or one npm install. Stateless components, typed responses, theme-agnostic. Beautiful defaults out of the box; the look is yours after that.
19
19
 
20
20
  ## Theme-agnostic, every component
21
21
 
@@ -227,7 +227,7 @@ For the SDK examples on this page, set `ROXY_API_KEY` to a secret key in your se
227
227
  | jsDelivr CDN (full bundle) | `cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn/roxy-ui.js` |
228
228
  | jsDelivr CDN (per component) | `cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn/components/{name}.js` |
229
229
  | Widgets auto-mount | `cdn.jsdelivr.net/npm/@roxyapi/ui@latest/dist/cdn/widgets.js` |
230
- | shadcn registry | `npx shadcn@latest add https://cdn.jsdelivr.net/gh/RoxyAPI/ui@v0.1.2/registry/{name}.json` |
230
+ | shadcn registry | `npx shadcn@latest add https://cdn.jsdelivr.net/gh/RoxyAPI/ui@latest/registry/{name}.json` |
231
231
 
232
232
  ## Components
233
233
 
@@ -245,6 +245,12 @@ For the SDK examples on this page, set `ROXY_API_KEY` to a secret key in your se
245
245
  | `<roxy-dosha-card>` | Vedic | POST /vedic-astrology/dosha/{manglik,kalsarpa,sadhesati} | Presence, severity, remedies, scoped effects |
246
246
  | `<roxy-guna-milan>` | Vedic | POST /vedic-astrology/compatibility | 36-point Ashtakoota with eight sub-scores |
247
247
  | `<roxy-kp-planets-table>` | Vedic (KP) | POST /vedic-astrology/kp/planets | Sub-lord and sub-sub-lord columns |
248
+ | `<roxy-transits-table>` | Western | POST /astrology/transits | Transit planet positions plus optional aspects to a natal chart |
249
+ | `<roxy-divisional-chart>` | Vedic | POST /vedic-astrology/divisional-chart | Generic divisional varga wheel from D2 Hora to D60 Shashtiamsa |
250
+ | `<roxy-ashtakavarga-grid>` | Vedic | POST /vedic-astrology/ashtakavarga | Sarva, Bhinna, and Shodhya Pinda views in a tabbed heatmap |
251
+ | `<roxy-shadbala-table>` | Vedic | POST /vedic-astrology/shadbala | Six-fold planetary strength bar plus rupas and adequacy badge |
252
+ | `<roxy-yoga-list>` | Vedic | GET /vedic-astrology/yoga, /yoga/{id} | Filterable yoga cards from the 300 plus yoga catalog |
253
+ | `<roxy-choghadiya-grid>` | Vedic | POST /vedic-astrology/panchang/choghadiya | Day and night Choghadiya muhurta tiles colored by effect |
248
254
  | `<roxy-numerology-card>` | Numerology | POST /numerology/{life-path,expression,personal-year,chart} | Life path, expression, personal year, full chart |
249
255
  | `<roxy-tarot-card>` | Tarot | GET /tarot/cards/{id}, POST /tarot/daily | Single card with upright and reversed flip |
250
256
  | `<roxy-tarot-spread>` | Tarot | POST /tarot/spreads/{three-card,celtic-cross,love}, /tarot/yes-no, /tarot/draw | Spreads with positions and reading |
@@ -457,7 +463,7 @@ Mock `@roxyapi/sdk` at the network boundary so unit tests do not hit the live AP
457
463
  Use the shadcn registry. The registry drops the component source, a wrapper file, and a CSS theme bridge into your repo. Edit anything; the source is yours from that point.
458
464
 
459
465
  ```bash
460
- npx shadcn@latest add https://cdn.jsdelivr.net/gh/RoxyAPI/ui@v0.1.2/registry/natal-chart.json
466
+ npx shadcn@latest add https://cdn.jsdelivr.net/gh/RoxyAPI/ui@latest/registry/natal-chart.json
461
467
  ```
462
468
  </details>
463
469
 
@@ -0,0 +1,349 @@
1
+ "use strict";var RoxyUI_ashtakavarga_grid=(()=>{var H=Object.defineProperty;var it=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var Pt=Object.prototype.hasOwnProperty;var Ct=(o,t)=>{for(var e in t)H(o,e,{get:t[e],enumerable:!0})},Tt=(o,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of wt(t))!Pt.call(o,s)&&s!==e&&H(o,s,{get:()=>t[s],enumerable:!(r=it(t,s))||r.enumerable});return o};var Rt=o=>Tt(H({},"__esModule",{value:!0}),o),B=(o,t,e,r)=>{for(var s=r>1?void 0:r?it(t,e):t,i=o.length-1,a;i>=0;i--)(a=o[i])&&(s=(r?a(t,e,s):a(s))||s);return r&&s&&H(t,e,s),s};var Yt={};Ct(Yt,{RoxyAshtakavargaGrid:()=>$});var q=globalThis,z=q.ShadowRoot&&(q.ShadyCSS===void 0||q.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,G=Symbol(),at=new WeakMap,P=class{constructor(t,e,r){if(this._$cssResult$=!0,r!==G)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o,e=this.t;if(z&&t===void 0){let r=e!==void 0&&e.length===1;r&&(t=at.get(e)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),r&&at.set(e,t))}return t}toString(){return this.cssText}},nt=o=>new P(typeof o=="string"?o:o+"",void 0,G),C=(o,...t)=>{let e=o.length===1?o[0]:t.reduce((r,s,i)=>r+(a=>{if(a._$cssResult$===!0)return a.cssText;if(typeof a=="number")return a;throw Error("Value passed to 'css' function must be a 'css' function result: "+a+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(s)+o[i+1],o[0]);return new P(e,o,G)},ht=(o,t)=>{if(z)o.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let e of t){let r=document.createElement("style"),s=q.litNonce;s!==void 0&&r.setAttribute("nonce",s),r.textContent=e.cssText,o.appendChild(r)}},W=z?o=>o:o=>o instanceof CSSStyleSheet?(t=>{let e="";for(let r of t.cssRules)e+=r.cssText;return nt(e)})(o):o;var{is:kt,defineProperty:Mt,getOwnPropertyDescriptor:Nt,getOwnPropertyNames:Ot,getOwnPropertySymbols:Ut,getPrototypeOf:Lt}=Object,D=globalThis,lt=D.trustedTypes,Ht=lt?lt.emptyScript:"",Bt=D.reactiveElementPolyfillSupport,T=(o,t)=>o,R={toAttribute(o,t){switch(t){case Boolean:o=o?Ht:null;break;case Object:case Array:o=o==null?o:JSON.stringify(o)}return o},fromAttribute(o,t){let e=o;switch(t){case Boolean:e=o!==null;break;case Number:e=o===null?null:Number(o);break;case Object:case Array:try{e=JSON.parse(o)}catch{e=null}}return e}},j=(o,t)=>!kt(o,t),ct={attribute:!0,type:String,converter:R,reflect:!1,useDefault:!1,hasChanged:j};Symbol.metadata??=Symbol("metadata"),D.litPropertyMetadata??=new WeakMap;var f=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=ct){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){let r=Symbol(),s=this.getPropertyDescriptor(t,r,e);s!==void 0&&Mt(this.prototype,t,s)}}static getPropertyDescriptor(t,e,r){let{get:s,set:i}=Nt(this.prototype,t)??{get(){return this[e]},set(a){this[e]=a}};return{get:s,set(a){let h=s?.call(this);i?.call(this,a),this.requestUpdate(t,h,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??ct}static _$Ei(){if(this.hasOwnProperty(T("elementProperties")))return;let t=Lt(this);t.finalize(),t.l!==void 0&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(T("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(T("properties"))){let e=this.properties,r=[...Ot(e),...Ut(e)];for(let s of r)this.createProperty(s,e[s])}let t=this[Symbol.metadata];if(t!==null){let e=litPropertyMetadata.get(t);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(t){let e=[];if(Array.isArray(t)){let r=new Set(t.flat(1/0).reverse());for(let s of r)e.unshift(W(s))}else t!==void 0&&e.push(W(t));return e}static _$Eu(t,e){let r=e.attribute;return r===!1?void 0:typeof r=="string"?r:typeof t=="string"?t.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(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),this.renderRoot!==void 0&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){let t=new Map,e=this.constructor.elementProperties;for(let r of e.keys())this.hasOwnProperty(r)&&(t.set(r,this[r]),delete this[r]);t.size>0&&(this._$Ep=t)}createRenderRoot(){let t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return ht(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,r){this._$AK(t,r)}_$ET(t,e){let r=this.constructor.elementProperties.get(t),s=this.constructor._$Eu(t,r);if(s!==void 0&&r.reflect===!0){let i=(r.converter?.toAttribute!==void 0?r.converter:R).toAttribute(e,r.type);this._$Em=t,i==null?this.removeAttribute(s):this.setAttribute(s,i),this._$Em=null}}_$AK(t,e){let r=this.constructor,s=r._$Eh.get(t);if(s!==void 0&&this._$Em!==s){let i=r.getPropertyOptions(s),a=typeof i.converter=="function"?{fromAttribute:i.converter}:i.converter?.fromAttribute!==void 0?i.converter:R;this._$Em=s;let h=a.fromAttribute(e,i.type);this[s]=h??this._$Ej?.get(s)??h,this._$Em=null}}requestUpdate(t,e,r,s=!1,i){if(t!==void 0){let a=this.constructor;if(s===!1&&(i=this[t]),r??=a.getPropertyOptions(t),!((r.hasChanged??j)(i,e)||r.useDefault&&r.reflect&&i===this._$Ej?.get(t)&&!this.hasAttribute(a._$Eu(t,r))))return;this.C(t,e,r)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(t,e,{useDefault:r,reflect:s,wrapped:i},a){r&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,a??e??this[t]),i!==!0||a!==void 0)||(this._$AL.has(t)||(this.hasUpdated||r||(e=void 0),this._$AL.set(t,e)),s===!0&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[s,i]of this._$Ep)this[s]=i;this._$Ep=void 0}let r=this.constructor.elementProperties;if(r.size>0)for(let[s,i]of r){let{wrapped:a}=i,h=this[s];a!==!0||this._$AL.has(s)||h===void 0||this.C(s,void 0,i,h)}}let t=!1,e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(r=>r.hostUpdate?.()),this.update(e)):this._$EM()}catch(r){throw t=!1,this._$EM(),r}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(t){}firstUpdated(t){}};f.elementStyles=[],f.shadowRootOptions={mode:"open"},f[T("elementProperties")]=new Map,f[T("finalized")]=new Map,Bt?.({ReactiveElement:f}),(D.reactiveElementVersions??=[]).push("2.1.2");var tt=globalThis,dt=o=>o,I=tt.trustedTypes,pt=I?I.createPolicy("lit-html",{createHTML:o=>o}):void 0,vt="$lit$",y=`lit$${Math.random().toFixed(9).slice(2)}$`,$t="?"+y,qt=`<${$t}>`,x=document,M=()=>x.createComment(""),N=o=>o===null||typeof o!="object"&&typeof o!="function",et=Array.isArray,zt=o=>et(o)||typeof o?.[Symbol.iterator]=="function",Y=`[
2
+ \f\r]`,k=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,ut=/-->/g,mt=/>/g,b=RegExp(`>|${Y}(?:([^\\s"'>=/]+)(${Y}*=${Y}*(?:[^
3
+ \f\r"'\`<>=]|("|')|))|$)`,"g"),ft=/'/g,gt=/"/g,bt=/^(?:script|style|textarea|title)$/i,rt=o=>(t,...e)=>({_$litType$:o,strings:t,values:e}),u=rt(1),te=rt(2),ee=rt(3),A=Symbol.for("lit-noChange"),c=Symbol.for("lit-nothing"),yt=new WeakMap,_=x.createTreeWalker(x,129);function _t(o,t){if(!et(o)||!o.hasOwnProperty("raw"))throw Error("invalid template strings array");return pt!==void 0?pt.createHTML(t):t}var Dt=(o,t)=>{let e=o.length-1,r=[],s,i=t===2?"<svg>":t===3?"<math>":"",a=k;for(let h=0;h<e;h++){let n=o[h],d,p,l=-1,m=0;for(;m<n.length&&(a.lastIndex=m,p=a.exec(n),p!==null);)m=a.lastIndex,a===k?p[1]==="!--"?a=ut:p[1]!==void 0?a=mt:p[2]!==void 0?(bt.test(p[2])&&(s=RegExp("</"+p[2],"g")),a=b):p[3]!==void 0&&(a=b):a===b?p[0]===">"?(a=s??k,l=-1):p[1]===void 0?l=-2:(l=a.lastIndex-p[2].length,d=p[1],a=p[3]===void 0?b:p[3]==='"'?gt:ft):a===gt||a===ft?a=b:a===ut||a===mt?a=k:(a=b,s=void 0);let g=a===b&&o[h+1].startsWith("/>")?" ":"";i+=a===k?n+qt:l>=0?(r.push(d),n.slice(0,l)+vt+n.slice(l)+y+g):n+y+(l===-2?h:g)}return[_t(o,i+(o[e]||"<?>")+(t===2?"</svg>":t===3?"</math>":"")),r]},O=class o{constructor({strings:t,_$litType$:e},r){let s;this.parts=[];let i=0,a=0,h=t.length-1,n=this.parts,[d,p]=Dt(t,e);if(this.el=o.createElement(d,r),_.currentNode=this.el.content,e===2||e===3){let l=this.el.content.firstChild;l.replaceWith(...l.childNodes)}for(;(s=_.nextNode())!==null&&n.length<h;){if(s.nodeType===1){if(s.hasAttributes())for(let l of s.getAttributeNames())if(l.endsWith(vt)){let m=p[a++],g=s.getAttribute(l).split(y),L=/([.?@])?(.*)/.exec(m);n.push({type:1,index:i,name:L[2],strings:g,ctor:L[1]==="."?J:L[1]==="?"?Z:L[1]==="@"?Q:w}),s.removeAttribute(l)}else l.startsWith(y)&&(n.push({type:6,index:i}),s.removeAttribute(l));if(bt.test(s.tagName)){let l=s.textContent.split(y),m=l.length-1;if(m>0){s.textContent=I?I.emptyScript:"";for(let g=0;g<m;g++)s.append(l[g],M()),_.nextNode(),n.push({type:2,index:++i});s.append(l[m],M())}}}else if(s.nodeType===8)if(s.data===$t)n.push({type:2,index:i});else{let l=-1;for(;(l=s.data.indexOf(y,l+1))!==-1;)n.push({type:7,index:i}),l+=y.length-1}i++}}static createElement(t,e){let r=x.createElement("template");return r.innerHTML=t,r}};function E(o,t,e=o,r){if(t===A)return t;let s=r!==void 0?e._$Co?.[r]:e._$Cl,i=N(t)?void 0:t._$litDirective$;return s?.constructor!==i&&(s?._$AO?.(!1),i===void 0?s=void 0:(s=new i(o),s._$AT(o,e,r)),r!==void 0?(e._$Co??=[])[r]=s:e._$Cl=s),s!==void 0&&(t=E(o,s._$AS(o,t.values),s,r)),t}var F=class{constructor(t,e){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){let{el:{content:e},parts:r}=this._$AD,s=(t?.creationScope??x).importNode(e,!0);_.currentNode=s;let i=_.nextNode(),a=0,h=0,n=r[0];for(;n!==void 0;){if(a===n.index){let d;n.type===2?d=new U(i,i.nextSibling,this,t):n.type===1?d=new n.ctor(i,n.name,n.strings,this,t):n.type===6&&(d=new X(i,this,t)),this._$AV.push(d),n=r[++h]}a!==n?.index&&(i=_.nextNode(),a++)}return _.currentNode=x,s}p(t){let e=0;for(let r of this._$AV)r!==void 0&&(r.strings!==void 0?(r._$AI(t,r,e),e+=r.strings.length-2):r._$AI(t[e])),e++}},U=class o{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,e,r,s){this.type=2,this._$AH=c,this._$AN=void 0,this._$AA=t,this._$AB=e,this._$AM=r,this.options=s,this._$Cv=s?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode,e=this._$AM;return e!==void 0&&t?.nodeType===11&&(t=e.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,e=this){t=E(this,t,e),N(t)?t===c||t==null||t===""?(this._$AH!==c&&this._$AR(),this._$AH=c):t!==this._$AH&&t!==A&&this._(t):t._$litType$!==void 0?this.$(t):t.nodeType!==void 0?this.T(t):zt(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==c&&N(this._$AH)?this._$AA.nextSibling.data=t:this.T(x.createTextNode(t)),this._$AH=t}$(t){let{values:e,_$litType$:r}=t,s=typeof r=="number"?this._$AC(t):(r.el===void 0&&(r.el=O.createElement(_t(r.h,r.h[0]),this.options)),r);if(this._$AH?._$AD===s)this._$AH.p(e);else{let i=new F(s,this),a=i.u(this.options);i.p(e),this.T(a),this._$AH=i}}_$AC(t){let e=yt.get(t.strings);return e===void 0&&yt.set(t.strings,e=new O(t)),e}k(t){et(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,r,s=0;for(let i of t)s===e.length?e.push(r=new o(this.O(M()),this.O(M()),this,this.options)):r=e[s],r._$AI(i),s++;s<e.length&&(this._$AR(r&&r._$AB.nextSibling,s),e.length=s)}_$AR(t=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);t!==this._$AB;){let r=dt(t).nextSibling;dt(t).remove(),t=r}}setConnected(t){this._$AM===void 0&&(this._$Cv=t,this._$AP?.(t))}},w=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,e,r,s,i){this.type=1,this._$AH=c,this._$AN=void 0,this.element=t,this.name=e,this._$AM=s,this.options=i,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=c}_$AI(t,e=this,r,s){let i=this.strings,a=!1;if(i===void 0)t=E(this,t,e,0),a=!N(t)||t!==this._$AH&&t!==A,a&&(this._$AH=t);else{let h=t,n,d;for(t=i[0],n=0;n<i.length-1;n++)d=E(this,h[r+n],e,n),d===A&&(d=this._$AH[n]),a||=!N(d)||d!==this._$AH[n],d===c?t=c:t!==c&&(t+=(d??"")+i[n+1]),this._$AH[n]=d}a&&!s&&this.j(t)}j(t){t===c?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}},J=class extends w{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===c?void 0:t}},Z=class extends w{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==c)}},Q=class extends w{constructor(t,e,r,s,i){super(t,e,r,s,i),this.type=5}_$AI(t,e=this){if((t=E(this,t,e,0)??c)===A)return;let r=this._$AH,s=t===c&&r!==c||t.capture!==r.capture||t.once!==r.once||t.passive!==r.passive,i=t!==c&&(r===c||s);s&&this.element.removeEventListener(this.name,this,r),i&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}},X=class{constructor(t,e,r){this.element=t,this.type=6,this._$AN=void 0,this._$AM=e,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(t){E(this,t)}};var jt=tt.litHtmlPolyfillSupport;jt?.(O,U),(tt.litHtmlVersions??=[]).push("3.3.2");var xt=(o,t,e)=>{let r=e?.renderBefore??t,s=r._$litPart$;if(s===void 0){let i=e?.renderBefore??null;r._$litPart$=s=new U(t.insertBefore(M(),i),i,void 0,e??{})}return s._$AI(o),s};var st=globalThis,v=class extends f{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){let e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=xt(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return A}};v._$litElement$=!0,v.finalized=!0,st.litElementHydrateSupport?.({LitElement:v});var It=st.litElementPolyfillSupport;It?.({LitElement:v});(st.litElementVersions??=[]).push("4.2.2");var At=o=>(t,e)=>{e!==void 0?e.addInitializer(()=>{customElements.define(o,t)}):customElements.define(o,t)};var Vt={attribute:!0,type:String,converter:R,reflect:!1,hasChanged:j},Kt=(o=Vt,t,e)=>{let{kind:r,metadata:s}=e,i=globalThis.litPropertyMetadata.get(s);if(i===void 0&&globalThis.litPropertyMetadata.set(s,i=new Map),r==="setter"&&((o=Object.create(o)).wrapped=!0),i.set(e.name,o),r==="accessor"){let{name:a}=e;return{set(h){let n=t.get.call(this);t.set.call(this,h),this.requestUpdate(a,n,o,!0,h)},init(h){return h!==void 0&&this.C(a,void 0,o,h),h}}}if(r==="setter"){let{name:a}=e;return function(h){let n=this[a];t.call(this,h),this.requestUpdate(a,n,o,!0,h)}}throw Error("Unsupported decorator location: "+r)};function V(o){return(t,e)=>typeof e=="object"?Kt(o,t,e):((r,s,i)=>{let a=s.hasOwnProperty(i);return s.constructor.createProperty(i,r),a?Object.getOwnPropertyDescriptor(s,i):void 0})(o,t,e)}function St(o){return V({...o,state:!0,attribute:!1})}var ot={Aries:"\u2648",Taurus:"\u2649",Gemini:"\u264A",Cancer:"\u264B",Leo:"\u264C",Virgo:"\u264D",Libra:"\u264E",Scorpio:"\u264F",Sagittarius:"\u2650",Capricorn:"\u2651",Aquarius:"\u2652",Pisces:"\u2653"};var Gt=["Aries","Taurus","Gemini","Cancer","Leo","Virgo","Libra","Scorpio","Sagittarius","Capricorn","Aquarius","Pisces"],De=Gt.map(o=>o.toLowerCase());var Et=C`
4
+ :host {
5
+ display: block;
6
+ container-type: inline-size;
7
+ font-family: var(
8
+ --roxy-font-sans,
9
+ system-ui,
10
+ -apple-system,
11
+ BlinkMacSystemFont,
12
+ 'Segoe UI',
13
+ Roboto,
14
+ sans-serif
15
+ );
16
+ color: var(--roxy-fg, #0a0a0a);
17
+ background: transparent;
18
+ font-size: var(--roxy-text-base, 1rem);
19
+ line-height: var(--roxy-leading-normal, 1.5);
20
+ animation: roxy-fade-in var(--roxy-motion-duration, 200ms)
21
+ var(--roxy-motion-easing, cubic-bezier(0.4, 0, 0.2, 1)) both;
22
+ }
23
+
24
+ *,
25
+ *::before,
26
+ *::after {
27
+ box-sizing: border-box;
28
+ }
29
+
30
+ @keyframes roxy-fade-in {
31
+ from {
32
+ opacity: 0;
33
+ transform: translateY(2px);
34
+ }
35
+ to {
36
+ opacity: 1;
37
+ transform: translateY(0);
38
+ }
39
+ }
40
+
41
+ @media (prefers-reduced-motion: reduce) {
42
+ :host {
43
+ animation: none;
44
+ }
45
+ }
46
+
47
+ .roxy-skeleton {
48
+ background: linear-gradient(
49
+ 90deg,
50
+ var(--roxy-border, #e4e4e7) 0%,
51
+ color-mix(in srgb, var(--roxy-border, #e4e4e7) 60%, transparent) 50%,
52
+ var(--roxy-border, #e4e4e7) 100%
53
+ );
54
+ background-size: 200% 100%;
55
+ animation: roxy-shimmer 1.4s ease-in-out infinite;
56
+ border-radius: var(--roxy-radius-md, 8px);
57
+ }
58
+
59
+ @keyframes roxy-shimmer {
60
+ 0% {
61
+ background-position: 200% 0;
62
+ }
63
+ 100% {
64
+ background-position: -200% 0;
65
+ }
66
+ }
67
+
68
+ @media (prefers-reduced-motion: reduce) {
69
+ .roxy-skeleton {
70
+ animation: none;
71
+ }
72
+ }
73
+
74
+ .roxy-empty {
75
+ padding: var(--roxy-space-lg, 1.5rem);
76
+ color: var(--roxy-muted, #71717a);
77
+ text-align: center;
78
+ font-size: var(--roxy-text-sm, 0.875rem);
79
+ }
80
+
81
+ :host(:focus-within) .roxy-card {
82
+ outline: 2px solid var(--roxy-ring, rgba(245, 158, 11, 0.4));
83
+ outline-offset: 2px;
84
+ }
85
+ `;var Wt={sarva:"Sarvashtakavarga",bhinna:"Bhinnashtakavarga",pinda:"Shodhya Pinda"},S=["sarva","bhinna","pinda"],$=class extends v{constructor(){super(...arguments);this.data=null;this.activeTab="sarva"}render(){if(!this.data)return u`<div class="roxy-empty" role="status">No ashtakavarga data</div>`;let e=this.data.signs??[];return u`<div class="wrap" aria-label="Ashtakavarga grid">
86
+ <div class="head">
87
+ <h2 class="title">Ashtakavarga</h2>
88
+ ${e.length?u`<p class="subtitle">${e.length} signs</p>`:c}
89
+ </div>
90
+
91
+ <div
92
+ class="tablist"
93
+ role="tablist"
94
+ aria-label="Ashtakavarga views"
95
+ @keydown=${this.onTabKeyDown}
96
+ >
97
+ ${S.map(r=>u`<button
98
+ class="tab"
99
+ role="tab"
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
+ >
106
+ ${Wt[r]}
107
+ </button>`)}
108
+ </div>
109
+
110
+ <div
111
+ id="panel-${this.activeTab}"
112
+ role="tabpanel"
113
+ aria-labelledby="tab-${this.activeTab}"
114
+ >
115
+ ${this.activeTab==="sarva"?this.renderSarva(e):this.activeTab==="bhinna"?this.renderBhinna(e):this.renderPinda()}
116
+ </div>
117
+ </div>`}onTabKeyDown(e){let r=S.indexOf(this.activeTab);e.key==="ArrowRight"?(e.preventDefault(),this.activeTab=S[(r+1)%S.length],this.focusActiveTab()):e.key==="ArrowLeft"&&(e.preventDefault(),this.activeTab=S[(r-1+S.length)%S.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?u`<div class="overflow-scroll">
118
+ <table aria-label="Sarvashtakavarga bindu counts per sign">
119
+ <thead>
120
+ <tr>
121
+ <th scope="col">Sign</th>
122
+ <th scope="col">Bindus</th>
123
+ </tr>
124
+ </thead>
125
+ <tbody>
126
+ ${e.map((s,i)=>{let a=r.bindus[i]??0,h=this.heatClass(a);return u`<tr>
127
+ <td>
128
+ <div class="planet-cell">
129
+ <span class="glyph" aria-hidden="true">${ot[s]??""}</span>
130
+ ${s}
131
+ </div>
132
+ </td>
133
+ <td class="${`heat-cell ${h}`}">${a}</td>
134
+ </tr>`})}
135
+ </tbody>
136
+ <tfoot>
137
+ <tr class="total-row">
138
+ <td>Total</td>
139
+ <td>${r.total}</td>
140
+ </tr>
141
+ </tfoot>
142
+ </table>
143
+ </div>`:u`<p class="roxy-empty">No sarvashtakavarga data</p>`}renderBhinna(e){let r=this.data.bhinnashtakavarga;return r?.length?u`<div class="overflow-scroll">
144
+ <table class="bhinna-table" aria-label="Bhinnashtakavarga planet-by-sign grid">
145
+ <thead>
146
+ <tr>
147
+ <th scope="col">Planet</th>
148
+ ${e.map(s=>u`<th scope="col" title=${s}>${ot[s]??s.slice(0,2)}</th>`)}
149
+ <th scope="col">Total</th>
150
+ </tr>
151
+ </thead>
152
+ <tbody>
153
+ ${r.map(s=>u`<tr>
154
+ <td>${s.planet}</td>
155
+ ${s.bindus.map(i=>{let a=this.heatClass(i);return u`<td class="${`heat-cell ${a}`}">${i}</td>`})}
156
+ <td>${s.total}</td>
157
+ </tr>`)}
158
+ </tbody>
159
+ </table>
160
+ </div>`:u`<p class="roxy-empty">No bhinnashtakavarga data</p>`}renderPinda(){let e=this.data.shodhyaPinda;return e?.length?u`<div class="overflow-scroll">
161
+ <table aria-label="Shodhya Pinda planet strength scores">
162
+ <thead>
163
+ <tr>
164
+ <th scope="col">Planet</th>
165
+ <th scope="col">Rashi Pinda</th>
166
+ <th scope="col">Graha Pinda</th>
167
+ <th scope="col">Shodhya Pinda</th>
168
+ </tr>
169
+ </thead>
170
+ <tbody>
171
+ ${e.map(r=>u`<tr>
172
+ <td>${r.planet}</td>
173
+ <td>${r.rashiPinda}</td>
174
+ <td>${r.grahaPinda}</td>
175
+ <td>${r.shodhyaPinda}</td>
176
+ </tr>`)}
177
+ </tbody>
178
+ </table>
179
+ </div>`:u`<p class="roxy-empty">No shodhya pinda data</p>`}};$.styles=[Et,C`
180
+ .wrap {
181
+ display: grid;
182
+ gap: var(--roxy-space-md, 1rem);
183
+ }
184
+
185
+ .head {
186
+ display: flex;
187
+ justify-content: space-between;
188
+ align-items: baseline;
189
+ gap: var(--roxy-space-md, 1rem);
190
+ flex-wrap: wrap;
191
+ }
192
+
193
+ .title {
194
+ font-size: var(--roxy-text-lg, 1.125rem);
195
+ font-weight: var(--roxy-weight-bold, 600);
196
+ margin: 0;
197
+ }
198
+
199
+ .subtitle {
200
+ color: var(--roxy-muted, #71717a);
201
+ font-size: var(--roxy-text-sm, 0.875rem);
202
+ margin: 0;
203
+ }
204
+
205
+ /* Tabs */
206
+ .tablist {
207
+ display: flex;
208
+ gap: 2px;
209
+ border-bottom: 2px solid var(--roxy-border, #e4e4e7);
210
+ }
211
+
212
+ .tab {
213
+ padding: var(--roxy-space-xs, 0.25rem) var(--roxy-space-md, 1rem);
214
+ font-size: var(--roxy-text-sm, 0.875rem);
215
+ background: none;
216
+ border: none;
217
+ border-bottom: 2px solid transparent;
218
+ margin-bottom: -2px;
219
+ cursor: pointer;
220
+ color: var(--roxy-muted, #71717a);
221
+ font-family: inherit;
222
+ transition: color var(--roxy-motion-duration, 200ms) var(--roxy-motion-easing, ease);
223
+ }
224
+
225
+ .tab[aria-selected='true'] {
226
+ color: var(--roxy-accent-fg, #b45309);
227
+ border-bottom-color: var(--roxy-accent, #f59e0b);
228
+ font-weight: var(--roxy-weight-bold, 600);
229
+ }
230
+
231
+ .tab:hover:not([aria-selected='true']) {
232
+ color: var(--roxy-fg, #0a0a0a);
233
+ }
234
+
235
+ /* Tables */
236
+ .overflow-scroll {
237
+ overflow-x: auto;
238
+ -webkit-overflow-scrolling: touch;
239
+ }
240
+
241
+ table {
242
+ width: 100%;
243
+ border-collapse: collapse;
244
+ font-size: var(--roxy-text-sm, 0.875rem);
245
+ }
246
+
247
+ th,
248
+ td {
249
+ padding: var(--roxy-space-sm, 0.5rem);
250
+ border-bottom: 1px solid var(--roxy-border, #e4e4e7);
251
+ text-align: center;
252
+ }
253
+
254
+ th {
255
+ color: var(--roxy-muted, #71717a);
256
+ font-weight: var(--roxy-weight-bold, 600);
257
+ text-transform: uppercase;
258
+ font-size: var(--roxy-text-xs, 0.75rem);
259
+ letter-spacing: 0.06em;
260
+ }
261
+
262
+ td:first-child,
263
+ th:first-child {
264
+ text-align: left;
265
+ }
266
+
267
+ .glyph {
268
+ font-size: 1.1em;
269
+ margin-right: 3px;
270
+ line-height: 1;
271
+ }
272
+
273
+ .planet-cell {
274
+ display: flex;
275
+ align-items: center;
276
+ gap: 4px;
277
+ white-space: nowrap;
278
+ }
279
+
280
+ .total-row td {
281
+ font-weight: var(--roxy-weight-bold, 600);
282
+ border-top: 2px solid var(--roxy-border, #e4e4e7);
283
+ border-bottom: none;
284
+ }
285
+
286
+ /* Heat cells */
287
+ .heat-cell {
288
+ border-radius: var(--roxy-radius-sm, 4px);
289
+ font-weight: var(--roxy-weight-bold, 600);
290
+ min-width: 2rem;
291
+ font-variant-numeric: tabular-nums;
292
+ }
293
+
294
+ .heat-1 { background: var(--roxy-heat-1, #f0fdf4); color: var(--roxy-fg, #0a0a0a); }
295
+ .heat-2 { background: var(--roxy-heat-2, #d1fae5); color: var(--roxy-fg, #0a0a0a); }
296
+ .heat-3 { background: var(--roxy-heat-3, #a7f3d0); color: var(--roxy-fg, #0a0a0a); }
297
+ .heat-4 { background: var(--roxy-heat-4, #fde68a); color: var(--roxy-fg, #0a0a0a); }
298
+ .heat-5 { background: var(--roxy-heat-5, #fdba74); color: var(--roxy-fg, #0a0a0a); }
299
+ .heat-6 { background: var(--roxy-heat-6, #fb923c); color: var(--roxy-fg, #0a0a0a); }
300
+ .heat-7 { background: var(--roxy-heat-7, #ef4444); color: var(--roxy-fg, #0a0a0a); }
301
+
302
+ /* Bhinna grid: planet header column narrower */
303
+ .bhinna-table th:first-child,
304
+ .bhinna-table td:first-child {
305
+ min-width: 5rem;
306
+ }
307
+ `],B([V({attribute:!1})],$.prototype,"data",2),B([St()],$.prototype,"activeTab",2),$=B([At("roxy-ashtakavarga-grid")],$);return Rt(Yt);})();
308
+ /*! Bundled license information:
309
+
310
+ @lit/reactive-element/css-tag.js:
311
+ (**
312
+ * @license
313
+ * Copyright 2019 Google LLC
314
+ * SPDX-License-Identifier: BSD-3-Clause
315
+ *)
316
+
317
+ @lit/reactive-element/reactive-element.js:
318
+ lit-html/lit-html.js:
319
+ lit-element/lit-element.js:
320
+ @lit/reactive-element/decorators/custom-element.js:
321
+ @lit/reactive-element/decorators/property.js:
322
+ @lit/reactive-element/decorators/state.js:
323
+ @lit/reactive-element/decorators/event-options.js:
324
+ @lit/reactive-element/decorators/base.js:
325
+ @lit/reactive-element/decorators/query.js:
326
+ @lit/reactive-element/decorators/query-all.js:
327
+ @lit/reactive-element/decorators/query-async.js:
328
+ @lit/reactive-element/decorators/query-assigned-nodes.js:
329
+ (**
330
+ * @license
331
+ * Copyright 2017 Google LLC
332
+ * SPDX-License-Identifier: BSD-3-Clause
333
+ *)
334
+
335
+ lit-html/is-server.js:
336
+ (**
337
+ * @license
338
+ * Copyright 2022 Google LLC
339
+ * SPDX-License-Identifier: BSD-3-Clause
340
+ *)
341
+
342
+ @lit/reactive-element/decorators/query-assigned-elements.js:
343
+ (**
344
+ * @license
345
+ * Copyright 2021 Google LLC
346
+ * SPDX-License-Identifier: BSD-3-Clause
347
+ *)
348
+ */
349
+ //# sourceMappingURL=ashtakavarga-grid.js.map