@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,10 +2,12 @@
2
2
  title: "Horizon Conf 2026 — One day for the people building what's next"
3
3
  ---
4
4
 
5
- ::ev-hero{props.eyebrow="A one-day tech & design conference" props.date="June 12, 2026" props.location="The Foundry · Portland, OR" props.heading="The horizon, one day early." props.subheading="Two stages, hands-on workshops, and the designers and engineers shaping the next decade of the web — all in one room, for one day." props.cta="Get Tickets" props.ctaHref="/tickets/" props.cta2="View Schedule" props.cta2Href="/schedule/" props.bg="/images/hero.jpg"}
5
+ ::ev-hero{props.eyebrow="A one-day tech & design conference" props.date="June 12, 2026" props.location="The Foundry · Portland, OR" props.heading="The horizon, one day early." props.subheading="Two stages, hands-on workshops, and the designers and engineers shaping the next decade of the web — all in one room, for one day." props.cta="Get tickets" props.ctaHref="/tickets/" props.cta2="View schedule" props.cta2Href="/schedule/" props.bg="/images/hero.jpg"}
6
6
 
7
- :::::section{style.padding="clamp(2.5rem, 5vw, 3.5rem) 1.5rem" style.borderBottom="1px solid var(--color-border)"}
8
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="2rem" style.--sm.gridTemplateColumns="repeat(2, 1fr)"}
7
+ ::ev-savedate{props.eyebrow="Save the date" props.heading="June 12, 2026 — Portland" props.text="Early-bird tickets are live and going fast. Lock in your seat before prices step up." props.days="42" props.hours="18" props.minutes="05" props.seconds="30" props.cta="Get tickets" props.ctaHref="/tickets/"}
8
+
9
+ :::::section{style.padding="clamp(3rem, 6vw, 4.25rem) 1.5rem"}
10
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="1rem" style.--sm.gridTemplateColumns="repeat(2, 1fr)"}
9
11
  ::ev-stat{props.value="500+" props.label="Attendees"}
10
12
 
11
13
  ::ev-stat{props.value="24" props.label="Speakers"}
@@ -17,14 +19,18 @@ title: "Horizon Conf 2026 — One day for the people building what's next"
17
19
  :::::
18
20
 
19
21
  :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
20
- ::ev-section-header{props.eyebrow="Why attend" props.heading="A day built to move you forward" props.subheading="No filler, no fluff — just talks, workshops, and people worth meeting."}
22
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="0.85fr 1.15fr" style.gap="clamp(2rem, 5vw, 4rem)" style.alignItems="start" style.--md.gridTemplateColumns="1fr"}
23
+ :::div{style.position="sticky" style.top="6rem" style.alignSelf="start"}
24
+ ::ev-section-header{props.eyebrow="Why attend" props.heading="A day built to move you forward" props.subheading="No filler, no fluff — just talks, workshops, and people worth meeting." props.align="left"}
25
+ :::
21
26
 
22
- ::::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"}
23
- ::ev-feature{props.icon="🎤" props.title="Talks that ship" props.text="Main-stage keynotes from people who build in the open — big ideas you can use on Monday."}
27
+ :::div
28
+ ::ev-reason{props.num="01" props.title="Talks that ship" props.text="Main-stage keynotes from people who build in the open — big ideas you can put to work on Monday morning, not someday."}
24
29
 
25
- ::ev-feature{props.icon="🛠️" props.title="Hands-on workshops" props.text="Small-group sessions where you leave with something you actually built, not just notes."}
30
+ ::ev-reason{props.num="02" props.title="Hands-on workshops" props.text="Small-group sessions where you leave with something you actually built — a working prototype, not a page of notes."}
26
31
 
27
- ::ev-feature{props.icon="🤝" props.title="The hallway track" props.text="Curated meetups, lightning intros, and enough coffee to find your next collaborator."}
32
+ ::ev-reason{props.num="03" props.title="The hallway track" props.text="Curated meetups, lightning intros, and enough coffee to find your next collaborator, cofounder, or hire."}
33
+ :::
28
34
  ::::
