@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
@@ -21,11 +21,11 @@
21
21
  },
22
22
  "children": [
23
23
  {
24
- "tagName": "article",
24
+ "tagName": "div",
25
25
  "style": {
26
26
  "maxWidth": "var(--max-width)",
27
27
  "margin": "0 auto",
28
- "padding": "2.5rem 1.5rem clamp(3rem, 6vw, 4.5rem)"
28
+ "padding": "1.75rem 1.5rem clamp(3rem, 6vw, 4.5rem)"
29
29
  },
30
30
  "children": [
31
31
  {
@@ -35,11 +35,12 @@
35
35
  "display": "inline-flex",
36
36
  "alignItems": "center",
37
37
  "gap": "0.5rem",
38
- "color": "var(--color-primary)",
38
+ "color": "var(--color-text-muted)",
39
39
  "textDecoration": "none",
40
- "fontWeight": "700",
41
- "marginBottom": "1.75rem",
42
- ":hover": { "textDecoration": "underline" }
40
+ "fontWeight": "600",
41
+ "fontSize": "0.9rem",
42
+ "marginBottom": "1.5rem",
43
+ ":hover": { "color": "var(--color-primary)" }
43
44
  },
44
45
  "textContent": "← All listings"
45
46
  },
@@ -58,28 +59,68 @@
58
59
  "tagName": "div",
59
60
  "children": [
60
61
  {
61
- "tagName": "p",
62
+ "tagName": "div",
62
63
  "style": {
63
64
  "display": "flex",
64
65
  "alignItems": "center",
65
- "gap": "0.4rem",
66
- "margin": "0 0 0.5rem",
67
- "color": "var(--color-text-muted)",
68
- "fontWeight": "600"
66
+ "gap": "0.75rem",
67
+ "marginBottom": "0.75rem"
69
68
  },
70
69
  "children": [
71
- { "tagName": "span", "textContent": "📍" },
72
- { "tagName": "span", "textContent": "${state.listing.data.city}" }
70
+ {
71
+ "tagName": "span",
72
+ "style": {
73
+ "display": "inline-flex",
74
+ "alignItems": "center",
75
+ "gap": "0.4rem",
76
+ "backgroundColor": "var(--color-teal-tint)",
77
+ "color": "var(--color-primary)",
78
+ "fontWeight": "700",
79
+ "fontSize": "0.74rem",
80
+ "letterSpacing": "0.04em",
81
+ "textTransform": "uppercase",
82
+ "padding": "0.3rem 0.7rem",
83
+ "borderRadius": "999px",
84
+ "border": "1px solid var(--color-accent-soft)"
85
+ },
86
+ "children": [
87
+ {
88
+ "tagName": "span",
89
+ "style": {
90
+ "width": "0.4rem",
91
+ "height": "0.4rem",
92
+ "borderRadius": "999px",
93
+ "backgroundColor": "var(--color-accent-bright)"
94
+ }
95
+ },
96
+ { "tagName": "span", "textContent": "${state.listing.data.status}" }
97
+ ]
98
+ },
99
+ {
100
+ "tagName": "span",
101
+ "style": {
102
+ "display": "inline-flex",
103
+ "alignItems": "center",
104
+ "gap": "0.35rem",
105
+ "color": "var(--color-text-muted)",
106
+ "fontWeight": "600",
107
+ "fontSize": "0.92rem"
108
+ },
109
+ "children": [
110
+ { "tagName": "span", "textContent": "📍" },
111
+ { "tagName": "span", "textContent": "${state.listing.data.city}" }
112
+ ]
113
+ }
73
114
  ]
74
115
  },
75
116
  {
76
117
  "tagName": "h1",
77
118
  "style": {
78
- "fontFamily": "var(--font-heading)",
119
+ "fontFamily": "var(--font-display)",
79
120
  "fontSize": "clamp(2rem, 4vw, 3rem)",
80
- "fontWeight": "800",
81
- "letterSpacing": "-0.03em",
82
- "lineHeight": "1.1",
121
+ "fontWeight": "500",
122
+ "letterSpacing": "-0.02em",
123
+ "lineHeight": "1.05",
83
124
  "margin": "0",
84
125
  "color": "var(--color-text-primary)"
85
126
  },
@@ -89,14 +130,32 @@
89
130
  },
90
131
  {
91
132
  "tagName": "div",
92
- "style": {
93
- "fontFamily": "var(--font-heading)",
94
- "fontSize": "clamp(1.75rem, 3.5vw, 2.5rem)",
95
- "fontWeight": "800",
96
- "color": "var(--color-primary)",
97
- "whiteSpace": "nowrap"
98
- },
99
- "textContent": "$${Number(state.listing.data.price).toLocaleString('en-US')}"
133
+ "style": { "textAlign": "right" },
134
+ "children": [
135
+ {
136
+ "tagName": "div",
137
+ "style": {
138
+ "fontFamily": "var(--font-heading)",
139
+ "fontSize": "clamp(1.75rem, 3.5vw, 2.5rem)",
140
+ "fontWeight": "800",
141
+ "letterSpacing": "-0.02em",
142
+ "color": "var(--color-text-primary)",
143
+ "whiteSpace": "nowrap",
144
+ "fontVariantNumeric": "tabular-nums"
145
+ },
146
+ "textContent": "$${Number(state.listing.data.price).toLocaleString('en-US')}"
147
+ },
148
+ {
149
+ "tagName": "div",
150
+ "style": {
151
+ "fontSize": "0.85rem",
152
+ "color": "var(--color-text-muted)",
153
+ "fontWeight": "600",
154
+ "fontVariantNumeric": "tabular-nums"
155
+ },
156
+ "textContent": "$${Math.round(Number(state.listing.data.price)/Number(state.listing.data.sqft)).toLocaleString('en-US')} / sqft"
157
+ }
158
+ ]
100
159
  }
101
160
  ]
102
161
  },
@@ -116,7 +175,7 @@
116
175
  "attributes": {
117
176
  "src": "${state.listing.data.image}",
118
177
  "alt": "${state.listing.data.Title}",
119
- "loading": "lazy"
178
+ "loading": "eager"
120
179
  },
121
180
  "style": {
122
181
  "width": "100%",
@@ -124,8 +183,8 @@
124
183
  "gridRow": "span 2",
125
184
  "objectFit": "cover",
126
185
  "borderRadius": "var(--radius)",
127
- "minHeight": "280px",
128
- "@--sm": { "gridRow": "auto", "minHeight": "220px" }
186
+ "minHeight": "300px",
187
+ "@--sm": { "gridRow": "auto", "minHeight": "230px" }
129
188
  }
130
189
  },
