@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jxsuite/starters",
3
- "version": "3.4.0",
3
+ "version": "3.6.0",
4
4
  "description": "Starter site templates for new Jx projects",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -26,12 +26,12 @@
26
26
  "test:coverage": "bun test --isolate --coverage"
27
27
  },
28
28
  "dependencies": {
29
- "@jxsuite/protocol": "^6.2.5"
29
+ "@jxsuite/protocol": "^6.4.0"
30
30
  },
31
31
  "devDependencies": {
32
- "@jxsuite/parser": "^4.3.3",
33
- "@jxsuite/runtime": "^6.2.2",
34
- "@jxsuite/schema": "^5.5.0",
32
+ "@jxsuite/parser": "^5.0.0",
33
+ "@jxsuite/runtime": "^7.0.0",
34
+ "@jxsuite/schema": "^6.0.0",
35
35
  "ajv": "^8.20.0",
36
36
  "ajv-formats": "^3.0.1"
37
37
  }
@@ -0,0 +1,64 @@
1
+ /- kdl-version 2
2
+
3
+ bl-author-bio {
4
+ state {
5
+ name ""
6
+ role "Writer & editor"
7
+ bio ""
8
+ avatar type=string format=image default=""
9
+ }
10
+ style {
11
+ display block
12
+ borderTop "1.5px solid var(--color-rule)"
13
+ borderBottom "1.5px solid var(--color-rule)"
14
+ padding "1.75rem 0"
15
+ }
16
+ div {
17
+ style display=flex gap="1.5rem" alignItems=center {
18
+ @--sm flexDirection=column textAlign=center
19
+ }
20
+ img src="${state.avatar}" alt="${state.name}" loading=lazy {
21
+ style {
22
+ display "${state.avatar ? 'block' : 'none'}"
23
+ width "84px"
24
+ height "84px"
25
+ borderRadius "999px"
26
+ objectFit cover
27
+ flexShrink "0"
28
+ filter "grayscale(1)"
29
+ }
30
+ }
31
+ div {
32
+ div "Written by · ${state.role}" {
33
+ style {
34
+ fontFamily "var(--font-body)"
35
+ textTransform uppercase
36
+ letterSpacing "0.16em"
37
+ fontSize "0.7rem"
38
+ fontWeight "600"
39
+ color "var(--color-primary)"
40
+ marginBottom "0.4rem"
41
+ }
42
+ }
43
+ div "${state.name}" {
44
+ style {
45
+ fontFamily "var(--font-heading)"
46
+ fontSize "1.5rem"
47
+ fontWeight "700"
48
+ letterSpacing "-0.01em"
49
+ margin "0 0 0.4rem"
50
+ }
51
+ }
52
+ p "${state.bio}" {
53
+ style {
54
+ margin "0"
55
+ fontFamily "var(--font-heading)"
56
+ fontStyle italic
57
+ color "var(--color-text-muted)"
58
+ fontSize "1.1rem"
59
+ lineHeight "1.6"
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
@@ -0,0 +1,77 @@
1
+ /- kdl-version 2
2
+
3
+ bl-contact-form {
4
+ state {
5
+ heading "Send a note"
6
+ cta "Send note"
7
+ note "This is a demo form. Wire it to your email provider or inbox in components/bl-contact-form.json."
8
+ }
9
+ style display=block
10
+ h3 "${state.heading}" {
11
+ style {
12
+ fontFamily "var(--font-heading)"
13
+ fontSize "1.6rem"
14
+ fontWeight "600"
15
+ margin "0 0 1.25rem"
16
+ }
17
+ }
18
+ form action="#" method=post {
19
+ style display=grid gap="1rem" alignContent=start
20
+ input type=text name=name placeholder="Your name" required="true" aria-label="Your name" {
21
+ style {
22
+ width "100%"
23
+ padding "0.75rem 0.9rem"
24
+ border "1px solid var(--color-border)"
25
+ borderRadius "var(--radius)"
26
+ fontSize "1rem"
27
+ fontFamily inherit
28
+ backgroundColor "var(--color-bg-white)"
29
+ }
30
+ }
31
+ input type=email name=email placeholder="Email address" required="true" aria-label="Email address" {
32
+ style {
33
+ width "100%"
34
+ padding "0.75rem 0.9rem"
35
+ border "1px solid var(--color-border)"
36
+ borderRadius "var(--radius)"
37
+ fontSize "1rem"
38
+ fontFamily inherit
39
+ backgroundColor "var(--color-bg-white)"
40
+ }
41
+ }
42
+ textarea name=message rows="5" placeholder="What's on your mind?" aria-label=Message {
43
+ style {
44
+ width "100%"
45
+ padding "0.75rem 0.9rem"
46
+ border "1px solid var(--color-border)"
47
+ borderRadius "var(--radius)"
48
+ fontSize "1rem"
49
+ fontFamily inherit
50
+ backgroundColor "var(--color-bg-white)"
51
+ }
52
+ }
53
+ button type=submit "${state.cta}" {
54
+ style {
55
+ backgroundColor "var(--color-primary)"
56
+ color "var(--color-text-white)"
57
+ padding "0.85rem 1.5rem"
58
+ border none
59
+ borderRadius "var(--radius)"
60
+ fontSize "1rem"
61
+ fontWeight "600"
62
+ cursor pointer
63
+ justifySelf start
64
+ transition "background-color 0.15s"
65
+ :hover backgroundColor="var(--color-primary-hover)"
66
+ }
67
+ }
68
+ p "${state.note}" {
69
+ style {
70
+ display "${state.note ? 'block' : 'none'}"
71
+ fontSize "0.85rem"
72
+ color "var(--color-text-muted)"
73
+ margin "0"
74
+ }
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,32 @@
1
+ /- kdl-version 2
2
+
3
+ bl-contact-info {
4
+ state {
5
+ heading Elsewhere
6
+ intro "For letters, pitches, or corrections:"
7
+ email hello@thelongfield.co
8
+ note "New essays publish most Sundays. Replies to the newsletter come straight to me."
9
+ }
10
+ style {
11
+ display block
12
+ padding "2rem"
13
+ backgroundColor "var(--color-bg-cream)"
14
+ border "1px solid var(--color-border)"
15
+ borderRadius "var(--radius)"
16
+ }
17
+ h3 "${state.heading}" {
18
+ style fontFamily="var(--font-heading)" fontSize="1.4rem" fontWeight="600" margin="0 0 1rem"
19
+ }
20
+ p "${state.intro}" {
21
+ style margin="0 0 0.5rem" color="var(--color-text-muted)"
22
+ }
23
+ p {
24
+ style margin="0 0 1.25rem"
25
+ a href="mailto:${state.email}" "${state.email}" {
26
+ style color="var(--color-primary)" textDecoration=none fontWeight="600"
27
+ }
28
+ }
29
+ p "${state.note}" {
30
+ style margin="0" color="var(--color-text-muted)"
31
+ }
32
+ }
@@ -0,0 +1,52 @@
1
+ /- kdl-version 2
2
+
3
+ bl-cta {
4
+ state heading="" text="" cta=Subscribe ctaHref="/contact/"
5
+ style {
6
+ display block
7
+ backgroundColor "var(--color-bg-dark)"
8
+ color "var(--color-text-white)"
9
+ padding "clamp(3.5rem, 8vw, 5.5rem) 1.5rem"
10
+ textAlign center
11
+ }
12
+ div {
13
+ style maxWidth="var(--max-width-narrow)" margin="0 auto"
14
+ h2 "${state.heading}" {
15
+ style {
16
+ fontFamily "var(--font-heading)"
17
+ fontSize "clamp(2rem, 5vw, 3.25rem)"
18
+ fontWeight "700"
19
+ lineHeight "1.05"
20
+ letterSpacing "-0.02em"
21
+ margin "0 0 1rem"
22
+ }
23
+ }
24
+ p "${state.text}" {
25
+ style {
26
+ fontFamily "var(--font-heading)"
27
+ fontStyle italic
28
+ fontSize "1.2rem"
29
+ lineHeight "1.6"
30
+ opacity "0.8"
31
+ margin "0 auto 2rem"
32
+ maxWidth "46ch"
33
+ }
34
+ }
35
+ a href="${state.ctaHref}" "${state.cta} →" {
36
+ style {
37
+ display inline-block
38
+ color "var(--color-text-white)"
39
+ fontFamily "var(--font-body)"
40
+ fontSize "0.82rem"
41
+ fontWeight "600"
42
+ textTransform uppercase
43
+ letterSpacing "0.18em"
44
+ textDecoration none
45
+ borderBottom "1.5px solid var(--color-primary)"
46
+ paddingBottom "0.35rem"
47
+ transition "opacity 0.15s"
48
+ :hover opacity="0.65"
49
+ }
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,85 @@
1
+ /- kdl-version 2
2
+
3
+ bl-footer {
4
+ state {
5
+ brand "The Long Field"
6
+ tagline "Slow essays on design, technology, and the craft of making things well."
7
+ email hello@thelongfield.co
8
+ cadence "A new essay most Sundays."
9
+ }
10
+ style {
11
+ display block
12
+ backgroundColor "var(--color-paper)"
13
+ borderTop "1.5px solid var(--color-rule)"
14
+ padding "clamp(3rem, 6vw, 4.5rem) 1.5rem 2.5rem"
15
+ }
16
+ div {
17
+ style maxWidth="var(--max-width)" margin="0 auto" textAlign=center
18
+ div "${state.brand}" {
19
+ style {
20
+ fontFamily "var(--font-heading)"
21
+ fontWeight "900"
22
+ fontSize "clamp(2rem, 6vw, 3.25rem)"
23
+ letterSpacing "-0.03em"
24
+ lineHeight "1"
25
+ margin "0 0 1rem"
26
+ color "var(--color-text-primary)"
27
+ }
28
+ }
29
+ p "${state.tagline}" {
30
+ style {
31
+ fontFamily "var(--font-heading)"
32
+ fontStyle italic
33
+ fontSize "1.15rem"
34
+ color "var(--color-text-muted)"
35
+ margin "0 auto 1.75rem"
36
+ maxWidth "42ch"
37
+ }
38
+ }
39
+ nav {
40
+ style {
41
+ display flex
42
+ justifyContent center
43
+ flexWrap wrap
44
+ gap "1.75rem"
45
+ paddingTop "1.75rem"
46
+ borderTop "1px solid var(--color-border)"
47
+ fontFamily "var(--font-body)"
48
+ fontSize "0.74rem"
49
+ fontWeight "500"
50
+ textTransform uppercase
51
+ letterSpacing "0.16em"
52
+ }
53
+ a href="/#latest" Essays {
54
+ style color="var(--color-text-primary)" textDecoration=none {
55
+ :hover color="var(--color-primary)"
56
+ }
57
+ }
58
+ a href="/about/" About {
59
+ style color="var(--color-text-primary)" textDecoration=none {
60
+ :hover color="var(--color-primary)"
61
+ }
62
+ }
63
+ a href="/contact/" Contact {
64
+ style color="var(--color-text-primary)" textDecoration=none {
65
+ :hover color="var(--color-primary)"
66
+ }
67
+ }
68
+ a href="mailto:${state.email}" "${state.email}" {
69
+ style color="var(--color-text-primary)" textDecoration=none {
70
+ :hover color="var(--color-primary)"
71
+ }
72
+ }
73
+ }
74
+ p "© The Long Field · Set in Fraunces & Newsreader · Built with Jx" {
75
+ style {
76
+ margin "1.75rem 0 0"
77
+ fontFamily "var(--font-body)"
78
+ fontSize "0.72rem"
79
+ textTransform uppercase
80
+ letterSpacing "0.14em"
81
+ color "var(--color-text-muted)"
82
+ }
83
+ }
84
+ }
85
+ }
@@ -0,0 +1,111 @@
1
+ /- kdl-version 2
2
+
3
+ bl-masthead {
4
+ state {
5
+ edition "Field Notes · Vol. IV · Published most Sundays"
6
+ heading "The Long Field"
7
+ subheading "Slow essays on design, technology, and the craft of making things well — written by hand, one at a time."
8
+ colophon "Est. 2021 · Set in Fraunces & Newsreader · Marren Oda, editor"
9
+ cta "Read the latest"
10
+ ctaHref "#latest"
11
+ }
12
+ style {
13
+ display block
14
+ backgroundColor "var(--color-paper)"
15
+ padding "clamp(2rem, 5vw, 3.5rem) 1.5rem clamp(2.5rem, 6vw, 4rem)"
16
+ }
17
+ div {
18
+ style maxWidth="var(--max-width)" margin="0 auto"
19
+ div {
20
+ style {
21
+ display flex
22
+ alignItems center
23
+ gap "1.25rem"
24
+ marginBottom "clamp(1.25rem, 3vw, 2rem)"
25
+ }
26
+ span {
27
+ style flex="1" height="1px" backgroundColor="var(--color-rule)"
28
+ }
29
+ span "${state.edition}" {
30
+ style {
31
+ fontFamily "var(--font-body)"
32
+ fontSize "0.74rem"
33
+ fontWeight "500"
34
+ textTransform uppercase
35
+ letterSpacing "0.22em"
36
+ color "var(--color-text-muted)"
37
+ textAlign center
38
+ whiteSpace nowrap
39
+ @--sm whiteSpace=normal letterSpacing="0.14em"
40
+ }
41
+ }
42
+ span {
43
+ style flex="1" height="1px" backgroundColor="var(--color-rule)"
44
+ }
45
+ }
46
+ h1 "${state.heading}" {
47
+ style {
48
+ fontFamily "var(--font-heading)"
49
+ fontWeight "900"
50
+ fontSize "clamp(3.2rem, 15vw, 11rem)"
51
+ lineHeight "0.9"
52
+ letterSpacing "-0.035em"
53
+ textAlign center
54
+ margin "0"
55
+ color "var(--color-text-primary)"
56
+ }
57
+ }
58
+ div {
59
+ style {
60
+ marginTop "clamp(1.5rem, 3vw, 2.25rem)"
61
+ paddingTop "clamp(1.5rem, 3vw, 2.25rem)"
62
+ borderTop "3px double var(--color-rule)"
63
+ display flex
64
+ flexDirection column
65
+ alignItems center
66
+ gap "1.1rem"
67
+ }
68
+ p "${state.subheading}" {
69
+ style {
70
+ fontFamily "var(--font-heading)"
71
+ fontStyle italic
72
+ fontWeight "400"
73
+ fontSize "clamp(1.3rem, 3vw, 1.9rem)"
74
+ lineHeight "1.4"
75
+ textAlign center
76
+ maxWidth "30ch"
77
+ margin "0"
78
+ color "var(--color-text-primary)"
79
+ }
80
+ }
81
+ p "${state.colophon}" {
82
+ style {
83
+ fontFamily "var(--font-body)"
84
+ fontSize "0.76rem"
85
+ fontWeight "500"
86
+ textTransform uppercase
87
+ letterSpacing "0.16em"
88
+ color "var(--color-text-muted)"
89
+ textAlign center
90
+ margin "0"
91
+ }
92
+ }
93
+ a href="${state.ctaHref}" "${state.cta} ↓" {
94
+ style {
95
+ marginTop "0.5rem"
96
+ fontFamily "var(--font-body)"
97
+ fontSize "0.8rem"
98
+ fontWeight "600"
99
+ textTransform uppercase
100
+ letterSpacing "0.16em"
101
+ color "var(--color-primary)"
102
+ textDecoration none
103
+ borderBottom "1px solid var(--color-primary)"
104
+ paddingBottom "0.15rem"
105
+ transition "opacity 0.15s"
106
+ :hover opacity="0.6"
107
+ }
108
+ }
109
+ }
110
+ }
111
+ }
@@ -0,0 +1,62 @@
1
+ /- kdl-version 2
2
+
3
+ bl-nav {
4
+ style {
5
+ position sticky
6
+ top "0"
7
+ zIndex "50"
8
+ display block
9
+ backgroundColor "var(--color-paper)"
10
+ borderBottom "1.5px solid var(--color-rule)"
11
+ }
12
+ div {
13
+ style {
14
+ maxWidth "var(--max-width)"
15
+ margin "0 auto"
16
+ padding "0.55rem 1.5rem"
17
+ display flex
18
+ alignItems center
19
+ justifyContent space-between
20
+ gap "1rem"
21
+ }
22
+ a href="/" "The Long Field" {
23
+ style {
24
+ fontFamily "var(--font-heading)"
25
+ fontWeight "700"
26
+ fontSize "1.05rem"
27
+ letterSpacing "0.01em"
28
+ color "var(--color-text-primary)"
29
+ textDecoration none
30
+ whiteSpace nowrap
31
+ }
32
+ }
33
+ nav {
34
+ style {
35
+ display flex
36
+ alignItems center
37
+ gap "1.75rem"
38
+ fontFamily "var(--font-body)"
39
+ fontSize "0.72rem"
40
+ fontWeight "500"
41
+ textTransform uppercase
42
+ letterSpacing "0.16em"
43
+ @--sm gap="1.1rem"
44
+ }
45
+ a href="/#latest" Essays {
46
+ style color="var(--color-text-primary)" textDecoration=none transition="color 0.15s" {
47
+ :hover color="var(--color-primary)"
48
+ }
49
+ }
50
+ a href="/about/" About {
51
+ style color="var(--color-text-primary)" textDecoration=none transition="color 0.15s" {
52
+ :hover color="var(--color-primary)"
53
+ }
54
+ }
55
+ a href="/contact/" Subscribe {
56
+ style color="var(--color-primary)" textDecoration=none transition="opacity 0.15s" {
57
+ :hover opacity="0.65"
58
+ }
59
+ }
60
+ }
61
+ }
62
+ }
@@ -0,0 +1,104 @@
1
+ /- kdl-version 2
2
+
3
+ bl-newsletter-cta {
4
+ state {
5
+ eyebrow "The Sunday Dispatch"
6
+ heading "One essay, most Sundays."
7
+ text "Field notes on design, technology, and craft — sent when there's something worth saying. No noise, unsubscribe anytime."
8
+ placeholder you@example.com
9
+ cta Subscribe
10
+ note "Demo form — wire it to your email provider in components/bl-newsletter-cta.json."
11
+ }
12
+ style {
13
+ display block
14
+ backgroundColor "var(--color-ink)"
15
+ color "var(--color-text-white)"
16
+ padding "clamp(2.5rem, 6vw, 4rem) clamp(1.5rem, 5vw, 3.5rem)"
17
+ }
18
+ div {
19
+ style maxWidth="var(--max-width-narrow)" margin="0 auto" textAlign=center
20
+ p "${state.eyebrow}" {
21
+ style {
22
+ display "${state.eyebrow ? 'block' : 'none'}"
23
+ fontFamily "var(--font-body)"
24
+ fontSize "0.74rem"
25
+ fontWeight "500"
26
+ textTransform uppercase
27
+ letterSpacing "0.24em"
28
+ color "var(--color-text-white)"
29
+ opacity "0.6"
30
+ margin "0 0 1.25rem"
31
+ }
32
+ }
33
+ h2 "${state.heading}" {
34
+ style {
35
+ fontFamily "var(--font-heading)"
36
+ fontWeight "700"
37
+ fontSize "clamp(2rem, 5vw, 3.2rem)"
38
+ lineHeight "1.05"
39
+ letterSpacing "-0.02em"
40
+ margin "0 0 1rem"
41
+ }
42
+ }
43
+ p "${state.text}" {
44
+ style {
45
+ fontFamily "var(--font-heading)"
46
+ fontStyle italic
47
+ fontSize "1.2rem"
48
+ lineHeight "1.6"
49
+ opacity "0.8"
50
+ margin "0 auto 2rem"
51
+ maxWidth "48ch"
52
+ }
53
+ }
54
+ form action="#" method=post {
55
+ style {
56
+ display flex
57
+ gap "0"
58
+ maxWidth "440px"
59
+ margin "0 auto"
60
+ borderBottom "1.5px solid rgba(246, 241, 231, 0.5)"
61
+ @--sm flexDirection=column gap="1rem" borderBottom=none
62
+ }
63
+ input type=email name=email placeholder="${state.placeholder}" required="true" aria-label="Email address" {
64
+ style {
65
+ flex "1"
66
+ padding "0.75rem 0.25rem"
67
+ border none
68
+ borderBottom "1.5px solid transparent"
69
+ backgroundColor transparent
70
+ color "var(--color-text-white)"
71
+ fontSize "1.05rem"
72
+ fontFamily "var(--font-heading)"
73
+ outline none
74
+ @--sm borderBottom="1.5px solid rgba(246, 241, 231, 0.5)" textAlign=center
75
+ }
76
+ }
77
+ button type=submit "${state.cta} →" {
78
+ style {
79
+ backgroundColor transparent
80
+ color "var(--color-text-white)"
81
+ padding "0.75rem 0.5rem"
82
+ border none
83
+ fontFamily "var(--font-body)"
84
+ fontSize "0.8rem"
85
+ fontWeight "600"
86
+ textTransform uppercase
87
+ letterSpacing "0.16em"
88
+ cursor pointer
89
+ whiteSpace nowrap
90
+ transition "opacity 0.15s"
91
+ :hover opacity="0.6"
92
+ }
93
+ }
94
+ }
95
+ p "${state.note}" {
96
+ style {
97
+ display "${state.note ? 'block' : 'none'}"
98
+ fontSize "0.75rem"
99
+ opacity "0.5"
100
+ margin "1.5rem 0 0"
101
+ }
102
+ }
103
+ }
104
+ }