29
35
  :::::
30
36
 
@@ -41,8 +47,8 @@ title: "Horizon Conf 2026 — One day for the people building what's next"
41
47
  ::ev-speaker-card{props.name="Lena Cho" props.title="Motion Lead, Studio Bright" props.photo="/images/speaker-4.jpg"}
42
48
  ::::
43
49
 
44
- ::::div{style.textAlign="center" style.marginTop="2rem"}
45
- :::a{href="/speakers/" style.display="inline-block" style.color="var(--color-primary)" style.fontWeight="600" style.textDecoration="none" style.fontSize="1.05rem"}
50
+ ::::div{style.textAlign="center" style.marginTop="2.25rem"}
51
+ :::a{href="/speakers/" style.display="inline-block" style.color="var(--color-accent)" style.fontWeight="700" style.textDecoration="none" style.fontSize="1.05rem"}
46
52
  Meet all 24 speakers →
47
53
  :::
48
54
  ::::
@@ -53,13 +59,31 @@ Meet all 24 speakers →
53
59
 
54
60
  ::ev-agenda-tabs
55
61
 
56
- ::::div{style.textAlign="center" style.marginTop="2rem"}
57
- :::a{href="/schedule/" 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="/schedule/" style.display="inline-block" style.color="var(--color-accent)" style.fontWeight="700" style.textDecoration="none" style.fontSize="1.05rem"}
58
64
  See the full schedule →
59
65
  :::
60
66
  ::::
61
67
  :::::
62
68
 
63
- ::ev-savedate{props.eyebrow="Save the date" props.heading="June 12, 2026 — Portland" props.text="Early-bird tickets are live and going fast. Lock in your seat before prices step up." props.days="42" props.hours="18" props.minutes="05" props.seconds="30" props.cta="Get Tickets" props.ctaHref="/tickets/"}
69
+ :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
70
+ ::ev-section-header{props.eyebrow="Tickets" props.heading="Pick your pass" props.subheading="One day, one venue, every track. Early-bird pricing ends April 30 — lock it in before prices step up."}
71
+
72
+ ::::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.--md.gridTemplateColumns="1fr" style.--md.maxWidth="440px"}
73
+ ::ev-ticket-card{props.tier="General" props.price="$149" props.period="/ early bird" props.description="Full access to both stages for the day." props.perk1="Access to all main-stage talks" props.perk2="Hallway track & meetups" props.perk3="Lunch and all-day coffee" props.perk4="Talk recordings after the event" props.cta="Get General" props.ctaHref="/tickets/"}
74
+
75
+ ::ev-ticket-card{props.tier="Pro" props.price="$299" props.period="/ early bird" props.description="Everything in General, plus the hands-on workshop track." props.featured="true" props.badge="Most popular" props.perk1="Everything in General" props.perk2="Reserved seat in every workshop" props.perk3="Speaker Q&A lounge access" props.perk4="Horizon swag kit" props.cta="Get Pro" props.ctaHref="/tickets/"}
76
+
77
+ ::ev-ticket-card{props.tier="Team" props.price="$1,200" props.period="/ 5 seats" props.description="Bring the whole crew — five Pro passes at a group rate." props.perk1="5 × Pro passes" props.perk2="Reserved team table at lunch" props.perk3="Invite to the sponsor mixer" props.perk4="One extra pass for a guest" props.cta="Get Team" props.ctaHref="/tickets/"}
78
+ ::::
79
+
80
+ ::::div{style.textAlign="center" style.marginTop="2.25rem"}
81
+ :::a{href="/tickets/" style.display="inline-block" style.color="var(--color-accent)" style.fontWeight="700" style.textDecoration="none" style.fontSize="1.05rem"}
82
+ Compare passes & fine print →
83
+ :::
84
+ ::::
85
+ :::::
86
+
87
+ ::ev-sponsors{props.label="Backed by the teams building the modern web"}
64
88
 
