@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
@@ -15,45 +15,65 @@
15
15
  "maxWidth": "460px",
16
16
  "margin": "0 auto",
17
17
  "backgroundColor": "var(--color-bg-white)",
18
- "border": "1px solid var(--color-border)",
18
+ "border": "1px solid var(--color-border-strong)",
19
19
  "borderRadius": "1rem",
20
20
  "overflow": "hidden",
21
- "boxShadow": "0 20px 60px rgba(15,23,42,0.1)"
21
+ "boxShadow": "0 30px 70px -34px rgba(15,20,36,0.5)"
22
22
  },
23
23
  "children": [
24
24
  {
25
25
  "tagName": "div",
26
26
  "style": {
27
- "display": "${state.badge ? 'block' : 'none'}",
27
+ "display": "${state.badge ? 'flex' : 'none'}",
28
+ "alignItems": "center",
29
+ "justifyContent": "center",
30
+ "gap": "0.5rem",
28
31
  "backgroundColor": "var(--color-primary)",
29
32
  "color": "var(--color-text-white)",
30
- "textAlign": "center",
31
- "padding": "0.6rem 1rem",
32
- "fontSize": "0.8rem",
33
- "fontWeight": "700",
34
- "textTransform": "uppercase",
35
- "letterSpacing": "0.08em"
33
+ "padding": "0.65rem 1rem",
34
+ "fontFamily": "var(--font-mono)",
35
+ "fontSize": "0.78rem",
36
+ "fontWeight": "600",
37
+ "letterSpacing": "0.02em"
36
38
  },
37
- "textContent": "${state.badge}"
39
+ "children": [
40
+ {
41
+ "tagName": "span",
42
+ "style": {
43
+ "width": "0.45rem",
44
+ "height": "0.45rem",
45
+ "borderRadius": "999px",
46
+ "backgroundColor": "var(--color-accent)"
47
+ }
48
+ },
49
+ { "tagName": "span", "textContent": "${state.badge}" }
50
+ ]
38
51
  },
39
52
  {
40
53
  "tagName": "div",
41
- "style": { "padding": "clamp(1.75rem, 4vw, 2.5rem)" },
54
+ "style": { "padding": "clamp(1.85rem, 4vw, 2.5rem)" },
42
55
  "children": [
43
56
  {
44
57
  "tagName": "div",
45
58
  "style": {
46
- "fontFamily": "var(--font-heading)",
47
- "fontSize": "1.1rem",
48
- "fontWeight": "700",
59
+ "fontFamily": "var(--font-mono)",
60
+ "fontSize": "0.8rem",
61
+ "fontWeight": "600",
62
+ "textTransform": "uppercase",
63
+ "letterSpacing": "0.08em",
49
64
  "color": "var(--color-text-muted)",
50
- "marginBottom": "0.5rem"
65
+ "marginBottom": "0.75rem"
51
66
  },
52
67
  "textContent": "${state.plan}"
53
68
  },
54
69
  {
55
70
  "tagName": "div",
56
- "style": { "display": "flex", "alignItems": "baseline", "gap": "0.4rem" },
71
+ "style": {
72
+ "display": "flex",
73
+ "alignItems": "baseline",
74
+ "gap": "0.5rem",
75
+ "flexWrap": "wrap"
76
+ },
57
77
  "children": [
58
78
  {
59
79
  "tagName": "span",
@@ -62,7 +82,8 @@
62
82
  "fontSize": "clamp(2.5rem, 6vw, 3.25rem)",
63
83
  "fontWeight": "800",
64
84
  "letterSpacing": "-0.03em",
65
- "lineHeight": "1"
85
+ "lineHeight": "1",
86
+ "color": "var(--color-text-primary)"
66
87
  },
67
88
  "textContent": "${state.price}"
68
89
  },
@@ -70,8 +91,9 @@
70
91
  "tagName": "span",
71
92
  "style": {
72
93
  "display": "${state.period ? 'inline' : 'none'}",
94
+ "fontFamily": "var(--font-mono)",
73
95
  "color": "var(--color-text-muted)",
74
- "fontSize": "1rem",
96
+ "fontSize": "0.9rem",
75
97
  "fontWeight": "500"
76
98
  },
77
99
  "textContent": "${state.period}"
@@ -93,8 +115,26 @@
93
115
  "tagName": "div",
94
116
  "style": {
95
117
  "margin": "0 0 1.75rem",
118
+ "paddingTop": "1.5rem",
119
+ "borderTop": "1px solid var(--color-border)",
96
120
  "fontSize": "0.98rem",
97
- "lineHeight": "1.6"
121
+ "lineHeight": "1.6",
122
+ "& ul": { "listStyle": "none", "margin": "0", "padding": "0" },
123
+ "& li": {
124
+ "position": "relative",
125
+ "paddingLeft": "1.7rem",
126
+ "marginBottom": "0.65rem",
127
+ "color": "var(--color-text-primary)"
128
+ },
129
+ "& li::before": {
130
+ "content": "'✔'",
131
+ "position": "absolute",
132
+ "left": "0",
133
+ "top": "0",
134
+ "color": "#65a30d",
135
+ "fontWeight": "700",
136
+ "fontFamily": "var(--font-mono)"
137
+ }
98
138
  },
99
139
  "children": [{ "tagName": "slot" }]
100
140
  },
@@ -106,13 +146,17 @@
106
146
  "textAlign": "center",
107
147
  "backgroundColor": "var(--color-primary)",
108
148
  "color": "var(--color-text-white)",
109
- "padding": "0.9rem 1.5rem",
110
- "borderRadius": "var(--radius)",
149
+ "padding": "0.95rem 1.5rem",
150
+ "borderRadius": "999px",
111
151
  "fontSize": "1.05rem",
112
- "fontWeight": "700",
152
+ "fontWeight": "600",
113
153
  "textDecoration": "none",
114
- "transition": "background-color 0.15s",
115
- ":hover": { "backgroundColor": "var(--color-primary-hover)" }
154
+ "boxShadow": "0 14px 30px -14px rgba(79,70,229,0.9)",
155
+ "transition": "background-color 0.15s, transform 0.15s",
156
+ ":hover": {
157
+ "backgroundColor": "var(--color-primary-hover)",
158
+ "transform": "translateY(-1px)"
159
+ }
116
160
  },
117
161
  "textContent": "${state.cta}"
118
162
  },
@@ -122,7 +166,8 @@
122
166
  "display": "${state.note ? 'block' : 'none'}",
123
167
  "margin": "1rem 0 0",
124
168
  "textAlign": "center",
125
- "fontSize": "0.85rem",
169
+ "fontFamily": "var(--font-mono)",
170
+ "fontSize": "0.78rem",
126
171
  "color": "var(--color-text-muted)"
127
172
  },
