@jxsuite/starters 0.34.0 → 0.35.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 (245) hide show
  1. package/package.json +5 -2
  2. package/registry.json +19 -19
  3. package/sites/blog/components/bl-author-bio.json +19 -15
  4. package/sites/blog/components/bl-cta.json +20 -14
  5. package/sites/blog/components/bl-footer.json +67 -90
  6. package/sites/blog/components/bl-masthead.json +96 -90
  7. package/sites/blog/components/bl-nav.json +23 -30
  8. package/sites/blog/components/bl-newsletter-cta.json +53 -39
  9. package/sites/blog/components/bl-post-card.json +70 -52
  10. package/sites/blog/components/bl-post-list.json +2 -9
  11. package/sites/blog/components/bl-prose.json +33 -18
  12. package/sites/blog/components/bl-section-header.json +46 -29
  13. package/sites/blog/components/bl-tag-pill.json +11 -8
  14. package/sites/blog/package.json +2 -2
  15. package/sites/blog/pages/index.md +26 -24
  16. package/sites/blog/project.json +19 -16
  17. package/sites/course/components/co-application.json +158 -103
  18. package/sites/course/components/co-cohort.json +172 -0
  19. package/sites/course/components/co-cta.json +70 -18
  20. package/sites/course/components/co-curriculum-accordion.json +12 -12
  21. package/sites/course/components/co-footer.json +83 -33
  22. package/sites/course/components/co-hero.json +385 -49
  23. package/sites/course/components/co-instructor-card.json +105 -22
  24. package/sites/course/components/co-mentor.json +65 -0
  25. package/sites/course/components/co-module-card.json +98 -53
  26. package/sites/course/components/co-nav.json +194 -69
  27. package/sites/course/components/co-outcome-card.json +41 -15
  28. package/sites/course/components/co-outcomes.json +248 -0
  29. package/sites/course/components/co-pricing.json +70 -25
  30. package/sites/course/components/co-section-header.json +36 -15
  31. package/sites/course/components/co-testimonial-card.json +70 -15
  32. package/sites/course/pages/about.md +10 -11
  33. package/sites/course/pages/curriculum.md +8 -4
  34. package/sites/course/pages/enroll.md +6 -7
  35. package/sites/course/pages/index.md +41 -29
  36. package/sites/course/project.json +64 -23
  37. package/sites/event/components/ev-agenda-tabs.json +526 -240
  38. package/sites/event/components/ev-cta.json +56 -27
  39. package/sites/event/components/ev-feature.json +14 -10
  40. package/sites/event/components/ev-footer.json +82 -30
  41. package/sites/event/components/ev-hero.json +307 -72
  42. package/sites/event/components/ev-nav.json +97 -34
  43. package/sites/event/components/ev-reason.json +64 -0
  44. package/sites/event/components/ev-savedate.json +160 -73
  45. package/sites/event/components/ev-section-header.json +30 -13
  46. package/sites/event/components/ev-session-row.json +96 -36
  47. package/sites/event/components/ev-speaker-card.json +63 -17
  48. package/sites/event/components/ev-sponsors.json +131 -0
  49. package/sites/event/components/ev-stat.json +17 -12
  50. package/sites/event/components/ev-ticket-card.json +58 -40
  51. package/sites/event/components/ev-venue.json +39 -12
  52. package/sites/event/layouts/base.json +1 -1
  53. package/sites/event/pages/index.md +38 -14
  54. package/sites/event/pages/schedule.md +19 -16
  55. package/sites/event/project.json +88 -26
  56. package/sites/fitness-studio/components/fs-band.json +149 -0
  57. package/sites/fitness-studio/components/fs-booking.json +147 -0
  58. package/sites/fitness-studio/components/fs-class-card.json +62 -31
  59. package/sites/fitness-studio/components/fs-cta.json +63 -19
  60. package/sites/fitness-studio/components/fs-feature.json +20 -6
  61. package/sites/fitness-studio/components/fs-footer.json +62 -29
  62. package/sites/fitness-studio/components/fs-hero.json +296 -49
  63. package/sites/fitness-studio/components/fs-hours.json +40 -21
  64. package/sites/fitness-studio/components/fs-instructor-card.json +94 -31
  65. package/sites/fitness-studio/components/fs-intro.json +258 -23
  66. package/sites/fitness-studio/components/fs-modality.json +171 -0
  67. package/sites/fitness-studio/components/fs-nav.json +55 -24
  68. package/sites/fitness-studio/components/fs-pricing-card.json +71 -51
  69. package/sites/fitness-studio/components/fs-review.json +52 -18
  70. package/sites/fitness-studio/components/fs-schedule.json +1165 -0
  71. package/sites/fitness-studio/components/fs-section-header.json +44 -20
  72. package/sites/fitness-studio/pages/classes.md +11 -5
  73. package/sites/fitness-studio/pages/contact.md +7 -29
  74. package/sites/fitness-studio/pages/index.md +29 -52
  75. package/sites/fitness-studio/pages/pricing.md +7 -7
  76. package/sites/fitness-studio/project.json +99 -26
  77. package/sites/home-services/components/hs-callbar.json +72 -0
  78. package/sites/home-services/components/hs-cta.json +121 -60
  79. package/sites/home-services/components/hs-feature.json +42 -23
  80. package/sites/home-services/components/hs-footer.json +108 -33
  81. package/sites/home-services/components/hs-gallery.json +66 -15
  82. package/sites/home-services/components/hs-hero.json +360 -42
  83. package/sites/home-services/components/hs-intro.json +70 -7
  84. package/sites/home-services/components/hs-nav.json +233 -68
  85. package/sites/home-services/components/hs-reservation.json +125 -46
  86. package/sites/home-services/components/hs-review.json +76 -16
  87. package/sites/home-services/components/hs-section-header.json +31 -14
  88. package/sites/home-services/components/hs-service-card.json +34 -24
  89. package/sites/home-services/components/hs-stat.json +54 -0
  90. package/sites/home-services/components/hs-step.json +40 -13
  91. package/sites/home-services/components/hs-trust-bar.json +188 -40
  92. package/sites/home-services/layouts/base.json +4 -2
  93. package/sites/home-services/pages/about.md +33 -2
  94. package/sites/home-services/pages/contact.md +23 -10
  95. package/sites/home-services/pages/index.md +33 -7
  96. package/sites/home-services/pages/services.md +34 -3
  97. package/sites/home-services/project.json +82 -22
  98. package/sites/nonprofit/components/np-contact-form.json +52 -24
  99. package/sites/nonprofit/components/np-contact-info.json +27 -21
  100. package/sites/nonprofit/components/np-cta.json +152 -77
  101. package/sites/nonprofit/components/np-donate-tier.json +59 -32
  102. package/sites/nonprofit/components/np-feature.json +13 -9
  103. package/sites/nonprofit/components/np-footer.json +106 -36
  104. package/sites/nonprofit/components/np-hero.json +274 -46
  105. package/sites/nonprofit/components/np-impact-band.json +108 -0
  106. package/sites/nonprofit/components/np-intro.json +126 -19
  107. package/sites/nonprofit/components/np-nav.json +161 -82
  108. package/sites/nonprofit/components/np-program-card.json +83 -23
  109. package/sites/nonprofit/components/np-section-header.json +40 -14
  110. package/sites/nonprofit/components/np-stat.json +36 -15
  111. package/sites/nonprofit/components/np-step.json +46 -17
  112. package/sites/nonprofit/components/np-team-member.json +26 -19
  113. package/sites/nonprofit/components/np-testimonial.json +144 -29
  114. package/sites/nonprofit/pages/about.md +17 -16
  115. package/sites/nonprofit/pages/contact.md +4 -4
  116. package/sites/nonprofit/pages/get-involved.md +23 -23
  117. package/sites/nonprofit/pages/index.md +29 -44
  118. package/sites/nonprofit/pages/programs.md +12 -14
  119. package/sites/nonprofit/project.json +74 -28
  120. package/sites/portfolio/components/pv-about-split.json +21 -9
  121. package/sites/portfolio/components/pv-category-pill.json +7 -6
  122. package/sites/portfolio/components/pv-contact-form.json +34 -45
  123. package/sites/portfolio/components/pv-cta.json +35 -19
  124. package/sites/portfolio/components/pv-footer.json +97 -75
  125. package/sites/portfolio/components/pv-hero.json +77 -70
  126. package/sites/portfolio/components/pv-nav.json +32 -38
  127. package/sites/portfolio/components/pv-project-card.json +118 -61
  128. package/sites/portfolio/components/pv-project-grid.json +24 -16
  129. package/sites/portfolio/components/pv-section-header.json +74 -37
  130. package/sites/portfolio/layouts/base.json +1 -1
  131. package/sites/portfolio/package.json +2 -2
  132. package/sites/portfolio/pages/[slug].json +1 -1
  133. package/sites/portfolio/pages/about.md +4 -3
  134. package/sites/portfolio/pages/contact.md +1 -1
  135. package/sites/portfolio/pages/index.md +18 -13
  136. package/sites/portfolio/pages/work.md +7 -7
  137. package/sites/portfolio/project.json +20 -16
  138. package/sites/professional-firm/components/pf-article-header.json +34 -20
  139. package/sites/professional-firm/components/pf-contact-form.json +57 -49
  140. package/sites/professional-firm/components/pf-contact-info.json +147 -0
  141. package/sites/professional-firm/components/pf-cta.json +42 -18
  142. package/sites/professional-firm/components/pf-feature.json +21 -24
  143. package/sites/professional-firm/components/pf-footer.json +107 -48
  144. package/sites/professional-firm/components/pf-hero.json +135 -89
  145. package/sites/professional-firm/components/pf-insight-row.json +144 -0
  146. package/sites/professional-firm/components/pf-intro.json +44 -10
  147. package/sites/professional-firm/components/pf-logo-bar.json +35 -34
  148. package/sites/professional-firm/components/pf-nav.json +67 -42
  149. package/sites/professional-firm/components/pf-section-header.json +46 -22
  150. package/sites/professional-firm/components/pf-service-row.json +104 -0
  151. package/sites/professional-firm/components/pf-statband.json +183 -0
  152. package/sites/professional-firm/components/pf-team-member.json +34 -29
  153. package/sites/professional-firm/content/insights/cash-flow-forecasting.md +1 -0
  154. package/sites/professional-firm/content/insights/choosing-business-entity.md +1 -0
  155. package/sites/professional-firm/content/insights/r-and-d-tax-credits.md +1 -0
  156. package/sites/professional-firm/content/insights/when-to-hire-cfo.md +1 -0
  157. package/sites/professional-firm/content/insights/year-end-tax-moves.md +1 -0
  158. package/sites/professional-firm/layouts/article.json +96 -14
  159. package/sites/professional-firm/layouts/base.json +1 -1
  160. package/sites/professional-firm/pages/contact.md +5 -26
  161. package/sites/professional-firm/pages/index.md +39 -45
  162. package/sites/professional-firm/pages/insights/[slug].json +44 -33
  163. package/sites/professional-firm/pages/insights.md +7 -11
  164. package/sites/professional-firm/pages/services.md +16 -16
  165. package/sites/professional-firm/pages/team.md +10 -10
  166. package/sites/professional-firm/project.json +74 -30
  167. package/sites/real-estate/components/re-agent-band.json +240 -0
  168. package/sites/real-estate/components/re-agent-card.json +51 -24
  169. package/sites/real-estate/components/re-contact-form.json +76 -27
  170. package/sites/real-estate/components/re-cta.json +91 -26
  171. package/sites/real-estate/components/re-feature.json +10 -6
  172. package/sites/real-estate/components/re-footer.json +186 -46
  173. package/sites/real-estate/components/re-hero.json +443 -90
  174. package/sites/real-estate/components/re-intro.json +6 -5
  175. package/sites/real-estate/components/re-listing-card.json +199 -39
  176. package/sites/real-estate/components/re-listings-filter.json +309 -192
  177. package/sites/real-estate/components/re-nav.json +138 -39
  178. package/sites/real-estate/components/re-neighborhood.json +135 -0
  179. package/sites/real-estate/components/re-section-header.json +33 -17
  180. package/sites/real-estate/components/re-stat.json +10 -9
  181. package/sites/real-estate/components/re-step.json +15 -12
  182. package/sites/real-estate/components/re-testimonial.json +53 -16
  183. package/sites/real-estate/content/listings.csv +7 -7
  184. package/sites/real-estate/pages/[slug].json +430 -128
  185. package/sites/real-estate/pages/about.md +18 -6
  186. package/sites/real-estate/pages/contact.md +14 -2
  187. package/sites/real-estate/pages/index.md +43 -26
  188. package/sites/real-estate/pages/listings.md +15 -3
  189. package/sites/real-estate/project.json +88 -30
  190. package/sites/real-estate/public/favicon.svg +7 -1
  191. package/sites/restaurant/components/bit-cta.json +92 -14
  192. package/sites/restaurant/components/bit-feature.json +36 -17
  193. package/sites/restaurant/components/bit-footer.json +80 -34
  194. package/sites/restaurant/components/bit-gallery.json +20 -11
  195. package/sites/restaurant/components/bit-hero.json +179 -54
  196. package/sites/restaurant/components/bit-hours.json +117 -24
  197. package/sites/restaurant/components/bit-intro.json +47 -10
  198. package/sites/restaurant/components/bit-menu-group.json +55 -10
  199. package/sites/restaurant/components/bit-menu-item.json +27 -12
  200. package/sites/restaurant/components/bit-nav.json +170 -53
  201. package/sites/restaurant/components/bit-reservation.json +63 -42
  202. package/sites/restaurant/components/bit-review.json +49 -19
  203. package/sites/restaurant/components/bit-section-header.json +60 -15
  204. package/sites/restaurant/layouts/base.json +1 -1
  205. package/sites/restaurant/pages/about.md +10 -10
  206. package/sites/restaurant/pages/contact.md +7 -7
  207. package/sites/restaurant/pages/index.md +30 -20
  208. package/sites/restaurant/pages/menu.md +8 -8
  209. package/sites/restaurant/project.json +71 -28
  210. package/sites/saas/components/sa-feature-card.json +26 -16
  211. package/sites/saas/components/sa-hero.json +156 -39
  212. package/sites/saas/components/sa-nav.json +34 -26
  213. package/sites/saas/components/sa-pricing.json +11 -10
  214. package/sites/saas/components/sa-stat.json +8 -4
  215. package/sites/saas/package.json +2 -2
  216. package/sites/saas/pages/index.md +8 -8
  217. package/sites/saas/project.json +24 -16
  218. package/sites/shop/components/shp-category-tile.json +104 -0
  219. package/sites/shop/components/shp-cta.json +101 -43
  220. package/sites/shop/components/shp-feature.json +12 -7
  221. package/sites/shop/components/shp-footer.json +312 -46
  222. package/sites/shop/components/shp-hero.json +313 -46
  223. package/sites/shop/components/shp-nav.json +303 -49
  224. package/sites/shop/components/shp-newsletter.json +166 -0
  225. package/sites/shop/components/shp-product-card.json +141 -34
  226. package/sites/shop/components/shp-product-filter.json +336 -154
  227. package/sites/shop/components/shp-section-header.json +42 -20
  228. package/sites/shop/components/shp-stat.json +6 -6
  229. package/sites/shop/components/shp-trust.json +58 -0
  230. package/sites/shop/content/product/aero-road-helmet.md +2 -0
  231. package/sites/shop/content/product/apex-carbon-road.md +1 -0
  232. package/sites/shop/content/product/backroad-gravel-adv.md +1 -0
  233. package/sites/shop/content/product/boulder-enduro.md +1 -0
  234. package/sites/shop/content/product/rambler-kids-20.md +1 -0
  235. package/sites/shop/content/product/summit-trail-29er.md +1 -0
  236. package/sites/shop/content/product/trailhead-pannier-set.md +1 -0
  237. package/sites/shop/content/product/velocity-alloy-road.md +2 -0
  238. package/sites/shop/pages/index.md +38 -26
  239. package/sites/shop/pages/products/[sku].json +362 -71
  240. package/sites/shop/pages/products.md +30 -8
  241. package/sites/shop/project.json +82 -28
  242. package/sites/course/components/co-stat.json +0 -36
  243. package/sites/professional-firm/components/pf-insight-card.json +0 -99
  244. package/sites/professional-firm/components/pf-service-card.json +0 -77
  245. package/sites/professional-firm/components/pf-stat.json +0 -37
