@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
@@ -2,29 +2,29 @@
2
2
  title: "About — Bistro & Café"
3
3
  ---
4
4
 
5
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
6
- ::bit-section-header{props.eyebrow="Our story" props.heading="A neighborhood table since 2016" props.subheading="Good food, made by hand, for the people down the street."}
5
+ :::::section{style.padding="clamp(3rem, 6vw, 4.75rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)" style.textAlign="center"}
6
+ ::bit-section-header{props.eyebrow="Our story" props.heading="A neighborhood table" props.headingAccent="since 2016" props.subheading="Good food, made by hand, for the people down the street."}
7
7
  :::::
8
8
 
9
9
  :::bit-intro{props.image="/images/about.jpg" props.imageAlt="The kitchen at Bistro & Café" props.reverse="true"}
10
10
 
11
- ### From a small kitchen, with big intentions
11
+ ### From a small kitchen, with big intentions.
12
12
 
13
13
  Bistro & Café started with a simple idea: a room where the coffee is honest, the bread is warm, and nobody rushes you out the door. We took over an old storefront on Market Street, put in a wood counter and a proper oven, and started cooking what we'd want to eat.
14
14
 
15
15
  Nine years later, the regulars have become friends, the growers have become partners, and the menu still changes with whatever's best that week.
16
16
  :::
17
17
 
18
- :::::section{style.padding="clamp(3rem, 8vw, 5rem) 1.5rem"}
19
- ::bit-section-header{props.eyebrow="What we care about" props.heading="Three things we won't compromise on"}
18
+ :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
19
+ ::bit-section-header{props.eyebrow="What we care about" props.heading="Three things we" props.headingAccent="won't compromise on" props.align="left"}
20
20
 
21
- ::::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"}
22
- ::bit-feature{props.icon="🤝" props.title="People first" props.text="Fair wages, real hospitality, and a room that welcomes everyone."}
21
+ ::::div{style.maxWidth="var(--max-width)" style.margin="2.5rem auto 0" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="clamp(1.75rem, 4vw, 3rem)" style.--md.gridTemplateColumns="1fr"}
22
+ ::bit-feature{props.number="01" props.title="People first" props.text="Fair wages, real hospitality, and a room that welcomes everyone who walks in."}
23
23
 
24
- ::bit-feature{props.icon="🌾" props.title="Honest sourcing" props.text="We name our farms because we're proud of them. Seasonal, always."}
24
+ ::bit-feature{props.number="02" props.title="Honest sourcing" props.text="We name our farms because we're proud of them. Seasonal, local, always."}
25
25
 
26
- ::bit-feature{props.icon="🔥" props.title="Craft over speed" props.text="Slow stocks, long proofs, and dishes we'd happily serve our families."}
26
+ ::bit-feature{props.number="03" props.title="Craft over speed" props.text="Slow stocks, long proofs, and dishes we'd happily serve our own families."}
27
27
  ::::
28
28
  :::::
29
29
 
30
- ::bit-cta{props.heading="Come say hello" props.text="We'd love to have you at the table. Reserve ahead, or just stop in." props.cta="Reserve a Table" props.ctaHref="/contact/"}
30
+ ::bit-cta{props.eyebrow="Reservations" props.heading="Come say" props.headingAccent="hello" props.text="We'd love to have you at the table. Reserve ahead, or just stop in." props.cta="Reserve a Table" props.ctaHref="/contact/"}
@@ -2,19 +2,19 @@
2
2
  title: "Contact & Reservations — Bistro & Café"
3
3
  ---
4
4
 
5
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
6
- ::bit-section-header{props.eyebrow="Visit us" props.heading="Reservations & hours" props.subheading="Book a table below, or find us on the corner of Market & 3rd."}
5
+ :::::section{style.padding="clamp(3rem, 6vw, 4.75rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)" style.textAlign="center"}
6
+ ::bit-section-header{props.eyebrow="Visit us" props.heading="Reservations &" props.headingAccent="hours" props.subheading="Book a table below, or find us on the corner of Market & 3rd."}
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, 6vw, 4.75rem) 1.5rem"}
10
+ :::::div{style.display="grid" style.gridTemplateColumns="1.15fr 1fr" style.gap="clamp(2rem, 5vw, 3.5rem)" style.alignItems="start" style.--md.gridTemplateColumns="1fr"}
11
11
 