131
190
  {
@@ -140,7 +199,7 @@
140
199
  "height": "100%",
141
200
  "objectFit": "cover",
142
201
  "borderRadius": "var(--radius)",
143
- "minHeight": "135px"
202
+ "minHeight": "145px"
144
203
  }
145
204
  },
146
205
  {
@@ -155,7 +214,7 @@
155
214
  "height": "100%",
156
215
  "objectFit": "cover",
157
216
  "borderRadius": "var(--radius)",
158
- "minHeight": "135px"
217
+ "minHeight": "145px"
159
218
  }
160
219
  }
161
220
  ]
@@ -164,153 +223,394 @@
164
223
  "tagName": "div",
165
224
  "style": {
166
225
  "display": "grid",
167
- "gridTemplateColumns": "repeat(4, 1fr)",
168
- "gap": "1rem",
169
- "padding": "1.5rem",
170
- "backgroundColor": "var(--color-bg-cream)",
171
- "border": "1px solid var(--color-border)",
172
- "borderRadius": "var(--radius)",
173
- "marginBottom": "2.5rem",
174
- "@--sm": { "gridTemplateColumns": "repeat(2, 1fr)" }
226
+ "gridTemplateColumns": "1.6fr 1fr",
227
+ "gap": "clamp(2rem, 4vw, 3rem)",
228
+ "alignItems": "start",
229
+ "@--md": { "gridTemplateColumns": "1fr" }
175
230
  },
