@jxsuite/starters 3.4.0 → 3.6.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 (500) hide show
  1. package/package.json +5 -5
  2. package/sites/blog/components/bl-author-bio.jxn +64 -0
  3. package/sites/blog/components/bl-contact-form.jxn +77 -0
  4. package/sites/blog/components/bl-contact-info.jxn +32 -0
  5. package/sites/blog/components/bl-cta.jxn +52 -0
  6. package/sites/blog/components/bl-footer.jxn +85 -0
  7. package/sites/blog/components/bl-masthead.jxn +111 -0
  8. package/sites/blog/components/bl-nav.jxn +62 -0
  9. package/sites/blog/components/bl-newsletter-cta.jxn +104 -0
  10. package/sites/blog/components/bl-post-card.jxn +106 -0
  11. package/sites/blog/components/bl-post-list.jxn +11 -0
  12. package/sites/blog/components/bl-prose.jxn +67 -0
  13. package/sites/blog/components/bl-section-header.jxn +52 -0
  14. package/sites/blog/components/bl-tag-pill.jxn +19 -0
  15. package/sites/blog/document.schema.json +26 -2
  16. package/sites/blog/layouts/base.jxn +17 -0
  17. package/sites/blog/layouts/post.jxn +13 -0
  18. package/sites/blog/package.json +3 -3
  19. package/sites/blog/pages/[slug].jxn +107 -0
  20. package/sites/blog/project.jxn +1 -1
  21. package/sites/course/components/co-application.jxn +106 -0
  22. package/sites/course/components/co-cohort.jxn +132 -0
  23. package/sites/course/components/co-cta.jxn +95 -0
  24. package/sites/course/components/co-curriculum-accordion.jxn +917 -0
  25. package/sites/course/components/co-faq.jxn +348 -0
  26. package/sites/course/components/co-footer.jxn +138 -0
  27. package/sites/course/components/co-hero.jxn +354 -0
  28. package/sites/course/components/co-instructor-card.jxn +128 -0
  29. package/sites/course/components/co-mentor.jxn +51 -0
  30. package/sites/course/components/co-module-card.jxn +101 -0
  31. package/sites/course/components/co-nav.jxn +172 -0
  32. package/sites/course/components/co-outcome-card.jxn +57 -0
  33. package/sites/course/components/co-outcomes.jxn +179 -0
  34. package/sites/course/components/co-pricing.jxn +145 -0
  35. package/sites/course/components/co-section-header.jxn +55 -0
  36. package/sites/course/components/co-testimonial-card.jxn +69 -0
  37. package/sites/course/document.schema.json +26 -2
  38. package/sites/course/layouts/base.jxn +17 -0
  39. package/sites/course/package.json +3 -3
  40. package/sites/course/project.jxn +1 -1
  41. package/sites/event/components/ev-agenda-tabs.jxn +663 -0
  42. package/sites/event/components/ev-cta.jxn +93 -0
  43. package/sites/event/components/ev-feature.jxn +46 -0
  44. package/sites/event/components/ev-footer.jxn +135 -0
  45. package/sites/event/components/ev-hero.jxn +323 -0
  46. package/sites/event/components/ev-nav.jxn +142 -0
  47. package/sites/event/components/ev-reason.jxn +50 -0
  48. package/sites/event/components/ev-savedate.jxn +268 -0
  49. package/sites/event/components/ev-section-header.jxn +51 -0
  50. package/sites/event/components/ev-session-row.jxn +103 -0
  51. package/sites/event/components/ev-speaker-card.jxn +104 -0
  52. package/sites/event/components/ev-sponsors.jxn +110 -0
  53. package/sites/event/components/ev-stat.jxn +39 -0
  54. package/sites/event/components/ev-ticket-card.jxn +169 -0
  55. package/sites/event/components/ev-venue.jxn +61 -0
  56. package/sites/event/document.schema.json +26 -2
  57. package/sites/event/layouts/base.jxn +12 -0
  58. package/sites/event/package.json +3 -3
  59. package/sites/event/project.jxn +1 -1
  60. package/sites/fitness-studio/components/fs-band.jxn +119 -0
  61. package/sites/fitness-studio/components/fs-booking.jxn +92 -0
  62. package/sites/fitness-studio/components/fs-class-card.jxn +103 -0
  63. package/sites/fitness-studio/components/fs-class-grid.jxn +23 -0
  64. package/sites/fitness-studio/components/fs-cta.jxn +81 -0
  65. package/sites/fitness-studio/components/fs-feature.jxn +40 -0
  66. package/sites/fitness-studio/components/fs-footer.jxn +116 -0
  67. package/sites/fitness-studio/components/fs-hero.jxn +290 -0
  68. package/sites/fitness-studio/components/fs-hours.jxn +78 -0
  69. package/sites/fitness-studio/components/fs-instructor-card.jxn +104 -0
  70. package/sites/fitness-studio/components/fs-intro.jxn +231 -0
  71. package/sites/fitness-studio/components/fs-modality.jxn +133 -0
  72. package/sites/fitness-studio/components/fs-nav.jxn +95 -0
  73. package/sites/fitness-studio/components/fs-pricing-card.jxn +190 -0
  74. package/sites/fitness-studio/components/fs-pricing-table.jxn +322 -0
  75. package/sites/fitness-studio/components/fs-review.jxn +59 -0
  76. package/sites/fitness-studio/components/fs-schedule.jxn +714 -0
  77. package/sites/fitness-studio/components/fs-section-header.jxn +55 -0
  78. package/sites/fitness-studio/document.schema.json +26 -2
  79. package/sites/fitness-studio/layouts/base.jxn +17 -0
  80. package/sites/fitness-studio/package.json +3 -3
  81. package/sites/fitness-studio/project.jxn +1 -1
  82. package/sites/home-services/components/hs-callbar.jxn +60 -0
  83. package/sites/home-services/components/hs-cta.jxn +139 -0
  84. package/sites/home-services/components/hs-feature.jxn +43 -0
  85. package/sites/home-services/components/hs-footer.jxn +169 -0
  86. package/sites/home-services/components/hs-gallery.jxn +51 -0
  87. package/sites/home-services/components/hs-hero.jxn +308 -0
  88. package/sites/home-services/components/hs-intro.jxn +97 -0
  89. package/sites/home-services/components/hs-nav.jxn +207 -0
  90. package/sites/home-services/components/hs-reservation.jxn +125 -0
  91. package/sites/home-services/components/hs-review.jxn +84 -0
  92. package/sites/home-services/components/hs-section-header.jxn +56 -0
  93. package/sites/home-services/components/hs-service-card.jxn +68 -0
  94. package/sites/home-services/components/hs-stat.jxn +40 -0
  95. package/sites/home-services/components/hs-step.jxn +67 -0
  96. package/sites/home-services/components/hs-trust-bar.jxn +183 -0
  97. package/sites/home-services/document.schema.json +26 -2
  98. package/sites/home-services/layouts/base.jxn +22 -0
  99. package/sites/home-services/package.json +3 -3
  100. package/sites/home-services/project.jxn +1 -1
  101. package/sites/museum/components/mu-band.jxn +63 -0
  102. package/sites/museum/components/mu-cta.jxn +76 -0
  103. package/sites/museum/components/mu-exhibition-card.jxn +118 -0
  104. package/sites/museum/components/mu-exhibition-row.jxn +142 -0
  105. package/sites/museum/components/mu-fact.jxn +40 -0
  106. package/sites/museum/components/mu-footer.jxn +206 -0
  107. package/sites/museum/components/mu-hero.jxn +165 -0
  108. package/sites/museum/components/mu-more.jxn +30 -0
  109. package/sites/museum/components/mu-oculus.jxn +33 -0
  110. package/sites/museum/components/mu-pagehead.jxn +76 -0
  111. package/sites/museum/components/mu-quote.jxn +36 -0
  112. package/sites/museum/document.schema.json +26 -2
  113. package/sites/museum/layouts/ar.jxn +31 -0
  114. package/sites/museum/layouts/base.jxn +227 -0
  115. package/sites/museum/layouts/fr-ca.jxn +30 -0
  116. package/sites/museum/package.json +3 -3
  117. package/sites/museum/pages/about.jxn +228 -0
  118. package/sites/museum/pages/ar/about.jxn +232 -0
  119. package/sites/museum/pages/ar/exhibitions/[slug].jxn +150 -0
  120. package/sites/museum/pages/ar/exhibitions/index.jxn +82 -0
  121. package/sites/museum/pages/ar/index.jxn +206 -0
  122. package/sites/museum/pages/ar/visit.jxn +270 -0
  123. package/sites/museum/pages/exhibitions/[slug].jxn +146 -0
  124. package/sites/museum/pages/exhibitions/index.jxn +78 -0
  125. package/sites/museum/pages/fr-ca/a-propos.jxn +233 -0
  126. package/sites/museum/pages/fr-ca/expositions/[slug].jxn +151 -0
  127. package/sites/museum/pages/fr-ca/expositions/index.jxn +83 -0
  128. package/sites/museum/pages/fr-ca/index.jxn +206 -0
  129. package/sites/museum/pages/fr-ca/visite.jxn +271 -0
  130. package/sites/museum/pages/index.jxn +202 -0
  131. package/sites/museum/pages/visit.jxn +266 -0
  132. package/sites/museum/project.jxn +1 -1
  133. package/sites/nonprofit/components/np-contact-form.jxn +97 -0
  134. package/sites/nonprofit/components/np-contact-info.jxn +104 -0
  135. package/sites/nonprofit/components/np-cta.jxn +163 -0
  136. package/sites/nonprofit/components/np-donate-tier.jxn +103 -0
  137. package/sites/nonprofit/components/np-feature.jxn +46 -0
  138. package/sites/nonprofit/components/np-footer.jxn +194 -0
  139. package/sites/nonprofit/components/np-hero.jxn +275 -0
  140. package/sites/nonprofit/components/np-impact-band.jxn +83 -0
  141. package/sites/nonprofit/components/np-intro.jxn +130 -0
  142. package/sites/nonprofit/components/np-nav.jxn +157 -0
  143. package/sites/nonprofit/components/np-program-card.jxn +95 -0
  144. package/sites/nonprofit/components/np-section-header.jxn +63 -0
  145. package/sites/nonprofit/components/np-stat.jxn +51 -0
  146. package/sites/nonprofit/components/np-step.jxn +73 -0
  147. package/sites/nonprofit/components/np-team-member.jxn +60 -0
  148. package/sites/nonprofit/components/np-testimonial.jxn +120 -0
  149. package/sites/nonprofit/document.schema.json +26 -2
  150. package/sites/nonprofit/layouts/base.jxn +17 -0
  151. package/sites/nonprofit/package.json +3 -3
  152. package/sites/nonprofit/project.jxn +1 -1
  153. package/sites/portfolio/components/pv-about-split.jxn +53 -0
  154. package/sites/portfolio/components/pv-category-pill.jxn +19 -0
  155. package/sites/portfolio/components/pv-contact-form.jxn +72 -0
  156. package/sites/portfolio/components/pv-cta.jxn +62 -0
  157. package/sites/portfolio/components/pv-feature.jxn +28 -0
  158. package/sites/portfolio/components/pv-footer.jxn +113 -0
  159. package/sites/portfolio/components/pv-gallery.jxn +40 -0
  160. package/sites/portfolio/components/pv-hero.jxn +109 -0
  161. package/sites/portfolio/components/pv-nav.jxn +76 -0
  162. package/sites/portfolio/components/pv-project-card.jxn +118 -0
  163. package/sites/portfolio/components/pv-project-grid.jxn +29 -0
  164. package/sites/portfolio/components/pv-section-header.jxn +65 -0
  165. package/sites/portfolio/document.schema.json +26 -2
  166. package/sites/portfolio/layouts/base.jxn +12 -0
  167. package/sites/portfolio/package.json +3 -3
  168. package/sites/portfolio/pages/[slug].jxn +177 -0
  169. package/sites/portfolio/project.jxn +1 -1
  170. package/sites/professional-firm/components/pf-article-header.jxn +60 -0
  171. package/sites/professional-firm/components/pf-contact-form.jxn +74 -0
  172. package/sites/professional-firm/components/pf-contact-info.jxn +101 -0
  173. package/sites/professional-firm/components/pf-cta.jxn +63 -0
  174. package/sites/professional-firm/components/pf-feature.jxn +32 -0
  175. package/sites/professional-firm/components/pf-footer.jxn +171 -0
  176. package/sites/professional-firm/components/pf-hero.jxn +139 -0
  177. package/sites/professional-firm/components/pf-insight-row.jxn +111 -0
  178. package/sites/professional-firm/components/pf-intro.jxn +68 -0
  179. package/sites/professional-firm/components/pf-logo-bar.jxn +90 -0
  180. package/sites/professional-firm/components/pf-nav.jxn +93 -0
  181. package/sites/professional-firm/components/pf-section-header.jxn +53 -0
  182. package/sites/professional-firm/components/pf-service-row.jxn +67 -0
  183. package/sites/professional-firm/components/pf-statband.jxn +135 -0
  184. package/sites/professional-firm/components/pf-team-member.jxn +53 -0
  185. package/sites/professional-firm/document.schema.json +26 -2
  186. package/sites/professional-firm/layouts/article.jxn +88 -0
  187. package/sites/professional-firm/layouts/base.jxn +12 -0
  188. package/sites/professional-firm/package.json +3 -3
  189. package/sites/professional-firm/pages/insights/[slug].jxn +106 -0
  190. package/sites/professional-firm/project.jxn +1 -1
  191. package/sites/real-estate/components/re-agent-band.jxn +165 -0
  192. package/sites/real-estate/components/re-agent-card.jxn +78 -0
  193. package/sites/real-estate/components/re-contact-form.jxn +119 -0
  194. package/sites/real-estate/components/re-cta.jxn +98 -0
  195. package/sites/real-estate/components/re-detail-row.jxn +18 -0
  196. package/sites/real-estate/components/re-feature.jxn +41 -0
  197. package/sites/real-estate/components/re-footer.jxn +219 -0
  198. package/sites/real-estate/components/re-hero.jxn +367 -0
  199. package/sites/real-estate/components/re-intro.jxn +43 -0
  200. package/sites/real-estate/components/re-listing-card.jxn +210 -0
  201. package/sites/real-estate/components/re-listings-filter.jxn +371 -0
  202. package/sites/real-estate/components/re-nav.jxn +162 -0
  203. package/sites/real-estate/components/re-neighborhood.jxn +101 -0
  204. package/sites/real-estate/components/re-section-header.jxn +55 -0
  205. package/sites/real-estate/components/re-stat.jxn +26 -0
  206. package/sites/real-estate/components/re-step.jxn +42 -0
  207. package/sites/real-estate/components/re-testimonial.jxn +66 -0
  208. package/sites/real-estate/document.schema.json +26 -2
  209. package/sites/real-estate/layouts/base.jxn +17 -0
  210. package/sites/real-estate/package.json +3 -3
  211. package/sites/real-estate/pages/[slug].jxn +452 -0
  212. package/sites/real-estate/project.jxn +1 -1
  213. package/sites/restaurant/components/bit-cta.jxn +105 -0
  214. package/sites/restaurant/components/bit-feature.jxn +38 -0
  215. package/sites/restaurant/components/bit-footer.jxn +142 -0
  216. package/sites/restaurant/components/bit-gallery.jxn +50 -0
  217. package/sites/restaurant/components/bit-hero.jxn +194 -0
  218. package/sites/restaurant/components/bit-hours.jxn +145 -0
  219. package/sites/restaurant/components/bit-intro.jxn +75 -0
  220. package/sites/restaurant/components/bit-menu-group.jxn +51 -0
  221. package/sites/restaurant/components/bit-menu-item.jxn +50 -0
  222. package/sites/restaurant/components/bit-nav.jxn +145 -0
  223. package/sites/restaurant/components/bit-reservation.jxn +90 -0
  224. package/sites/restaurant/components/bit-review.jxn +54 -0
  225. package/sites/restaurant/components/bit-section-header.jxn +73 -0
  226. package/sites/restaurant/document.schema.json +26 -2
  227. package/sites/restaurant/layouts/base.jxn +17 -0
  228. package/sites/restaurant/package.json +3 -3
  229. package/sites/restaurant/project.jxn +1 -1
  230. package/sites/saas/components/sa-check-item.jxn +25 -0
  231. package/sites/saas/components/sa-contact-form.jxn +94 -0
  232. package/sites/saas/components/sa-cta.jxn +68 -0
  233. package/sites/saas/components/sa-faq.jxn +347 -0
  234. package/sites/saas/components/sa-feature-card.jxn +57 -0
  235. package/sites/saas/components/sa-feature-split.jxn +43 -0
  236. package/sites/saas/components/sa-footer.jxn +106 -0
  237. package/sites/saas/components/sa-hero.jxn +217 -0
  238. package/sites/saas/components/sa-logo-cloud.jxn +98 -0
  239. package/sites/saas/components/sa-nav.jxn +108 -0
  240. package/sites/saas/components/sa-pricing.jxn +317 -0
  241. package/sites/saas/components/sa-section-header.jxn +43 -0
  242. package/sites/saas/components/sa-stat.jxn +32 -0
  243. package/sites/saas/components/sa-testimonial-card.jxn +37 -0
  244. package/sites/saas/document.schema.json +26 -2
  245. package/sites/saas/layouts/base.jxn +17 -0
  246. package/sites/saas/package.json +3 -3
  247. package/sites/saas/project.jxn +1 -1
  248. package/sites/shop/components/shp-badge.jxn +17 -0
  249. package/sites/shop/components/shp-category-tile.jxn +79 -0
  250. package/sites/shop/components/shp-contact-form.jxn +84 -0
  251. package/sites/shop/components/shp-cta.jxn +85 -0
  252. package/sites/shop/components/shp-feature.jxn +44 -0
  253. package/sites/shop/components/shp-footer.jxn +311 -0
  254. package/sites/shop/components/shp-hero.jxn +311 -0
  255. package/sites/shop/components/shp-intro.jxn +42 -0
  256. package/sites/shop/components/shp-nav.jxn +273 -0
  257. package/sites/shop/components/shp-newsletter.jxn +119 -0
  258. package/sites/shop/components/shp-product-card.jxn +187 -0
  259. package/sites/shop/components/shp-product-filter.jxn +263 -0
  260. package/sites/shop/components/shp-review.jxn +38 -0
  261. package/sites/shop/components/shp-section-header.jxn +61 -0
  262. package/sites/shop/components/shp-service.jxn +58 -0
  263. package/sites/shop/components/shp-stat.jxn +27 -0
  264. package/sites/shop/components/shp-trust.jxn +39 -0
  265. package/sites/shop/components/shp-visit-info.jxn +82 -0
  266. package/sites/shop/document.schema.json +26 -2
  267. package/sites/shop/layouts/base.jxn +17 -0
  268. package/sites/shop/package.json +3 -3
  269. package/sites/shop/pages/products/[sku].jxn +351 -0
  270. package/sites/shop/project.jxn +1 -1
  271. package/sites/blog/components/bl-author-bio.json +0 -86
  272. package/sites/blog/components/bl-contact-form.json +0 -114
  273. package/sites/blog/components/bl-contact-info.json +0 -54
  274. package/sites/blog/components/bl-cta.json +0 -68
  275. package/sites/blog/components/bl-footer.json +0 -122
  276. package/sites/blog/components/bl-masthead.json +0 -134
  277. package/sites/blog/components/bl-nav.json +0 -90
  278. package/sites/blog/components/bl-newsletter-cta.json +0 -134
  279. package/sites/blog/components/bl-post-card.json +0 -132
  280. package/sites/blog/components/bl-post-list.json +0 -10
  281. package/sites/blog/components/bl-prose.json +0 -89
  282. package/sites/blog/components/bl-section-header.json +0 -70
  283. package/sites/blog/components/bl-tag-pill.json +0 -29
  284. package/sites/blog/layouts/base.json +0 -22
  285. package/sites/blog/layouts/post.json +0 -15
  286. package/sites/blog/pages/[slug].json +0 -148
  287. package/sites/course/components/co-application.json +0 -225
  288. package/sites/course/components/co-cohort.json +0 -172
  289. package/sites/course/components/co-cta.json +0 -126
  290. package/sites/course/components/co-curriculum-accordion.json +0 -1476
  291. package/sites/course/components/co-faq.json +0 -524
  292. package/sites/course/components/co-footer.json +0 -195
  293. package/sites/course/components/co-hero.json +0 -475
  294. package/sites/course/components/co-instructor-card.json +0 -159
  295. package/sites/course/components/co-mentor.json +0 -65
  296. package/sites/course/components/co-module-card.json +0 -138
  297. package/sites/course/components/co-nav.json +0 -244
  298. package/sites/course/components/co-outcome-card.json +0 -84
  299. package/sites/course/components/co-outcomes.json +0 -248
  300. package/sites/course/components/co-pricing.json +0 -178
  301. package/sites/course/components/co-section-header.json +0 -74
  302. package/sites/course/components/co-testimonial-card.json +0 -109
  303. package/sites/course/layouts/base.json +0 -22
  304. package/sites/event/components/ev-agenda-tabs.json +0 -828
  305. package/sites/event/components/ev-cta.json +0 -126
  306. package/sites/event/components/ev-feature.json +0 -62
  307. package/sites/event/components/ev-footer.json +0 -197
  308. package/sites/event/components/ev-hero.json +0 -431
  309. package/sites/event/components/ev-nav.json +0 -186
  310. package/sites/event/components/ev-reason.json +0 -64
  311. package/sites/event/components/ev-savedate.json +0 -331
  312. package/sites/event/components/ev-section-header.json +0 -70
  313. package/sites/event/components/ev-session-row.json +0 -132
  314. package/sites/event/components/ev-speaker-card.json +0 -130
  315. package/sites/event/components/ev-sponsors.json +0 -131
  316. package/sites/event/components/ev-stat.json +0 -47
  317. package/sites/event/components/ev-ticket-card.json +0 -214
  318. package/sites/event/components/ev-venue.json +0 -86
  319. package/sites/event/layouts/base.json +0 -22
  320. package/sites/fitness-studio/components/fs-band.json +0 -149
  321. package/sites/fitness-studio/components/fs-booking.json +0 -147
  322. package/sites/fitness-studio/components/fs-class-card.json +0 -143
  323. package/sites/fitness-studio/components/fs-class-grid.json +0 -36
  324. package/sites/fitness-studio/components/fs-cta.json +0 -106
  325. package/sites/fitness-studio/components/fs-feature.json +0 -56
  326. package/sites/fitness-studio/components/fs-footer.json +0 -178
  327. package/sites/fitness-studio/components/fs-hero.json +0 -375
  328. package/sites/fitness-studio/components/fs-hours.json +0 -109
  329. package/sites/fitness-studio/components/fs-instructor-card.json +0 -136
  330. package/sites/fitness-studio/components/fs-intro.json +0 -294
  331. package/sites/fitness-studio/components/fs-modality.json +0 -171
  332. package/sites/fitness-studio/components/fs-nav.json +0 -128
  333. package/sites/fitness-studio/components/fs-pricing-card.json +0 -243
  334. package/sites/fitness-studio/components/fs-pricing-table.json +0 -458
  335. package/sites/fitness-studio/components/fs-review.json +0 -88
  336. package/sites/fitness-studio/components/fs-schedule.json +0 -1165
  337. package/sites/fitness-studio/components/fs-section-header.json +0 -77
  338. package/sites/fitness-studio/layouts/base.json +0 -22
  339. package/sites/home-services/components/hs-callbar.json +0 -72
  340. package/sites/home-services/components/hs-cta.json +0 -184
  341. package/sites/home-services/components/hs-feature.json +0 -62
  342. package/sites/home-services/components/hs-footer.json +0 -232
  343. package/sites/home-services/components/hs-gallery.json +0 -104
  344. package/sites/home-services/components/hs-hero.json +0 -446
  345. package/sites/home-services/components/hs-intro.json +0 -122
  346. package/sites/home-services/components/hs-nav.json +0 -278
  347. package/sites/home-services/components/hs-reservation.json +0 -225
  348. package/sites/home-services/components/hs-review.json +0 -114
  349. package/sites/home-services/components/hs-section-header.json +0 -70
  350. package/sites/home-services/components/hs-service-card.json +0 -89
  351. package/sites/home-services/components/hs-stat.json +0 -54
  352. package/sites/home-services/components/hs-step.json +0 -80
  353. package/sites/home-services/components/hs-trust-bar.json +0 -256
  354. package/sites/home-services/layouts/base.json +0 -24
  355. package/sites/museum/components/mu-band.json +0 -92
  356. package/sites/museum/components/mu-cta.json +0 -101
  357. package/sites/museum/components/mu-exhibition-card.json +0 -191
  358. package/sites/museum/components/mu-exhibition-row.json +0 -237
  359. package/sites/museum/components/mu-fact.json +0 -64
  360. package/sites/museum/components/mu-footer.json +0 -256
  361. package/sites/museum/components/mu-hero.json +0 -236
  362. package/sites/museum/components/mu-more.json +0 -63
  363. package/sites/museum/components/mu-oculus.json +0 -44
  364. package/sites/museum/components/mu-pagehead.json +0 -105
  365. package/sites/museum/components/mu-quote.json +0 -49
  366. package/sites/museum/layouts/ar.json +0 -29
  367. package/sites/museum/layouts/base.json +0 -329
  368. package/sites/museum/layouts/fr-ca.json +0 -28
  369. package/sites/museum/pages/about.json +0 -378
  370. package/sites/museum/pages/ar/about.json +0 -314
  371. package/sites/museum/pages/ar/exhibitions/[slug].json +0 -211
  372. package/sites/museum/pages/ar/exhibitions/index.json +0 -103
  373. package/sites/museum/pages/ar/index.json +0 -246
  374. package/sites/museum/pages/ar/visit.json +0 -327
  375. package/sites/museum/pages/exhibitions/[slug].json +0 -200
  376. package/sites/museum/pages/exhibitions/index.json +0 -93
  377. package/sites/museum/pages/fr-ca/a-propos.json +0 -313
  378. package/sites/museum/pages/fr-ca/expositions/[slug].json +0 -215
  379. package/sites/museum/pages/fr-ca/expositions/index.json +0 -104
  380. package/sites/museum/pages/fr-ca/index.json +0 -246
  381. package/sites/museum/pages/fr-ca/visite.json +0 -328
  382. package/sites/museum/pages/index.json +0 -236
  383. package/sites/museum/pages/visit.json +0 -317
  384. package/sites/nonprofit/components/np-contact-form.json +0 -162
  385. package/sites/nonprofit/components/np-contact-info.json +0 -159
  386. package/sites/nonprofit/components/np-cta.json +0 -203
  387. package/sites/nonprofit/components/np-donate-tier.json +0 -116
  388. package/sites/nonprofit/components/np-feature.json +0 -57
  389. package/sites/nonprofit/components/np-footer.json +0 -257
  390. package/sites/nonprofit/components/np-hero.json +0 -360
  391. package/sites/nonprofit/components/np-impact-band.json +0 -108
  392. package/sites/nonprofit/components/np-intro.json +0 -166
  393. package/sites/nonprofit/components/np-nav.json +0 -216
  394. package/sites/nonprofit/components/np-program-card.json +0 -129
  395. package/sites/nonprofit/components/np-section-header.json +0 -79
  396. package/sites/nonprofit/components/np-stat.json +0 -69
  397. package/sites/nonprofit/components/np-step.json +0 -84
  398. package/sites/nonprofit/components/np-team-member.json +0 -74
  399. package/sites/nonprofit/components/np-testimonial.json +0 -169
  400. package/sites/nonprofit/layouts/base.json +0 -22
  401. package/sites/portfolio/components/pv-about-split.json +0 -71
  402. package/sites/portfolio/components/pv-category-pill.json +0 -25
  403. package/sites/portfolio/components/pv-contact-form.json +0 -126
  404. package/sites/portfolio/components/pv-cta.json +0 -80
  405. package/sites/portfolio/components/pv-feature.json +0 -48
  406. package/sites/portfolio/components/pv-footer.json +0 -167
  407. package/sites/portfolio/components/pv-gallery.json +0 -50
  408. package/sites/portfolio/components/pv-hero.json +0 -139
  409. package/sites/portfolio/components/pv-nav.json +0 -100
  410. package/sites/portfolio/components/pv-project-card.json +0 -160
  411. package/sites/portfolio/components/pv-project-grid.json +0 -30
  412. package/sites/portfolio/components/pv-section-header.json +0 -90
  413. package/sites/portfolio/layouts/base.json +0 -22
  414. package/sites/portfolio/pages/[slug].json +0 -260
  415. package/sites/professional-firm/components/pf-article-header.json +0 -93
  416. package/sites/professional-firm/components/pf-contact-form.json +0 -146
  417. package/sites/professional-firm/components/pf-contact-info.json +0 -147
  418. package/sites/professional-firm/components/pf-cta.json +0 -86
  419. package/sites/professional-firm/components/pf-feature.json +0 -52
  420. package/sites/professional-firm/components/pf-footer.json +0 -231
  421. package/sites/professional-firm/components/pf-hero.json +0 -174
  422. package/sites/professional-firm/components/pf-insight-row.json +0 -144
  423. package/sites/professional-firm/components/pf-intro.json +0 -93
  424. package/sites/professional-firm/components/pf-logo-bar.json +0 -113
  425. package/sites/professional-firm/components/pf-nav.json +0 -135
  426. package/sites/professional-firm/components/pf-section-header.json +0 -77
  427. package/sites/professional-firm/components/pf-service-row.json +0 -104
  428. package/sites/professional-firm/components/pf-statband.json +0 -183
  429. package/sites/professional-firm/components/pf-team-member.json +0 -75
  430. package/sites/professional-firm/layouts/article.json +0 -130
  431. package/sites/professional-firm/layouts/base.json +0 -22
  432. package/sites/professional-firm/pages/insights/[slug].json +0 -129
  433. package/sites/real-estate/components/re-agent-band.json +0 -240
  434. package/sites/real-estate/components/re-agent-card.json +0 -93
  435. package/sites/real-estate/components/re-contact-form.json +0 -181
  436. package/sites/real-estate/components/re-cta.json +0 -128
  437. package/sites/real-estate/components/re-detail-row.json +0 -26
  438. package/sites/real-estate/components/re-feature.json +0 -57
  439. package/sites/real-estate/components/re-footer.json +0 -291
  440. package/sites/real-estate/components/re-hero.json +0 -536
  441. package/sites/real-estate/components/re-intro.json +0 -60
  442. package/sites/real-estate/components/re-listing-card.json +0 -286
  443. package/sites/real-estate/components/re-listings-filter.json +0 -454
  444. package/sites/real-estate/components/re-nav.json +0 -216
  445. package/sites/real-estate/components/re-neighborhood.json +0 -135
  446. package/sites/real-estate/components/re-section-header.json +0 -69
  447. package/sites/real-estate/components/re-stat.json +0 -37
  448. package/sites/real-estate/components/re-step.json +0 -58
  449. package/sites/real-estate/components/re-testimonial.json +0 -91
  450. package/sites/real-estate/layouts/base.json +0 -22
  451. package/sites/real-estate/pages/[slug].json +0 -629
  452. package/sites/restaurant/components/bit-cta.json +0 -140
  453. package/sites/restaurant/components/bit-feature.json +0 -61
  454. package/sites/restaurant/components/bit-footer.json +0 -191
  455. package/sites/restaurant/components/bit-gallery.json +0 -74
  456. package/sites/restaurant/components/bit-hero.json +0 -253
  457. package/sites/restaurant/components/bit-hours.json +0 -183
  458. package/sites/restaurant/components/bit-intro.json +0 -96
  459. package/sites/restaurant/components/bit-menu-group.json +0 -74
  460. package/sites/restaurant/components/bit-menu-item.json +0 -72
  461. package/sites/restaurant/components/bit-nav.json +0 -214
  462. package/sites/restaurant/components/bit-reservation.json +0 -155
  463. package/sites/restaurant/components/bit-review.json +0 -84
  464. package/sites/restaurant/components/bit-section-header.json +0 -98
  465. package/sites/restaurant/layouts/base.json +0 -22
  466. package/sites/saas/components/sa-check-item.json +0 -40
  467. package/sites/saas/components/sa-contact-form.json +0 -153
  468. package/sites/saas/components/sa-cta.json +0 -102
  469. package/sites/saas/components/sa-faq.json +0 -413
  470. package/sites/saas/components/sa-feature-card.json +0 -69
  471. package/sites/saas/components/sa-feature-split.json +0 -60
  472. package/sites/saas/components/sa-footer.json +0 -145
  473. package/sites/saas/components/sa-hero.json +0 -277
  474. package/sites/saas/components/sa-logo-cloud.json +0 -119
  475. package/sites/saas/components/sa-nav.json +0 -138
  476. package/sites/saas/components/sa-pricing.json +0 -428
  477. package/sites/saas/components/sa-section-header.json +0 -55
  478. package/sites/saas/components/sa-stat.json +0 -44
  479. package/sites/saas/components/sa-testimonial-card.json +0 -57
  480. package/sites/saas/layouts/base.json +0 -22
  481. package/sites/shop/components/shp-badge.json +0 -18
  482. package/sites/shop/components/shp-category-tile.json +0 -104
  483. package/sites/shop/components/shp-contact-form.json +0 -156
  484. package/sites/shop/components/shp-cta.json +0 -121
  485. package/sites/shop/components/shp-feature.json +0 -60
  486. package/sites/shop/components/shp-footer.json +0 -411
  487. package/sites/shop/components/shp-hero.json +0 -395
  488. package/sites/shop/components/shp-intro.json +0 -59
  489. package/sites/shop/components/shp-nav.json +0 -358
  490. package/sites/shop/components/shp-newsletter.json +0 -166
  491. package/sites/shop/components/shp-product-card.json +0 -238
  492. package/sites/shop/components/shp-product-filter.json +0 -366
  493. package/sites/shop/components/shp-review.json +0 -54
  494. package/sites/shop/components/shp-section-header.json +0 -75
  495. package/sites/shop/components/shp-service.json +0 -83
  496. package/sites/shop/components/shp-stat.json +0 -37
  497. package/sites/shop/components/shp-trust.json +0 -58
  498. package/sites/shop/components/shp-visit-info.json +0 -132
  499. package/sites/shop/layouts/base.json +0 -22
  500. package/sites/shop/pages/products/[sku].json +0 -482
