@jxsuite/starters 0.34.0 → 0.35.1

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
@@ -4,37 +4,59 @@
4
4
  "eyebrow": "",
5
5
  "heading": "",
6
6
  "subheading": "",
7
- "align": "center"
7
+ "align": "center",
8
+ "onDark": false
8
9
  },
9
10
  "style": {
10
11
  "display": "block",
11
12
  "maxWidth": "var(--max-width-narrow)",
12
- "margin": "0 auto 2.5rem",
13
+ "margin": "${state.align === 'left' ? '0 0 2.75rem' : '0 auto 2.75rem'}",
13
14
  "textAlign": "${state.align}"
14
15
  },
15
16
  "children": [
16
17
  {
17
- "tagName": "p",
18
+ "tagName": "div",
18
19
  "style": {
19
- "display": "${state.eyebrow ? 'block' : 'none'}",
20
- "textTransform": "uppercase",
21
- "letterSpacing": "0.16em",
22
- "fontSize": "0.8rem",
23
- "fontWeight": "600",
24
- "color": "var(--color-primary)",
25
- "margin": "0 0 0.75rem"
20
+ "display": "${state.eyebrow ? 'inline-flex' : 'none'}",
21
+ "alignItems": "center",
22
+ "gap": "0.55rem",
23
+ "marginBottom": "1rem"
26
24
  },
27
- "textContent": "${state.eyebrow}"
25
+ "children": [
26
+ {
27
+ "tagName": "span",
28
+ "style": {
29
+ "width": "1.6rem",
30
+ "height": "3px",
31
+ "borderRadius": "2px",
32
+ "background": "var(--grad-hot)"
33
+ }
34
+ },
35
+ {
36
+ "tagName": "span",
37
+ "style": {
38
+ "fontFamily": "var(--font-heading)",
39
+ "textTransform": "uppercase",
40
+ "letterSpacing": "0.16em",
41
+ "fontSize": "0.78rem",
42
+ "fontWeight": "700",
43
+ "color": "var(--color-primary)"
44
+ },
45
+ "textContent": "${state.eyebrow}"
46
+ }
47
+ ]
28
48
  },
29
49
  {
30
50
  "tagName": "h2",
31
51
  "style": {
32
- "fontFamily": "var(--font-heading)",
33
- "fontSize": "clamp(1.9rem, 4vw, 2.6rem)",
34
- "fontWeight": "700",
35
- "lineHeight": "1.15",
36
- "letterSpacing": "-0.02em",
37
- "margin": "0"
52
+ "fontFamily": "var(--font-display)",
53
+ "fontSize": "clamp(2.2rem, 5.2vw, 3.6rem)",
54
+ "fontWeight": "400",
55
+ "lineHeight": "0.98",
56
+ "letterSpacing": "0.01em",
57
+ "textTransform": "uppercase",
58
+ "margin": "0",
59
+ "color": "${state.onDark ? 'var(--color-text-white)' : 'var(--color-text-primary)'}"
38
60
  },
39
61
  "textContent": "${state.heading}"
40
62
  },
@@ -42,10 +64,12 @@
42
64
  "tagName": "p",
43
65
  "style": {
44
66
  "display": "${state.subheading ? 'block' : 'none'}",
45
- "fontSize": "1.1rem",
67
+ "fontSize": "1.12rem",
46
68
  "lineHeight": "1.7",
47
- "color": "var(--color-text-muted)",
48
- "margin": "1rem 0 0"
69
+ "fontWeight": "500",
70
+ "color": "${state.onDark ? 'rgba(255,255,255,0.75)' : 'var(--color-text-muted)'}",
71
+ "margin": "${state.align === 'left' ? '1.15rem 0 0' : '1.15rem auto 0'}",
72
+ "maxWidth": "54ch"
49
73
  },
50
74
  "textContent": "${state.subheading}"
51
75
  }
@@ -10,11 +10,17 @@ state:
10
10
  order: asc
11
11
  ---
12
12
 
13
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
14
- ::fs-section-header{props.eyebrow="Weekly schedule" props.heading="Find your class" props.subheading="From slow restorative flows to high-intensity circuits — here's everything on the mat this week."}
13
+ :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-blush)"}
14
+ ::fs-section-header{props.eyebrow="Weekly schedule" props.heading="Find your class" props.subheading="From slow restorative flows to high-intensity circuits — here's everything on the mat this week. Tap a style to filter."}
15
15
  :::::