176
231
  "children": [
177
232
  {
178
233
  "tagName": "div",
179
- "style": { "textAlign": "center" },
180
234
  "children": [
181
235
  {
182
236
  "tagName": "div",
183
237
  "style": {
184
- "fontFamily": "var(--font-heading)",
185
- "fontSize": "1.6rem",
186
- "fontWeight": "800",
187
- "color": "var(--color-text-primary)"
238
+ "display": "grid",
239
+ "gridTemplateColumns": "repeat(3, 1fr)",
240
+ "gap": "0",
241
+ "border": "1px solid var(--color-border)",
242
+ "borderRadius": "var(--radius)",
243
+ "overflow": "hidden",
244
+ "marginBottom": "2.5rem",
245
+ "@--sm": { "gridTemplateColumns": "repeat(2, 1fr)" }
188
246
  },
189
- "textContent": "${state.listing.data.beds}"
247
+ "children": [
248
+ {
249
+ "tagName": "div",
250
+ "style": {
251
+ "padding": "1.25rem",
252
+ "borderRight": "1px solid var(--color-border)",
253
+ "borderBottom": "1px solid var(--color-border)"
254
+ },
255
+ "children": [
256
+ {
257
+ "tagName": "div",
258
+ "style": {
259
+ "fontFamily": "var(--font-heading)",
260
+ "fontSize": "1.4rem",
261
+ "fontWeight": "800",
262
+ "color": "var(--color-text-primary)",
263
+ "fontVariantNumeric": "tabular-nums"
264
+ },
265
+ "textContent": "${state.listing.data.beds}"
266
+ },
267
+ {
268
+ "tagName": "div",
269
+ "style": {
270
+ "fontSize": "0.8rem",
271
+ "color": "var(--color-text-muted)",
272
+ "fontWeight": "600",
273
+ "textTransform": "uppercase",
274
+ "letterSpacing": "0.05em",
275
+ "marginTop": "0.2rem"
276
+ },
277
+ "textContent": "Bedrooms"
278
+ }
279
+ ]
280
+ },
281
+ {
282
+ "tagName": "div",
283
+ "style": {
284
+ "padding": "1.25rem",
285
+ "borderRight": "1px solid var(--color-border)",
286
+ "borderBottom": "1px solid var(--color-border)"
287
+ },
288
+ "children": [
289
+ {
290
+ "tagName": "div",
291
+ "style": {
292
+ "fontFamily": "var(--font-heading)",
293
+ "fontSize": "1.4rem",
294
+ "fontWeight": "800",
295
+ "color": "var(--color-text-primary)",
296
+ "fontVariantNumeric": "tabular-nums"
297
+ },
298
+ "textContent": "${state.listing.data.baths}"
299
+ },
300
+ {
301
+ "tagName": "div",
302
+ "style": {
303
+ "fontSize": "0.8rem",
304
+ "color": "var(--color-text-muted)",
305
+ "fontWeight": "600",
306
+ "textTransform": "uppercase",
307
+ "letterSpacing": "0.05em",
308
+ "marginTop": "0.2rem"
309
+ },
310
+ "textContent": "Bathrooms"
311
+ }
312
+ ]
313
+ },
314
+ {
315
+ "tagName": "div",
316
+ "style": {
317
+ "padding": "1.25rem",
318
+ "borderBottom": "1px solid var(--color-border)"
319
+ },
320
+ "children": [
321
+ {
322
+ "tagName": "div",
323
+ "style": {
324
+ "fontFamily": "var(--font-heading)",
325
+ "fontSize": "1.4rem",
326
+ "fontWeight": "800",
327
+ "color": "var(--color-text-primary)",
328
+ "fontVariantNumeric": "tabular-nums"
329
+ },
330
+ "textContent": "${Number(state.listing.data.sqft).toLocaleString('en-US')}"
331
+ },
332
+ {
333
+ "tagName": "div",
334
+ "style": {
335
+ "fontSize": "0.8rem",
336
+ "color": "var(--color-text-muted)",
337
+ "fontWeight": "600",
338
+ "textTransform": "uppercase",
339
+ "letterSpacing": "0.05em",
340
+ "marginTop": "0.2rem"
341
+ },
342
+ "textContent": "Sq ft"
343
+ }
344
+ ]
345
+ },
346
+ {
347
+ "tagName": "div",
348
+ "style": {
349
+ "padding": "1.25rem",
350
+ "borderRight": "1px solid var(--color-border)"
351
+ },
352
+ "children": [
353
+ {
354
+ "tagName": "div",
355
+ "style": {
356
+ "fontFamily": "var(--font-heading)",
357
+ "fontSize": "1.4rem",
358
+ "fontWeight": "800",
359
+ "color": "var(--color-primary)",
360
+ "fontVariantNumeric": "tabular-nums"
361
+ },
362
+ "textContent": "$${Math.round(Number(state.listing.data.price)/Number(state.listing.data.sqft)).toLocaleString('en-US')}"
363
+ },
364
+ {
365
+ "tagName": "div",
366
+ "style": {
367
+ "fontSize": "0.8rem",
368
+ "color": "var(--color-text-muted)",
369
+ "fontWeight": "600",
370
+ "textTransform": "uppercase",
371
+ "letterSpacing": "0.05em",
372
+ "marginTop": "0.2rem"
373
+ },
374
+ "textContent": "Per sq ft"
375
+ }
376
+ ]
377
+ },
378
+ {
379
+ "tagName": "div",
380
+ "style": {
381
+ "padding": "1.25rem",
382
+ "borderRight": "1px solid var(--color-border)"
383
+ },
384
+ "children": [
385
+ {
386
+ "tagName": "div",
387
+ "style": {
388
+ "fontFamily": "var(--font-heading)",
389
+ "fontSize": "1.4rem",
390
+ "fontWeight": "800",
391
+ "color": "var(--color-text-primary)"
392
+ },
393
+ "textContent": "Single-family"
394
+ },
395
+ {
396
+ "tagName": "div",
397
+ "style": {
398
+ "fontSize": "0.8rem",
399
+ "color": "var(--color-text-muted)",
400
+ "fontWeight": "600",
401
+ "textTransform": "uppercase",
402
+ "letterSpacing": "0.05em",
403
+ "marginTop": "0.2rem"
404
+ },
405
+ "textContent": "Property type"
406
+ }
407
+ ]
408
+ },
409
+ {
410
+ "tagName": "div",
411
+ "style": { "padding": "1.25rem" },
412
+ "children": [
413
+ {
414
+ "tagName": "div",
415
+ "style": {
416
+ "fontFamily": "var(--font-heading)",
417
+ "fontSize": "1.4rem",
418
+ "fontWeight": "800",
419
+ "color": "var(--color-text-primary)"
420
+ },
421
+ "textContent": "${state.listing.data.city}"
422
+ },
423
+ {
424
+ "tagName": "div",
425
+ "style": {
426
+ "fontSize": "0.8rem",
427
+ "color": "var(--color-text-muted)",
428
+ "fontWeight": "600",
429
+ "textTransform": "uppercase",
430
+ "letterSpacing": "0.05em",
431
+ "marginTop": "0.2rem"
432
+ },
433
+ "textContent": "Location"
434
+ }
435
+ ]
436
+ }
437
+ ]
190
438
  },
191
439
  {
192
- "tagName": "div",
440
+ "tagName": "h2",
193
441
  "style": {
194
- "fontSize": "0.85rem",
195
- "color": "var(--color-text-muted)",
196
- "fontWeight": "600"
442
+ "fontFamily": "var(--font-display)",
443
+ "fontSize": "1.6rem",
444
+ "fontWeight": "500",
445
+ "letterSpacing": "-0.01em",
446
+ "margin": "0 0 1rem"
197
447
  },
198
- "textContent": "Bedrooms"
199
- }
200
- ]
201
- },
202
- {
203
- "tagName": "div",
204
- "style": { "textAlign": "center" },
205
- "children": [
448
+ "textContent": "About this home"
449
+ },
206
450
  {
207
- "tagName": "div",
451
+ "tagName": "p",
208
452
  "style": {
209
- "fontFamily": "var(--font-heading)",
210
- "fontSize": "1.6rem",
211
- "fontWeight": "800",
212
- "color": "var(--color-text-primary)"
453
+ "fontSize": "1.08rem",
454
+ "lineHeight": "1.8",
455
+ "color": "var(--color-text-secondary)",
456
+ "margin": "0 0 1rem"
213
457
  },
214
- "textContent": "${state.listing.data.baths}"
458
+ "textContent": "Set in the heart of ${state.listing.data.city}, ${state.listing.data.Title} offers ${state.listing.data.beds} bedrooms and ${state.listing.data.baths} bathrooms across ${Number(state.listing.data.sqft).toLocaleString('en-US')} thoughtfully finished square feet. Sunlit living spaces, an updated kitchen, and easy access to schools, parks, and the waterfront make this a home you can move right into."
215
459
  },
216
460
  {
217
- "tagName": "div",
461
+ "tagName": "p",
218
462
  "style": {
219
- "fontSize": "0.85rem",
463
+ "fontSize": "1.08rem",
464
+ "lineHeight": "1.8",
220
465
  "color": "var(--color-text-muted)",
221
- "fontWeight": "600"
466
+ "margin": "0"
222
467
  },
223
- "textContent": "Bathrooms"
468
+ "textContent": "Want to see it in person? Our team can arrange a private showing this week."
224
469
  }
225
470
  ]
226
471
  },