128
173
  "textContent": "${state.note}"
@@ -2,6 +2,7 @@
2
2
  "tagName": "co-section-header",
3
3
  "state": {
4
4
  "eyebrow": "",
5
+ "index": "",
5
6
  "heading": "",
6
7
  "subheading": "",
7
8
  "align": "center"
@@ -9,32 +10,49 @@
9
10
  "style": {
10
11
  "display": "block",
11
12
  "maxWidth": "var(--max-width-narrow)",
12
- "margin": "0 auto 2.5rem",
13
+ "margin": "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",
20
+ "display": "${state.eyebrow ? 'flex' : 'none'}",
21
+ "alignItems": "center",
22
+ "gap": "0.6rem",
23
+ "justifyContent": "${state.align === 'center' ? 'center' : 'flex-start'}",
24
+ "fontFamily": "var(--font-mono)",
22
25
  "fontSize": "0.8rem",
23
- "fontWeight": "700",
24
- "color": "var(--color-primary)",
25
- "margin": "0 0 0.75rem"
26
+ "fontWeight": "600",
27
+ "margin": "0 0 0.9rem"
26
28
  },
27
- "textContent": "${state.eyebrow}"
29
+ "children": [
30
+ { "tagName": "span", "style": { "color": "var(--color-text-faint)" }, "textContent": "//" },
31
+ {
32
+ "tagName": "span",
33
+ "style": { "color": "var(--color-primary)", "letterSpacing": "0.02em" },
34
+ "textContent": "${state.eyebrow}"
35
+ },
36
+ {
37
+ "tagName": "span",
38
+ "style": {
39
+ "display": "${state.index ? 'inline' : 'none'}",
40
+ "color": "var(--color-text-faint)"
41
+ },
42
+ "textContent": "· ${state.index}"
43
+ }
44
+ ]
28
45
  },
29
46
  {
30
47
  "tagName": "h2",
31
48
  "style": {
32
49
  "fontFamily": "var(--font-heading)",
33
- "fontSize": "clamp(1.9rem, 4vw, 2.6rem)",
50
+ "fontSize": "clamp(1.9rem, 3.8vw, 2.65rem)",
34
51
  "fontWeight": "800",
35
- "lineHeight": "1.15",
36
- "letterSpacing": "-0.02em",
37
- "margin": "0"
52
+ "lineHeight": "1.12",
53
+ "letterSpacing": "-0.03em",
54
+ "margin": "0",
55
+ "color": "var(--color-text-primary)"
38
56
  },
39
57
  "textContent": "${state.heading}"
40
58
  },