16
16
 
17
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem"}
17
+ :::::section{style.padding="clamp(3rem, 7vw, 5rem) 1.5rem"}
18
+ ::fs-schedule
19
+ :::::
20
+
21
+ :::::section{style.padding="clamp(3rem, 7vw, 5rem) 1.5rem" style.backgroundColor="var(--color-bg-blush)"}
22
+ ::fs-section-header{props.eyebrow="The details" props.heading="Every class, up close" props.subheading="What to expect, who's teaching, and the level each session is built for."}
23
+
18
24
  ::::fs-class-grid
19
25
  :::Array{items.ref="#/state/schedule"}
20
26
  ::fs-class-card{props.name="${item.data.name}" props.level="${item.data.level}" props.time="${item.data.time}" props.instructor="${item.data.instructor}" props.focus="${item.data.focus}"}
@@ -22,7 +28,7 @@ state:
22
28
  ::::
23
29
  :::::
24
30
 
25
- :::::section{style.padding="clamp(1rem, 4vw, 3rem) 1.5rem clamp(3.5rem, 8vw, 6rem)" style.backgroundColor="var(--color-bg-cream)"}
31
+ :::::section{style.padding="clamp(3rem, 7vw, 5rem) 1.5rem"}
26
32
  ::fs-section-header{props.eyebrow="Good to know" props.heading="Before your first class"}
27
33
 
28
34
  ::::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"}
@@ -34,4 +40,4 @@ state:
34
40
  ::::
35
41
  :::::
36
42
 
37
- ::fs-cta{props.heading="Ready to roll out your mat?" props.text="Book your spot online in under a minute. First-timers get a free intro session." props.cta="Book a Class" props.ctaHref="/contact/"}
43
+ ::fs-cta{props.eyebrow="Spots fill fast" props.heading="Ready to roll out your mat?" props.text="Book your spot online in under a minute. First-timers always get a free intro session." props.cta="Book a Class" props.ctaHref="/contact/"}
@@ -2,41 +2,19 @@
2
2
  title: "Book a Class & Visit — Ember Yoga & Fitness"
3
3
  ---
4
4
 
5
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
6
- ::fs-section-header{props.eyebrow="Get started" props.heading="Book a class & say hello" props.subheading="Reserve your spot below, or drop by the studio on Willow Avenue. First class is always free."}
5
+ :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-blush)"}
6
+ ::fs-section-header{props.eyebrow="Get started" props.heading="Book a class & say hello" props.subheading="Reserve your spot below, or drop by the studio on Willow Avenue. Your first class is always free."}
7
7
  :::::
8
8
 