227
472
  {
228
- "tagName": "div",
229
- "style": { "textAlign": "center" },
473
+ "tagName": "aside",
474
+ "style": {
475
+ "position": "sticky",
476
+ "top": "5rem",
477
+ "backgroundColor": "var(--color-bg-white)",
478
+ "border": "1px solid var(--color-border)",
479
+ "borderRadius": "var(--radius-lg)",
480
+ "boxShadow": "var(--shadow-card)",
481
+ "padding": "1.5rem",
482
+ "@--md": { "position": "static" }
483
+ },
230
484
  "children": [
231
485
  {
232
486
  "tagName": "div",
233
487
  "style": {
234
488
  "fontFamily": "var(--font-heading)",
235
- "fontSize": "1.6rem",
489
+ "fontSize": "1.75rem",
236
490
  "fontWeight": "800",
237
- "color": "var(--color-text-primary)"
491
+ "letterSpacing": "-0.02em",
492
+ "color": "var(--color-text-primary)",
493
+ "fontVariantNumeric": "tabular-nums"
238
494
  },
239
- "textContent": "${Number(state.listing.data.sqft).toLocaleString('en-US')}"
495
+ "textContent": "$${Number(state.listing.data.price).toLocaleString('en-US')}"
240
496
  },
241
497
  {
242
498
  "tagName": "div",
243
499
  "style": {
244
- "fontSize": "0.85rem",
245
- "color": "var(--color-text-muted)",
246
- "fontWeight": "600"
500
+ "display": "flex",
501
+ "gap": "0.75rem",
502
+ "margin": "0.75rem 0 1.25rem",
503
+ "fontSize": "0.9rem",
504
+ "fontWeight": "600",
505
+ "color": "var(--color-text-secondary)",
506
+ "fontVariantNumeric": "tabular-nums"
247
507
  },
248
- "textContent": "Square feet"
249
- }
250
- ]
251
- },
252
- {
253
- "tagName": "div",
254
- "style": { "textAlign": "center" },
255
- "children": [
508
+ "children": [
509
+ { "tagName": "span", "textContent": "${state.listing.data.beds} bd" },
510
+ {
511
+ "tagName": "span",
512
+ "style": { "color": "var(--color-border-strong)" },
513
+ "textContent": "·"
514
+ },
515
+ { "tagName": "span", "textContent": "${state.listing.data.baths} ba" },
516
+ {
517
+ "tagName": "span",
518
+ "style": { "color": "var(--color-border-strong)" },
519
+ "textContent": "·"
520
+ },
521
+ {
522
+ "tagName": "span",
523
+ "textContent": "${Number(state.listing.data.sqft).toLocaleString('en-US')} sqft"
524
+ }
525
+ ]
526
+ },
527
+ {
528
+ "tagName": "a",
529
+ "attributes": { "href": "/contact/" },
530
+ "style": {
531
+ "display": "block",
532
+ "textAlign": "center",
533
+ "backgroundColor": "var(--color-primary)",
534
+ "color": "var(--color-text-white)",
535
+ "padding": "0.85rem 1.25rem",
536
+ "borderRadius": "999px",
537
+ "fontWeight": "700",
538
+ "fontSize": "0.98rem",
539
+ "textDecoration": "none",
540
+ "transition": "background-color 0.15s",
541
+ ":hover": { "backgroundColor": "var(--color-primary-hover)" }
542
+ },
543
+ "textContent": "Book a private showing"
544
+ },
256
545
  {
257
546
  "tagName": "div",
258
547
  "style": {
259
- "fontFamily": "var(--font-heading)",
260
- "fontSize": "1.6rem",
261
- "fontWeight": "800",
262
- "color": "var(--color-text-primary)"
548
+ "display": "flex",
549
+ "alignItems": "center",
550
+ "gap": "0.85rem",
551
+ "marginTop": "1.5rem",
552
+ "paddingTop": "1.5rem",
553
+ "borderTop": "1px solid var(--color-border)"
263
554
  },
264
- "textContent": "${state.listing.data.city}"
555
+ "children": [
556
+ {
557
+ "tagName": "img",
558
+ "attributes": {
559
+ "src": "/images/agent-1.jpg",
560
+ "alt": "Priya Anand",
561
+ "loading": "lazy",
562
+ "width": "56",
563
+ "height": "56"
564
+ },
565
+ "style": {
566
+ "width": "3.25rem",
567
+ "height": "3.25rem",
568
+ "borderRadius": "999px",
569
+ "objectFit": "cover"
570
+ }
571
+ },
572
+ {
573
+ "tagName": "div",
574
+ "children": [
575
+ {
576
+ "tagName": "div",
577
+ "style": { "fontWeight": "700", "fontSize": "0.95rem" },
578
+ "textContent": "Priya Anand"
579
+ },
580
+ {
581
+ "tagName": "div",
582
+ "style": { "fontSize": "0.82rem", "color": "var(--color-text-muted)" },
583
+ "textContent": "Principal Broker"
584
+ },
585
+ {
586
+ "tagName": "a",
587
+ "attributes": { "href": "tel:+15552047781" },
588
+ "style": {
589
+ "fontSize": "0.85rem",
590
+ "color": "var(--color-primary)",
591
+ "fontWeight": "600",
592
+ "textDecoration": "none",
593
+ "fontVariantNumeric": "tabular-nums"
594
+ },
595
+ "textContent": "(555) 204-7781"
596
+ }
597
+ ]
598
+ }
599
+ ]
265
600
  },
266
601
  {
267
602
  "tagName": "div",
268
603
  "style": {
269
- "fontSize": "0.85rem",
604
+ "marginTop": "1.25rem",
605
+ "fontSize": "0.78rem",
270
606
  "color": "var(--color-text-muted)",
271
- "fontWeight": "600"
607
+ "lineHeight": "1.5"
272
608
  },
273
- "textContent": "Location"
609
+ "textContent": "Listed by Northshore Realty · Equal Housing Opportunity"
274
610
  }
275
611
  ]