@@ -2,8 +2,20 @@
2
2
  title: "About — Northshore Realty"
3
3
  ---
4
4
 
5
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
6
- ::re-section-header{props.eyebrow="Our story" props.heading="A brokerage built on the north shore" props.subheading="Two decades of helping neighbors buy, sell, and stay."}
5
+ :::::section{style.padding="clamp(2.5rem, 5vw, 3.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)" style.borderBottom="1px solid var(--color-border)"}
6
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto"}
7
+ :::p{style.display="inline-flex" style.alignItems="center" style.gap="0.6rem" style.textTransform="uppercase" style.letterSpacing="0.14em" style.fontSize="0.74rem" style.fontWeight="700" style.color="var(--color-primary)" style.margin="0 0 0.9rem"}
8
+ Our story
9
+ :::
10
+
11
+ :::h1{style.fontFamily="var(--font-display)" style.fontSize="clamp(2rem, 4.4vw, 3.1rem)" style.fontWeight="500" style.letterSpacing="-0.015em" style.lineHeight="1.06" style.margin="0 0 0.75rem" style.color="var(--color-text-primary)" style.maxWidth="18ch"}
12
+ A brokerage built on the north shore
13
+ :::
14
+
15
+ :::p{style.fontSize="1.12rem" style.color="var(--color-text-muted)" style.margin="0" style.maxWidth="56ch"}
16
+ Two decades of helping neighbors buy, sell, and stay — one closing, one referral at a time.
17
+ :::
18
+ ::::
7
19
  :::::