9
- ::::::section{style.maxWidth="var(--max-width)" style.margin="0 auto" style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem"}
10
- :::::div{style.display="grid" style.gridTemplateColumns="1.2fr 1fr" style.gap="clamp(2rem, 5vw, 3.5rem)" style.--md.gridTemplateColumns="1fr"}
9
+ ::::::section{style.maxWidth="var(--max-width)" style.margin="0 auto" style.padding="clamp(3rem, 7vw, 5rem) 1.5rem"}
10
+ :::::div{style.display="grid" style.gridTemplateColumns="1.15fr 0.85fr" style.gap="clamp(2rem, 5vw, 3.5rem)" style.alignItems="start" style.--md.gridTemplateColumns="1fr"}
11
11
 
12
- ::::form{action="#" method="post" style.display="grid" style.gap="1rem" style.alignContent="start"}
12
+ ::fs-booking{props.heading="Reserve your spot"}
13
13
 
14
- ### Reserve your spot
15
-
16
- ::input{type="text" name="name" placeholder="Your name" required="true" aria-label="Your name" style.width="100%" style.padding="0.75rem 0.9rem" style.border="1px solid var(--color-border)" style.borderRadius="var(--radius)" style.fontSize="1rem" style.fontFamily="inherit"}
17
-
18
- ::input{type="email" name="email" placeholder="Email address" required="true" aria-label="Email address" style.width="100%" style.padding="0.75rem 0.9rem" style.border="1px solid var(--color-border)" style.borderRadius="var(--radius)" style.fontSize="1rem" style.fontFamily="inherit"}
19
-
20
- ::input{type="text" name="class" placeholder="Which class? e.g. Vinyasa Flow" aria-label="Class you're interested in" style.width="100%" style.padding="0.75rem 0.9rem" style.border="1px solid var(--color-border)" style.borderRadius="var(--radius)" style.fontSize="1rem" style.fontFamily="inherit"}
21
-
22
- ::input{type="date" name="date" aria-label="Preferred date" style.width="100%" style.padding="0.75rem 0.9rem" style.border="1px solid var(--color-border)" style.borderRadius="var(--radius)" style.fontSize="1rem" style.fontFamily="inherit"}
23
-
24
- ::textarea{name="message" rows="4" placeholder="New to yoga? Any injuries or goals we should know about?" aria-label="Message" style.width="100%" style.padding="0.75rem 0.9rem" style.border="1px solid var(--color-border)" style.borderRadius="var(--radius)" style.fontSize="1rem" style.fontFamily="inherit"}
25
-
26
- :::button{type="submit" style.backgroundColor="var(--color-primary)" style.color="var(--color-text-white)" style.padding="0.85rem 1.75rem" style.border="none" style.borderRadius="var(--radius)" style.fontSize="1rem" style.fontWeight="600" style.cursor="pointer" style.justifySelf="start"}
27
- Request a spot
28
- :::
29
-
30
- :::p{style.fontSize="0.85rem" style.color="var(--color-text-muted)" style.margin="0.25rem 0 0"}
31
- This is a demo form. Wire it to your booking provider or email in `pages/contact.md`.
32
- :::
33
-
34
- ::::
35
-
36
- ::::div{style.display="grid" style.gap="1.5rem" style.alignContent="start"}
14
+ ::::div{style.display="grid" style.gap="1.5rem"}
37
15
  ::fs-hours{props.heading="Studio Hours"}
38
16
 
39
- :::div{style.padding="2rem" style.backgroundColor="var(--color-bg-cream)" style.border="1px solid var(--color-border)" style.borderRadius="var(--radius)"}
17
+ :::div{style.padding="2rem" style.backgroundColor="var(--color-bg-blush)" style.border="1px solid var(--color-border)" style.borderRadius="var(--radius)"}
40
18
 
41
19
  #### Find the studio
42
20
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- title: "Ember Yoga & Fitness — Boutique yoga, pilates & strength"
2
+ title: "Ember Yoga & Fitness — Boutique yoga, pilates, HIIT & strength"
3
3
  state:
4
4
  preview:
5
5
  $prototype: ContentCollection
@@ -11,70 +11,47 @@ state:
11
11
  limit: 3
12
12
  ---
13
13
 
14
- ::fs-hero{props.eyebrow="Bridgewater · Boutique Studio" props.heading="Move, breathe, belong." props.subheading="Yoga, pilates, HIIT, and strength — taught in small classes by coaches who learn your name. All levels, always welcome." props.cta="Book a Class" props.ctaHref="/contact/" props.cta2="View Classes" props.cta2Href="/classes/" props.bg="/images/hero.jpg"}
14
+ ::fs-hero{props.eyebrow="Bridgewater · Boutique Movement Studio" props.heading="Move like" props.headingAccent="you mean it." props.subheading="Yoga, pilates, HIIT and strength — taught in small classes by coaches who learn your name. All levels. Real momentum." props.cta="Book a Class" props.ctaHref="/contact/" props.cta2="See the Schedule" props.cta2Href="/classes/" props.chip1="16-person class cap" props.chip2="All levels welcome" props.bg="/images/hero.jpg"}
15
15
 
16
- :::fs-intro{props.image="/images/about.jpg" props.imageAlt="Instructor guiding a student through a stretch"}
16
+ :::fs-intro{props.kicker="Why Ember" props.image="/images/about.jpg" props.imageAlt="Instructor guiding a student through a stretch" props.badge="Est. 2019" props.stat1="16" props.stat1label="Max per class" props.stat2="30+" props.stat2label="Classes / week" props.stat3="6" props.stat3label="Coaches"}
17
17
 
18
- ### A studio that meets you where you are
18
+ ### Strong body, clear head, real community.
19
19
 
20
- Ember is a small, light-filled studio built around one idea: everyone deserves to feel strong and at ease in their own body. Our classes cap at sixteen, so you get real attention and real progress.
20
+ Ember is a small, light-filled studio built on one idea: everyone deserves to feel powerful in their own body. Classes cap at sixteen, so every session is hands-on and every rep gets watched.
21
21
 
22
- Come for the yoga, stay for the community.
22
+ Come for the sweat. Stay for the people who show up on the mat next to you, week after week.
23
23
  :::
24
24
 
25
- :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
26
- ::fs-section-header{props.eyebrow="Why Ember" props.heading="Practice that fits your life"}
27
-
28
- ::::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"}
29
- ::fs-feature{props.icon="🧘" props.title="Small classes" props.text="Capped at sixteen, so every session is hands-on and adjustments are personal."}
30
-
31
- ::fs-feature{props.icon="🌱" props.title="All levels welcome" props.text="Never done yoga? Lifting for years? Every class offers a version that fits you."}
32
-
33
- ::fs-feature{props.icon="💗" props.title="Coaches who care" props.text="Certified instructors who remember your name, your goals, and your last class."}
34
- ::::
35
- :::::
36
-
37
- :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
25
+ :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-blush)"}
38
26
  ::fs-section-header{props.eyebrow="Find your practice" props.heading="Three ways to move"}