276
612
  }
277
613
  ]
278
- },
279
- {
280
- "tagName": "section",
281
- "style": { "maxWidth": "var(--max-width-narrow)" },
282
- "children": [
283
- {
284
- "tagName": "h2",
285
- "style": {
286
- "fontFamily": "var(--font-heading)",
287
- "fontSize": "1.5rem",
288
- "fontWeight": "700",
289
- "margin": "0 0 1rem"
290
- },
291
- "textContent": "About this home"
292
- },
293
- {
294
- "tagName": "p",
295
- "style": {
296
- "fontSize": "1.08rem",
297
- "lineHeight": "1.8",
298
- "color": "var(--color-text-primary)",
299
- "margin": "0 0 1rem"
300
- },
301
- "textContent": "Set in the heart of ${state.listing.data.city}, ${state.listing.data.Title} offers ${state.listing.data.beds} bedrooms and ${state.listing.data.baths} bathrooms across ${Number(state.listing.data.sqft).toLocaleString('en-US')} thoughtfully finished square feet. Sunlit living spaces, an updated kitchen, and easy access to schools, parks, and the waterfront make this a home you can move right into."
302
- },
303
- {
304
- "tagName": "p",
305
- "style": {
306
- "fontSize": "1.08rem",
307
- "lineHeight": "1.8",
308
- "color": "var(--color-text-muted)",
309
- "margin": "0"
310
- },
311
- "textContent": "Want to see it in person? Our team can arrange a private showing this week."
312
- }
313
- ]
314
614
  }
315
615
  ]
316
616
  },
@@ -319,8 +619,10 @@
319
619
  "$props": {
320
620
  "heading": "Book a private showing",
321
621
  "text": "Reach out and we'll set up a walkthrough of this home at a time that works for you.",
322
- "cta": "Contact an Agent",
323
- "ctaHref": "/contact/"
622
+ "cta": "Contact an agent",
623
+ "ctaHref": "/contact/",
624
+ "cta2": "Back to listings",
625
+ "cta2Href": "/listings/"
324
626
  }
325
627
  }
326
628
  ]