12
12
  ::bit-reservation{props.heading="Request a table"}
13
13
 
14
- ::::div
15
- ::bit-hours{props.heading="Hours"}
14
+ ::::div{style.display="grid" style.gap="1.5rem"}
15
+ ::bit-hours{props.heading="Hours" props.status="Open today"}
16
16
 
17
- :::div{style.marginTop="1.5rem" style.padding="2rem" style.backgroundColor="var(--color-bg-cream)" style.border="1px solid var(--color-border)" style.borderRadius="var(--radius)"}
17
+ :::div{style.padding="clamp(1.75rem, 3.5vw, 2.5rem)" style.backgroundColor="var(--color-bg-white)" style.border="1px solid var(--color-border)" style.borderRadius="var(--radius)" style.fontFamily="var(--font-heading)" style.fontSize="1.2rem" style.lineHeight="1.6" style.color="var(--color-text-primary)"}
18
18
 
19
19
  ### Find us
20
20
 
@@ -8,56 +8,66 @@ state:
8
8
  sort:
9
9
  field: order
10
10
  order: asc
11
- limit: 4
11
+ limit: 5
12
12
  ---
13
13
 
14
- ::bit-hero{props.eyebrow="Riverbend · Est. 2016" props.heading="A table worth lingering at." props.subheading="Seasonal plates, house-made pastries, and small-batch coffee — served in a warm room just off Market Street." props.cta="Reserve a Table" props.ctaHref="/contact/" props.cta2="View the Menu" props.cta2Href="/menu/" props.bg="/images/hero.jpg"}
14
+ ::bit-hero{props.eyebrow="Riverbend · Est. 2016" props.heading="A table worth" props.headingAccent="lingering" props.headingTail=" at." props.subheading="Seasonal plates, house-made pastries, and small-batch coffee — served in a warm room just off Market Street." props.hours="Open today · 8am – 3pm · Walk-ins welcome" props.caption="The dining room · Market & 3rd" props.cta="Reserve a Table" props.ctaHref="/contact/" props.cta2="View the Menu" props.cta2Href="/menu/" props.bg="/images/hero.jpg"}
15
15
 
16
- :::bit-intro{props.image="/images/intro.jpg" props.imageAlt="Chef plating a seasonal dish"}
16
+ ::::div{style.backgroundColor="var(--color-espresso)" style.color="var(--color-text-white)"}
17
+ :::p{style.margin="0" style.maxWidth="var(--max-width-wide)" style.marginLeft="auto" style.marginRight="auto" style.padding="0.85rem 1.5rem" style.textAlign="center" style.fontFamily="var(--font-body)" style.fontSize="0.76rem" style.fontWeight="600" style.textTransform="uppercase" style.letterSpacing="0.2em" style.color="var(--color-text-white)"}
18
+ Seasonal plates · House-baked pastry · Small-batch coffee · Open seven days · Est. 2016
19
+ :::
20
+ ::::
17
21
 
18
- ### More than a meal
22
+ :::bit-intro{props.image="/images/intro.jpg" props.imageAlt="A chef plating a seasonal dish in the kitchen"}
19
23
 
20
- We opened Bistro & Café to build a room worth slowing down in. Everything on the menu starts with what's good this week — from the farm up the road, roasted, baked, and plated by hand.
24
+ ### More than a meal — a room worth slowing down in.
21
25
 
22
- Come for the coffee, stay for the roast chicken.
26
+ We opened Bistro & Café to build a place worth staying in. Everything on the menu begins with what's good this week — from the farm up the road — then roasted, baked, and plated by hand.
27
+
28
+ Come for the coffee at eight, stay for the roast chicken at eight. Nobody will rush you out the door.
23
29
  :::
24
30
 
25
31
  :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