39
27
 
40
28
  ::::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"}
41
- :::div
42
- ::img{src="/images/class-1.jpg" alt="A flowing yoga pose" loading="lazy" style.width="100%" style.aspectRatio="1 / 1" style.objectFit="cover" style.borderRadius="var(--radius)" style.display="block" style.marginBottom="0.9rem"}
43
- **Yoga & Flow** — Vinyasa, power, and restorative practice to build heat and calm the mind.
44
- :::
29
+ ::fs-modality{props.tag="Yoga" props.title="Yoga & Flow" props.color="var(--color-yoga)" props.image="/images/class-1.jpg" props.imageAlt="A flowing yoga pose" props.text="Vinyasa, power, and restorative practice to build heat and quiet the mind." props.href="/classes/"}
45
30
 
46
- :::div
47
- ::img{src="/images/class-2.jpg" alt="A pilates class in session" loading="lazy" style.width="100%" style.aspectRatio="1 / 1" style.objectFit="cover" style.borderRadius="var(--radius)" style.display="block" style.marginBottom="0.9rem"}
48
- **Pilates & Core** — Low-impact mat work that builds deep strength, posture, and control.
49
- :::
31
+ ::fs-modality{props.tag="Pilates" props.title="Pilates & Core" props.color="var(--color-pilates)" props.image="/images/class-2.jpg" props.imageAlt="A pilates class in session" props.text="Low-impact mat work that builds deep core strength, posture, and control." props.href="/classes/"}
50
32
 
51
- :::div
52
- ::img{src="/images/class-3.jpg" alt="Strength training with free weights" loading="lazy" style.width="100%" style.aspectRatio="1 / 1" style.objectFit="cover" style.borderRadius="var(--radius)" style.display="block" style.marginBottom="0.9rem"}
53
- **Strength & HIIT** — Coached lifting and interval training to build lean, functional power.
54
- :::
33
+ ::fs-modality{props.tag="Sweat" props.title="Strength & HIIT" props.color="var(--color-strength)" props.image="/images/class-3.jpg" props.imageAlt="Strength training with free weights" props.text="Coached lifting and interval training to build lean, functional power." props.href="/classes/"}
55
34
  ::::
56
35
  :::::
57
36
 
58
- :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
59
- ::fs-section-header{props.eyebrow="This week" props.heading="A few classes on the schedule"}
37
+ :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
38
+ ::fs-section-header{props.eyebrow="This week" props.heading="The weekly schedule" props.subheading="Every class on the mat this week — filter by style, then grab your slot."}
60
39
 
61
- ::::fs-class-grid
62
- :::Array{items.ref="#/state/preview"}
63
- ::fs-class-card{props.name="${item.data.name}" props.level="${item.data.level}" props.time="${item.data.time}" props.instructor="${item.data.instructor}" props.focus="${item.data.focus}"}
64
- :::
65
- ::::
40
+ ::fs-schedule
66
41
 
67
- ::::div{style.textAlign="center" style.marginTop="2rem"}
68
- :::a{href="/classes/" style.display="inline-block" style.color="var(--color-primary)" style.fontWeight="600" style.textDecoration="none" style.fontSize="1.05rem"}
69
- See the full schedule →
42
+ ::::div{style.textAlign="center" style.marginTop="2.25rem"}
43
+ :::a{href="/classes/" style.display="inline-block" style.color="var(--color-primary)" style.fontWeight="700" style.textDecoration="none" style.fontSize="1.02rem"}
44
+ See full class details →
70
45
  :::
71
46
  ::::
72
47
  :::::
73
48
 