65
- ::ev-cta{props.eyebrow="One day only" props.heading="Be in the room on June 12" props.text="Horizon Conf sold out last year. Grab your ticket now and join 500 builders for a single, unforgettable day." props.cta="Get Tickets" props.ctaHref="/tickets/" props.note="Early-bird pricing ends April 30."}
89
+ ::ev-cta{props.eyebrow="One day only" props.heading="Be in the room on June 12" props.text="Horizon Conf sold out last year. Grab your ticket now and join 500 builders for a single, unforgettable day." props.cta="Get tickets" props.ctaHref="/tickets/" props.note="Early-bird pricing ends April 30."}
@@ -37,40 +37,43 @@ state:
37
37
  ---
38
38
 
39
39
  :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
40
- ::ev-section-header{props.eyebrow="June 12, 2026" props.heading="One day, three tracks" props.subheading="Everything runs across a single day at The Foundry. Use the planner below to filter by track, or scroll for the full lineup."}
40
+ ::ev-section-header{props.eyebrow="June 12, 2026 · The Foundry" props.heading="One day, three tracks" props.subheading="Everything runs across a single day in Portland. Filter the planner by track, or scroll for the full timeline."}
41
41
  :::::
42
42
 
43
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem"}
44
- ::ev-section-header{props.eyebrow="Plan your day" props.heading="Filter by track" props.subheading="Tap a track to focus the agenda. Everything updates instantly — no page reload."}
43
+ :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
44
+ ::ev-section-header{props.eyebrow="Plan your day" props.heading="Filter by track" props.subheading="Tap a track to focus the agenda — everything updates instantly, no page reload."}
45
45
 
46
46
  ::ev-agenda-tabs
47
47
  :::::
48
48
 
49
- :::::section{style.maxWidth="var(--max-width-narrow)" style.margin="0 auto" style.padding="clamp(2rem, 5vw, 3.5rem) 1.5rem"}
50
- ::ev-section-header{props.heading="The full lineup" props.subheading="Every session, grouped by track." props.align="left"}
49
+ :::::section{style.maxWidth="var(--max-width-narrow)" style.margin="0 auto" style.padding="clamp(2rem, 5vw, 3.5rem) 1.5rem clamp(3.5rem, 8vw, 6rem)"}
50
+ ::ev-section-header{props.heading="The full timeline" props.subheading="Every session on the day, grouped by track." props.align="left"}
51
51
 
52
- ::::div{style.marginBottom="3rem"}
53
- :::h3{style.fontFamily="var(--font-heading)" style.fontSize="1.4rem" style.fontWeight="700" style.color="var(--color-primary)" style.margin="0 0 0.5rem" style.paddingBottom="0.5rem" style.borderBottom="2px solid var(--color-primary)"}
54
- Main Stage
52
+ ::::div{style.marginBottom="2.75rem"}
53
+ :::h3{style.display="flex" style.alignItems="center" style.gap="0.7rem" style.fontFamily="var(--font-heading)" style.fontSize="1.35rem" style.fontWeight="700" style.margin="0 0 1.4rem" style.color="var(--color-text-primary)"}
54
+ :span[]{style.width="0.7rem" style.height="0.7rem" style.borderRadius="50%" style.background="var(--color-accent)" style.boxShadow="0 0 12px rgba(34,224,255,0.7)"} Main Stage
55
55
  :::
56
+
56
57
  :::Array{items.ref="#/state/mainStage"}
57
58
  ::ev-session-row{props.time="${item.data.time}" props.title="${item.data.title}" props.track="${item.data.track}" props.speaker="${item.data.speaker}"}
58
59
  :::
59
60
  ::::
60
61
 