8
20
 
9
21
  :::re-intro{props.image="/images/about.jpg" props.imageAlt="The Northshore Realty team outside a listed home" props.reverse="true"}
@@ -15,10 +27,10 @@ Northshore Realty started with a single office on Lakeshore Drive and a simple p
15
27
  Today we're a team of local agents who still answer their own phones. We know which streets flood, which schools are worth the premium, and what a home is really worth — not just what a listing says.
16
28
  :::
17
29
 
18
- :::::section{style.padding="clamp(3rem, 8vw, 5rem) 1.5rem"}
30
+ :::::section{style.padding="clamp(3rem, 8vw, 5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)" style.borderTop="1px solid var(--color-border)" style.borderBottom="1px solid var(--color-border)"}
19
31
  ::re-section-header{props.eyebrow="How we work" props.heading="Buying a home, without the whiplash"}
20
32
 
21
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="2.5rem 1.5rem" style.--md.gridTemplateColumns="1fr"}
33
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.35rem" style.--md.gridTemplateColumns="1fr"}
22
34
  ::re-step{props.number="1" props.title="Tell us your search" props.text="Budget, bedrooms, neighborhoods, must-haves. We build a shortlist so you only tour homes worth your Saturday."}
23
35
 
24
36
  ::re-step{props.number="2" props.title="See it clearly" props.text="Honest walkthroughs, real comps, and a fair-price read on every home — before you fall in love or make an offer."}