@@ -43,9 +61,12 @@
43
61
  "style": {
44
62
  "display": "${state.subheading ? 'block' : 'none'}",
45
63
  "fontSize": "1.1rem",
46
- "lineHeight": "1.7",
64
+ "lineHeight": "1.65",
47
65
  "color": "var(--color-text-muted)",
48
- "margin": "1rem 0 0"
66
+ "margin": "1rem 0 0",
67
+ "maxWidth": "${state.align === 'center' ? '60ch' : 'none'}",
68
+ "marginLeft": "${state.align === 'center' ? 'auto' : '0'}",
69
+ "marginRight": "${state.align === 'center' ? 'auto' : '0'}"
49
70
  },
50
71
  "textContent": "${state.subheading}"
51
72
  }
@@ -6,47 +6,102 @@
6
6
  "role": ""
7
7
  },
8
8
  "style": {
9
- "display": "block",
10
- "padding": "1.75rem",
9
+ "display": "flex",
10
+ "flexDirection": "column",
11
+ "padding": "1.85rem",
11
12
  "backgroundColor": "var(--color-bg-white)",
12
13
  "border": "1px solid var(--color-border)",
13
14
  "borderRadius": "var(--radius)",
14
- "boxShadow": "0 4px 20px rgba(15,23,42,0.05)"
15
+ "boxShadow": "0 8px 26px -18px rgba(15,20,36,0.4)"
15
16
  },
16
17
  "children": [
17
18
  {
18
19
  "tagName": "div",
19
20
  "style": {
20
- "color": "#f59e0b",
21
- "fontSize": "1.1rem",
22
- "marginBottom": "0.75rem",
23
- "letterSpacing": "0.1em"
21
+ "display": "flex",
22
+ "alignItems": "center",
23
+ "gap": "0.6rem",
24
+ "marginBottom": "1rem"
24
25
  },
25
- "textContent": "★★★★★"
26
+ "children": [
27
+ {
28
+ "tagName": "span",
29
+ "style": { "color": "#eab308", "fontSize": "0.95rem", "letterSpacing": "0.1em" },
30
+ "textContent": "★★★★★"
31
+ },
32
+ {
33
+ "tagName": "span",
34
+ "style": {
35
+ "fontFamily": "var(--font-mono)",
36
+ "fontSize": "0.7rem",
37
+ "color": "#65a30d",
38
+ "fontWeight": "600"
39
+ },
40
+ "textContent": "hired ✔"
41
+ }
42
+ ]
26
43
  },
27
44
  {
28
45
  "tagName": "p",
29
46
  "style": {
30
47
  "fontFamily": "var(--font-heading)",
31
- "fontSize": "1.1rem",
32
- "lineHeight": "1.6",
48
+ "fontSize": "1.08rem",
49
+ "lineHeight": "1.55",
33
50
  "fontWeight": "500",
34
- "margin": "0 0 1.25rem"
51
+ "letterSpacing": "-0.01em",
52
+ "margin": "0 0 1.35rem",
53
+ "color": "var(--color-text-primary)",
54
+ "flex": "1"
35
55
  },
36
56
  "textContent": "“${state.quote}”"
37
57
  },
38
58
  {
39
59
  "tagName": "div",
60
+ "style": {
61
+ "display": "flex",
62
+ "alignItems": "center",
63
+ "gap": "0.75rem",
64
+ "paddingTop": "1rem",
65
+ "borderTop": "1px solid var(--color-border)"
66
+ },
40
67
  "children": [
41
68
  {
42
69
  "tagName": "div",
43
- "style": { "fontWeight": "700" },
44
- "textContent": "${state.author}"
70
+ "style": {
71
+ "flex": "none",
72
+ "display": "flex",
73
+ "alignItems": "center",
74
+ "justifyContent": "center",
75
+ "width": "2.4rem",
76
+ "height": "2.4rem",
77
+ "borderRadius": "999px",
78
+ "backgroundColor": "var(--color-indigo-050)",
79
+ "border": "1px solid var(--color-indigo-line)",
80
+ "color": "var(--color-primary)",
81
+ "fontFamily": "var(--font-mono)",
82
+ "fontWeight": "700",
83
+ "fontSize": "1rem"
84
+ },
85
+ "textContent": "❯"
45
86
  },
46
87
  {
47
88
  "tagName": "div",
48
- "style": { "fontSize": "0.9rem", "color": "var(--color-text-muted)" },
49
- "textContent": "${state.role}"
89
+ "children": [
90
+ {
91
+ "tagName": "div",
92
+ "style": {
93
+ "fontWeight": "700",
94
+ "fontSize": "0.95rem",
95
+ "color": "var(--color-text-primary)"
96
+ },
97
+ "textContent": "${state.author}"
98
+ },
99
+ {
100
+ "tagName": "div",
101
+ "style": { "fontSize": "0.85rem", "color": "var(--color-text-muted)" },
102
+ "textContent": "${state.role}"
103
+ }
104
+ ]
50
105
  }
51
106
  ]
52
107
  }
@@ -3,18 +3,17 @@ title: "About — Craft & Code Academy"
3
3
  ---
4
4
 
5
5
  :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
6
- ::co-section-header{props.eyebrow="Our approach" props.heading="We teach the way people actually learn" props.subheading="By building real things, with real support, in a real community."}
6
+ ::co-section-header{props.eyebrow="our approach" props.heading="We teach the way people actually learn" props.subheading="By building real things, with real support, in a real community."}
7
7
  :::::
8
8
 
9
9
  :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
10
10
  ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="1fr 1fr" style.gap="clamp(2rem, 5vw, 4rem)" style.alignItems="center" style.--md.gridTemplateColumns="1fr"}