61
- ::::div{style.marginBottom="3rem"}
62
- :::h3{style.fontFamily="var(--font-heading)" style.fontSize="1.4rem" style.fontWeight="700" style.color="var(--color-primary)" style.margin="0 0 0.5rem" style.paddingBottom="0.5rem" style.borderBottom="2px solid var(--color-primary)"}
63
- Workshops
62
+ ::::div{style.marginBottom="2.75rem"}
63
+ :::h3{style.display="flex" style.alignItems="center" style.gap="0.7rem" style.fontFamily="var(--font-heading)" style.fontSize="1.35rem" style.fontWeight="700" style.margin="0 0 1.4rem" style.color="var(--color-text-primary)"}
64
+ :span[]{style.width="0.7rem" style.height="0.7rem" style.borderRadius="50%" style.background="var(--color-lime)" style.boxShadow="0 0 12px rgba(198,255,77,0.7)"} Workshops
64
65
  :::
66
+
65
67
  :::Array{items.ref="#/state/workshops"}
66
68
  ::ev-session-row{props.time="${item.data.time}" props.title="${item.data.title}" props.track="${item.data.track}" props.speaker="${item.data.speaker}"}
67
69
  :::
68
70
  ::::
69
71
 
70
- ::::div{style.marginBottom="1rem"}
71
- :::h3{style.fontFamily="var(--font-heading)" style.fontSize="1.4rem" style.fontWeight="700" style.color="var(--color-primary)" style.margin="0 0 0.5rem" style.paddingBottom="0.5rem" style.borderBottom="2px solid var(--color-primary)"}
72
- Design
72
+ ::::div
73
+ :::h3{style.display="flex" style.alignItems="center" style.gap="0.7rem" style.fontFamily="var(--font-heading)" style.fontSize="1.35rem" style.fontWeight="700" style.margin="0 0 1.4rem" style.color="var(--color-text-primary)"}
74
+ :span[]{style.width="0.7rem" style.height="0.7rem" style.borderRadius="50%" style.background="#ff6bb0" style.boxShadow="0 0 12px rgba(255,61,154,0.7)"} Design
73
75
  :::
76
+
74
77
  :::Array{items.ref="#/state/design"}
75
78
  ::ev-session-row{props.time="${item.data.time}" props.title="${item.data.title}" props.track="${item.data.track}" props.speaker="${item.data.speaker}"}
76
79
  :::
@@ -83,7 +86,7 @@ Design
83
86
 
84
87
  A restored ironworks turned event hall in Portland's Central Eastside — high ceilings, fast Wi-Fi, and coffee that never runs out. Both stages, all workshop rooms, and the hallway track are steps apart under one roof.
85
88
 
86
- Doors open at 8:00 AM. Bring a laptop for the workshop track.
89
+ Doors open at 8 AM sharp. Bring a laptop for the workshop track.
87
90
  :::
88
91
 
89
- ::ev-cta{props.eyebrow="Don't miss it" props.heading="Your seat is waiting" props.text="Sessions fill on a first-come basis on the day. A ticket guarantees your spot in every track." props.cta="Get Tickets" props.ctaHref="/tickets/"}
92
+ ::ev-cta{props.eyebrow="Don't miss it" props.heading="Your seat is waiting" props.text="Sessions fill on a first-come basis on the day. A ticket guarantees your spot in every track." props.cta="Get tickets" props.ctaHref="/tickets/"}
@@ -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=Space+Grotesk:wght@400;500;600;700&display=swap"
49
+ "href": "https://fonts.googleapis.com/css2?family=Sora:wght@400;500;600;700;800&family=Manrope:wght@400;500;600;700&display=swap"
37
50
  }
38
51
  }
39
52
  ],
@@ -44,27 +57,61 @@
44
57
  "--sm": "(max-width: 640px)"
45
58
  },