26
- ::bit-section-header{props.eyebrow="Our kitchen" props.heading="Cooked with care, sourced with intention"}
32
+ ::bit-section-header{props.eyebrow="Our kitchen" props.heading="Cooked with care," props.headingAccent="sourced with intention" props.align="left"}
27
33
 
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
- ::bit-feature{props.icon="🌿" props.title="Seasonal & local" props.text="The menu changes with the harvest. We buy from growers we know by name."}
34
+ ::::div{style.maxWidth="var(--max-width)" style.margin="2.5rem auto 0" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="clamp(1.75rem, 4vw, 3rem)" style.--md.gridTemplateColumns="1fr"}
35
+ ::bit-feature{props.number="01" props.title="Seasonal & local" props.text="The menu changes with the harvest. We buy from growers we know by name and cook whatever's best that week."}
30
36
 
31
- ::bit-feature{props.icon="🥖" props.title="Made in-house" props.text="Bread, pastry, stocks, and sauces — all made from scratch every morning."}
37
+ ::bit-feature{props.number="02" props.title="Made in-house" props.text="Bread, pastry, stocks, and sauces — all made from scratch every morning before the doors open."}
32
38
 
33
- ::bit-feature{props.icon="☕" props.title="Small-batch coffee" props.text="A rotating single-origin, roasted locally and pulled to order."}
39
+ ::bit-feature{props.number="03" props.title="Small-batch coffee" props.text="A rotating single-origin, roasted just up the street and pulled to order behind the counter."}
34
40
  ::::
35
41
  :::::
36
42
 
37
43
  :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
38
- ::bit-section-header{props.eyebrow="From the menu" props.heading="A few favorites"}
44
+ ::bit-section-header{props.eyebrow="From the menu" props.heading="A few of our" props.headingAccent="favorites"}
39
45
 
40
- ::::div{style.maxWidth="var(--max-width-narrow)" style.margin="0 auto"}
46
+ ::::div{style.maxWidth="var(--max-width-narrow)" style.margin="0 auto" style.padding="clamp(1.75rem, 4vw, 2.75rem)" style.backgroundColor="var(--color-bg-white)" style.border="1px solid var(--color-border)" style.borderRadius="var(--radius)" style.boxShadow="0 24px 60px -42px rgba(30,21,15,0.5)"}
41
47
  :::Array{items.ref="#/state/popular"}
42
48
  ::bit-menu-item{props.name="${item.data.name}" props.price="${item.data.price}" props.description="${item.data.description}"}
43
49
  :::
44
50
  ::::
45
51
 
46
- ::::div{style.textAlign="center" style.marginTop="2rem"}
47
- :::a{href="/menu/" style.display="inline-block" style.color="var(--color-primary)" style.fontWeight="600" style.textDecoration="none" style.fontSize="1.05rem"}
52
+ ::::div{style.textAlign="center" style.marginTop="2.25rem"}
53
+ :::a{href="/menu/" style.display="inline-flex" style.alignItems="center" style.gap="0.5rem" style.color="var(--color-primary)" style.fontFamily="var(--font-body)" style.fontWeight="700" style.textTransform="uppercase" style.letterSpacing="0.14em" style.fontSize="0.82rem" style.textDecoration="none" style.borderBottom="1px solid var(--color-primary)" style.paddingBottom="0.4rem"}
48
54
  See the full menu →
49
55
  :::
50
56
  ::::
51
57
  :::::
52
58
 
53
- ::bit-gallery{props.img1="/images/gallery-1.jpg" props.img2="/images/gallery-2.jpg" props.img3="/images/gallery-3.jpg" props.img4="/images/gallery-4.jpg" props.alt="Dishes and the dining room at Bistro & Café"}
59
+ :::::section{style.padding="0 0 clamp(3.5rem, 8vw, 6rem)"}
60
+ ::bit-section-header{props.eyebrow="In the room" props.heading="A place to" props.headingAccent="slow down"}
54
61
 
55
- :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
56
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="1fr 1fr" style.gap="2.5rem" style.alignItems="center" style.--md.gridTemplateColumns="1fr"}
57
- ::bit-hours{props.heading="Hours"}
62
+ ::bit-gallery{props.img1="/images/gallery-1.jpg" props.img2="/images/gallery-2.jpg" props.img3="/images/gallery-3.jpg" props.img4="/images/gallery-4.jpg" props.alt="Dishes, coffee, and the dining room at Bistro & Café"}
63
+ :::::
64
+
65
+ :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
66
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="1fr 1.15fr" style.gap="clamp(2.5rem, 6vw, 4.5rem)" style.alignItems="center" style.--md.gridTemplateColumns="1fr"}
67
+ ::bit-hours{props.heading="Hours" props.status="Open today"}
58
68
 