11
11
  :::div
12
- ::img{src="/images/about.jpg" alt="Students studying code together" loading="lazy" style.width="100%" style.height="auto" style.borderRadius="var(--radius)" style.display="block" style.boxShadow="0 12px 40px rgba(15,23,42,0.12)"}
12
+ ::img{src="/images/about.jpg" alt="Students studying code together" loading="lazy" style.width="100%" style.height="auto" style.borderRadius="var(--radius)" style.display="block" style.border="1px solid var(--color-border)" style.boxShadow="0 24px 60px -30px rgba(15,20,36,0.5)"}
13
13
  :::
14
14
 
15
- :::div{style.fontSize="1.08rem" style.lineHeight="1.8"}
16
-
17
- ### Built by engineers who wanted a better way in
15
+ :::div{style.fontSize="1.06rem" style.lineHeight="1.8"}
16
+ ::co-section-header{props.eyebrow="the origin" props.heading="Built by engineers who wanted a better way in" props.align="left"}
18
17
 
19
18
  Craft & Code Academy started with a frustration: most people who want to code get stuck in a maze of half-finished tutorials. So we built the program we wish we'd had — project-based from day one, with mentors who've shipped real software and a cohort that learns together.
20
19
 
@@ -24,21 +23,21 @@ We keep classes small on purpose. When you get stuck, someone is there. When you
24
23
  :::::
25
24
 
26
25
  :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
27
- ::co-section-header{props.eyebrow="What we stand for" props.heading="Three things we won't compromise on"}
26
+ ::co-section-header{props.eyebrow="what we stand for" props.index="3 principles" props.heading="Three things we won't compromise on"}
28
27
 
29
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"}
30
- ::co-outcome-card{props.icon="🛠️" props.title="Learn by building" props.text="Every concept is anchored to a project. You leave each module with something real to show."}
29
+ ::co-outcome-card{props.number="01" props.icon="🛠️" props.title="Learn by building" props.text="Every concept is anchored to a project. You leave each module with something real to show."}
31
30
 
32
- ::co-outcome-card{props.icon="🤝" props.title="Never stuck alone" props.text="Live mentorship and small-group code review mean help is always a moment away."}
31
+ ::co-outcome-card{props.number="02" props.icon="🤝" props.title="Never stuck alone" props.text="Live mentorship and small-group code review mean help is always a moment away."}
33
32
 
34
- ::co-outcome-card{props.icon="🎯" props.title="Job-focused" props.text="We reverse-engineer what junior roles actually require and teach straight to it."}
33
+ ::co-outcome-card{props.number="03" props.icon="🎯" props.title="Job-focused" props.text="We reverse-engineer what junior roles actually require and teach straight to it."}
35
34
  ::::
36
35
  :::::
37
36
 
38
37
  :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
39
- ::co-section-header{props.eyebrow="Your instructor" props.heading="Meet Maya"}
38
+ ::co-section-header{props.eyebrow="your instructor" props.heading="Meet Maya"}
40
39
 