74
- :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
75
- ::fs-section-header{props.eyebrow="Memberships" props.heading="Simple pricing, no lock-in"}
49
+ ::fs-band{props.kicker="No experience required" props.heading="Show up. That's the hard part." props.text="Your first class is on us — book a free intro session and we'll help you find the practice that fits." props.cta="Book a free intro" props.ctaHref="/contact/" props.image="/images/class-1.jpg"}
50
+
51
+ :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-blush)"}
52
+ ::fs-section-header{props.eyebrow="Memberships" props.heading="Pricing that flexes" props.subheading="Drop in when it suits you, or go unlimited and make it a habit. No sign-up fees, ever."}
76
53
 
77
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.5rem" style.--lg.gridTemplateColumns="1fr"}
54
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.5rem" style.alignItems="start" style.--lg.gridTemplateColumns="1fr" style.--lg.maxWidth="440px"}
78
55
  ::fs-pricing-card{props.tier="Drop-in" props.price="$22" props.per="/ class" props.description="Perfect for trying us out or dropping by between trips." props.cta="Book a class" props.ctaHref="/contact/" props.perk1="Any single class" props.perk2="Mat & props included" props.perk3="No commitment"}
79
56
 
80
57
  ::fs-pricing-card{props.tier="Monthly Unlimited" props.price="$129" props.per="/ month" props.badge="Most popular" props.featured="true" props.description="Unlimited classes for people who want a real routine." props.cta="Start membership" props.ctaHref="/contact/" props.perk1="Unlimited classes" props.perk2="All class types" props.perk3="Free mat storage" props.perk4="10% off workshops" props.perk5="Freeze anytime"}
@@ -82,25 +59,25 @@ See the full schedule →
82
59
  ::fs-pricing-card{props.tier="Annual Unlimited" props.price="$1,290" props.per="/ year" props.description="Two months free plus perks for our most committed members." props.cta="Go annual" props.ctaHref="/contact/" props.perk1="Everything in Monthly" props.perk2="Two months free" props.perk3="4 guest passes a year" props.perk4="Priority booking" props.perk5="Free intro session"}
83
60
  ::::
84
61
 
85
- ::::div{style.textAlign="center" style.marginTop="2rem"}
86
- :::a{href="/pricing/" style.display="inline-block" style.color="var(--color-primary)" style.fontWeight="600" style.textDecoration="none" style.fontSize="1.05rem"}
62
+ ::::div{style.textAlign="center" style.marginTop="2.25rem"}
63
+ :::a{href="/pricing/" style.display="inline-block" style.color="var(--color-primary)" style.fontWeight="700" style.textDecoration="none" style.fontSize="1.02rem"}
87
64
  Compare all plans →
88
65
  :::
89
66
  ::::
90
67
  :::::
91
68
 
92
- :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
93
- ::fs-section-header{props.eyebrow="Meet the team" props.heading="Instructors who show up for you"}
69
+ :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
70
+ ::fs-section-header{props.eyebrow="Meet the coaches" props.heading="Instructors in your corner"}
94
71
 
95
72
  ::::div{style.maxWidth="var(--max-width-narrow)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="1fr 1fr" style.gap="1.5rem" style.--sm.gridTemplateColumns="1fr"}
96
- ::fs-instructor-card{props.name="Maya Chen" props.specialty="Vinyasa & Restorative Yoga" props.image="/images/instructor-1.jpg" props.bio="Founder of Ember and a 500-hour certified teacher. Maya's classes are equal parts challenge and calm."}
73
+ ::fs-instructor-card{props.name="Maya Chen" props.specialty="Vinyasa & Restorative" props.image="/images/instructor-1.jpg" props.bio="Founder of Ember and a 500-hour certified teacher. Maya's classes are equal parts challenge and calm."}
97
74
 
98
75
  ::fs-instructor-card{props.name="Devon Hart" props.specialty="Power Yoga & Strength" props.image="/images/instructor-2.jpg" props.bio="A former collegiate athlete turned coach, Devon makes strength training approachable for absolutely everyone."}
99
76
  ::::
100
77
  :::::
101
78
 
102
- :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
103
- ::fs-section-header{props.eyebrow="Loved by members" props.heading="What our community says"}
79
+ :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-blush)"}
80
+ ::fs-section-header{props.eyebrow="Loved by members" props.heading="The Ember effect"}
104
81
 
105
82
  ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="1fr 1fr" style.gap="1.5rem" style.--md.gridTemplateColumns="1fr"}