59
69
  ::bit-review{props.quote="The kind of neighborhood spot you wish was on your corner. The roast chicken is worth the trip." props.author="Dana R." props.role="Regular since 2019"}
60
70
  ::::
61
71
  :::::
62
72
 
63
- ::bit-cta{props.heading="Save your table" props.text="Weekends fill up fast. Reserve online, or just walk in and say hello." props.cta="Reserve a Table" props.ctaHref="/contact/"}
73
+ ::bit-cta{props.eyebrow="Reservations" props.heading="Save your" props.headingAccent="table" props.text="Weekends fill up fast. Reserve online in a minute, or just walk in and say hello." props.cta="Reserve a Table" props.ctaHref="/contact/"}
@@ -47,34 +47,34 @@ state:
47
47
  order: asc
48
48
  ---
49
49
 
50
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
51
- ::bit-section-header{props.eyebrow="Breakfast · Lunch · Dinner" props.heading="The Menu" props.subheading="Our menu shifts with the seasons — here's what we're serving right now."}
50
+ :::::section{style.padding="clamp(3rem, 6vw, 4.75rem) 1.5rem clamp(2.5rem, 5vw, 3.5rem)" style.backgroundColor="var(--color-bg-cream)" style.textAlign="center"}
51
+ ::bit-section-header{props.eyebrow="Breakfast · Lunch · Dinner" props.heading="The" props.headingAccent="Menu" props.subheading="Our kitchen shifts with the seasons — here's what we're serving this week. Served daily; the kitchen closes half an hour before we do."}
52
52
  :::::
53
53
 
54
- :::::section{style.maxWidth="var(--max-width-narrow)" style.margin="0 auto" style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem"}
55
- ::::bit-menu-group{props.heading="Starters"}
54
+ :::::section{style.columnCount="2" style.columnGap="clamp(2.5rem, 5vw, 5rem)" style.maxWidth="1020px" style.margin="0 auto" style.padding="clamp(3rem, 6vw, 4.75rem) 1.5rem" style.--md.columnCount="1" style.--md.maxWidth="var(--max-width-narrow)"}
55
+ ::::bit-menu-group{props.heading="Starters" props.note="To begin — small, bright plates."}
56
56
  :::Array{items.ref="#/state/starters"}
57
57
  ::bit-menu-item{props.name="${item.data.name}" props.price="${item.data.price}" props.description="${item.data.description}"}
58
58
  :::
59
59
  ::::
60
60
 
61
- ::::bit-menu-group{props.heading="Mains"}
61
+ ::::bit-menu-group{props.heading="Mains" props.note="From the pass — hearty and seasonal."}
62
62
  :::Array{items.ref="#/state/mains"}
63
63
  ::bit-menu-item{props.name="${item.data.name}" props.price="${item.data.price}" props.description="${item.data.description}"}
64
64
  :::
65
65
  ::::
66
66
 
67
- ::::bit-menu-group{props.heading="Desserts"}
67
+ ::::bit-menu-group{props.heading="Desserts" props.note="Something sweet to finish."}
68
68
  :::Array{items.ref="#/state/desserts"}
69
69
  ::bit-menu-item{props.name="${item.data.name}" props.price="${item.data.price}" props.description="${item.data.description}"}
70
70
  :::
71
71
  ::::
72
72
 
73
- ::::bit-menu-group{props.heading="Drinks"}
73
+ ::::bit-menu-group{props.heading="Drinks" props.note="Coffee, and the good stuff."}
74
74
  :::Array{items.ref="#/state/drinks"}
75
75
  ::bit-menu-item{props.name="${item.data.name}" props.price="${item.data.price}" props.description="${item.data.description}"}
76
76
  :::
77
77
  ::::
78
78
  :::::
79
79
 
80
- ::bit-cta{props.heading="Hungry yet?" props.text="Join us for breakfast, lunch, or dinner — or reserve a table for the weekend." props.cta="Reserve a Table" props.ctaHref="/contact/"}
80
+ ::bit-cta{props.eyebrow="Reservations" props.heading="Hungry" props.headingAccent="yet?" props.text="Join us for breakfast, lunch, or dinner — or reserve a table for the weekend." props.cta="Reserve a Table" props.ctaHref="/contact/"}
@@ -8,7 +8,10 @@
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",
@@ -19,21 +22,31 @@
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=Playfair+Display:wght@500;600;700&display=swap"
49
+ "href": "https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,500;0,600;0,700;0,800;0,900;1,400;1,500;1,600;1,700&family=Mulish:wght@300;400;500;600;700;800&display=swap"
37
50
  }