41
40
  ::co-instructor-card{props.name="Maya Okonkwo" props.role="Lead Instructor · ex-Staff Engineer" props.bio="Maya spent a decade building products at startups and a large fintech before teaching full-time. She's mentored hundreds of career-changers and believes anyone can learn to code with the right structure and support." props.image="/images/instructor.jpg"}
42
41
  :::::
43
42
 
44
- ::co-cta{props.heading="Come build with us." props.text="If you're ready to put in the work, we'll make sure you're never doing it alone." props.cta="Enroll Now" props.ctaHref="/enroll/"}
43
+ ::co-cta{props.kicker="$ ./join --cohort fall" props.heading="Come build with us." props.text="If you're ready to put in the work, we'll make sure you're never doing it alone." props.cta="Enroll Now" props.ctaHref="/enroll/" props.note="Applications reviewed on a rolling basis"}
@@ -11,11 +11,15 @@ state:
11
11
  ---
12
12
 
13
13
  :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
14
- ::co-section-header{props.eyebrow="14 weeks · 6 modules" props.heading="The full curriculum" props.subheading="A structured path from your first line of code to a deployed, full-stack application — with mentorship at every step."}
14
+ ::co-section-header{props.eyebrow="the curriculum" props.index="6 modules · 14 weeks" props.heading="The full curriculum" props.subheading="A structured path from your first line of code to a deployed, full-stack application — with mentorship at every step."}
15
15
  :::::
16
16
 