46
59
  "style": {
47
- "--color-primary": "#7c3aed",
48
- "--color-primary-hover": "#6d28d9",
49
- "--color-ink": "#17122b",
50
- "--color-bg-dark": "#140b2e",
51
- "--color-bg-cream": "#f5f3ff",
52
- "--color-bg-white": "#ffffff",
53
- "--color-text-primary": "#17122b",
60
+ "--color-primary": "#ff3d9a",
61
+ "--color-primary-hover": "#ff6bb4",
62
+ "--color-ink": "#050308",
63
+ "--color-bg": "#0a0711",
64
+ "--color-bg-dark": "#0a0711",
65
+ "--color-bg-cream": "#0f0b1c",
66
+ "--color-bg-white": "#150f28",
67
+ "--color-bg-elev": "#150f28",
68
+ "--color-bg-elev2": "#1e1638",
69
+ "--color-text-primary": "#f3eefe",
54
70
  "--color-text-white": "#ffffff",
55
- "--color-text-muted": "#6b7280",
56
- "--color-border": "#e5e0f5",
57
- "--color-accent": "#ec4899",
58
- "--font-heading": "'Space Grotesk', 'Segoe UI', system-ui, sans-serif",
71
+ "--color-text-muted": "#a99fc8",
72
+ "--color-border": "#2b2148",
73
+ "--color-accent": "#22e0ff",
74
+ "--color-cyan": "#22e0ff",
75
+ "--color-violet": "#a855f7",
76
+ "--color-lime": "#c6ff4d",
77
+ "--grad": "linear-gradient(115deg, #22e0ff 0%, #a855f7 50%, #ff3d9a 100%)",
78
+ "--grad-btn": "linear-gradient(120deg, #ff3d9a 0%, #a855f7 100%)",
79
+ "--grad-cyan": "linear-gradient(120deg, #22e0ff 0%, #7c74ff 100%)",
80
+ "--glow": "rgba(255, 61, 154, 0.5)",
81
+ "--glow-cyan": "rgba(34, 224, 255, 0.4)",
82
+ "--font-heading": "'Sora', 'Segoe UI', system-ui, -apple-system, sans-serif",
83
+ "--font-body": "'Manrope', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
59
84
  "--max-width": "1200px",
60
- "--max-width-narrow": "820px",
61
- "--radius": "0.75rem",
85
+ "--max-width-narrow": "860px",
86
+ "--radius": "1rem",
62
87
  "margin": "0",
63
88
  "padding": "0",
64
- "fontFamily": "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
89
+ "fontFamily": "var(--font-body)",
65
90
  "lineHeight": "1.6",
66
91
  "color": "var(--color-text-primary)",
67
- "backgroundColor": "var(--color-bg-white)"
92
+ "backgroundColor": "var(--color-bg)",
93
+ "h1": {
94
+ "fontFamily": "var(--font-heading)",
95
+ "color": "var(--color-text-primary)"
96
+ },
97
+ "h2": {
98
+ "fontFamily": "var(--font-heading)",
99
+ "color": "var(--color-text-primary)"
100
+ },
101
+ "h3": {
102
+ "fontFamily": "var(--font-heading)",
103
+ "color": "var(--color-text-primary)"
104
+ },
105
+ "h4": {
106
+ "fontFamily": "var(--font-heading)",
107
+ "color": "var(--color-text-primary)"
108
+ },
109
+ "strong": {
110
+ "color": "var(--color-text-primary)"
111
+ },
112
+ "a": {
113
+ "color": "var(--color-primary)"
114
+ }
68
115
  },
69
116
  "imports": {
70
117
  "Markdown": "@jxsuite/parser/Markdown.class.json",
@@ -74,7 +121,12 @@
74
121
  "optimize": true,
75
122
  "widths": [320, 640, 960, 1280, 1920],
76
123
  "formats": ["webp", "avif"],
77
- "quality": { "webp": 80, "avif": 65, "jpeg": 80, "png": 80 },
124
+ "quality": {
125
+ "webp": 80,
126
+ "avif": 65,
127
+ "jpeg": 80,
128
+ "png": 80
129
+ },
78
130
  "sizes": "(max-width: 768px) 100vw, 50vw",
79
131
  "lazyLoad": true
80
132
  },