@@ -27,7 +39,7 @@ Today we're a team of local agents who still answer their own phones. We know wh
27
39
  ::::
28
40
  :::::
29
41
 
30
- :::::section{style.padding="clamp(3rem, 8vw, 5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
42
+ :::::section{style.padding="clamp(3.5rem, 8vw, 5.5rem) 1.5rem"}
31
43
  ::re-section-header{props.eyebrow="Meet the team" props.heading="Agents who know the neighborhood"}
32
44
 
33
45
  ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.5rem" style.--md.gridTemplateColumns="1fr"}
@@ -39,4 +51,4 @@ Today we're a team of local agents who still answer their own phones. We know wh
39
51
  ::::
40
52
  :::::
41
53
 
42
- ::re-cta{props.heading="Let's find your north shore home" props.text="Whether you're buying your first place or selling the family house, we'd be honored to help." props.cta="Get in Touch" props.ctaHref="/contact/"}
54
+ ::re-cta{props.heading="Let's find your north shore home" props.text="Whether you're buying your first place or selling the family house, we'd be honored to help." props.cta="Get in touch" props.ctaHref="/contact/" props.cta2="Browse listings" props.cta2Href="/listings/"}
@@ -2,8 +2,20 @@
2
2
  title: "Contact — Northshore Realty"
3
3
  ---
4
4
 
5
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
6
- ::re-section-header{props.eyebrow="Get in touch" props.heading="Talk to a local agent" props.subheading="Tell us what you're looking for. We'll reply within one business day."}
5
+ :::::section{style.padding="clamp(2.5rem, 5vw, 3.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)" style.borderBottom="1px solid var(--color-border)"}
6
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto"}
7
+ :::p{style.display="inline-flex" style.alignItems="center" style.gap="0.6rem" style.textTransform="uppercase" style.letterSpacing="0.14em" style.fontSize="0.74rem" style.fontWeight="700" style.color="var(--color-primary)" style.margin="0 0 0.9rem"}
8
+ Get in touch
9
+ :::
10
+
11
+ :::h1{style.fontFamily="var(--font-display)" style.fontSize="clamp(2rem, 4.4vw, 3.1rem)" style.fontWeight="500" style.letterSpacing="-0.015em" style.lineHeight="1.06" style.margin="0 0 0.75rem" style.color="var(--color-text-primary)"}
12
+ Talk to a local agent
13
+ :::
14
+
15
+ :::p{style.fontSize="1.12rem" style.color="var(--color-text-muted)" style.margin="0" style.maxWidth="56ch"}
16
+ Tell us what you're looking for. We'll reply within one business day.
17
+ :::
18
+ ::::
7
19
  :::::
8
20
 
9
21
  ::::::section{style.maxWidth="var(--max-width)" style.margin="0 auto" style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem"}
@@ -1,5 +1,5 @@
1
1
  ---
2
- title: "Northshore Realty — Homes for sale on the north shore"
2
+ title: "Northshore Realty — Search homes on the north shore"
3
3
  state:
4
4
  featured:
5
5
  $prototype: ContentCollection
@@ -11,38 +11,49 @@ state:
11
11
  limit: 3
12
12
  ---
13
13
 
14
- ::re-hero{props.eyebrow="Buy · Sell · Invest" props.heading="Find your place on the north shore." props.subheading="Browse handpicked homes from Bayport to Harbor Hills, filter by price and bedrooms, and work with agents who actually live here." props.cta="Search Homes" props.ctaHref="/listings/" props.bg="/images/hero.jpg"}
14
+ ::re-hero{props.eyebrow="142 active listings · updated daily" props.heading="Find the home that fits your life on the north shore." props.subheading="Search live listings from Bayport to Harbor Hills — filter by price, beds, and baths, then tour with agents who actually live here." props.cta="Search homes" props.ctaHref="/listings/" props.bg="/images/hero.jpg"}
15
15
 
16
- :::::section{style.padding="clamp(3.5rem, 8vw, 5.5rem) 1.5rem"}
17
- ::re-section-header{props.eyebrow="Featured homes" props.heading="Just listed" props.subheading="A first look at three of our newest listings across the north shore."}
16
+ :::::section{style.padding="clamp(3.5rem, 8vw, 5.5rem) 0"}
17
+ ::re-section-header{props.eyebrow="Just listed" props.heading="Newest on the market" props.subheading="A first look at three homes that just came to the north shore market this week."}
18
18
 
19
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.5rem" style.--md.gridTemplateColumns="repeat(2, 1fr)" style.--sm.gridTemplateColumns="1fr"}
19
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.padding="0 1.5rem" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.5rem" style.--md.gridTemplateColumns="repeat(2, 1fr)" style.--sm.gridTemplateColumns="1fr"}
20
20
  :::Array{items.ref="#/state/featured"}
21
- ::re-listing-card{props.heading="${item.data.Title}" props.price="${item.data.price}" props.beds="${item.data.beds}" props.baths="${item.data.baths}" props.sqft="${item.data.sqft}" props.city="${item.data.city}" props.image="${item.data.image}" props.href="/${item.data.slug}/"}
21
+ ::re-listing-card{props.heading="${item.data.Title}" props.price="${item.data.price}" props.beds="${item.data.beds}" props.baths="${item.data.baths}" props.sqft="${item.data.sqft}" props.city="${item.data.city}" props.status="${item.data.status}" props.image="${item.data.image}" props.href="/${item.data.slug}/"}
22
22
  :::
23
23
  ::::
24
24
 
25
- ::::div{style.textAlign="center" style.marginTop="2.5rem"}
26
- :::a{href="/listings/" style.display="inline-block" style.backgroundColor="var(--color-primary)" style.color="var(--color-text-white)" style.padding="0.85rem 2rem" style.borderRadius="var(--radius)" style.fontWeight="700" style.textDecoration="none" style.fontSize="1.05rem"}
27
- Browse all listings →
25
+ ::::div{style.maxWidth="var(--max-width)" style.margin="2.25rem auto 0" style.padding="0 1.5rem"}
26
+ :::a{href="/listings/" style.display="inline-flex" style.alignItems="center" style.gap="0.55rem" style.padding="0.8rem 1.5rem" style.border="1px solid var(--color-border-strong)" style.borderRadius="999px" style.color="var(--color-text-primary)" style.fontWeight="700" style.textDecoration="none" style.fontSize="0.98rem"}
27
+ Browse all 6 listings →
28
28
  :::
29
29
  ::::
30
30
  :::::
31
31
 
32
- :::::section{style.padding="clamp(3.5rem, 8vw, 5.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
33
- ::re-section-header{props.eyebrow="Why Northshore" props.heading="A calmer way to buy and sell"}
32
+ :::::section{id="neighborhoods" style.padding="clamp(3.5rem, 8vw, 5.5rem) 0" style.backgroundColor="var(--color-bg-cream)" style.borderTop="1px solid var(--color-border)" style.borderBottom="1px solid var(--color-border)"}
33
+ ::re-section-header{props.eyebrow="Where to look" props.heading="Explore the neighborhoods" props.subheading="Six distinct pockets of the north shore, from waterfront modern to quiet cottage streets."}
34
34
 
35
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.25rem" style.--md.gridTemplateColumns="1fr"}
36
- ::re-feature{props.icon="🏡" props.title="Local expertise" props.text="We've closed hundreds of homes on the north shore. We know the streets, the schools, and the fair price."}
35
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.padding="0 1.5rem" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.35rem" style.--md.gridTemplateColumns="repeat(2, 1fr)" style.--sm.gridTemplateColumns="1fr"}
36
+ ::re-neighborhood{props.name="Bayport" props.count="24" props.price="$720k" props.image="/images/listing-2.jpg" props.href="/listings/"}
37
37
 
38
- ::re-feature{props.icon="🔎" props.title="Transparent search" props.text="Filter by price and bedrooms right on the site — no sign-up walls, no spam, just the homes that fit."}
38
+ ::re-neighborhood{props.name="Maplewood" props.count="18" props.price="$465k" props.image="/images/listing-1.jpg" props.href="/listings/"}
39
39
 
40
- ::re-feature{props.icon="🤝" props.title="Agents, not salespeople" props.text="Advice first. Our agents are paid to get you the right home, not the most expensive one."}
40
+ ::re-neighborhood{props.name="Lakeview" props.count="12" props.price="$410k" props.image="/images/listing-3.jpg" props.href="/listings/"}
41
+
42
+ ::re-neighborhood{props.name="Harbor Hills" props.count="9" props.price="$1.1M" props.image="/images/listing-5.jpg" props.href="/listings/"}
43
+
44
+ ::re-neighborhood{props.name="Cedar Grove" props.count="15" props.price="$355k" props.image="/images/listing-4.jpg" props.href="/listings/"}
45
+
46
+ ::re-neighborhood{props.name="Northshore" props.count="21" props.price="$540k" props.image="/images/listing-6.jpg" props.href="/listings/"}
41
47
  ::::
42
48
  :::::
43
49
 
44
- :::::section{style.padding="clamp(3rem, 7vw, 4.5rem) 1.5rem"}
45
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="1rem" style.--sm.gridTemplateColumns="repeat(2, 1fr)"}
50
+ :::::section{style.padding="clamp(3rem, 7vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-dark)"}
51
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto"}
52
+ :::p{style.textTransform="uppercase" style.letterSpacing="0.16em" style.fontSize="0.74rem" style.fontWeight="700" style.color="var(--color-accent-bright)" style.margin="0 0 1.75rem"}
53
+ By the numbers
54
+ :::
55
+
56
+ :::div{style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="2rem" style.--sm.gridTemplateColumns="repeat(2, 1fr)"}
46
57
  ::re-stat{props.value="20+" props.label="Years on the north shore"}
47
58
 
48
59
  ::re-stat{props.value="1,400+" props.label="Homes closed"}
@@ -50,28 +61,34 @@ Browse all listings →
50
61
  ::re-stat{props.value="98%" props.label="Of asking price achieved"}
51
62
 
52
63
  ::re-stat{props.value="4.9★" props.label="Average client rating"}
64
+ :::
53
65
  ::::
54
66
  :::::
55
67
 
56
- :::re-intro{props.image="/images/about.jpg" props.imageAlt="A Northshore Realty agent meeting clients at a home"}
68
+ :::::section{style.padding="clamp(3.5rem, 8vw, 5.5rem) 0"}
69
+ ::re-section-header{props.eyebrow="Why Northshore" props.heading="A calmer, clearer way to buy" props.subheading="Everything you need to make a confident move — none of the pressure you don't."}
57
70
 
58
- ### More than a transaction
71
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.padding="0 1.5rem" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.35rem" style.--md.gridTemplateColumns="1fr"}
72
+ ::re-feature{props.icon="🗺" props.title="Local expertise" props.text="We've closed hundreds of homes on the north shore. We know the streets, the schools, and the fair price."}
59
73
 
60
- Buying or selling a home is one of the biggest decisions you'll make. We treat it that way — with patience, straight answers, and a team that picks up the phone.
74
+ ::re-feature{props.icon="🔎" props.title="Transparent search" props.text="Filter by price, beds, and baths right on the site — no sign-up walls, no spam, just homes that fit."}
61
75
 
62
- From the first showing to closing day, you'll have one point of contact who knows your search inside and out.
63
- :::
76
+ ::re-feature{props.icon="🤝" props.title="Agents, not salespeople" props.text="Advice first. Our agents are paid to get you the right home, not the most expensive one."}
77
+ ::::
78
+ :::::
79
+
80
+ ::re-agent-band{props.heading="Talk to an agent who lives here." props.text="Tell us your budget and must-haves and we'll send a shortlist of homes worth seeing — usually the same day." props.cta="Book a call" props.ctaHref="/contact/"}
64
81
 
65
- :::::section{style.padding="clamp(3.5rem, 8vw, 5.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
82
+ :::::section{style.padding="clamp(3.5rem, 8vw, 5.5rem) 0" style.backgroundColor="var(--color-bg-cream)" style.borderTop="1px solid var(--color-border)"}
66
83
  ::re-section-header{props.eyebrow="Client stories" props.heading="People who found home with us"}
67
84
 
68
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.25rem" style.--md.gridTemplateColumns="1fr"}
85
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.padding="0 1.5rem" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.35rem" style.--md.gridTemplateColumns="1fr"}
69
86
  ::re-testimonial{props.quote="They found us a house two blocks from the water and under budget. I still can't believe it." props.author="The Okafor Family" props.role="Bought in Bayport"}
70
87
 
71
- ::re-testimonial{props.quote="Sold in nine days for over asking. Calm, honest, and always a step ahead." props.author="Marta L." props.role="Sold in Maplewood"}
88
+ ::re-testimonial{props.quote="Sold in nine days for over asking. Calm, honest, and always a step ahead." props.author="Marta Lindqvist" props.role="Sold in Maplewood"}
72
89
 
73
90
  ::re-testimonial{props.quote="First-time buyers and terrified. Our agent walked us through every step twice." props.author="Devon & Ray" props.role="Bought in Lakeview"}
74
91
  ::::
75
92
  :::::
76
93
 
77
- ::re-cta{props.heading="Ready to start your search?" props.text="Tell us what you're looking for and your budget — we'll send a shortlist of homes worth seeing." props.cta="Talk to an Agent" props.ctaHref="/contact/"}
94
+ ::re-cta{props.heading="Ready to start your search?" props.text="Tell us what you're looking for and your budget — we'll send a shortlist of homes worth seeing." props.cta="Talk to an agent" props.ctaHref="/contact/" props.cta2="Browse listings" props.cta2Href="/listings/"}
@@ -2,12 +2,24 @@
2
2
  title: "Listings — Northshore Realty"
3
3
  ---
4
4
 
5
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
6
- ::re-section-header{props.eyebrow="Homes for sale" props.heading="Browse the north shore" props.subheading="Use the filters to narrow by bedrooms and price. Results update instantly — no page reloads."}
5
+ :::::section{style.padding="clamp(2.5rem, 5vw, 3.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)" style.borderBottom="1px solid var(--color-border)"}
6
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto"}
7
+ :::p{style.display="inline-flex" style.alignItems="center" style.gap="0.6rem" style.textTransform="uppercase" style.letterSpacing="0.14em" style.fontSize="0.74rem" style.fontWeight="700" style.color="var(--color-primary)" style.margin="0 0 0.9rem"}
8
+ Homes for sale
9
+ :::
10
+
11
+ :::h1{style.fontFamily="var(--font-display)" style.fontSize="clamp(2rem, 4vw, 3rem)" style.fontWeight="500" style.letterSpacing="-0.015em" style.lineHeight="1.08" style.margin="0 0 0.75rem" style.color="var(--color-text-primary)"}
12
+ Browse the north shore index
13
+ :::
14
+
15
+ :::p{style.fontSize="1.08rem" style.color="var(--color-text-muted)" style.margin="0" style.maxWidth="60ch"}
16
+ Filter by bedrooms and price on the left. Results update instantly — no page reloads, no waiting.
17
+ :::
18
+ ::::
7
19
  :::::
8
20
 
9
21
  :::::section{style.padding="clamp(2.5rem, 6vw, 4rem) 0"}
10
22
  ::re-listings-filter
11
23
  :::::
12
24
 
13
- ::re-cta{props.heading="Don't see the right fit?" props.text="New homes come to market every week. Tell us your must-haves and we'll alert you the moment something matches." props.cta="Set Up Alerts" props.ctaHref="/contact/"}
25
+ ::re-cta{props.heading="Don't see the right fit?" props.text="New homes come to market every week. Tell us your must-haves and we'll alert you the moment something matches." props.cta="Set up alerts" props.ctaHref="/contact/" props.cta2="Talk to an agent" props.cta2Href="/contact/"}
@@ -8,32 +8,45 @@
8
8
  "$head": [
9
9
  {
10
10
  "tagName": "meta",
11
- "attributes": { "name": "viewport", "content": "width=device-width, initial-scale=1" }
11
+ "attributes": {
12
+ "name": "viewport",
13
+ "content": "width=device-width, initial-scale=1"
14
+ }
12
15
  },
13
16
  {
14
17
  "tagName": "meta",
15
18
  "attributes": {
16
19
  "name": "description",
17
- "content": "Northshore Realty helps buyers and sellers find their place on the north shore — browse current listings, filter by price and bedrooms, and work with agents who know the neighborhood."
20
+ "content": "Northshore Realty is the north shore's property index — search live listings by neighborhood, price, and bedrooms, then work with agents who actually live here."
18
21
  }
19
22
  },
20
23
  {
21
24
  "tagName": "link",
22
- "attributes": { "rel": "icon", "href": "/favicon.svg" }
25
+ "attributes": {
26
+ "rel": "icon",
27
+ "href": "/favicon.svg"
28
+ }
23
29
  },
24
30
  {
25
31
  "tagName": "link",
26
- "attributes": { "rel": "preconnect", "href": "https://fonts.googleapis.com" }
32
+ "attributes": {
33
+ "rel": "preconnect",
34
+ "href": "https://fonts.googleapis.com"
35
+ }
27
36
  },
28
37
  {
29
38
  "tagName": "link",
30
- "attributes": { "rel": "preconnect", "href": "https://fonts.gstatic.com", "crossorigin": "" }
39
+ "attributes": {
40
+ "rel": "preconnect",
41
+ "href": "https://fonts.gstatic.com",
42
+ "crossorigin": ""
43
+ }
31
44
  },
32
45
  {
33
46
  "tagName": "link",
34
47
  "attributes": {
35
48
  "rel": "stylesheet",
36
- "href": "https://fonts.googleapis.com/css2?family=Manrope:wght@500;600;700;800&display=swap"
49
+ "href": "https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&family=Spectral:ital,wght@0,400;0,500;0,600;1,400;1,500&display=swap"
37
50
  }
38
51
  }
39
52
  ],
@@ -44,27 +57,45 @@
44
57
  "--sm": "(max-width: 640px)"
45
58
  },
46
59
  "style": {
47
- "--color-primary": "#0e7490",
48
- "--color-primary-hover": "#155e75",
49
- "--color-navy": "#1e3a8a",
50
- "--color-bg-dark": "#0f172a",
51
- "--color-bg-cream": "#f1f5f9",
60
+ "--color-primary": "#0f766e",
61
+ "--color-primary-hover": "#115e59",
62
+ "--color-accent": "#0d9488",
63
+ "--color-accent-bright": "#14b8a6",
64
+ "--color-accent-soft": "#ccfbf1",
65
+ "--color-teal-tint": "#f0fdfa",
66
+ "--color-ink": "#0b1220",
67
+ "--color-navy": "#0f172a",
68
+ "--color-bg-dark": "#0b1220",
69
+ "--color-bg-ink-soft": "#152238",
70
+ "--color-bg-cream": "#f6f8fb",
71
+ "--color-bg-tint": "#eef2f7",
52
72
  "--color-bg-white": "#ffffff",
53
73
  "--color-text-primary": "#0f172a",
54
- "--color-text-white": "#ffffff",
74
+ "--color-text-secondary": "#334155",
55
75
  "--color-text-muted": "#64748b",
56
- "--color-border": "#e2e8f0",
57
- "--color-accent": "#0e7490",
58
- "--font-heading": "'Manrope', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
59
- "--max-width": "1200px",
60
- "--max-width-narrow": "820px",
61
- "--radius": "0.5rem",
76
+ "--color-text-white": "#ffffff",
77
+ "--color-border": "#e4e9f0",
78
+ "--color-border-strong": "#cbd5e1",
79
+ "--color-status-new": "#0d9488",
80
+ "--font-display": "'Spectral', Georgia, 'Times New Roman', serif",
81
+ "--font-heading": "'Plus Jakarta Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
82
+ "--font-ui": "'Plus Jakarta Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
83
+ "--font-body": "'Plus Jakarta Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
84
+ "--max-width": "1240px",
85
+ "--max-width-narrow": "760px",
86
+ "--radius": "0.75rem",
87
+ "--radius-sm": "0.5rem",
88
+ "--radius-lg": "1.25rem",
89
+ "--shadow-card": "0 1px 2px rgba(15,23,42,0.04), 0 10px 26px -14px rgba(15,23,42,0.18)",
90
+ "--shadow-float": "0 30px 70px -28px rgba(11,18,32,0.42)",
62
91
  "margin": "0",
63
92
  "padding": "0",
64
- "fontFamily": "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
93
+ "fontFamily": "var(--font-body)",
94
+ "fontSize": "17px",
65
95
  "lineHeight": "1.6",
66
96
  "color": "var(--color-text-primary)",
67
- "backgroundColor": "var(--color-bg-white)"
97
+ "backgroundColor": "var(--color-bg-white)",
98
+ "WebkitFontSmoothing": "antialiased"
68
99
  },
69
100
  "imports": {
70
101
  "Markdown": "@jxsuite/parser/Markdown.class.json",
@@ -76,7 +107,12 @@
76
107
  "optimize": true,
77
108
  "widths": [320, 640, 960, 1280, 1920],
78
109
  "formats": ["webp", "avif"],
79
- "quality": { "webp": 80, "avif": 65, "jpeg": 80, "png": 80 },
110
+ "quality": {
111
+ "webp": 80,
112
+ "avif": 65,
113
+ "jpeg": 80,
114
+ "png": 80
115
+ },
80
116
  "sizes": "(max-width: 768px) 100vw, 50vw",
81
117
  "lazyLoad": true
82
118
  },
@@ -87,15 +123,37 @@
87
123
  "schema": {
88
124
  "type": "object",
89
125
  "properties": {
90
- "Title": { "type": "string" },
91
- "slug": { "type": "string" },
92
- "price": { "type": "number" },
93
- "beds": { "type": "number" },
94
- "baths": { "type": "number" },
95
- "sqft": { "type": "number" },
96
- "city": { "type": "string" },
97
- "image": { "type": "string", "format": "image" },
98
- "order": { "type": "number" }
126
+ "Title": {
127
+ "type": "string"
128
+ },
129
+ "slug": {
130
+ "type": "string"
131
+ },
132
+ "price": {
133
+ "type": "number"
134
+ },
135
+ "beds": {
136
+ "type": "number"
137
+ },
138
+ "baths": {
139
+ "type": "number"
140
+ },
141
+ "sqft": {
142
+ "type": "number"
143
+ },
144
+ "city": {
145
+ "type": "string"
146
+ },
147
+ "image": {
148
+ "type": "string",
149
+ "format": "image"
150
+ },
151
+ "status": {
152
+ "type": "string"
153
+ },
154
+ "order": {
155
+ "type": "number"
156
+ }
99
157
  },
100
158
  "required": ["Title", "slug"]
101
159
  }
@@ -1,5 +1,11 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
2
- <rect width="32" height="32" rx="7" fill="#0e7490"/>
2
+ <defs>
3
+ <linearGradient id="g" x1="0" y1="0" x2="32" y2="32" gradientUnits="userSpaceOnUse">
4
+ <stop offset="0" stop-color="#14b8a6"/>
5
+ <stop offset="1" stop-color="#0f766e"/>
6
+ </linearGradient>
7
+ </defs>
8
+ <rect width="32" height="32" rx="7" fill="url(#g)"/>
3
9
  <path d="M16 6L25 13.5V25a1 1 0 0 1-1 1h-5v-6h-6v6H8a1 1 0 0 1-1-1V13.5z" fill="none" stroke="#fff" stroke-width="1.8" stroke-linejoin="round"/>
4
10
  <path d="M5 14.5 16 6l11 8.5" fill="none" stroke="#fff" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/>
5
11
  </svg>
@@ -1,41 +1,116 @@
1
1
  {
2
2
  "tagName": "bit-cta",
3
3
  "state": {
4
+ "eyebrow": "Reservations",
4
5
  "heading": "",
6
+ "headingAccent": "",
5
7
  "text": "",
6
8
  "cta": "Reserve a Table",
7
9
  "ctaHref": "/contact/"
8
10
  },
9
11
  "style": {
10
12
  "display": "block",
11
- "backgroundColor": "var(--color-bg-dark)",
13
+ "position": "relative",
14
+ "overflow": "hidden",
15
+ "backgroundColor": "var(--color-espresso)",
12
16
  "color": "var(--color-text-white)",
13
- "padding": "clamp(3.5rem, 8vw, 5.5rem) 1.5rem",
17
+ "padding": "clamp(3.5rem, 9vw, 6rem) 1.5rem",
14
18
  "textAlign": "center"
15
19
  },
16
20
  "children": [
17
21
  {
18
22
  "tagName": "div",
19
- "style": { "maxWidth": "var(--max-width-narrow)", "margin": "0 auto" },
23
+ "style": {
24
+ "position": "absolute",
25
+ "inset": "0",
26
+ "background": "radial-gradient(ellipse 55% 70% at 50% 120%, rgba(189,90,52,0.34), transparent 65%)",
27
+ "pointerEvents": "none"
28
+ }
29
+ },
30
+ {
31
+ "tagName": "div",
32
+ "style": {
33
+ "position": "relative",
34
+ "zIndex": "10",
35
+ "maxWidth": "var(--max-width-narrow)",
36
+ "margin": "0 auto"
37
+ },
20
38
  "children": [
39
+ {
40
+ "tagName": "div",
41
+ "style": {
42
+ "display": "${state.eyebrow ? 'flex' : 'none'}",
43
+ "alignItems": "center",
44
+ "justifyContent": "center",
45
+ "gap": "0.85rem",
46
+ "marginBottom": "1.25rem"
47
+ },
48
+ "children": [
49
+ {
50
+ "tagName": "span",
51
+ "style": {
52
+ "width": "2.25rem",
53
+ "height": "1px",
54
+ "backgroundColor": "var(--color-amber)"
55
+ }
56
+ },
57
+ {
58
+ "tagName": "p",
59
+ "style": {
60
+ "margin": "0",
61
+ "fontFamily": "var(--font-body)",
62
+ "textTransform": "uppercase",
63
+ "letterSpacing": "0.24em",
64
+ "fontSize": "0.74rem",
65
+ "fontWeight": "700",
66
+ "color": "var(--color-amber)"
67
+ },
68
+ "textContent": "${state.eyebrow}"
69
+ },
70
+ {
71
+ "tagName": "span",
72
+ "style": {
73
+ "width": "2.25rem",
74
+ "height": "1px",
75
+ "backgroundColor": "var(--color-amber)"
76
+ }
77
+ }
78
+ ]
79
+ },
21
80
  {
22
81
  "tagName": "h2",
23
82
  "style": {
24
83
  "fontFamily": "var(--font-heading)",
25
- "fontSize": "clamp(1.9rem, 4vw, 2.75rem)",
84
+ "fontSize": "clamp(2.1rem, 5vw, 3.25rem)",
26
85
  "fontWeight": "700",
27
- "lineHeight": "1.15",
28
- "margin": "0 0 1rem"
86
+ "lineHeight": "1.1",
87
+ "letterSpacing": "-0.02em",
88
+ "margin": "0 0 1.1rem",
89
+ "color": "var(--color-text-white)"
29
90
  },
30
- "textContent": "${state.heading}"
91
+ "children": [
92
+ { "tagName": "span", "textContent": "${state.heading}" },
93
+ {
94
+ "tagName": "span",
95
+ "style": {
96
+ "display": "${state.headingAccent ? 'inline' : 'none'}",
97
+ "fontStyle": "italic",
98
+ "fontWeight": "500",
99
+ "color": "var(--color-amber)"
100
+ },
101
+ "textContent": " ${state.headingAccent}"
102
+ }
103
+ ]
31
104
  },
32
105
  {
33
106
  "tagName": "p",
34
107
  "style": {
35
- "fontSize": "1.1rem",
108
+ "fontFamily": "var(--font-body)",
109
+ "fontSize": "1.12rem",
36
110
  "lineHeight": "1.7",
37
- "opacity": "0.85",
38
- "margin": "0 0 2rem"
111
+ "opacity": "0.82",
112
+ "margin": "0 auto 2rem",
113
+ "maxWidth": "50ch"
39
114
  },
40
115
  "textContent": "${state.text}"
41
116
  },
@@ -46,10 +121,13 @@
46
121
  "display": "inline-block",
47
122
  "backgroundColor": "var(--color-primary)",
48
123
  "color": "var(--color-text-white)",
49
- "padding": "0.9rem 2.25rem",
50
- "borderRadius": "var(--radius)",
51
- "fontSize": "1.05rem",
52
- "fontWeight": "600",
124
+ "padding": "0.95rem 2.4rem",
125
+ "borderRadius": "999px",
126
+ "fontFamily": "var(--font-body)",
127
+ "fontSize": "0.85rem",
128
+ "fontWeight": "700",
129
+ "textTransform": "uppercase",
130
+ "letterSpacing": "0.14em",
53
131
  "textDecoration": "none",
54
132
  "transition": "background-color 0.15s",
55
133
  ":hover": { "backgroundColor": "var(--color-primary-hover)" }