17
17
  :::::section{style.maxWidth="var(--max-width-narrow)" style.margin="0 auto" style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem"}
18
- ::::div{style.display="grid" style.gap="1rem"}
18
+ ::::div{style.marginBottom="2rem" style.fontFamily="var(--font-mono)" style.fontSize="0.82rem" style.color="var(--color-text-muted)"}
19
+ // 14-week track · one module builds on the last
20
+ ::::
21
+
22
+ ::::div{style.display="grid" style.gap="0"}
19
23
  :::Array{items.ref="#/state/modules"}
20
24
  ::co-module-card{props.order="${item.data.order}" props.title="${item.data.title}" props.summary="${item.data.summary}" props.duration="${item.data.duration}"}
21
25
  :::
@@ -23,9 +27,9 @@ state:
23
27
  :::::
24
28
 
25
29
  :::::section{style.padding="clamp(3rem, 8vw, 5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
26
- ::co-section-header{props.eyebrow="Explore interactively" props.heading="Open a module to see its lessons"}
30
+ ::co-section-header{props.eyebrow="explore interactively" props.heading="Open a module to see its lessons"}
27
31
 
28
32
  ::co-curriculum-accordion
29
33
  :::::
30
34
 
31
- ::co-cta{props.heading="This could be your next 14 weeks." props.text="Every module builds toward a capstone you'll be proud to show. Reserve your seat in the next cohort." props.cta="Enroll Now" props.ctaHref="/enroll/"}
35
+ ::co-cta{props.kicker="$ git commit -m 'my first job'" props.heading="This could be your next 14 weeks." props.text="Every module builds toward a capstone you'll be proud to show. Reserve your seat in the next cohort." props.cta="Enroll Now" props.ctaHref="/enroll/" props.note="Fall cohort starts September 8"}
@@ -3,14 +3,13 @@ title: "Enroll — Craft & Code Academy"
3
3
  ---
4
4
 
5
5
  :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
6
- ::co-section-header{props.eyebrow="Admissions open" props.heading="Reserve your seat" props.subheading="One transparent price, everything included, and flexible payment plans. The fall cohort is limited to 24 students."}
6
+ ::co-section-header{props.eyebrow="admissions open" props.heading="Reserve your seat" props.subheading="One transparent price, everything included, and flexible payment plans. The fall cohort is limited to 24 students."}
7
7
  :::::
8
8
 
9
9
  :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
10
10
  ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="1fr 1fr" style.gap="clamp(2rem, 5vw, 3.5rem)" style.alignItems="center" style.--md.gridTemplateColumns="1fr"}
11
- :::div{style.fontSize="1.08rem" style.lineHeight="1.8"}
12
-
13
- ### Everything you need to get hired
11
+ :::div{style.fontSize="1.06rem" style.lineHeight="1.8"}
12
+ ::co-section-header{props.eyebrow="what's included" props.heading="Everything you need to get hired" props.align="left"}
14
13
 
15
14
  Your tuition covers 14 weeks of live instruction, one-on-one mentorship, small-group code review, and career support that continues after you graduate. No upsells, no surprise fees.
16
15
 
@@ -22,7 +21,7 @@ Not sure if it's the right fit? Book a call with our admissions team and we'll w
22
21
  - **✓** 7-day full refund, no questions asked
23
22
  :::
24
23
 
25
- :::co-pricing{props.badge="Fall cohort · 24 seats" props.plan="Full Program" props.price="$8,900" props.period="or 6 monthly payments" props.description="14 weeks of live instruction, mentorship, and career support — end to end." props.cta="Apply Now" props.ctaHref="#apply" props.note="7-day full refund · Scholarships available"}
24
+ :::co-pricing{props.badge="Fall cohort · 24 seats" props.plan="Full Program" props.price="$8,900" props.period="or 6 monthly payments" props.description="14 weeks of live instruction, mentorship, and career support — end to end." props.cta="Apply Now" props.ctaHref="#apply" props.note="7-day full refund · scholarships available"}
26
25
 
27
26
  - Six project-based modules
28
27
  - Live mentorship & small-group code review
@@ -34,13 +33,13 @@ Not sure if it's the right fit? Book a call with our admissions team and we'll w
34
33
  :::::
35
34
 
36
35
  :::::section{id="apply" style.maxWidth="var(--max-width-narrow)" style.margin="0 auto" style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem"}
37
- ::co-section-header{props.eyebrow="Apply" props.heading="Start your application" props.subheading="Tell us a little about yourself and admissions will be in touch within two business days."}
36
+ ::co-section-header{props.eyebrow="apply" props.heading="Start your application" props.subheading="Tell us a little about yourself and admissions will be in touch within two business days."}
38
37
 
39
38
  ::co-application
40
39
  :::::
41
40
 
42
41
  :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
43
- ::co-section-header{props.eyebrow="FAQ" props.heading="Before you apply"}
42
+ ::co-section-header{props.eyebrow="faq" props.heading="Before you apply"}
44
43
 
45
44
  ::co-faq
46
45
  :::::
@@ -2,61 +2,63 @@
2
2
  title: "Craft & Code Academy — Become a web developer in 14 weeks"
3
3
  ---
4
4
 
5
- ::co-hero{props.eyebrow="Online web development bootcamp" props.heading="Become a web developer in 14 weeks." props.subheading="Craft & Code Academy is a project-based bootcamp with live mentorship. Six guided modules take you from your first line of HTML to a deployed, full-stack capstone." props.cta="Enroll Now" props.ctaHref="/enroll/" props.cta2="Explore the Curriculum" props.cta2Href="/curriculum/" props.note="Next cohort starts September 8 · Limited to 24 seats" props.bg="/images/hero.jpg"}
5
+ ::co-hero{props.eyebrow="online web-dev bootcamp" props.heading="Become a web developer" props.headingAccent="in 14 weeks." props.subheading="A project-based bootcamp with live mentorship. Six guided modules take you from your first line of HTML to a deployed, full-stack capstone — job-ready, on a clear schedule." props.cta="Enroll Now" props.ctaHref="/enroll/" props.cta2="View Curriculum" props.cta2Href="/curriculum/" props.note="Next cohort starts Sept 8 · limited to 24 seats" props.o1="14 weeks" props.o2="job-ready" props.o3="live cohort"}
6
6
 
7
- :::::section{style.padding="clamp(2.5rem, 5vw, 3.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
8
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="1.5rem" style.--sm.gridTemplateColumns="repeat(2, 1fr)"}
9
- ::co-stat{props.value="1,200+" props.label="Graduates hired"}
10
-
11
- ::co-stat{props.value="94%" props.label="Land a dev role"}
12
-
13
- ::co-stat{props.value="14 wks" props.label="Guided program"}
14
-
15
- ::co-stat{props.value="4.9/5" props.label="Student rating"}
16
- ::::
17
- :::::
7
+ ::co-outcomes{props.kicker="track record" props.heading="Structure that gets people hired" props.n1="1,200+" props.l1="Graduates hired" props.n2="92%" props.l2="Hired within 6 months" props.n3="14 wks" props.l3="Guided, cohort-based" props.n4="4.9/5" props.l4="Average student rating"}
18
8
 
19
9
  :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
20
- ::co-section-header{props.eyebrow="What you'll learn" props.heading="Skills that get you hired" props.subheading="Every module is hands-on. You don't just watch — you build, review, and ship."}
10
+ ::co-section-header{props.eyebrow="what you'll learn" props.index="6 skill areas" props.heading="Skills that get you hired" props.subheading="Every module is hands-on. You don't just watch — you build, review, and ship."}
21
11
 
22
12
  ::::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
- ::co-outcome-card{props.icon="🧩" props.title="Think like an engineer" props.text="Break problems down, reason about code, and debug with confidence — the durable skills behind every framework."}
13
+ ::co-outcome-card{props.number="01" props.icon="🧩" props.title="Think like an engineer" props.text="Break problems down, reason about code, and debug with confidence — the durable skills behind every framework."}
24
14
 
25
- ::co-outcome-card{props.icon="🎨" props.title="Build real interfaces" props.text="Responsive, accessible UIs with semantic HTML, modern CSS, and component-driven JavaScript."}
15
+ ::co-outcome-card{props.number="02" props.icon="🎨" props.title="Build real interfaces" props.text="Responsive, accessible UIs with semantic HTML, modern CSS, and component-driven JavaScript."}
26
16
 
27
- ::co-outcome-card{props.icon="⚡" props.title="Ship interactive apps" props.text="Wire up state, events, and live APIs to create apps that respond instantly to your users."}
17
+ ::co-outcome-card{props.number="03" props.icon="⚡" props.title="Ship interactive apps" props.text="Wire up state, events, and live APIs to create apps that respond instantly to your users."}
28
18
 
29
- ::co-outcome-card{props.icon="🗄️" props.title="Work full-stack" props.text="Design REST APIs, model relational data, and connect a real backend to your frontend."}
19
+ ::co-outcome-card{props.number="04" props.icon="🗄️" props.title="Work full-stack" props.text="Design REST APIs, model relational data, and connect a real backend to your frontend."}
30
20
 
31
- ::co-outcome-card{props.icon="🚀" props.title="Deploy to production" props.text="Take projects from your laptop to the cloud with Git, CI, and modern hosting."}
21
+ ::co-outcome-card{props.number="05" props.icon="🚀" props.title="Deploy to production" props.text="Take projects from your laptop to the cloud with Git, CI, and modern hosting."}
32
22
 
33
- ::co-outcome-card{props.icon="💼" props.title="Graduate job-ready" props.text="Leave with a portfolio, a full-stack capstone, and the interview prep to back it up."}
23
+ ::co-outcome-card{props.number="06" props.icon="💼" props.title="Graduate job-ready" props.text="Leave with a portfolio, a full-stack capstone, and the interview prep to back it up."}
34
24
  ::::
35
25
  :::::
36
26
 
37
27
  :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
38
- ::co-section-header{props.eyebrow="The curriculum" props.heading="Six modules, one clear path" props.subheading="Click any module to see the lessons inside. It all builds toward your capstone."}
28
+ ::co-section-header{props.eyebrow="the curriculum" props.index="14 weeks" props.heading="Six modules, one clear path" props.subheading="Click any module to see the lessons inside. It all builds toward your capstone."}
39
29
 
40
30
  ::co-curriculum-accordion
41
31
 
42
32
  ::::div{style.textAlign="center" style.marginTop="2rem"}
43
- :::a{href="/curriculum/" style.display="inline-block" style.color="var(--color-primary)" style.fontWeight="700" style.textDecoration="none" style.fontSize="1.05rem"}
33
+ :::a{href="/curriculum/" style.display="inline-flex" style.alignItems="center" style.gap="0.4rem" style.fontFamily="var(--font-mono)" style.color="var(--color-primary)" style.fontWeight="600" style.textDecoration="none" style.fontSize="0.9rem"}
44
34
  See the full curriculum →
45
35
  :::
46
36
  ::::
47
37
  :::::
48
38
 
49
39
  :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
50
- ::co-section-header{props.eyebrow="Your instructor" props.heading="Learn from someone who's shipped"}
40
+ ::co-section-header{props.eyebrow="your instructor" props.heading="Learn from someone who's shipped"}
51
41
 
52
42
  ::co-instructor-card{props.name="Maya Okonkwo" props.role="Lead Instructor · ex-Staff Engineer" props.bio="Maya spent a decade building products at startups and a large fintech before teaching full-time. She's mentored hundreds of career-changers and believes anyone can learn to code with the right structure and support." props.image="/images/instructor.jpg"}
43
+
44
+ ::::div{style.maxWidth="var(--max-width-narrow)" style.margin="2.5rem auto 0.9rem" style.textAlign="center" style.fontFamily="var(--font-mono)" style.fontSize="0.8rem" style.color="var(--color-text-muted)"}
45
+ // plus a team of mentors in your corner
46
+ ::::
47
+
48
+ ::::div{style.maxWidth="var(--max-width-narrow)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1rem" style.--sm.gridTemplateColumns="1fr"}
49
+ ::co-mentor{props.initials="JL" props.name="Jordan Lee" props.role="mentor · frontend"}
50
+
51
+ ::co-mentor{props.initials="SR" props.name="Sam Rivera" props.role="mentor · backend"}
52
+
53
+ ::co-mentor{props.initials="AK" props.name="Aisha Khan" props.role="mentor · careers"}
54
+ ::::
53
55
  :::::
54
56
 
55
57
  :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
56
- ::co-section-header{props.eyebrow="Student stories" props.heading="From first commit to first job"}
58
+ ::co-section-header{props.eyebrow="student stories" props.heading="From first commit to first job"}
57
59
 
58
60
  ::::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"}
59
- ::co-testimonial-card{props.quote="I started with zero experience and ended with a job offer. The mentorship made all the difference when I got stuck." props.author="Priya S." props.role="Frontend Developer, now at a health-tech startup"}
61
+ ::co-testimonial-card{props.quote="I started with zero experience and ended with a job offer. The mentorship made all the difference when I got stuck." props.author="Priya S." props.role="Frontend Developer, health-tech"}
60
62
 
61
63
  ::co-testimonial-card{props.quote="The capstone is the real deal. I still show that project in interviews and people are genuinely impressed." props.author="Marcus T." props.role="Junior Full-Stack Developer"}
62
64
 
@@ -64,10 +66,19 @@ See the full curriculum →
64
66
  ::::
65
67
  :::::
66
68
 
67
- :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
68
- ::co-section-header{props.eyebrow="Enroll" props.heading="One program. Everything included." props.subheading="No hidden fees. Flexible payment plans available."}
69
+ ::::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
70
+ ::co-section-header{props.eyebrow="tuition" props.heading="One program. Everything included." props.subheading="No hidden fees. Flexible payment plans and need-based scholarships available."}
71
+
72
+ :::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="1fr 1fr" style.gap="clamp(2rem, 5vw, 3.5rem)" style.alignItems="center" style.--md.gridTemplateColumns="1fr"}
73
+ ::::div
74
+ ::co-cohort{props.c1label="Fall 2026" props.c1date="Sept 8" props.c1seats="6 seats left" props.c2label="Winter 2027" props.c2date="Jan 12" props.c2seats="Waitlist" props.note="Payment plans + need-based scholarships available"}
75
+
76
+ :::div{style.marginTop="1.5rem" style.fontSize="1.02rem" style.lineHeight="1.75" style.color="var(--color-text-muted)"}
77
+ Your tuition covers 14 weeks of live instruction, one-on-one mentorship, and career support that continues after you graduate. Reserve a seat with a deposit — the rest is flexible.
78
+ :::
79
+ ::::
69
80
 
70
- ::::co-pricing{props.badge="Fall cohort · 24 seats" props.plan="Full Program" props.price="$8,900" props.period="or 6 monthly payments" props.description="14 weeks of live instruction, mentorship, and career support — end to end." props.cta="Enroll Now" props.ctaHref="/enroll/" props.note="7-day full refund · Scholarships available"}
81
+ ::::co-pricing{props.badge="Fall cohort · 24 seats" props.plan="Full Program" props.price="$8,900" props.period="or 6 monthly payments" props.description="14 weeks of live instruction, mentorship, and career support — end to end." props.cta="Enroll Now" props.ctaHref="/enroll/" props.note="7-day full refund · scholarships available"}
71
82
 
72
83
  - Six project-based modules
73
84
  - Live mentorship & small-group code review
@@ -76,11 +87,12 @@ See the full curriculum →
76
87
  - Lifetime access to course materials
77
88
  ::::
78
89
  :::::
90
+ ::::::
79
91
 
80
92
  :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
81
- ::co-section-header{props.eyebrow="FAQ" props.heading="Questions, answered"}
93
+ ::co-section-header{props.eyebrow="faq" props.heading="Questions, answered"}
82
94
 
83
95
  ::co-faq
84
96
  :::::
85
97
 
86
- ::co-cta{props.heading="Ready to change careers?" props.text="Join the next cohort and go from curious to job-ready in 14 weeks. Seats are limited." props.cta="Enroll Now" props.ctaHref="/enroll/" props.note="Next cohort starts September 8"}
98
+ ::co-cta{props.kicker="$ ./enroll --now" props.heading="Ready to change careers?" props.text="Join the next cohort and go from curious to job-ready in 14 weeks. Seats are limited." props.cta="Enroll Now" props.ctaHref="/enroll/" props.note="Next cohort starts September 8"}