@@ -0,0 +1,367 @@
1
+ /- kdl-version 2
2
+
3
+ re-hero {
4
+ state {
5
+ eyebrow ""
6
+ heading ""
7
+ subheading ""
8
+ cta "Search homes"
9
+ ctaHref "/listings/"
10
+ bg type=string format=image default=""
11
+ }
12
+ style {
13
+ display block
14
+ position relative
15
+ overflow hidden
16
+ borderBottom "1px solid var(--color-border)"
17
+ backgroundColor "var(--color-bg-white)"
18
+ backgroundImage "linear-gradient(90deg, var(--color-bg-white) 0%, var(--color-bg-white) 38%, rgba(255,255,255,0.72) 52%, rgba(255,255,255,0.18) 72%, rgba(11,18,32,0.04) 100%), url('${state.bg}')"
19
+ backgroundSize "cover, cover"
20
+ backgroundPosition "center, right center"
21
+ backgroundRepeat no-repeat
22
+ @--md backgroundImage=none backgroundColor="var(--color-bg-cream)"
23
+ }
24
+ div {
25
+ style {
26
+ position relative
27
+ zIndex "2"
28
+ maxWidth "var(--max-width)"
29
+ margin "0 auto"
30
+ padding "clamp(3rem, 6vw, 5.5rem) 1.5rem clamp(3.5rem, 7vw, 6rem)"
31
+ display grid
32
+ gridTemplateColumns "1.02fr 0.98fr"
33
+ gap "clamp(2rem, 5vw, 4rem)"
34
+ alignItems center
35
+ @--md gridTemplateColumns="1fr" gap="2.25rem"
36
+ }
37
+ div {
38
+ p {
39
+ style {
40
+ display inline-flex
41
+ alignItems center
42
+ gap "0.55rem"
43
+ padding "0.4rem 0.85rem"
44
+ borderRadius "999px"
45
+ border "1px solid var(--color-border)"
46
+ backgroundColor "var(--color-bg-white)"
47
+ boxShadow "0 1px 2px rgba(15,23,42,0.04)"
48
+ fontSize "0.8rem"
49
+ fontWeight "600"
50
+ color "var(--color-text-secondary)"
51
+ margin "0 0 1.5rem"
52
+ }
53
+ span {
54
+ style {
55
+ width "0.5rem"
56
+ height "0.5rem"
57
+ borderRadius "999px"
58
+ backgroundColor "var(--color-accent-bright)"
59
+ boxShadow "0 0 0 3px var(--color-accent-soft)"
60
+ }
61
+ }
62
+ span "${state.eyebrow}"
63
+ }
64
+ h1 "${state.heading}" {
65
+ style {
66
+ fontFamily "var(--font-display)"
67
+ fontSize "clamp(2.6rem, 5.4vw, 4.3rem)"
68
+ fontWeight "500"
69
+ lineHeight "1.04"
70
+ letterSpacing "-0.02em"
71
+ margin "0 0 1.25rem"
72
+ color "var(--color-text-primary)"
73
+ maxWidth "14ch"
74
+ }
75
+ }
76
+ p "${state.subheading}" {
77
+ style {
78
+ fontSize "clamp(1.05rem, 1.6vw, 1.22rem)"
79
+ lineHeight "1.6"
80
+ color "var(--color-text-secondary)"
81
+ margin "0 0 2rem"
82
+ maxWidth "46ch"
83
+ }
84
+ }
85
+ div {
86
+ style display=flex alignItems=stretch gap="0" flexWrap=wrap
87
+ div {
88
+ style paddingRight="1.4rem"
89
+ div "20 yrs" {
90
+ style {
91
+ fontSize "1.55rem"
92
+ fontWeight "800"
93
+ letterSpacing "-0.02em"
94
+ color "var(--color-text-primary)"
95
+ fontVariantNumeric tabular-nums
96
+ }
97
+ }
98
+ div "on the north shore" {
99
+ style fontSize="0.82rem" color="var(--color-text-muted)" fontWeight="600"
100
+ }
101
+ }
102
+ div {
103
+ style padding="0 1.4rem" borderLeft="1px solid var(--color-border)"
104
+ div "1,400+" {
105
+ style {
106
+ fontSize "1.55rem"
107
+ fontWeight "800"
108
+ letterSpacing "-0.02em"
109
+ color "var(--color-text-primary)"
110
+ fontVariantNumeric tabular-nums
111
+ }
112
+ }
113
+ div "homes closed" {
114
+ style fontSize="0.82rem" color="var(--color-text-muted)" fontWeight="600"
115
+ }
116
+ }
117
+ div {
118
+ style padding="0 1.4rem" borderLeft="1px solid var(--color-border)"
119
+ div "98%" {
120
+ style {
121
+ fontSize "1.55rem"
122
+ fontWeight "800"
123
+ letterSpacing "-0.02em"
124
+ color "var(--color-primary)"
125
+ fontVariantNumeric tabular-nums
126
+ }
127
+ }
128
+ div "of asking price" {
129
+ style fontSize="0.82rem" color="var(--color-text-muted)" fontWeight="600"
130
+ }
131
+ }
132
+ }
133
+ }
134
+ form action="/listings/" method=get {
135
+ style {
136
+ backgroundColor "var(--color-bg-white)"
137
+ border "1px solid var(--color-border)"
138
+ borderRadius "var(--radius-lg)"
139
+ boxShadow "var(--shadow-float)"
140
+ padding "clamp(1.25rem, 2vw, 1.6rem)"
141
+ }
142
+ div {
143
+ style {
144
+ display flex
145
+ gap "0.35rem"
146
+ padding "0.3rem"
147
+ borderRadius "999px"
148
+ backgroundColor "var(--color-bg-tint)"
149
+ marginBottom "1.25rem"
150
+ }
151
+ span "For Sale" {
152
+ style {
153
+ flex "1"
154
+ textAlign center
155
+ padding "0.5rem 0.5rem"
156
+ borderRadius "999px"
157
+ backgroundColor "var(--color-bg-white)"
158
+ color "var(--color-text-primary)"
159
+ fontWeight "700"
160
+ fontSize "0.88rem"
161
+ boxShadow "0 1px 3px rgba(15,23,42,0.12)"
162
+ }
163
+ }
164
+ span "For Rent" {
165
+ style {
166
+ flex "1"
167
+ textAlign center
168
+ padding "0.5rem 0.5rem"
169
+ borderRadius "999px"
170
+ color "var(--color-text-muted)"
171
+ fontWeight "600"
172
+ fontSize "0.88rem"
173
+ }
174
+ }
175
+ span Sold {
176
+ style {
177
+ flex "1"
178
+ textAlign center
179
+ padding "0.5rem 0.5rem"
180
+ borderRadius "999px"
181
+ color "var(--color-text-muted)"
182
+ fontWeight "600"
183
+ fontSize "0.88rem"
184
+ }
185
+ }
186
+ }
187
+ label Location {
188
+ style {
189
+ display block
190
+ fontSize "0.72rem"
191
+ fontWeight "700"
192
+ textTransform uppercase
193
+ letterSpacing "0.1em"
194
+ color "var(--color-text-muted)"
195
+ marginBottom "0.5rem"
196
+ }
197
+ }
198
+ div {
199
+ style {
200
+ display flex
201
+ alignItems center
202
+ gap "0.5rem"
203
+ padding "0 0.85rem"
204
+ border "1px solid var(--color-border-strong)"
205
+ borderRadius "var(--radius-sm)"
206
+ backgroundColor "var(--color-bg-white)"
207
+ marginBottom "1rem"
208
+ }
209
+ span 📍 {
210
+ style color="var(--color-primary)" fontSize="1rem"
211
+ }
212
+ input type=text name=location placeholder="City, neighborhood, or ZIP" aria-label="Search by city, neighborhood, or ZIP" {
213
+ style {
214
+ flex "1"
215
+ border none
216
+ outline none
217
+ padding "0.8rem 0"
218
+ fontSize "0.98rem"
219
+ fontFamily inherit
220
+ color "var(--color-text-primary)"
221
+ backgroundColor transparent
222
+ minWidth "0"
223
+ }
224
+ }
225
+ }
226
+ div {
227
+ style {
228
+ display grid
229
+ gridTemplateColumns "repeat(3, 1fr)"
230
+ gap "0.6rem"
231
+ marginBottom "1.25rem"
232
+ @--sm gridTemplateColumns="1fr"
233
+ }
234
+ div {
235
+ label "Max price" {
236
+ style {
237
+ display block
238
+ fontSize "0.72rem"
239
+ fontWeight "700"
240
+ textTransform uppercase
241
+ letterSpacing "0.1em"
242
+ color "var(--color-text-muted)"
243
+ marginBottom "0.5rem"
244
+ }
245
+ }
246
+ select name=price aria-label="Maximum price" {
247
+ style {
248
+ width "100%"
249
+ border "1px solid var(--color-border-strong)"
250
+ borderRadius "var(--radius-sm)"
251
+ padding "0.72rem 0.7rem"
252
+ fontSize "0.92rem"
253
+ fontFamily inherit
254
+ fontWeight "600"
255
+ color "var(--color-text-primary)"
256
+ backgroundColor "var(--color-bg-white)"
257
+ cursor pointer
258
+ }
259
+ option value="" "Any price"
260
+ option value="400000" $400k
261
+ option value="700000" $700k
262
+ option value="1200000" $1.2M
263
+ }
264
+ }
265
+ div {
266
+ label Beds {
267
+ style {
268
+ display block
269
+ fontSize "0.72rem"
270
+ fontWeight "700"
271
+ textTransform uppercase
272
+ letterSpacing "0.1em"
273
+ color "var(--color-text-muted)"
274
+ marginBottom "0.5rem"
275
+ }
276
+ }
277
+ select name=beds aria-label="Minimum bedrooms" {
278
+ style {
279
+ width "100%"
280
+ border "1px solid var(--color-border-strong)"
281
+ borderRadius "var(--radius-sm)"
282
+ padding "0.72rem 0.7rem"
283
+ fontSize "0.92rem"
284
+ fontFamily inherit
285
+ fontWeight "600"
286
+ color "var(--color-text-primary)"
287
+ backgroundColor "var(--color-bg-white)"
288
+ cursor pointer
289
+ }
290
+ option value="" Any
291
+ option value="2" "2+"
292
+ option value="3" "3+"
293
+ option value="4" "4+"
294
+ }
295
+ }
296
+ div {
297
+ label Baths {
298
+ style {
299
+ display block
300
+ fontSize "0.72rem"
301
+ fontWeight "700"
302
+ textTransform uppercase
303
+ letterSpacing "0.1em"
304
+ color "var(--color-text-muted)"
305
+ marginBottom "0.5rem"
306
+ }
307
+ }
308
+ select name=baths aria-label="Minimum bathrooms" {
309
+ style {
310
+ width "100%"
311
+ border "1px solid var(--color-border-strong)"
312
+ borderRadius "var(--radius-sm)"
313
+ padding "0.72rem 0.7rem"
314
+ fontSize "0.92rem"
315
+ fontFamily inherit
316
+ fontWeight "600"
317
+ color "var(--color-text-primary)"
318
+ backgroundColor "var(--color-bg-white)"
319
+ cursor pointer
320
+ }
321
+ option value="" Any
322
+ option value="1" "1+"
323
+ option value="2" "2+"
324
+ option value="3" "3+"
325
+ }
326
+ }
327
+ }
328
+ button type=submit {
329
+ style {
330
+ display flex
331
+ alignItems center
332
+ justifyContent center
333
+ gap "0.55rem"
334
+ width "100%"
335
+ backgroundColor "var(--color-primary)"
336
+ color "var(--color-text-white)"
337
+ border none
338
+ padding "0.95rem 1.5rem"
339
+ borderRadius "var(--radius-sm)"
340
+ fontSize "1rem"
341
+ fontFamily inherit
342
+ fontWeight "700"
343
+ cursor pointer
344
+ boxShadow "0 12px 28px -12px rgba(15,118,110,0.7)"
345
+ transition "background-color 0.15s, transform 0.15s"
346
+ :hover backgroundColor="var(--color-primary-hover)" transform="translateY(-1px)"
347
+ }
348
+ span ⌕ {
349
+ style fontSize="1.05rem"
350
+ }
351
+ span "${state.cta}"
352
+ }
353
+ p {
354
+ style {
355
+ margin "1.05rem 0 0"
356
+ fontSize "0.82rem"
357
+ color "var(--color-text-muted)"
358
+ textAlign center
359
+ }
360
+ span "Popular: " {
361
+ style fontWeight="700" color="var(--color-text-secondary)"
362
+ }
363
+ span "Bayport · Maplewood · Lakeview · Harbor Hills"
364
+ }
365
+ }
366
+ }
367
+ }
@@ -0,0 +1,43 @@
1
+ /- kdl-version 2
2
+
3
+ re-intro {
4
+ state {
5
+ image type=string format=image default=""
6
+ imageAlt ""
7
+ reverse #false
8
+ }
9
+ style display=block padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"
10
+ div {
11
+ style {
12
+ maxWidth "var(--max-width)"
13
+ margin "0 auto"
14
+ display grid
15
+ gridTemplateColumns "1fr 1fr"
16
+ gap "clamp(2rem, 5vw, 4rem)"
17
+ alignItems center
18
+ @--md gridTemplateColumns="1fr"
19
+ }
20
+ div {
21
+ style order="${state.reverse ? '2' : '1'}" position=relative
22
+ img src="${state.image}" alt="${state.imageAlt}" loading=lazy {
23
+ style {
24
+ width "100%"
25
+ height auto
26
+ borderRadius "var(--radius-lg)"
27
+ display block
28
+ border "1px solid var(--color-border)"
29
+ boxShadow "var(--shadow-card)"
30
+ }
31
+ }
32
+ }
33
+ div {
34
+ style {
35
+ order "${state.reverse ? '1' : '2'}"
36
+ fontSize "1.08rem"
37
+ lineHeight "1.75"
38
+ color "var(--color-text-secondary)"
39
+ }
40
+ slot
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,210 @@
1
+ /- kdl-version 2
2
+
3
+ re-listing-card {
4
+ state {
5
+ heading ""
6
+ price 0
7
+ beds 0
8
+ baths 0
9
+ sqft 0
10
+ city ""
11
+ status "For Sale"
12
+ image type=string format=image default=""
13
+ href "#"
14
+ }
15
+ style {
16
+ display block
17
+ backgroundColor "var(--color-bg-white)"
18
+ border "1px solid var(--color-border)"
19
+ borderRadius "var(--radius)"
20
+ overflow hidden
21
+ boxShadow "var(--shadow-card)"
22
+ transition "transform 0.2s, box-shadow 0.2s, border-color 0.2s"
23
+ :hover {
24
+ transform "translateY(-4px)"
25
+ boxShadow "0 18px 40px -18px rgba(15,23,42,0.28)"
26
+ borderColor "var(--color-border-strong)"
27
+ }
28
+ ":hover img" transform="scale(1.05)"
29
+ }
30
+ a href="${state.href}" {
31
+ style {
32
+ display block
33
+ position relative
34
+ overflow hidden
35
+ textDecoration none
36
+ aspectRatio "3 / 2"
37
+ backgroundColor "var(--color-bg-tint)"
38
+ }
39
+ img src="${state.image}" alt="${state.heading}" loading=lazy {
40
+ style {
41
+ position absolute
42
+ inset "0"
43
+ width "100%"
44
+ height "100%"
45
+ objectFit cover
46
+ display block
47
+ transition "transform 0.5s cubic-bezier(0.22, 1, 0.36, 1)"
48
+ }
49
+ }
50
+ span {
51
+ style {
52
+ position absolute
53
+ top "0.85rem"
54
+ left "0.85rem"
55
+ display inline-flex
56
+ alignItems center
57
+ gap "0.35rem"
58
+ backgroundColor "${state.status === 'New' ? 'var(--color-status-new)' : 'rgba(11,18,32,0.82)'}"
59
+ color "var(--color-text-white)"
60
+ fontWeight "700"
61
+ fontSize "0.72rem"
62
+ letterSpacing "0.04em"
63
+ textTransform uppercase
64
+ padding "0.3rem 0.65rem"
65
+ borderRadius "999px"
66
+ backdropFilter "blur(4px)"
67
+ }
68
+ span {
69
+ style {
70
+ width "0.4rem"
71
+ height "0.4rem"
72
+ borderRadius "999px"
73
+ backgroundColor "var(--color-accent-bright)"
74
+ }
75
+ }
76
+ span "${state.status}"
77
+ }
78
+ span ♡ {
79
+ style {
80
+ position absolute
81
+ top "0.85rem"
82
+ right "0.85rem"
83
+ display inline-flex
84
+ alignItems center
85
+ justifyContent center
86
+ width "2rem"
87
+ height "2rem"
88
+ borderRadius "999px"
89
+ backgroundColor "rgba(255,255,255,0.92)"
90
+ color "var(--color-text-secondary)"
91
+ fontSize "0.95rem"
92
+ boxShadow "0 2px 8px rgba(15,23,42,0.18)"
93
+ }
94
+ }
95
+ }
96
+ div {
97
+ style padding="1.1rem 1.25rem 1.3rem"
98
+ div {
99
+ style {
100
+ display flex
101
+ alignItems baseline
102
+ justifyContent space-between
103
+ gap "0.75rem"
104
+ marginBottom "0.35rem"
105
+ }
106
+ div "$${Number(state.price).toLocaleString('en-US')}" {
107
+ style {
108
+ fontFamily "var(--font-heading)"
109
+ fontSize "1.5rem"
110
+ fontWeight "800"
111
+ letterSpacing "-0.02em"
112
+ color "var(--color-text-primary)"
113
+ fontVariantNumeric tabular-nums
114
+ }
115
+ }
116
+ div "${state.sqft && Number(state.sqft) > 0 ? '$' + Math.round(Number(state.price)/Number(state.sqft)).toLocaleString('en-US') + '/sqft' : ''}" {
117
+ style {
118
+ fontSize "0.78rem"
119
+ fontWeight "600"
120
+ color "var(--color-text-muted)"
121
+ whiteSpace nowrap
122
+ fontVariantNumeric tabular-nums
123
+ }
124
+ }
125
+ }
126
+ a href="${state.href}" {
127
+ style textDecoration=none color="var(--color-text-primary)"
128
+ h3 "${state.heading}" {
129
+ style {
130
+ fontFamily "var(--font-heading)"
131
+ fontSize "1.05rem"
132
+ fontWeight "700"
133
+ margin "0 0 0.25rem"
134
+ letterSpacing "-0.01em"
135
+ }
136
+ }
137
+ }
138
+ p {
139
+ style {
140
+ display flex
141
+ alignItems center
142
+ gap "0.3rem"
143
+ margin "0 0 0.9rem"
144
+ color "var(--color-text-muted)"
145
+ fontSize "0.88rem"
146
+ fontWeight "500"
147
+ }
148
+ span 📍 {
149
+ style fontSize="0.8rem"
150
+ }
151
+ span "${state.city}"
152
+ }
153
+ div {
154
+ style {
155
+ display flex
156
+ alignItems center
157
+ paddingTop "0.85rem"
158
+ borderTop "1px solid var(--color-border)"
159
+ }
160
+ div {
161
+ style flex="1" textAlign=center
162
+ div "${state.beds}" {
163
+ style {
164
+ fontWeight "800"
165
+ fontSize "0.98rem"
166
+ color "var(--color-text-primary)"
167
+ fontVariantNumeric tabular-nums
168
+ }
169
+ }
170
+ div beds {
171
+ style fontSize="0.72rem" color="var(--color-text-muted)" fontWeight="600"
172
+ }
173
+ }
174
+ div {
175
+ style width="1px" alignSelf=stretch backgroundColor="var(--color-border)"
176
+ }
177
+ div {
178
+ style flex="1" textAlign=center
179
+ div "${state.baths}" {
180
+ style {
181
+ fontWeight "800"
182
+ fontSize "0.98rem"
183
+ color "var(--color-text-primary)"
184
+ fontVariantNumeric tabular-nums
185
+ }
186
+ }
187
+ div baths {
188
+ style fontSize="0.72rem" color="var(--color-text-muted)" fontWeight="600"
189
+ }
190
+ }
191
+ div {
192
+ style width="1px" alignSelf=stretch backgroundColor="var(--color-border)"
193
+ }
194
+ div {
195
+ style flex="1" textAlign=center
196
+ div "${Number(state.sqft).toLocaleString('en-US')}" {
197
+ style {
198
+ fontWeight "800"
199
+ fontSize "0.98rem"
200
+ color "var(--color-text-primary)"
201
+ fontVariantNumeric tabular-nums
202
+ }
203
+ }
204
+ div sqft {
205
+ style fontSize="0.72rem" color="var(--color-text-muted)" fontWeight="600"
206
+ }
207
+ }
208
+ }
209
+ }
210
+ }