38
51
  }
39
52
  ],
@@ -44,27 +57,39 @@
44
57
  "--sm": "(max-width: 640px)"
45
58
  },
46
59
  "style": {
47
- "--color-primary": "#b45309",
48
- "--color-primary-hover": "#92400e",
49
- "--color-ink": "#1c1917",
50
- "--color-bg-dark": "#1c1917",
51
- "--color-bg-cream": "#faf6f0",
52
- "--color-bg-white": "#ffffff",
53
- "--color-text-primary": "#1c1917",
54
- "--color-text-white": "#ffffff",
55
- "--color-text-muted": "#78716c",
56
- "--color-border": "#e7e5e4",
57
- "--color-accent": "#b45309",
60
+ "--color-primary": "#bd5a34",
61
+ "--color-primary-hover": "#a44827",
62
+ "--color-amber": "#c98a3c",
63
+ "--color-ink": "#241b14",
64
+ "--color-espresso": "#1e150f",
65
+ "--color-bg-dark": "#1e150f",
66
+ "--color-bg-cream": "#efe3d1",
67
+ "--color-bg-paper": "#f6ecdb",
68
+ "--color-bg-white": "#fffaf2",
69
+ "--color-text-primary": "#2a1f17",
70
+ "--color-text-white": "#f6ecdb",
71
+ "--color-text-muted": "#7c6a58",
72
+ "--color-border": "#e2d5bf",
73
+ "--color-border-strong": "#cbb99d",
74
+ "--color-accent": "#bd5a34",
58
75
  "--font-heading": "'Playfair Display', Georgia, 'Times New Roman', serif",
76
+ "--font-body": "'Mulish', system-ui, -apple-system, 'Segoe UI', sans-serif",
59
77
  "--max-width": "1200px",
60
- "--max-width-narrow": "820px",
61
- "--radius": "0.5rem",
78
+ "--max-width-wide": "1320px",
79
+ "--max-width-narrow": "780px",
80
+ "--radius": "0.25rem",
62
81
  "margin": "0",
63
82
  "padding": "0",
64
- "fontFamily": "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
65
- "lineHeight": "1.6",
83
+ "fontFamily": "var(--font-body)",
84
+ "fontSize": "17px",
85
+ "lineHeight": "1.7",
66
86
  "color": "var(--color-text-primary)",
67
- "backgroundColor": "var(--color-bg-white)"
87
+ "backgroundColor": "var(--color-bg-paper)",
88
+ "& a": {
89
+ "color": "var(--color-primary)",
90
+ "textUnderlineOffset": "0.2em",
91
+ "textDecorationColor": "var(--color-border-strong)"
92
+ }
68
93
  },
69
94
  "imports": {
70
95
  "Markdown": "@jxsuite/parser/Markdown.class.json",
@@ -75,7 +100,12 @@
75
100
  "optimize": true,
76
101
  "widths": [320, 640, 960, 1280, 1920],
77
102
  "formats": ["webp", "avif"],
78
- "quality": { "webp": 80, "avif": 65, "jpeg": 80, "png": 80 },
103
+ "quality": {
104
+ "webp": 80,
105
+ "avif": 65,
106
+ "jpeg": 80,
107
+ "png": 80
108
+ },
79
109
  "sizes": "(max-width: 768px) 100vw, 50vw",
80
110
  "lazyLoad": true
81
111
  },