106
83
  ::fs-review{props.quote="I walked in having never done yoga and left already booking my next class. The instructors actually watch you and help." props.author="Jordan M." props.role="Member since 2022"}
@@ -109,4 +86,4 @@ Compare all plans →
109
86
  ::::
110
87
  :::::
111
88
 
112
- ::fs-cta{props.heading="Your first class is on us" props.text="New to Ember? Book a free intro session and find the practice that fits you." props.cta="Book a Class" props.ctaHref="/contact/"}
89
+ ::fs-cta{props.eyebrow="Your first class is free" props.heading="Roll out your mat." props.text="New to Ember? Book a free intro session and find the practice that fits you — no pressure, no experience needed." props.cta="Book a Class" props.ctaHref="/contact/"}
@@ -2,12 +2,12 @@
2
2
  title: "Membership & Pricing — Ember Yoga & Fitness"
3
3
  ---
4
4
 
5
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
6
- ::fs-section-header{props.eyebrow="Memberships" props.heading="Pricing that flexes with you" props.subheading="Drop in when it suits you, or go unlimited and make it a habit. No sign-up fees, ever."}
5
+ :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-blush)"}
6
+ ::fs-section-header{props.eyebrow="Memberships" props.heading="Pricing that flexes" props.subheading="Drop in when it suits you, or go unlimited and make it a habit. No sign-up fees, ever."}
7
7
  :::::
8
8
 
9
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem"}
10
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.5rem" style.--lg.gridTemplateColumns="1fr"}
9
+ :::::section{style.padding="clamp(3rem, 7vw, 5rem) 1.5rem"}
10
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.5rem" style.alignItems="start" style.--lg.gridTemplateColumns="1fr" style.--lg.maxWidth="440px"}
11
11
  ::fs-pricing-card{props.tier="Drop-in" props.price="$22" props.per="/ class" props.description="Perfect for trying us out or dropping by between trips." props.cta="Book a class" props.ctaHref="/contact/" props.perk1="Any single class" props.perk2="Mat & props included" props.perk3="Book anytime" props.perk4="No commitment"}
12
12
 
13
13
  ::fs-pricing-card{props.tier="Monthly Unlimited" props.price="$129" props.per="/ month" props.badge="Most popular" props.featured="true" props.description="Unlimited classes for people who want a real routine." props.cta="Start membership" props.ctaHref="/contact/" props.perk1="Unlimited classes" props.perk2="All class types" props.perk3="Free mat storage" props.perk4="10% off workshops" props.perk5="Freeze anytime"}
@@ -16,7 +16,7 @@ title: "Membership & Pricing — Ember Yoga & Fitness"
16
16
  ::::
17
17
  :::::
18
18
 
19
- :::::section{style.padding="clamp(1rem, 4vw, 2rem) 1.5rem clamp(3.5rem, 8vw, 6rem)" style.backgroundColor="var(--color-bg-cream)"}
19
+ :::::section{style.padding="clamp(1rem, 4vw, 2rem) 1.5rem clamp(3.5rem, 8vw, 6rem)" style.backgroundColor="var(--color-bg-blush)"}
20
20
  ::fs-section-header{props.eyebrow="Compare plans" props.heading="Every detail, side by side"}
21
21
 
22
22
  ::fs-pricing-table
@@ -26,7 +26,7 @@ Students and seniors save 15% on any plan — just ask at the front desk.
26
26
  :::
27
27
  :::::
28
28
 
29
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem"}
29
+ :::::section{style.padding="clamp(3rem, 7vw, 5rem) 1.5rem"}
30
30
  ::fs-section-header{props.eyebrow="Questions" props.heading="Good to know"}
31
31
 
32
32
  ::::div{style.maxWidth="var(--max-width-narrow)" style.margin="0 auto" style.display="grid" style.gap="1.25rem"}
@@ -38,4 +38,4 @@ Students and seniors save 15% on any plan — just ask at the front desk.
38
38
  ::::
39
39
  :::::
40
40
 
