@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
@@ -303,7 +303,13 @@
303
303
  },
304
304
  "FunctionDef": {
305
305
  "additionalProperties": false,
306
- "description": "A function declaration. $prototype must be \"Function\". body (inline) and $src (external) are mutually exclusive. First parameter is always state (the reactive scope).",
306
+ "description": "A function declaration. $prototype must be \"Function\". body (inline) and $src (external) are mutually exclusive; declaring both is an error. First parameter is always state (the reactive scope).",
307
+ "not": {
308
+ "required": [
309
+ "body",
310
+ "$src"
311
+ ]
312
+ },
307
313
  "properties": {
308
314
  "$export": {
309
315
  "description": "Named export in $src module. Defaults to the state key name.",
@@ -339,11 +345,12 @@
339
345
  "type": "array"
340
346
  },
341
347
  "body": {
342
- "description": "Inline function body: an opaque JS source string (first implicit parameter is state), or a structured statement array (spec §20) — explicit structured function declaration, analyzable by tooling and editable visually. The escalation ladder within the shape is structured statements → JS string.",
348
+ "description": "Inline function body: a source string in erasable TypeScript, which plain JavaScript already is (spec §23.1; types are erased before it is analysed or run; first implicit parameter is state), or a structured statement array (spec §20) — explicit structured function declaration, analyzable by tooling and editable visually. The escalation ladder within the shape is structured statements → source string.",
343
349
  "examples": [
344
350
  "state.count++",
345
351
  "state.items.push({ id: Date.now(), text: \"\", done: false })",
346
352
  "return state.score >= 90 ? \"gold\" : \"silver\"",
353
+ "const input = event.target as HTMLInputElement; state.label = input.value",
347
354
  [
348
355
  {
349
356
  "operator": "push",
@@ -604,6 +611,7 @@
604
611
  "type": "string"
605
612
  },
606
613
  "body": {
614
+ "description": "The member's body in erasable TypeScript, which plain JavaScript already is (spec §23.1), as one string or as an array of lines.",
607
615
  "oneOf": [
608
616
  {
609
617
  "type": "string"
@@ -675,6 +683,7 @@
675
683
  "type": "string"
676
684
  },
677
685
  "body": {
686
+ "description": "The member's body in erasable TypeScript, which plain JavaScript already is (spec §23.1), as one string or as an array of lines.",
678
687
  "oneOf": [
679
688
  {
680
689
  "type": "string"
@@ -28596,6 +28605,21 @@
28596
28605
  }
28597
28606
  ]
28598
28607
  },
28608
+ "$script": {
28609
+ "additionalProperties": false,
28610
+ "description": "This document's own modules, as TypeScript module text (spec.md §23.2). A state entry names an export of one with `$src: \"#client\"` or `$src: \"#server\"`. `client` runs in the browser; `server` runs only on the server and is never sent to one.",
28611
+ "properties": {
28612
+ "client": {
28613
+ "description": "The module the browser runs. A Function entry with `$src: \"#client\"` is one of its exports.",
28614
+ "type": "string"
28615
+ },
28616
+ "server": {
28617
+ "description": "The module the server runs. A `timing: \"server\"` entry with `$src: \"#server\"` is one of its exports, called with `(args, env)`.",
28618
+ "type": "string"
28619
+ }
28620
+ },
28621
+ "type": "object"
28622
+ },
28599
28623
  "$shadow": {
28600
28624
  "description": "Render this component into a shadow root instead of the light DOM (spec.md §16.6). Off unless set: a shadow root isolates the component's styles from the page and replaces the <slot> emulation with real slot distribution, so it changes how the component composes. Overrides `defaults.shadow` in both directions — `false` opts one component out of a project that opted in.",
28601
28625
  "oneOf": [
@@ -0,0 +1,88 @@
1
+ /- kdl-version 2
2
+ $elements (ref)"../components/pf-nav.jxn" (ref)"../components/pf-footer.jxn"
3
+
4
+ div {
5
+ style minHeight="100vh" display=flex flexDirection=column backgroundColor="var(--color-paper)"
6
+ pf-nav
7
+ main {
8
+ style flex="1"
9
+ div {
10
+ style {
11
+ maxWidth "1040px"
12
+ margin "0 auto"
13
+ padding "clamp(2.5rem, 6vw, 4.5rem) 1.5rem clamp(3rem, 8vw, 5rem)"
14
+ display grid
15
+ gridTemplateColumns "minmax(0, 200px) minmax(0, 1fr)"
16
+ gap "clamp(2rem, 5vw, 4rem)"
17
+ alignItems start
18
+ @--md gridTemplateColumns="1fr" gap="2rem"
19
+ }
20
+ aside {
21
+ style {
22
+ position sticky
23
+ top "6rem"
24
+ borderTop "3px solid var(--color-accent)"
25
+ paddingTop "1.25rem"
26
+ @--md position=static borderTop="1px solid var(--color-rule)"
27
+ }
28
+ div {
29
+ style display=flex alignItems=baseline gap="0.5rem" marginBottom="1.5rem"
30
+ span Meridian {
31
+ style {
32
+ fontFamily "var(--font-serif)"
33
+ fontSize "1.15rem"
34
+ fontWeight "600"
35
+ color "var(--color-ink)"
36
+ }
37
+ }
38
+ span Quarterly {
39
+ style {
40
+ fontFamily "var(--font-sans)"
41
+ fontSize "0.62rem"
42
+ fontWeight "600"
43
+ textTransform uppercase
44
+ letterSpacing "0.22em"
45
+ color "var(--color-accent)"
46
+ }
47
+ }
48
+ }
49
+ div {
50
+ style {
51
+ fontFamily "var(--font-sans)"
52
+ fontSize "0.68rem"
53
+ fontWeight "600"
54
+ textTransform uppercase
55
+ letterSpacing "0.14em"
56
+ color "var(--color-muted)"
57
+ lineHeight "1.8"
58
+ paddingBottom "1.25rem"
59
+ marginBottom "1.25rem"
60
+ borderBottom "1px solid var(--color-hairline)"
61
+ }
62
+ div "Filed under"
63
+ div Insight {
64
+ style color="var(--color-ink)"
65
+ }
66
+ }
67
+ a href="/insights/" "← All insights" {
68
+ style {
69
+ fontFamily "var(--font-sans)"
70
+ fontSize "0.72rem"
71
+ fontWeight "600"
72
+ textTransform uppercase
73
+ letterSpacing "0.14em"
74
+ color "var(--color-ink)"
75
+ textDecoration none
76
+ transition "color 0.15s"
77
+ :hover color="var(--color-accent)"
78
+ }
79
+ }
80
+ }
81
+ div {
82
+ style maxWidth="var(--measure)" minWidth="0"
83
+ slot
84
+ }
85
+ }
86
+ }
87
+ pf-footer
88
+ }
@@ -0,0 +1,12 @@
1
+ /- kdl-version 2
2
+ $elements (ref)"../components/pf-nav.jxn" (ref)"../components/pf-footer.jxn"
3
+
4
+ div {
5
+ style minHeight="100vh" display=flex flexDirection=column backgroundColor="var(--color-paper)"
6
+ pf-nav
7
+ main {
8
+ style flex="1"
9
+ slot
10
+ }
11
+ pf-footer
12
+ }
@@ -9,10 +9,10 @@
9
9
  "dev": "jx dev"
10
10
  },
11
11
  "dependencies": {
12
- "@jxsuite/parser": "^4.3.3"
12
+ "@jxsuite/parser": "^5.0.0"
13
13
  },
14
14
  "devDependencies": {
15
- "@jxsuite/compiler": "^8.5.0",
16
- "@jxsuite/runtime": "^6.2.2"
15
+ "@jxsuite/compiler": "^8.7.0",
16
+ "@jxsuite/runtime": "^7.0.0"
17
17
  }
18
18
  }
@@ -0,0 +1,106 @@
1
+ /- kdl-version 2
2
+ $layout "./layouts/article.jxn"
3
+ $paths contentType=insights param=slug field=id
4
+
5
+ $element .title="${state.entry.data.title} — Meridian Advisory" {
6
+ state {
7
+ entry {
8
+ $prototype ContentEntry
9
+ $src "@jxsuite/parser/ContentEntry.class.json"
10
+ contentType insights
11
+ field id
12
+ id (ref)"#/$params/slug"
13
+ }
14
+ }
15
+ article {
16
+ pf-article-header {
17
+ $props {
18
+ eyebrow "${state.entry.data.category}"
19
+ title "${state.entry.data.title}"
20
+ date "${state.entry.data.date}"
21
+ author "${state.entry.data.author}"
22
+ readingTime "${state.entry._meta.readingTime}"
23
+ }
24
+ }
25
+ div {
26
+ style {
27
+ fontFamily "var(--font-serif)"
28
+ fontSize "1.2rem"
29
+ lineHeight "1.8"
30
+ color "var(--color-ink)"
31
+ "& p:first-of-type::first-letter" {
32
+ float left
33
+ fontFamily "var(--font-serif)"
34
+ fontSize "3.6em"
35
+ lineHeight "0.82"
36
+ fontWeight "600"
37
+ padding "0.02em 0.14em 0 0"
38
+ color "var(--color-accent)"
39
+ }
40
+ }
41
+ .children {
42
+ $array items=(ref)"#/state/entry/$children" {
43
+ p "${item.textContent}" {
44
+ style margin="0 0 1.5rem"
45
+ }
46
+ }
47
+ }
48
+ }
49
+ div "Written by ${state.entry.data.author} · Meridian Advisory" {
50
+ style {
51
+ marginTop "2.5rem"
52
+ paddingTop "1.5rem"
53
+ borderTop "1px solid var(--color-hairline)"
54
+ fontFamily "var(--font-sans)"
55
+ fontSize "0.78rem"
56
+ textTransform uppercase
57
+ letterSpacing "0.12em"
58
+ color "var(--color-muted)"
59
+ }
60
+ }
61
+ div {
62
+ style {
63
+ marginTop "2.5rem"
64
+ backgroundColor "var(--color-ink-deep)"
65
+ color "var(--color-text-white)"
66
+ borderTop "3px solid var(--color-accent)"
67
+ padding "2rem"
68
+ display flex
69
+ flexWrap wrap
70
+ alignItems center
71
+ justifyContent space-between
72
+ gap "1.25rem"
73
+ }
74
+ div {
75
+ div "Have a question this raised?" {
76
+ style {
77
+ fontFamily "var(--font-serif)"
78
+ fontSize "1.35rem"
79
+ fontWeight "500"
80
+ marginBottom "0.3rem"
81
+ }
82
+ }
83
+ div "Book a free consultation with a Meridian advisor." {
84
+ style color="rgba(244,241,233,0.75)" fontSize="0.95rem"
85
+ }
86
+ }
87
+ a href="/contact/" "Book a consultation" {
88
+ style {
89
+ display inline-block
90
+ backgroundColor "var(--color-accent)"
91
+ color "var(--color-ink-deep)"
92
+ padding "0.85rem 1.75rem"
93
+ fontFamily "var(--font-sans)"
94
+ fontSize "0.76rem"
95
+ fontWeight "600"
96
+ textTransform uppercase
97
+ letterSpacing "0.14em"
98
+ textDecoration none
99
+ whiteSpace nowrap
100
+ transition "background-color 0.15s"
101
+ :hover backgroundColor="#b0904c"
102
+ }
103
+ }
104
+ }
105
+ }
106
+ }
@@ -4,7 +4,7 @@ project "Meridian Advisory"
4
4
 
5
5
  url "https://example.com"
6
6
 
7
- defaults layout="./layouts/base.json" lang=en
7
+ defaults layout="./layouts/base.jxn" lang=en
8
8
 
9
9
  $head {
10
10
  meta name=viewport content="width=device-width, initial-scale=1"
@@ -0,0 +1,165 @@
1
+ /- kdl-version 2
2
+
3
+ re-agent-band {
4
+ state {
5
+ eyebrow "Your north shore team"
6
+ heading ""
7
+ text ""
8
+ phone "(555) 204-7788"
9
+ cta "Book a call"
10
+ ctaHref "/contact/"
11
+ cta2 "Meet the team"
12
+ cta2Href "/about/"
13
+ img1 type=string format=image default="/images/agent-1.jpg"
14
+ img2 type=string format=image default="/images/agent-2.jpg"
15
+ img3 type=string format=image default="/images/agent-3.jpg"
16
+ }
17
+ style display=block padding="clamp(2.5rem, 6vw, 4rem) 1.5rem"
18
+ div {
19
+ style {
20
+ maxWidth "var(--max-width)"
21
+ margin "0 auto"
22
+ position relative
23
+ overflow hidden
24
+ borderRadius "var(--radius-lg)"
25
+ background "radial-gradient(ellipse 60% 90% at 8% 0%, rgba(20,184,166,0.28), transparent 60%), radial-gradient(ellipse 50% 80% at 100% 100%, rgba(13,148,136,0.22), transparent 60%), var(--color-bg-dark)"
26
+ border "1px solid var(--color-bg-ink-soft)"
27
+ padding "clamp(2rem, 4vw, 3.25rem)"
28
+ display grid
29
+ gridTemplateColumns "auto 1fr"
30
+ gap "clamp(1.5rem, 4vw, 3.5rem)"
31
+ alignItems center
32
+ @--md gridTemplateColumns="1fr" gap="1.75rem"
33
+ }
34
+ div {
35
+ style display=flex flexDirection=column gap="1rem"
36
+ div {
37
+ style display=flex alignItems=center
38
+ img src="${state.img1}" alt="Northshore Realty agent" loading=lazy width="72" height="72" {
39
+ style {
40
+ width "4.5rem"
41
+ height "4.5rem"
42
+ borderRadius "999px"
43
+ objectFit cover
44
+ border "3px solid var(--color-bg-dark)"
45
+ boxShadow "0 6px 18px rgba(0,0,0,0.4)"
46
+ }
47
+ }
48
+ img src="${state.img2}" alt="Northshore Realty agent" loading=lazy width="72" height="72" {
49
+ style {
50
+ width "4.5rem"
51
+ height "4.5rem"
52
+ borderRadius "999px"
53
+ objectFit cover
54
+ border "3px solid var(--color-bg-dark)"
55
+ marginLeft "-1.1rem"
56
+ boxShadow "0 6px 18px rgba(0,0,0,0.4)"
57
+ }
58
+ }
59
+ img src="${state.img3}" alt="Northshore Realty agent" loading=lazy width="72" height="72" {
60
+ style {
61
+ width "4.5rem"
62
+ height "4.5rem"
63
+ borderRadius "999px"
64
+ objectFit cover
65
+ border "3px solid var(--color-bg-dark)"
66
+ marginLeft "-1.1rem"
67
+ boxShadow "0 6px 18px rgba(0,0,0,0.4)"
68
+ }
69
+ }
70
+ }
71
+ div {
72
+ style {
73
+ display inline-flex
74
+ alignItems center
75
+ gap "0.4rem"
76
+ color "var(--color-accent-bright)"
77
+ fontWeight "700"
78
+ fontSize "0.9rem"
79
+ }
80
+ span ★★★★★
81
+ span "4.9 · 220 reviews" {
82
+ style color="rgba(255,255,255,0.6)" fontWeight="600"
83
+ }
84
+ }
85
+ }
86
+ div {
87
+ p "${state.eyebrow}" {
88
+ style {
89
+ textTransform uppercase
90
+ letterSpacing "0.16em"
91
+ fontSize "0.74rem"
92
+ fontWeight "700"
93
+ color "var(--color-accent-bright)"
94
+ margin "0 0 0.8rem"
95
+ }
96
+ }
97
+ h2 "${state.heading}" {
98
+ style {
99
+ fontFamily "var(--font-display)"
100
+ fontSize "clamp(1.75rem, 3.4vw, 2.6rem)"
101
+ fontWeight "500"
102
+ lineHeight "1.1"
103
+ letterSpacing "-0.015em"
104
+ margin "0 0 0.9rem"
105
+ color "var(--color-text-white)"
106
+ }
107
+ }
108
+ p "${state.text}" {
109
+ style {
110
+ fontSize "1.05rem"
111
+ lineHeight "1.65"
112
+ color "rgba(255,255,255,0.72)"
113
+ margin "0 0 1.75rem"
114
+ maxWidth "48ch"
115
+ }
116
+ }
117
+ div {
118
+ style display=flex alignItems=center gap="1.25rem" flexWrap=wrap
119
+ a href="${state.ctaHref}" {
120
+ style {
121
+ display inline-flex
122
+ alignItems center
123
+ gap "0.5rem"
124
+ backgroundColor "var(--color-accent-bright)"
125
+ color "var(--color-ink)"
126
+ padding "0.85rem 1.6rem"
127
+ borderRadius "999px"
128
+ fontSize "1rem"
129
+ fontWeight "700"
130
+ textDecoration none
131
+ transition "transform 0.15s, box-shadow 0.15s"
132
+ boxShadow "0 12px 30px -12px rgba(20,184,166,0.7)"
133
+ :hover {
134
+ transform "translateY(-2px)"
135
+ boxShadow "0 18px 40px -12px rgba(20,184,166,0.8)"
136
+ }
137
+ }
138
+ span "${state.cta}"
139
+ span →
140
+ }
141
+ a href=tel:+15552047788 {
142
+ style display=inline-flex flexDirection=column textDecoration=none
143
+ span "Call us" {
144
+ style {
145
+ fontSize "0.72rem"
146
+ textTransform uppercase
147
+ letterSpacing "0.12em"
148
+ color "rgba(255,255,255,0.5)"
149
+ fontWeight "700"
150
+ }
151
+ }
152
+ span "${state.phone}" {
153
+ style {
154
+ fontSize "1.2rem"
155
+ fontWeight "800"
156
+ color "var(--color-text-white)"
157
+ fontVariantNumeric tabular-nums
158
+ letterSpacing "-0.01em"
159
+ }
160
+ }
161
+ }
162
+ }
163
+ }
164
+ }
165
+ }
@@ -0,0 +1,78 @@
1
+ /- kdl-version 2
2
+
3
+ re-agent-card {
4
+ state {
5
+ name ""
6
+ role ""
7
+ phone ""
8
+ image type=string format=image default=""
9
+ }
10
+ style {
11
+ display block
12
+ backgroundColor "var(--color-bg-white)"
13
+ border "1px solid var(--color-border)"
14
+ borderRadius "var(--radius)"
15
+ overflow hidden
16
+ transition "transform 0.2s, box-shadow 0.2s"
17
+ :hover transform="translateY(-3px)" boxShadow="var(--shadow-card)"
18
+ ":hover img" transform="scale(1.04)"
19
+ }
20
+ div {
21
+ style {
22
+ position relative
23
+ overflow hidden
24
+ aspectRatio "1 / 1"
25
+ backgroundColor "var(--color-bg-tint)"
26
+ }
27
+ img src="${state.image}" alt="${state.name}" loading=lazy {
28
+ style {
29
+ position absolute
30
+ inset "0"
31
+ width "100%"
32
+ height "100%"
33
+ objectFit cover
34
+ display block
35
+ transition "transform 0.5s cubic-bezier(0.22, 1, 0.36, 1)"
36
+ }
37
+ }
38
+ }
39
+ div {
40
+ style padding="1.25rem"
41
+ p "${state.role}" {
42
+ style {
43
+ margin "0 0 0.5rem"
44
+ color "var(--color-primary)"
45
+ fontSize "0.72rem"
46
+ fontWeight "700"
47
+ textTransform uppercase
48
+ letterSpacing "0.1em"
49
+ }
50
+ }
51
+ h3 "${state.name}" {
52
+ style {
53
+ fontFamily "var(--font-heading)"
54
+ fontSize "1.2rem"
55
+ fontWeight "700"
56
+ letterSpacing "-0.01em"
57
+ margin "0 0 0.6rem"
58
+ }
59
+ }
60
+ a href="tel:${state.phone}" {
61
+ style {
62
+ display inline-flex
63
+ alignItems center
64
+ gap "0.4rem"
65
+ color "var(--color-text-secondary)"
66
+ fontSize "0.92rem"
67
+ fontWeight "600"
68
+ textDecoration none
69
+ fontVariantNumeric tabular-nums
70
+ :hover color="var(--color-primary)"
71
+ }
72
+ span ☎ {
73
+ style fontSize="0.85rem"
74
+ }
75
+ span "${state.phone}"
76
+ }
77
+ }
78
+ }
@@ -0,0 +1,119 @@
1
+ /- kdl-version 2
2
+
3
+ re-contact-form {
4
+ state note="This is a demo form. Wire it to your CRM or email in pages/contact.md."
5
+ style display=block
6
+ form action="#" method=post {
7
+ style display=grid gap="0.9rem" marginTop="1.5rem"
8
+ input type=text name=name placeholder="Your name" required="true" aria-label="Your name" {
9
+ style {
10
+ width "100%"
11
+ padding "0.8rem 0.95rem"
12
+ border "1px solid var(--color-border-strong)"
13
+ borderRadius "var(--radius-sm)"
14
+ fontSize "1rem"
15
+ fontFamily inherit
16
+ backgroundColor "var(--color-bg-white)"
17
+ outline none
18
+ transition "border-color 0.15s, box-shadow 0.15s"
19
+ :focus {
20
+ borderColor "var(--color-primary)"
21
+ boxShadow "0 0 0 3px var(--color-accent-soft)"
22
+ }
23
+ }
24
+ }
25
+ input type=email name=email placeholder="Email address" required="true" aria-label="Email address" {
26
+ style {
27
+ width "100%"
28
+ padding "0.8rem 0.95rem"
29
+ border "1px solid var(--color-border-strong)"
30
+ borderRadius "var(--radius-sm)"
31
+ fontSize "1rem"
32
+ fontFamily inherit
33
+ backgroundColor "var(--color-bg-white)"
34
+ outline none
35
+ transition "border-color 0.15s, box-shadow 0.15s"
36
+ :focus {
37
+ borderColor "var(--color-primary)"
38
+ boxShadow "0 0 0 3px var(--color-accent-soft)"
39
+ }
40
+ }
41
+ }
42
+ div {
43
+ style display=grid gridTemplateColumns="1fr 1fr" gap="0.9rem" {
44
+ @--sm gridTemplateColumns="1fr"
45
+ }
46
+ input type=text name=intent placeholder="Buying or selling?" aria-label="Buying or selling" {
47
+ style {
48
+ width "100%"
49
+ padding "0.8rem 0.95rem"
50
+ border "1px solid var(--color-border-strong)"
51
+ borderRadius "var(--radius-sm)"
52
+ fontSize "1rem"
53
+ fontFamily inherit
54
+ backgroundColor "var(--color-bg-white)"
55
+ outline none
56
+ transition "border-color 0.15s, box-shadow 0.15s"
57
+ :focus {
58
+ borderColor "var(--color-primary)"
59
+ boxShadow "0 0 0 3px var(--color-accent-soft)"
60
+ }
61
+ }
62
+ }
63
+ input type=text name=area placeholder="Preferred area" aria-label="Preferred area" {
64
+ style {
65
+ width "100%"
66
+ padding "0.8rem 0.95rem"
67
+ border "1px solid var(--color-border-strong)"
68
+ borderRadius "var(--radius-sm)"
69
+ fontSize "1rem"
70
+ fontFamily inherit
71
+ backgroundColor "var(--color-bg-white)"
72
+ outline none
73
+ transition "border-color 0.15s, box-shadow 0.15s"
74
+ :focus {
75
+ borderColor "var(--color-primary)"
76
+ boxShadow "0 0 0 3px var(--color-accent-soft)"
77
+ }
78
+ }
79
+ }
80
+ }
81
+ textarea name=notes rows="4" placeholder="What are you looking for? Budget, bedrooms, timing…" aria-label=Notes {
82
+ style {
83
+ width "100%"
84
+ padding "0.8rem 0.95rem"
85
+ border "1px solid var(--color-border-strong)"
86
+ borderRadius "var(--radius-sm)"
87
+ fontSize "1rem"
88
+ fontFamily inherit
89
+ backgroundColor "var(--color-bg-white)"
90
+ outline none
91
+ resize vertical
92
+ transition "border-color 0.15s, box-shadow 0.15s"
93
+ :focus {
94
+ borderColor "var(--color-primary)"
95
+ boxShadow "0 0 0 3px var(--color-accent-soft)"
96
+ }
97
+ }
98
+ }
99
+ button type=submit "Request a call" {
100
+ style {
101
+ backgroundColor "var(--color-primary)"
102
+ color "var(--color-text-white)"
103
+ padding "0.9rem 1.6rem"
104
+ border none
105
+ borderRadius "999px"
106
+ fontSize "1rem"
107
+ fontFamily inherit
108
+ fontWeight "700"
109
+ cursor pointer
110
+ justifySelf start
111
+ transition "background-color 0.15s, transform 0.15s"
112
+ :hover backgroundColor="var(--color-primary-hover)" transform="translateY(-1px)"
113
+ }
114
+ }
115
+ }
116
+ p "${state.note}" {
117
+ style fontSize="0.85rem" color="var(--color-text-muted)" margin="1rem 0 0"
118
+ }
119
+ }