@@ -86,12 +116,25 @@
86
116
  "schema": {
87
117
  "type": "object",
88
118
  "properties": {
89
- "name": { "type": "string" },
90
- "course": { "type": "string" },
91
- "price": { "type": "string" },
92
- "description": { "type": "string" },
93
- "image": { "type": "string", "format": "image" },
94
- "order": { "type": "number" }
119
+ "name": {
120
+ "type": "string"
121
+ },
122
+ "course": {
123
+ "type": "string"
124
+ },
125
+ "price": {
126
+ "type": "string"
127
+ },
128
+ "description": {
129
+ "type": "string"
130
+ },
131
+ "image": {
132
+ "type": "string",
133
+ "format": "image"
134
+ },
135
+ "order": {
136
+ "type": "number"
137
+ }
95
138
  },
96
139
  "required": ["name", "course"]
97
140
  }
@@ -3,18 +3,25 @@
3
3
  "state": {
4
4
  "icon": "",
5
5
  "title": "",
6
- "text": ""
6
+ "text": "",
7
+ "col": "2"
7
8
  },
8
9
  "style": {
9
- "display": "block",
10
- "padding": "1.75rem",
11
- "backgroundColor": "var(--color-bg-white)",
10
+ "display": "flex",
11
+ "flexDirection": "column",
12
+ "gridColumn": "span ${state.col}",
13
+ "padding": "1.9rem",
14
+ "backgroundColor": "var(--color-bg-elev)",
12
15
  "borderRadius": "var(--radius)",
13
16
  "border": "1px solid var(--color-border)",
14
- "transition": "border-color 0.15s, box-shadow 0.15s",
17
+ "position": "relative",
18
+ "overflow": "hidden",
19
+ "transition": "border-color 0.18s, transform 0.18s, box-shadow 0.18s",
20
+ "@--md": { "gridColumn": "span 1" },
15
21
  ":hover": {
16
- "borderColor": "var(--color-primary)",
17
- "boxShadow": "0 12px 32px rgba(99, 102, 241, 0.12)"
22
+ "borderColor": "rgba(124, 116, 255, 0.5)",
23
+ "transform": "translateY(-3px)",
24
+ "boxShadow": "0 18px 44px -20px var(--glow)"
18
25
  }
19
26
  },
20
27
  "children": [
@@ -24,13 +31,14 @@
24
31
  "display": "inline-flex",
25
32
  "alignItems": "center",
26
33
  "justifyContent": "center",
27
- "width": "2.75rem",
28
- "height": "2.75rem",
29
- "borderRadius": "0.6rem",
30
- "backgroundColor": "var(--color-accent-soft)",
31
- "fontSize": "1.4rem",
34
+ "width": "2.9rem",
35
+ "height": "2.9rem",
36
+ "borderRadius": "0.7rem",
37
+ "background": "linear-gradient(150deg, rgba(124,116,255,0.28), rgba(34,211,238,0.14))",
38
+ "border": "1px solid var(--color-border)",
39
+ "fontSize": "1.45rem",
32
40
  "lineHeight": "1",
33
- "marginBottom": "1rem"
41
+ "marginBottom": "1.1rem"
34
42
  },
35
43
  "textContent": "${state.icon}"
36
44
  },
@@ -38,10 +46,11 @@
38
46
  "tagName": "h3",
39
47
  "style": {
40
48
  "fontFamily": "var(--font-heading)",
41
- "fontSize": "1.2rem",
49
+ "fontSize": "1.22rem",
42
50
  "fontWeight": "600",
43
51
  "letterSpacing": "-0.01em",
44
- "margin": "0 0 0.5rem"
52
+ "margin": "0 0 0.5rem",
53
+ "color": "var(--color-text-primary)"
45
54
  },
46
55
  "textContent": "${state.title}"
47
56
  },
@@ -51,7 +60,8 @@
51
60
  "margin": "0",
52
61
  "color": "var(--color-text-muted)",
53
62
  "fontSize": "0.98rem",
54
- "lineHeight": "1.65"
63
+ "lineHeight": "1.65",
64
+ "maxWidth": "46ch"
55
65
  },
56
66
  "textContent": "${state.text}"
57
67
  }