41
- ::fs-cta{props.heading="Start with a free intro" props.text="Not sure which plan fits? Come try a class on the house and we'll help you choose." props.cta="Book a Class" props.ctaHref="/contact/"}
41
+ ::fs-cta{props.eyebrow="Not sure which plan?" props.heading="Start with a free intro" props.text="Come try a class on the house and we'll help you choose the plan that actually fits your week." props.cta="Book a Class" props.ctaHref="/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": "A boutique yoga and fitness studio offering vinyasa, pilates, strength, and HIIT — small classes, all levels welcome."
20
+ "content": "Ember is a boutique yoga & fitness studio — vinyasa, pilates, HIIT and strength in small, all-levels classes. See the weekly schedule and book a class."
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=Poppins:wght@500;600;700&display=swap"
49
+ "href": "https://fonts.googleapis.com/css2?family=Anton&family=Archivo:wght@500;600;700;800;900&family=DM+Sans:wght@400;500;600;700&display=swap"
37
50
  }
38
51
  }
39
52
  ],
@@ -44,27 +57,70 @@
44
57
  "--sm": "(max-width: 640px)"
45
58
  },
46
59
  "style": {
47
- "--color-primary": "#db2777",
48
- "--color-primary-hover": "#be185d",
49
- "--color-ink": "#1f1729",
50
- "--color-bg-dark": "#241a2b",
51
- "--color-bg-cream": "#fdf2f8",
60
+ "--color-primary": "#ff2e63",
61
+ "--color-primary-hover": "#e01152",
62
+ "--color-ember": "#ff8c42",
63
+ "--color-magenta": "#d6157a",
64
+ "--color-ink": "#1a0f18",
65
+ "--color-ink-band": "#20111c",
66
+ "--color-bg-dark": "#20111c",
52
67
  "--color-bg-white": "#ffffff",
53
- "--color-text-primary": "#1f1729",
68
+ "--color-bg-blush": "#fff4ef",
69
+ "--color-bg-peach": "#ffe7dc",
70
+ "--color-bg-cream": "#fff4ef",
71
+ "--color-text-primary": "#1a0f18",
54
72
  "--color-text-white": "#ffffff",
55
- "--color-text-muted": "#6b6472",
56
- "--color-border": "#f0e4ec",
57
- "--color-accent": "#0d9488",
58
- "--font-heading": "'Poppins', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
73
+ "--color-text-muted": "#7c6a74",
74
+ "--color-border": "#f3ded4",
75
+ "--color-border-dark": "rgba(255,255,255,0.14)",
76
+ "--color-accent": "#ff8c42",
77
+ "--color-yoga": "#ff2e63",
78
+ "--color-strength": "#7b2ff7",
79
+ "--color-pilates": "#ff8c42",
80
+ "--color-hiit": "#d6157a",
81
+ "--grad": "linear-gradient(103deg, #ff2e63 0%, #ff6a3d 52%, #ffb03a 100%)",
82
+ "--grad-hot": "linear-gradient(120deg, #d6157a 0%, #ff2e63 55%, #ff8c42 100%)",
83
+ "--duo-shadow": "#280a22",
84
+ "--font-display": "'Anton', 'Archivo', system-ui, -apple-system, sans-serif",
85
+ "--font-heading": "'Archivo', system-ui, -apple-system, 'Segoe UI', sans-serif",
86
+ "--font-body": "'DM Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
59
87
  "--max-width": "1200px",
60
88
  "--max-width-narrow": "820px",
61
- "--radius": "0.75rem",
89
+ "--radius": "1.1rem",
90
+ "--radius-sm": "0.7rem",
62
91
  "margin": "0",
63
92
  "padding": "0",
64
- "fontFamily": "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
93
+ "fontFamily": "var(--font-body)",
65
94
  "lineHeight": "1.6",
66
95
  "color": "var(--color-text-primary)",
67
- "backgroundColor": "var(--color-bg-white)"
96
+ "backgroundColor": "var(--color-bg-white)",
97
+ "h1": {
98
+ "fontFamily": "var(--font-heading)",
99
+ "color": "var(--color-text-primary)"
100
+ },
101
+ "h2": {
102
+ "fontFamily": "var(--font-heading)",
103
+ "color": "var(--color-text-primary)"
104
+ },
105
+ "h3": {
106
+ "fontFamily": "var(--font-heading)",
107
+ "color": "var(--color-text-primary)"
108
+ },
109
+ "h4": {
110
+ "fontFamily": "var(--font-heading)",
111
+ "color": "var(--color-text-primary)"
112
+ },
113
+ "strong": {
114
+ "color": "var(--color-text-primary)",
115
+ "fontWeight": "700"
116
+ },
117
+ "a": {
118
+ "color": "var(--color-primary)"
119
+ },
120
+ "::selection": {
121
+ "backgroundColor": "var(--color-primary)",
122
+ "color": "#ffffff"
123
+ }
68
124
  },