@@ -85,11 +137,21 @@
85
137
  "schema": {
86
138
  "type": "object",
87
139
  "properties": {
88
- "title": { "type": "string" },
89
- "time": { "type": "string" },
90
- "track": { "type": "string" },
91
- "speaker": { "type": "string" },
92
- "order": { "type": "number" }
140
+ "title": {
141
+ "type": "string"
142
+ },
143
+ "time": {
144
+ "type": "string"
145
+ },
146
+ "track": {
147
+ "type": "string"
148
+ },
149
+ "speaker": {
150
+ "type": "string"
151
+ },
152
+ "order": {
153
+ "type": "number"
154
+ }
93
155
  },
94
156
  "required": ["title", "track"]
95
157
  }
@@ -0,0 +1,149 @@
1
+ {
2
+ "tagName": "fs-band",
3
+ "state": {
4
+ "kicker": "",
5
+ "heading": "",
6
+ "text": "",
7
+ "cta": "",
8
+ "ctaHref": "/contact/",
9
+ "image": { "type": "string", "format": "image", "default": "" }
10
+ },
11
+ "style": {
12
+ "display": "flex",
13
+ "alignItems": "center",
14
+ "justifyContent": "center",
15
+ "position": "relative",
16
+ "overflow": "hidden",
17
+ "minHeight": "clamp(360px, 58vh, 620px)",
18
+ "padding": "clamp(3.5rem, 8vw, 6rem) 1.5rem",
19
+ "textAlign": "center",
20
+ "color": "#ffffff",
21
+ "backgroundColor": "var(--duo-shadow)"
22
+ },
23
+ "children": [
24
+ {
25
+ "tagName": "div",
26
+ "style": { "position": "absolute", "inset": "0", "zIndex": "0" },
27
+ "children": [
28
+ {
29
+ "tagName": "img",
30
+ "attributes": {
31
+ "src": "${state.image}",
32
+ "alt": "",
33
+ "width": "1920",
34
+ "height": "1080",
35
+ "loading": "lazy"
36
+ },
37
+ "style": {
38
+ "position": "absolute",
39
+ "inset": "0",
40
+ "width": "100%",
41
+ "height": "100%",
42
+ "objectFit": "cover",
43
+ "objectPosition": "center 35%",
44
+ "filter": "grayscale(100%) contrast(1.12)"
45
+ }
46
+ },
47
+ {
48
+ "tagName": "div",
49
+ "style": {
50
+ "position": "absolute",
51
+ "inset": "0",
52
+ "backgroundColor": "var(--duo-shadow)",
53
+ "mixBlendMode": "lighten"
54
+ }
55
+ },
56
+ {
57
+ "tagName": "div",
58
+ "style": {
59
+ "position": "absolute",
60
+ "inset": "0",
61
+ "background": "linear-gradient(120deg, #d6157a 0%, #ff2e63 52%, #ff8c42 100%)",
62
+ "mixBlendMode": "multiply",
63
+ "opacity": "0.9"
64
+ }
65
+ },
66
+ {
67
+ "tagName": "div",
68
+ "style": {
69
+ "position": "absolute",
70
+ "inset": "0",
71
+ "background": "radial-gradient(ellipse 70% 70% at 50% 50%, rgba(20,6,16,0.15), rgba(20,6,16,0.55))"
72
+ }
73
+ }
74
+ ]
75
+ },
76
+ {
77
+ "tagName": "div",
78
+ "style": { "position": "relative", "zIndex": "5", "maxWidth": "var(--max-width-narrow)" },
79
+ "children": [
80
+ {
81
+ "tagName": "p",
82
+ "style": {
83
+ "display": "${state.kicker ? 'block' : 'none'}",
84
+ "margin": "0 0 1.1rem",
85
+ "fontFamily": "var(--font-heading)",
86
+ "textTransform": "uppercase",
87
+ "letterSpacing": "0.22em",
88
+ "fontSize": "0.8rem",
89
+ "fontWeight": "700",
90
+ "color": "rgba(255,255,255,0.85)"
91
+ },
92
+ "textContent": "${state.kicker}"
93
+ },
94
+ {
95
+ "tagName": "p",
96
+ "style": {
97
+ "margin": "0",
98
+ "fontFamily": "var(--font-display)",
99
+ "fontSize": "clamp(2.4rem, 7vw, 5rem)",
100
+ "fontWeight": "400",
101
+ "lineHeight": "0.95",
102
+ "letterSpacing": "0.01em",
103
+ "textTransform": "uppercase",
104
+ "textShadow": "0 14px 40px rgba(20,6,16,0.4)"
105
+ },
106
+ "textContent": "${state.heading}"
107
+ },
108
+ {
109
+ "tagName": "p",
110
+ "style": {
111
+ "display": "${state.text ? 'block' : 'none'}",
112
+ "margin": "1.4rem auto 0",
113
+ "maxWidth": "44ch",
114
+ "fontSize": "1.1rem",
115
+ "fontWeight": "500",
116
+ "lineHeight": "1.65",
117
+ "color": "rgba(255,255,255,0.92)"
118
+ },
119
+ "textContent": "${state.text}"
120
+ },
121
+ {
122
+ "tagName": "a",
123
+ "attributes": { "href": "${state.ctaHref}" },
124
+ "style": {
125
+ "display": "${state.cta ? 'inline-block' : 'none'}",
126
+ "marginTop": "2rem",
127
+ "backgroundColor": "#ffffff",
128
+ "color": "var(--color-ink)",
129
+ "padding": "1rem 2.3rem",
130
+ "borderRadius": "999px",
131
+ "fontFamily": "var(--font-heading)",
132
+ "fontSize": "0.9rem",
133
+ "fontWeight": "800",
134
+ "textTransform": "uppercase",
135
+ "letterSpacing": "0.06em",
136
+ "textDecoration": "none",
137
+ "boxShadow": "0 16px 40px -14px rgba(0,0,0,0.5)",
138
+ "transition": "transform 0.15s, box-shadow 0.15s",
139
+ ":hover": {
140
+ "transform": "translateY(-3px)",
141
+ "boxShadow": "0 22px 48px -14px rgba(0,0,0,0.55)"
142
+ }
143
+ },
144
+ "textContent": "${state.cta}"
145
+ }
146
+ ]
147
+ }
148
+ ]
149
+ }
@@ -0,0 +1,147 @@
1
+ {
2
+ "tagName": "fs-booking",
3
+ "state": {
4
+ "heading": "Reserve your spot"
5
+ },
6
+ "style": {
7
+ "display": "block",
8
+ "backgroundColor": "var(--color-bg-white)",
9
+ "border": "1px solid var(--color-border)",
10
+ "borderRadius": "var(--radius)",
11
+ "padding": "clamp(1.6rem, 4vw, 2.4rem)",
12
+ "boxShadow": "0 18px 44px -30px rgba(26,15,24,0.4)",
13
+ "& input": {
14
+ "width": "100%",
15
+ "padding": "0.85rem 1rem",
16
+ "border": "1px solid var(--color-border)",
17
+ "borderRadius": "var(--radius-sm)",
18
+ "fontSize": "1rem",
19
+ "fontFamily": "var(--font-body)",
20
+ "backgroundColor": "var(--color-bg-blush)",
21
+ "color": "var(--color-text-primary)",
22
+ "boxSizing": "border-box",
23
+ "transition": "border-color 0.15s, box-shadow 0.15s"
24
+ },
25
+ "& textarea": {
26
+ "width": "100%",
27
+ "padding": "0.85rem 1rem",
28
+ "border": "1px solid var(--color-border)",
29
+ "borderRadius": "var(--radius-sm)",
30
+ "fontSize": "1rem",
31
+ "fontFamily": "var(--font-body)",
32
+ "backgroundColor": "var(--color-bg-blush)",
33
+ "color": "var(--color-text-primary)",
34
+ "boxSizing": "border-box",
35
+ "resize": "vertical",
36
+ "transition": "border-color 0.15s, box-shadow 0.15s"
37
+ },
38
+ "& input:focus": {
39
+ "outline": "none",
40
+ "borderColor": "var(--color-primary)",
41
+ "boxShadow": "0 0 0 3px rgba(255,46,99,0.14)"
42
+ },
43
+ "& textarea:focus": {
44
+ "outline": "none",
45
+ "borderColor": "var(--color-primary)",
46
+ "boxShadow": "0 0 0 3px rgba(255,46,99,0.14)"
47
+ }
48
+ },
49
+ "children": [
50
+ {
51
+ "tagName": "form",
52
+ "attributes": { "action": "#", "method": "post" },
53
+ "style": { "display": "grid", "gap": "0.9rem" },
54
+ "children": [
55
+ {
56
+ "tagName": "h3",
57
+ "style": {
58
+ "fontFamily": "var(--font-display)",
59
+ "fontSize": "clamp(1.7rem, 3.5vw, 2.2rem)",
60
+ "fontWeight": "400",
61
+ "textTransform": "uppercase",
62
+ "letterSpacing": "0.01em",
63
+ "margin": "0 0 0.4rem"
64
+ },
65
+ "textContent": "${state.heading}"
66
+ },
67
+ {
68
+ "tagName": "input",
69
+ "attributes": {
70
+ "type": "text",
71
+ "name": "name",
72
+ "placeholder": "Your name",
73
+ "required": "true",
74
+ "aria-label": "Your name"
75
+ }
76
+ },
77
+ {
78
+ "tagName": "input",
79
+ "attributes": {
80
+ "type": "email",
81
+ "name": "email",
82
+ "placeholder": "Email address",
83
+ "required": "true",
84
+ "aria-label": "Email address"
85
+ }
86
+ },
87
+ {
88
+ "tagName": "input",
89
+ "attributes": {
90
+ "type": "text",
91
+ "name": "class",
92
+ "placeholder": "Which class? e.g. Vinyasa Flow",
93
+ "aria-label": "Class you're interested in"
94
+ }
95
+ },
96
+ {
97
+ "tagName": "input",
98
+ "attributes": { "type": "date", "name": "date", "aria-label": "Preferred date" }
99
+ },
100
+ {
101
+ "tagName": "textarea",
102
+ "attributes": {
103
+ "name": "message",
104
+ "rows": "4",
105
+ "placeholder": "New to movement? Any injuries or goals we should know about?",
106
+ "aria-label": "Message"
107
+ }
108
+ },
109
+ {
110
+ "tagName": "button",
111
+ "attributes": { "type": "submit" },
112
+ "style": {
113
+ "justifySelf": "start",
114
+ "marginTop": "0.25rem",
115
+ "background": "var(--grad-hot)",
116
+ "color": "#ffffff",
117
+ "padding": "0.95rem 2.1rem",
118
+ "border": "none",
119
+ "borderRadius": "999px",
120
+ "fontFamily": "var(--font-heading)",
121
+ "fontSize": "0.88rem",
122
+ "fontWeight": "800",
123
+ "textTransform": "uppercase",
124
+ "letterSpacing": "0.06em",
125
+ "cursor": "pointer",
126
+ "boxShadow": "0 14px 32px -14px rgba(255,46,99,0.6)",
127
+ "transition": "transform 0.15s, box-shadow 0.15s",
128
+ ":hover": {
129
+ "transform": "translateY(-2px)",
130
+ "boxShadow": "0 20px 40px -14px rgba(255,46,99,0.7)"
131
+ }
132
+ },
133
+ "textContent": "Request a spot →"
134
+ },
135
+ {
136
+ "tagName": "p",
137
+ "style": {
138
+ "fontSize": "0.82rem",
139
+ "color": "var(--color-text-muted)",
140
+ "margin": "0.25rem 0 0"
141
+ },
142
+ "textContent": "This is a demo form. Wire it to your booking provider or email in pages/contact.md."
143
+ }
144
+ ]
145
+ }
146
+ ]
147
+ }