69
125
  "imports": {
70
126
  "Markdown": "@jxsuite/parser/Markdown.class.json",
@@ -74,7 +130,12 @@
74
130
  "optimize": true,
75
131
  "widths": [320, 640, 960, 1280, 1920],
76
132
  "formats": ["webp", "avif"],
77
- "quality": { "webp": 80, "avif": 65, "jpeg": 80, "png": 80 },
133
+ "quality": {
134
+ "webp": 80,
135
+ "avif": 65,
136
+ "jpeg": 80,
137
+ "png": 80
138
+ },
78
139
  "sizes": "(max-width: 768px) 100vw, 50vw",
79
140
  "lazyLoad": true
80
141
  },
@@ -85,12 +146,24 @@
85
146
  "schema": {
86
147
  "type": "object",
87
148
  "properties": {
88
- "name": { "type": "string" },
89
- "level": { "type": "string" },
90
- "time": { "type": "string" },
91
- "instructor": { "type": "string" },
92
- "focus": { "type": "string" },
93
- "order": { "type": "number" }
149
+ "name": {
150
+ "type": "string"
151
+ },
152
+ "level": {
153
+ "type": "string"
154
+ },
155
+ "time": {
156
+ "type": "string"
157
+ },
158
+ "instructor": {
159
+ "type": "string"
160
+ },
161
+ "focus": {
162
+ "type": "string"
163
+ },
164
+ "order": {
165
+ "type": "number"
166
+ }
94
167
  },
95
168
  "required": ["name", "level", "time", "instructor"]
96
169
  }
@@ -0,0 +1,72 @@
1
+ {
2
+ "tagName": "hs-callbar",
3
+ "state": {
4
+ "phone": "(970) 555-0148",
5
+ "phoneHref": "tel:+19705550148"
6
+ },
7
+ "style": {
8
+ "display": "none",
9
+ "position": "fixed",
10
+ "bottom": "0",
11
+ "left": "0",
12
+ "right": "0",
13
+ "zIndex": "70",
14
+ "gridTemplateColumns": "1fr 1fr",
15
+ "backgroundColor": "var(--color-steel)",
16
+ "borderTop": "2px solid var(--color-primary)",
17
+ "boxShadow": "0 -8px 26px -14px rgba(0,0,0,0.7)",
18
+ "@--md": { "display": "grid" }
19
+ },
20
+ "children": [
21
+ {
22
+ "tagName": "a",
23
+ "attributes": { "href": "${state.phoneHref}" },
24
+ "style": {
25
+ "display": "flex",
26
+ "alignItems": "center",
27
+ "justifyContent": "center",
28
+ "gap": "0.5rem",
29
+ "padding": "0.95rem 1rem",
30
+ "color": "var(--color-text-white)",
31
+ "textDecoration": "none",
32
+ "fontFamily": "var(--font-heading)",
33
+ "textTransform": "uppercase",
34
+ "letterSpacing": "0.04em",
35
+ "fontWeight": "600",
36
+ "fontSize": "1rem",
37
+ "borderRight": "1px solid var(--color-steel-line)"
38
+ },
39
+ "children": [
40
+ {
41
+ "tagName": "span",
42
+ "style": { "color": "var(--color-primary)", "fontSize": "1.15rem" },
43
+ "textContent": "☏"
44
+ },
45
+ { "tagName": "span", "textContent": "Call Now" }
46
+ ]
47
+ },
48
+ {
49
+ "tagName": "a",
50
+ "attributes": { "href": "/contact/" },
51
+ "style": {
52
+ "display": "flex",
53
+ "alignItems": "center",
54
+ "justifyContent": "center",
55
+ "gap": "0.5rem",
56
+ "padding": "0.95rem 1rem",
57
+ "backgroundColor": "var(--color-primary)",
58
+ "color": "var(--color-text-white)",
59
+ "textDecoration": "none",
60
+ "fontFamily": "var(--font-heading)",
61
+ "textTransform": "uppercase",
62
+ "letterSpacing": "0.04em",
63
+ "fontWeight": "600",
64
+ "fontSize": "1rem"
65
+ },
66
+ "children": [
67
+ { "tagName": "span", "style": { "fontSize": "1.1rem" }, "textContent": "⚡" },
68
+ { "tagName": "span", "textContent": "Free Quote" }
69
+ ]
70
+ }
71
+ ]
72
+ }