@endora-commerce/cms-components 0.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -0
  3. package/dist/cms-components.css +2 -0
  4. package/dist/components/Accordion.d.ts +43 -0
  5. package/dist/components/Accordion.d.ts.map +1 -0
  6. package/dist/components/Accordion.js +81 -0
  7. package/dist/components/Accordion.js.map +1 -0
  8. package/dist/components/AnnouncementBar.d.ts +43 -0
  9. package/dist/components/AnnouncementBar.d.ts.map +1 -0
  10. package/dist/components/AnnouncementBar.js +27 -0
  11. package/dist/components/AnnouncementBar.js.map +1 -0
  12. package/dist/components/Button.d.ts +43 -0
  13. package/dist/components/Button.d.ts.map +1 -0
  14. package/dist/components/Button.js +122 -0
  15. package/dist/components/Button.js.map +1 -0
  16. package/dist/components/CategoryGrid.d.ts +43 -0
  17. package/dist/components/CategoryGrid.d.ts.map +1 -0
  18. package/dist/components/CategoryGrid.js +117 -0
  19. package/dist/components/CategoryGrid.js.map +1 -0
  20. package/dist/components/CategoryList.d.ts +43 -0
  21. package/dist/components/CategoryList.d.ts.map +1 -0
  22. package/dist/components/CategoryList.js +96 -0
  23. package/dist/components/CategoryList.js.map +1 -0
  24. package/dist/components/CmsPageContainer.d.ts +12 -0
  25. package/dist/components/CmsPageContainer.d.ts.map +1 -0
  26. package/dist/components/CmsPageContainer.js +19 -0
  27. package/dist/components/CmsPageContainer.js.map +1 -0
  28. package/dist/components/CmsProductCard.d.ts +35 -0
  29. package/dist/components/CmsProductCard.d.ts.map +1 -0
  30. package/dist/components/CmsProductCard.js +101 -0
  31. package/dist/components/CmsProductCard.js.map +1 -0
  32. package/dist/components/Column.d.ts +50 -0
  33. package/dist/components/Column.d.ts.map +1 -0
  34. package/dist/components/Column.js +127 -0
  35. package/dist/components/Column.js.map +1 -0
  36. package/dist/components/ContactFormEmbed.d.ts +43 -0
  37. package/dist/components/ContactFormEmbed.d.ts.map +1 -0
  38. package/dist/components/ContactFormEmbed.js +37 -0
  39. package/dist/components/ContactFormEmbed.js.map +1 -0
  40. package/dist/components/ContentSlider.d.ts +43 -0
  41. package/dist/components/ContentSlider.d.ts.map +1 -0
  42. package/dist/components/ContentSlider.js +96 -0
  43. package/dist/components/ContentSlider.js.map +1 -0
  44. package/dist/components/FeatureList.d.ts +43 -0
  45. package/dist/components/FeatureList.d.ts.map +1 -0
  46. package/dist/components/FeatureList.js +89 -0
  47. package/dist/components/FeatureList.js.map +1 -0
  48. package/dist/components/Heading.d.ts +43 -0
  49. package/dist/components/Heading.d.ts.map +1 -0
  50. package/dist/components/Heading.js +116 -0
  51. package/dist/components/Heading.js.map +1 -0
  52. package/dist/components/Hero.d.ts +43 -0
  53. package/dist/components/Hero.d.ts.map +1 -0
  54. package/dist/components/Hero.js +186 -0
  55. package/dist/components/Hero.js.map +1 -0
  56. package/dist/components/IconPickerField.d.ts +3 -0
  57. package/dist/components/IconPickerField.d.ts.map +1 -0
  58. package/dist/components/IconPickerField.js +30 -0
  59. package/dist/components/IconPickerField.js.map +1 -0
  60. package/dist/components/Icons.d.ts +43 -0
  61. package/dist/components/Icons.d.ts.map +1 -0
  62. package/dist/components/Icons.js +62 -0
  63. package/dist/components/Icons.js.map +1 -0
  64. package/dist/components/Image.d.ts +43 -0
  65. package/dist/components/Image.d.ts.map +1 -0
  66. package/dist/components/Image.js +179 -0
  67. package/dist/components/Image.js.map +1 -0
  68. package/dist/components/ImageSlider.d.ts +44 -0
  69. package/dist/components/ImageSlider.d.ts.map +1 -0
  70. package/dist/components/ImageSlider.js +186 -0
  71. package/dist/components/ImageSlider.js.map +1 -0
  72. package/dist/components/InsertBlock.d.ts +4 -0
  73. package/dist/components/InsertBlock.d.ts.map +1 -0
  74. package/dist/components/InsertBlock.js +30 -0
  75. package/dist/components/InsertBlock.js.map +1 -0
  76. package/dist/components/InsertTemplate.d.ts +4 -0
  77. package/dist/components/InsertTemplate.d.ts.map +1 -0
  78. package/dist/components/InsertTemplate.js +30 -0
  79. package/dist/components/InsertTemplate.js.map +1 -0
  80. package/dist/components/LogoStrip.d.ts +43 -0
  81. package/dist/components/LogoStrip.d.ts.map +1 -0
  82. package/dist/components/LogoStrip.js +155 -0
  83. package/dist/components/LogoStrip.js.map +1 -0
  84. package/dist/components/Map.d.ts +43 -0
  85. package/dist/components/Map.d.ts.map +1 -0
  86. package/dist/components/Map.js +165 -0
  87. package/dist/components/Map.js.map +1 -0
  88. package/dist/components/MissingComponentPlaceholder.d.ts +27 -0
  89. package/dist/components/MissingComponentPlaceholder.d.ts.map +1 -0
  90. package/dist/components/MissingComponentPlaceholder.js +24 -0
  91. package/dist/components/MissingComponentPlaceholder.js.map +1 -0
  92. package/dist/components/NewsletterSignup.d.ts +43 -0
  93. package/dist/components/NewsletterSignup.d.ts.map +1 -0
  94. package/dist/components/NewsletterSignup.js +43 -0
  95. package/dist/components/NewsletterSignup.js.map +1 -0
  96. package/dist/components/ProductCard.d.ts +43 -0
  97. package/dist/components/ProductCard.d.ts.map +1 -0
  98. package/dist/components/ProductCard.js +96 -0
  99. package/dist/components/ProductCard.js.map +1 -0
  100. package/dist/components/ProductGrid.d.ts +43 -0
  101. package/dist/components/ProductGrid.d.ts.map +1 -0
  102. package/dist/components/ProductGrid.js +138 -0
  103. package/dist/components/ProductGrid.js.map +1 -0
  104. package/dist/components/ProductSlider.d.ts +43 -0
  105. package/dist/components/ProductSlider.d.ts.map +1 -0
  106. package/dist/components/ProductSlider.js +134 -0
  107. package/dist/components/ProductSlider.js.map +1 -0
  108. package/dist/components/RawHtml.d.ts +43 -0
  109. package/dist/components/RawHtml.d.ts.map +1 -0
  110. package/dist/components/RawHtml.js +38 -0
  111. package/dist/components/RawHtml.js.map +1 -0
  112. package/dist/components/RawJs.d.ts +43 -0
  113. package/dist/components/RawJs.d.ts.map +1 -0
  114. package/dist/components/RawJs.js +53 -0
  115. package/dist/components/RawJs.js.map +1 -0
  116. package/dist/components/RichContent.d.ts +4 -0
  117. package/dist/components/RichContent.d.ts.map +1 -0
  118. package/dist/components/RichContent.js +48 -0
  119. package/dist/components/RichContent.js.map +1 -0
  120. package/dist/components/RichContentEditorField.d.ts +10 -0
  121. package/dist/components/RichContentEditorField.d.ts.map +1 -0
  122. package/dist/components/RichContentEditorField.js +130 -0
  123. package/dist/components/RichContentEditorField.js.map +1 -0
  124. package/dist/components/RichContentPublished.d.ts +5 -0
  125. package/dist/components/RichContentPublished.d.ts.map +1 -0
  126. package/dist/components/RichContentPublished.js +22 -0
  127. package/dist/components/RichContentPublished.js.map +1 -0
  128. package/dist/components/Row.d.ts +43 -0
  129. package/dist/components/Row.d.ts.map +1 -0
  130. package/dist/components/Row.js +305 -0
  131. package/dist/components/Row.js.map +1 -0
  132. package/dist/components/SimpleTable.d.ts +43 -0
  133. package/dist/components/SimpleTable.d.ts.map +1 -0
  134. package/dist/components/SimpleTable.js +155 -0
  135. package/dist/components/SimpleTable.js.map +1 -0
  136. package/dist/components/Slide.d.ts +44 -0
  137. package/dist/components/Slide.d.ts.map +1 -0
  138. package/dist/components/Slide.js +36 -0
  139. package/dist/components/Slide.js.map +1 -0
  140. package/dist/components/Social.d.ts +43 -0
  141. package/dist/components/Social.d.ts.map +1 -0
  142. package/dist/components/Social.js +110 -0
  143. package/dist/components/Social.js.map +1 -0
  144. package/dist/components/Spacer.d.ts +43 -0
  145. package/dist/components/Spacer.d.ts.map +1 -0
  146. package/dist/components/Spacer.js +48 -0
  147. package/dist/components/Spacer.js.map +1 -0
  148. package/dist/components/Stats.d.ts +43 -0
  149. package/dist/components/Stats.d.ts.map +1 -0
  150. package/dist/components/Stats.js +71 -0
  151. package/dist/components/Stats.js.map +1 -0
  152. package/dist/components/Tabs.d.ts +43 -0
  153. package/dist/components/Tabs.d.ts.map +1 -0
  154. package/dist/components/Tabs.js +70 -0
  155. package/dist/components/Tabs.js.map +1 -0
  156. package/dist/components/Testimonial.d.ts +43 -0
  157. package/dist/components/Testimonial.d.ts.map +1 -0
  158. package/dist/components/Testimonial.js +74 -0
  159. package/dist/components/Testimonial.js.map +1 -0
  160. package/dist/components/Text.d.ts +43 -0
  161. package/dist/components/Text.d.ts.map +1 -0
  162. package/dist/components/Text.js +87 -0
  163. package/dist/components/Text.js.map +1 -0
  164. package/dist/components/Video.d.ts +43 -0
  165. package/dist/components/Video.d.ts.map +1 -0
  166. package/dist/components/Video.js +98 -0
  167. package/dist/components/Video.js.map +1 -0
  168. package/dist/components/box-styles.d.ts +19 -0
  169. package/dist/components/box-styles.d.ts.map +1 -0
  170. package/dist/components/box-styles.js +66 -0
  171. package/dist/components/box-styles.js.map +1 -0
  172. package/dist/components/button-link.d.ts +7 -0
  173. package/dist/components/button-link.d.ts.map +1 -0
  174. package/dist/components/button-link.js +15 -0
  175. package/dist/components/button-link.js.map +1 -0
  176. package/dist/components/carousel/CarouselShell.d.ts +27 -0
  177. package/dist/components/carousel/CarouselShell.d.ts.map +1 -0
  178. package/dist/components/carousel/CarouselShell.js +210 -0
  179. package/dist/components/carousel/CarouselShell.js.map +1 -0
  180. package/dist/components/catalog/CatalogSkeletons.d.ts +27 -0
  181. package/dist/components/catalog/CatalogSkeletons.d.ts.map +1 -0
  182. package/dist/components/catalog/CatalogSkeletons.js +38 -0
  183. package/dist/components/catalog/CatalogSkeletons.js.map +1 -0
  184. package/dist/components/catalog-preview-context.d.ts +9 -0
  185. package/dist/components/catalog-preview-context.d.ts.map +1 -0
  186. package/dist/components/catalog-preview-context.js +18 -0
  187. package/dist/components/catalog-preview-context.js.map +1 -0
  188. package/dist/components/icon-catalog.d.ts +139 -0
  189. package/dist/components/icon-catalog.d.ts.map +1 -0
  190. package/dist/components/icon-catalog.js +148 -0
  191. package/dist/components/icon-catalog.js.map +1 -0
  192. package/dist/components/image-fields.d.ts +6 -0
  193. package/dist/components/image-fields.d.ts.map +1 -0
  194. package/dist/components/image-fields.js +11 -0
  195. package/dist/components/image-fields.js.map +1 -0
  196. package/dist/components/image-slider-item.d.ts +7 -0
  197. package/dist/components/image-slider-item.d.ts.map +1 -0
  198. package/dist/components/image-slider-item.js +45 -0
  199. package/dist/components/image-slider-item.js.map +1 -0
  200. package/dist/components/render-context.d.ts +29 -0
  201. package/dist/components/render-context.d.ts.map +1 -0
  202. package/dist/components/render-context.js +21 -0
  203. package/dist/components/render-context.js.map +1 -0
  204. package/dist/components/rich-content-shared.d.ts +11 -0
  205. package/dist/components/rich-content-shared.d.ts.map +1 -0
  206. package/dist/components/rich-content-shared.js +132 -0
  207. package/dist/components/rich-content-shared.js.map +1 -0
  208. package/dist/components/social-networks.d.ts +10 -0
  209. package/dist/components/social-networks.d.ts.map +1 -0
  210. package/dist/components/social-networks.js +43 -0
  211. package/dist/components/social-networks.js.map +1 -0
  212. package/dist/components/styles.d.ts +2 -0
  213. package/dist/components/styles.d.ts.map +1 -0
  214. package/dist/components/styles.js +9 -0
  215. package/dist/components/styles.js.map +1 -0
  216. package/dist/components/text-content.d.ts +13 -0
  217. package/dist/components/text-content.d.ts.map +1 -0
  218. package/dist/components/text-content.js +64 -0
  219. package/dist/components/text-content.js.map +1 -0
  220. package/dist/components/typography.d.ts +26 -0
  221. package/dist/components/typography.d.ts.map +1 -0
  222. package/dist/components/typography.js +52 -0
  223. package/dist/components/typography.js.map +1 -0
  224. package/dist/editor/row-layout-presets.d.ts +34 -0
  225. package/dist/editor/row-layout-presets.d.ts.map +1 -0
  226. package/dist/editor/row-layout-presets.js +175 -0
  227. package/dist/editor/row-layout-presets.js.map +1 -0
  228. package/dist/editor/slot-edit-props.d.ts +16 -0
  229. package/dist/editor/slot-edit-props.d.ts.map +1 -0
  230. package/dist/editor/slot-edit-props.js +25 -0
  231. package/dist/editor/slot-edit-props.js.map +1 -0
  232. package/dist/fields/catalog-data-fields.d.ts +7 -0
  233. package/dist/fields/catalog-data-fields.d.ts.map +1 -0
  234. package/dist/fields/catalog-data-fields.js +4 -0
  235. package/dist/fields/catalog-data-fields.js.map +1 -0
  236. package/dist/fields/catalog-fallback-fields.d.ts +4 -0
  237. package/dist/fields/catalog-fallback-fields.d.ts.map +1 -0
  238. package/dist/fields/catalog-fallback-fields.js +34 -0
  239. package/dist/fields/catalog-fallback-fields.js.map +1 -0
  240. package/dist/fields/catalog-resolve-fields.d.ts +5 -0
  241. package/dist/fields/catalog-resolve-fields.d.ts.map +1 -0
  242. package/dist/fields/catalog-resolve-fields.js +40 -0
  243. package/dist/fields/catalog-resolve-fields.js.map +1 -0
  244. package/dist/fields/shared-fields.d.ts +176 -0
  245. package/dist/fields/shared-fields.d.ts.map +1 -0
  246. package/dist/fields/shared-fields.js +142 -0
  247. package/dist/fields/shared-fields.js.map +1 -0
  248. package/dist/hooks/use-viewport-breakpoint-tier.d.ts +4 -0
  249. package/dist/hooks/use-viewport-breakpoint-tier.d.ts.map +1 -0
  250. package/dist/hooks/use-viewport-breakpoint-tier.js +21 -0
  251. package/dist/hooks/use-viewport-breakpoint-tier.js.map +1 -0
  252. package/dist/index.d.ts +127 -0
  253. package/dist/index.d.ts.map +1 -0
  254. package/dist/index.js +377 -0
  255. package/dist/index.js.map +1 -0
  256. package/dist/schema/catalog-types.d.ts +22 -0
  257. package/dist/schema/catalog-types.d.ts.map +1 -0
  258. package/dist/schema/catalog-types.js +2 -0
  259. package/dist/schema/catalog-types.js.map +1 -0
  260. package/dist/schema/component-types.d.ts +419 -0
  261. package/dist/schema/component-types.d.ts.map +1 -0
  262. package/dist/schema/component-types.js +2 -0
  263. package/dist/schema/component-types.js.map +1 -0
  264. package/dist/schema/envelope.d.ts +21 -0
  265. package/dist/schema/envelope.d.ts.map +1 -0
  266. package/dist/schema/envelope.js +19 -0
  267. package/dist/schema/envelope.js.map +1 -0
  268. package/dist/utils/catalog-fetch.d.ts +29 -0
  269. package/dist/utils/catalog-fetch.d.ts.map +1 -0
  270. package/dist/utils/catalog-fetch.js +88 -0
  271. package/dist/utils/catalog-fetch.js.map +1 -0
  272. package/dist/utils/catalog-load.d.ts +4 -0
  273. package/dist/utils/catalog-load.d.ts.map +1 -0
  274. package/dist/utils/catalog-load.js +11 -0
  275. package/dist/utils/catalog-load.js.map +1 -0
  276. package/dist/utils/catalog-preview-bridge.d.ts +13 -0
  277. package/dist/utils/catalog-preview-bridge.d.ts.map +1 -0
  278. package/dist/utils/catalog-preview-bridge.js +8 -0
  279. package/dist/utils/catalog-preview-bridge.js.map +1 -0
  280. package/dist/utils/catalog-skeleton-estimate.d.ts +7 -0
  281. package/dist/utils/catalog-skeleton-estimate.d.ts.map +1 -0
  282. package/dist/utils/catalog-skeleton-estimate.js +42 -0
  283. package/dist/utils/catalog-skeleton-estimate.js.map +1 -0
  284. package/dist/utils/resolve-image-url.d.ts +20 -0
  285. package/dist/utils/resolve-image-url.d.ts.map +1 -0
  286. package/dist/utils/resolve-image-url.js +24 -0
  287. package/dist/utils/resolve-image-url.js.map +1 -0
  288. package/dist/utils/sanitize-html.d.ts +6 -0
  289. package/dist/utils/sanitize-html.d.ts.map +1 -0
  290. package/dist/utils/sanitize-html.js +81 -0
  291. package/dist/utils/sanitize-html.js.map +1 -0
  292. package/dist/utils/video-embed.d.ts +11 -0
  293. package/dist/utils/video-embed.d.ts.map +1 -0
  294. package/dist/utils/video-embed.js +61 -0
  295. package/dist/utils/video-embed.js.map +1 -0
  296. package/dist/utils/walk-asset-ids.d.ts +3 -0
  297. package/dist/utils/walk-asset-ids.d.ts.map +1 -0
  298. package/dist/utils/walk-asset-ids.js +23 -0
  299. package/dist/utils/walk-asset-ids.js.map +1 -0
  300. package/package.json +117 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Endora sp. z o.o. and the Endora Commerce contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,59 @@
1
+ <!-- Generated by `pnpm --filter backend run manifests:generate`. Delete this line to take the file over; a README without it is never regenerated. -->
2
+
3
+ # @endora-commerce/cms-components
4
+
5
+ Shared CMS Page Builder components — runtime contract between admin (editor) and storefront (renderer). Per Principle I, this is the canonical workspace home for the React components that Puck composes; backend modules contribute additional component types via the registry SPI in backend/src/modules/cms/services/page-builder-registry.ts.
6
+
7
+ ## What this is
8
+
9
+ A shared library package of **Endora Commerce**, the modular B2B/B2C commerce platform. It declares no module manifest, so the platform composes nothing from it: what is published here is what the platform and the modules built on it compile against.
10
+
11
+ ## Entry points
12
+
13
+ - `@endora-commerce/cms-components`
14
+ - `@endora-commerce/cms-components/*`
15
+ - `@endora-commerce/cms-components/components/*`
16
+ - `@endora-commerce/cms-components/schema/*`
17
+ - `@endora-commerce/cms-components/styles.css`
18
+
19
+ ## Depends on
20
+
21
+ Everything below is a **peer** dependency, so the application resolves exactly one copy of each — two copies of a host or of React are a runtime failure rather than a type error. An entry marked *optional* is needed only by the layers that use it.
22
+
23
+ **Endora packages**
24
+
25
+ - `@endora-commerce/page-builder-core`
26
+
27
+ **Third-party**
28
+
29
+ - `@measured/puck` *
30
+ - `@tiptap/core` ^3.31.3 — *optional*
31
+ - `@tiptap/extension-color` 3.31.3 — *optional*
32
+ - `@tiptap/extension-highlight` 3.31.3 — *optional*
33
+ - `@tiptap/extension-image` 3.31.3 — *optional*
34
+ - `@tiptap/extension-text-align` 3.31.3 — *optional*
35
+ - `@tiptap/extension-text-style` 3.31.3 — *optional*
36
+ - `@tiptap/react` ^3.31.3 — *optional*
37
+ - `@tiptap/starter-kit` ^3.31.3 — *optional*
38
+ - `leaflet` ^1.9.4 — *optional*
39
+ - `react` ^19.0.0
40
+ - `react-dom` ^19.0.0
41
+
42
+ **Bundled dependencies**
43
+
44
+ - `lucide-react` ^1.11.0
45
+ - `react-icons` ^5.5.0
46
+
47
+ ## What the tarball carries
48
+
49
+ - `dist/` — the compiled JavaScript and its type declarations
50
+
51
+ ## Install
52
+
53
+ ```bash
54
+ pnpm add @endora-commerce/cms-components
55
+ ```
56
+
57
+ ## Licence
58
+
59
+ MIT — the text is in `LICENSE`, beside this file.
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--cmsc-font-sans:Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--cmsc-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--cmsc-color-white:#fff;--cmsc-spacing:.25rem;--cmsc-text-xs:.75rem;--cmsc-text-xs--line-height:calc(1 / .75);--cmsc-text-sm:.875rem;--cmsc-text-sm--line-height:calc(1.25 / .875);--cmsc-font-weight-semibold:600;--cmsc-font-weight-bold:700;--cmsc-radius-lg:.5rem;--cmsc-default-transition-duration:.15s;--cmsc-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer base,components;@layer utilities{.cmsc\:absolute{position:absolute}.cmsc\:fixed{position:fixed}.cmsc\:relative{position:relative}.cmsc\:inset-0{inset:calc(var(--cmsc-spacing) * 0)}.cmsc\:z-\[2147483000\]{z-index:2147483000}.cmsc\:z-\[2147483001\]{z-index:2147483001}.cmsc\:m-0{margin:calc(var(--cmsc-spacing) * 0)}.cmsc\:mx-auto{margin-inline:auto}.cmsc\:my-\[3px\]{margin-block:3px}.cmsc\:mt-2{margin-top:calc(var(--cmsc-spacing) * 2)}.cmsc\:mt-\[4px\]{margin-top:4px}.cmsc\:mr-auto{margin-right:auto}.cmsc\:mb-\[4px\]{margin-bottom:4px}.cmsc\:mb-\[10px\]{margin-bottom:10px}.cmsc\:mb-\[12px\]{margin-bottom:12px}.cmsc\:mb-\[14px\]{margin-bottom:14px}.cmsc\:ml-auto{margin-left:auto}.cmsc\:box-border{box-sizing:border-box}.cmsc\:block{display:block}.cmsc\:flex{display:flex}.cmsc\:grid{display:grid}.cmsc\:hidden{display:none}.cmsc\:inline-block{display:inline-block}.cmsc\:inline-flex{display:inline-flex}.cmsc\:h-\[22px\]{height:22px}.cmsc\:h-\[30px\]{height:30px}.cmsc\:h-full{height:100%}.cmsc\:min-h-\[40px\]{min-height:40px}.cmsc\:min-h-\[120px\]{min-height:120px}.cmsc\:min-h-\[140px\]{min-height:140px}.cmsc\:min-h-\[160px\]{min-height:160px}.cmsc\:w-\[28px\]{width:28px}.cmsc\:w-full{width:100%}.cmsc\:w-px{width:1px}.cmsc\:max-w-\[420px\]{max-width:420px}.cmsc\:max-w-\[860px\]{max-width:860px}.cmsc\:min-w-0{min-width:calc(var(--cmsc-spacing) * 0)}.cmsc\:min-w-\[30px\]{min-width:30px}.cmsc\:flex-1{flex:1}.cmsc\:cursor-not-allowed{cursor:not-allowed}.cmsc\:cursor-pointer{cursor:pointer}.cmsc\:flex-col{flex-direction:column}.cmsc\:flex-wrap{flex-wrap:wrap}.cmsc\:items-center{align-items:center}.cmsc\:justify-center{justify-content:center}.cmsc\:justify-end{justify-content:flex-end}.cmsc\:gap-\[3px\]{gap:3px}.cmsc\:gap-\[4px\]{gap:4px}.cmsc\:gap-\[8px\]{gap:8px}.cmsc\:self-stretch{align-self:stretch}.cmsc\:overflow-auto{overflow:auto}.cmsc\:overflow-hidden{overflow:hidden}.cmsc\:rounded-\[6px\]{border-radius:6px}.cmsc\:rounded-\[8px\]{border-radius:8px}.cmsc\:rounded-\[10px\]{border-radius:10px}.cmsc\:rounded-lg{border-radius:var(--cmsc-radius-lg)}.cmsc\:rounded-t-\[8px\]{border-top-left-radius:8px;border-top-right-radius:8px}.cmsc\:rounded-b-\[8px\]{border-bottom-right-radius:8px;border-bottom-left-radius:8px}.cmsc\:border{border-style:var(--tw-border-style);border-width:1px}.cmsc\:border-0{border-style:var(--tw-border-style);border-width:0}.cmsc\:border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.cmsc\:border-dashed{--tw-border-style:dashed;border-style:dashed}.cmsc\:border-solid{--tw-border-style:solid;border-style:solid}.cmsc\:border-\[\#9aa7b4\]{border-color:#9aa7b4}.cmsc\:border-\[\#15202b\]{border-color:#15202b}.cmsc\:border-\[\#d9e0e7\]{border-color:#d9e0e7}.cmsc\:border-\[\#ef4444\]{border-color:#ef4444}.cmsc\:border-transparent{border-color:#0000}.cmsc\:bg-\[\#15202b\]{background-color:#15202b}.cmsc\:bg-\[\#d9e0e7\]{background-color:#d9e0e7}.cmsc\:bg-\[\#f5f7fa\]{background-color:#f5f7fa}.cmsc\:bg-\[\#f8fafc\]{background-color:#f8fafc}.cmsc\:bg-\[\#fef2f2\]{background-color:#fef2f2}.cmsc\:bg-\[rgba\(15\,23\,42\,0\.45\)\]{background-color:#0f172a73}.cmsc\:bg-\[rgba\(15\,23\,42\,0\.55\)\]{background-color:#0f172a8c}.cmsc\:bg-transparent{background-color:#0000}.cmsc\:bg-white{background-color:var(--cmsc-color-white)}.cmsc\:p-0{padding:calc(var(--cmsc-spacing) * 0)}.cmsc\:p-3{padding:calc(var(--cmsc-spacing) * 3)}.cmsc\:p-\[12px\]{padding:12px}.cmsc\:p-\[14px\]{padding:14px}.cmsc\:p-\[16px\]{padding:16px}.cmsc\:p-\[24px\]{padding:24px}.cmsc\:px-\[4px\]{padding-inline:4px}.cmsc\:px-\[6px\]{padding-inline:6px}.cmsc\:px-\[7px\]{padding-inline:7px}.cmsc\:px-\[10px\]{padding-inline:10px}.cmsc\:px-\[12px\]{padding-inline:12px}.cmsc\:px-\[18px\]{padding-inline:18px}.cmsc\:py-\[5px\]{padding-block:5px}.cmsc\:py-\[7px\]{padding-block:7px}.cmsc\:py-\[8px\]{padding-block:8px}.cmsc\:font-sans{font-family:var(--cmsc-font-sans)}.cmsc\:text-sm{font-size:var(--cmsc-text-sm);line-height:var(--tw-leading,var(--cmsc-text-sm--line-height))}.cmsc\:text-xs{font-size:var(--cmsc-text-xs);line-height:var(--tw-leading,var(--cmsc-text-xs--line-height))}.cmsc\:text-\[12px\]{font-size:12px}.cmsc\:text-\[13px\]{font-size:13px}.cmsc\:text-\[14px\]{font-size:14px}.cmsc\:text-\[15px\]{font-size:15px}.cmsc\:text-\[16px\]{font-size:16px}.cmsc\:leading-\[1\.65\]{--tw-leading:1.65;line-height:1.65}.cmsc\:leading-none{--tw-leading:1;line-height:1}.cmsc\:font-bold{--tw-font-weight:var(--cmsc-font-weight-bold);font-weight:var(--cmsc-font-weight-bold)}.cmsc\:font-semibold{--tw-font-weight:var(--cmsc-font-weight-semibold);font-weight:var(--cmsc-font-weight-semibold)}.cmsc\:whitespace-pre-wrap{white-space:pre-wrap}.cmsc\:text-\[\#5f6b7a\]{color:#5f6b7a}.cmsc\:text-\[\#7f1d1d\]{color:#7f1d1d}.cmsc\:text-\[\#94a3b8\]{color:#94a3b8}.cmsc\:text-\[\#991b1b\]{color:#991b1b}.cmsc\:text-\[\#15202b\]{color:#15202b}.cmsc\:text-\[\#64748b\]{color:#64748b}.cmsc\:text-\[\#243447\]{color:#243447}.cmsc\:text-\[\#334155\]{color:#334155}.cmsc\:text-white{color:var(--cmsc-color-white)}.cmsc\:italic{font-style:italic}.cmsc\:line-through{text-decoration-line:line-through}.cmsc\:no-underline{text-decoration-line:none}.cmsc\:underline{text-decoration-line:underline}.cmsc\:opacity-35{opacity:.35}.cmsc\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.cmsc\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--cmsc-default-transition-timing-function));transition-duration:var(--tw-duration,var(--cmsc-default-transition-duration))}.cmsc\:outline-none{--tw-outline-style:none;outline-style:none}@media (hover:hover){.cmsc\:hover\:bg-\[\#e8edf2\]:hover{background-color:#e8edf2}}.cmsc\:\[\&_a\]\:text-\[\#2563eb\] a{color:#2563eb}.cmsc\:\[\&_a\]\:underline a{text-decoration-line:underline}.cmsc\:\[\&_blockquote\]\:my-\[8px\] blockquote{margin-block:8px}.cmsc\:\[\&_blockquote\]\:border-l-4 blockquote{border-left-style:var(--tw-border-style);border-left-width:4px}.cmsc\:\[\&_blockquote\]\:border-\[\#d9e0e7\] blockquote{border-color:#d9e0e7}.cmsc\:\[\&_blockquote\]\:pl-\[14px\] blockquote{padding-left:14px}.cmsc\:\[\&_blockquote\]\:text-\[\#475569\] blockquote{color:#475569}.cmsc\:\[\&_blockquote\]\:italic blockquote{font-style:italic}.cmsc\:\[\&_code\]\:font-mono code{font-family:var(--cmsc-font-mono)}.cmsc\:\[\&_h1\]\:my-\[8px\] h1{margin-block:8px}.cmsc\:\[\&_h1\]\:text-\[32px\] h1{font-size:32px}.cmsc\:\[\&_h1\]\:font-bold h1{--tw-font-weight:var(--cmsc-font-weight-bold);font-weight:var(--cmsc-font-weight-bold)}.cmsc\:\[\&_h1\]\:text-\[\#15202b\] h1{color:#15202b}.cmsc\:\[\&_h2\]\:my-\[8px\] h2{margin-block:8px}.cmsc\:\[\&_h2\]\:text-\[26px\] h2{font-size:26px}.cmsc\:\[\&_h2\]\:font-bold h2{--tw-font-weight:var(--cmsc-font-weight-bold);font-weight:var(--cmsc-font-weight-bold)}.cmsc\:\[\&_h2\]\:text-\[\#15202b\] h2{color:#15202b}.cmsc\:\[\&_h3\]\:my-\[8px\] h3{margin-block:8px}.cmsc\:\[\&_h3\]\:text-\[22px\] h3{font-size:22px}.cmsc\:\[\&_h3\]\:font-bold h3{--tw-font-weight:var(--cmsc-font-weight-bold);font-weight:var(--cmsc-font-weight-bold)}.cmsc\:\[\&_h3\]\:text-\[\#15202b\] h3{color:#15202b}.cmsc\:\[\&_h4\]\:my-\[8px\] h4{margin-block:8px}.cmsc\:\[\&_h4\]\:text-\[18px\] h4{font-size:18px}.cmsc\:\[\&_h4\]\:font-bold h4{--tw-font-weight:var(--cmsc-font-weight-bold);font-weight:var(--cmsc-font-weight-bold)}.cmsc\:\[\&_h4\]\:text-\[\#15202b\] h4{color:#15202b}.cmsc\:\[\&_img\]\:h-auto img{height:auto}.cmsc\:\[\&_img\]\:max-w-full img{max-width:100%}.cmsc\:\[\&_img\]\:rounded-\[8px\] img{border-radius:8px}.cmsc\:\[\&_ol\]\:my-\[8px\] ol{margin-block:8px}.cmsc\:\[\&_ol\]\:list-decimal ol{list-style-type:decimal}.cmsc\:\[\&_ol\]\:pl-\[24px\] ol{padding-left:24px}.cmsc\:\[\&_p\]\:my-\[8px\] p{margin-block:8px}.cmsc\:\[\&_pre\]\:overflow-auto pre{overflow:auto}.cmsc\:\[\&_pre\]\:rounded-\[8px\] pre{border-radius:8px}.cmsc\:\[\&_pre\]\:bg-\[\#0f172a\] pre{background-color:#0f172a}.cmsc\:\[\&_pre\]\:p-\[12px\] pre{padding:12px}.cmsc\:\[\&_pre\]\:text-white pre{color:var(--cmsc-color-white)}.cmsc\:\[\&_ul\]\:my-\[8px\] ul{margin-block:8px}.cmsc\:\[\&_ul\]\:list-disc ul{list-style-type:disc}.cmsc\:\[\&_ul\]\:pl-\[24px\] ul{padding-left:24px}}[data-puck-entry],[data-puck-entry] *,.cmsc-pb-page,.cmsc-pb-page *{box-sizing:border-box}.cmsc-pb-page{--pb-page-padding:24px;width:100%;max-width:1360px;padding-left:var(--pb-page-padding);padding-right:var(--pb-page-padding);box-sizing:border-box;margin-left:auto;margin-right:auto}.cmsc-pb-hide-on{min-width:0;max-width:100%;display:block}@media (max-width:767px){.cmsc-pb-hide-on[data-pb-editing="0"][data-hide-mobile="1"],.cmsc-pb-hide-on:not([data-pb-editing])[data-hide-mobile="1"]{display:none}.cmsc-pb-hide-on[data-pb-editing="1"][data-hide-mobile="1"]{opacity:.38;filter:grayscale(.85);outline-offset:2px;pointer-events:none;outline:2px dashed #78828c8c;display:block}}@media (min-width:768px) and (max-width:1023px){.cmsc-pb-hide-on[data-pb-editing="0"][data-hide-tablet="1"],.cmsc-pb-hide-on:not([data-pb-editing])[data-hide-tablet="1"]{display:none}.cmsc-pb-hide-on[data-pb-editing="1"][data-hide-tablet="1"]{opacity:.38;filter:grayscale(.85);outline-offset:2px;pointer-events:none;outline:2px dashed #78828c8c;display:block}}@media (min-width:1024px){.cmsc-pb-hide-on[data-pb-editing="0"][data-hide-desktop="1"],.cmsc-pb-hide-on:not([data-pb-editing])[data-hide-desktop="1"]{display:none}.cmsc-pb-hide-on[data-pb-editing="1"][data-hide-desktop="1"]{opacity:.38;filter:grayscale(.85);outline-offset:2px;pointer-events:none;outline:2px dashed #78828c8c;display:block}}.cmsc-pb-gap{gap:var(--pb-gap,24px)}@media (min-width:768px){.cmsc-pb-gap{gap:var(--pb-gap-md,var(--pb-gap,24px))}}@media (min-width:1024px){.cmsc-pb-gap{gap:var(--pb-gap-lg,var(--pb-gap-md,var(--pb-gap,24px)))}}.cmsc-pb-padding{padding:var(--pb-padding,0px)}@media (min-width:768px){.cmsc-pb-padding{padding:var(--pb-padding-md,var(--pb-padding,0px))}}@media (min-width:1024px){.cmsc-pb-padding{padding:var(--pb-padding-lg,var(--pb-padding-md,var(--pb-padding,0px)))}}.cmsc-pb-margin{margin:var(--pb-margin,0px)}@media (min-width:768px){.cmsc-pb-margin{margin:var(--pb-margin-md,var(--pb-margin,0px))}}@media (min-width:1024px){.cmsc-pb-margin{margin:var(--pb-margin-lg,var(--pb-margin-md,var(--pb-margin,0px)))}}.cmsc-pb-border{border:var(--pb-border,none)}@media (min-width:768px){.cmsc-pb-border{border:var(--pb-border-md,var(--pb-border,none))}}@media (min-width:1024px){.cmsc-pb-border{border:var(--pb-border-lg,var(--pb-border-md,var(--pb-border,none)))}}.cmsc-pb-min-height{min-height:var(--pb-min-height,0px)}@media (min-width:768px){.cmsc-pb-min-height{min-height:var(--pb-min-height-md,var(--pb-min-height,0px))}}@media (min-width:1024px){.cmsc-pb-min-height{min-height:var(--pb-min-height-lg,var(--pb-min-height-md,var(--pb-min-height,0px)))}}.cmsc-pb-row-gap{row-gap:var(--pb-row-gap,24px)}@media (min-width:768px){.cmsc-pb-row-gap{row-gap:var(--pb-row-gap-md,var(--pb-row-gap,24px))}}@media (min-width:1024px){.cmsc-pb-row-gap{row-gap:var(--pb-row-gap-lg,var(--pb-row-gap-md,var(--pb-row-gap,24px)))}}.cmsc-pb-cols{grid-auto-rows:minmax(min-content,auto);grid-template-columns:repeat(var(--pb-cols,2), minmax(0, 1fr));width:100%;display:grid}@media (min-width:768px){.cmsc-pb-cols{grid-template-columns:repeat(var(--pb-cols-md,var(--pb-cols,2)), minmax(0, 1fr))}}@media (min-width:1024px){.cmsc-pb-cols{grid-template-columns:repeat(var(--pb-cols-lg,var(--pb-cols-md,var(--pb-cols,2))), minmax(0, 1fr))}}.cmsc-pb-row-inner[data-width=narrow]{width:100%;max-width:720px;margin-left:auto;margin-right:auto}.cmsc-pb-row-inner[data-width=wide]{width:100%;max-width:960px;margin-left:auto;margin-right:auto}@media (min-width:768px){.cmsc-pb-row-inner[data-width-md=narrow]{width:100%;max-width:720px;margin-left:auto;margin-right:auto}.cmsc-pb-row-inner[data-width-md=wide]{width:100%;max-width:960px;margin-left:auto;margin-right:auto}.cmsc-pb-row-inner[data-width=full][data-width-md=narrow]{max-width:720px}.cmsc-pb-row-inner[data-width=full][data-width-md=wide]{max-width:960px}}@media (min-width:1024px){.cmsc-pb-row-inner[data-width-lg=narrow]{width:100%;max-width:720px;margin-left:auto;margin-right:auto}.cmsc-pb-row-inner[data-width-lg=wide]{width:100%;max-width:960px;margin-left:auto;margin-right:auto}}.cmsc-pb-row-inner[data-max-width=narrow]{width:100%;max-width:720px;margin-left:auto;margin-right:auto}.cmsc-pb-row-inner[data-max-width=wide]{width:100%;max-width:960px;margin-left:auto;margin-right:auto}.cmsc-pb-row-inner[data-max-width=custom]{max-width:var(--pb-row-max-width,1200px);width:100%;margin-left:auto;margin-right:auto}@media (min-width:768px){.cmsc-pb-row-inner[data-max-width-md=narrow]{width:100%;max-width:720px;margin-left:auto;margin-right:auto}.cmsc-pb-row-inner[data-max-width-md=wide]{width:100%;max-width:960px;margin-left:auto;margin-right:auto}.cmsc-pb-row-inner[data-max-width-md=custom]{max-width:var(--pb-row-max-width-md,var(--pb-row-max-width,1200px));width:100%;margin-left:auto;margin-right:auto}}@media (min-width:1024px){.cmsc-pb-row-inner[data-max-width-lg=narrow]{width:100%;max-width:720px;margin-left:auto;margin-right:auto}.cmsc-pb-row-inner[data-max-width-lg=wide]{width:100%;max-width:960px;margin-left:auto;margin-right:auto}.cmsc-pb-row-inner[data-max-width-lg=custom]{max-width:var(--pb-row-max-width-lg,var(--pb-row-max-width-md,var(--pb-row-max-width,1200px)));width:100%;margin-left:auto;margin-right:auto}}.cmsc-pb-row-cols{box-sizing:border-box;grid-template-columns:repeat(12,minmax(0,1fr));grid-auto-rows:minmax(min-content,auto);width:100%;min-width:0;max-width:100%;display:grid}.cmsc-pb-row-cols--editing:not(:has([data-puck-component])){min-height:8rem}.cmsc-pb-row-col[data-pb-editing="1"]:not(:has([data-puck-component])){min-height:6rem}.cmsc-pb-row-col[data-pb-editing="1"]:has([data-puck-component]),.cmsc-pb-row-cols--editing:has([data-puck-component]){min-height:0}.cmsc-pb-row-editing--empty{min-height:120px}.cmsc-pb-row-editing--filled{min-height:0}[data-puck-entry] .cmsc-pb-row-editing:hover,[data-puck-entry] .pb-component-overlay--row.pb-component-overlay--active .cmsc-pb-row-editing{outline:2px solid var(--puck-color-azure-04,#0158ad)}@supports (color:color-mix(in lab, red, red)){[data-puck-entry] .cmsc-pb-row-editing:hover,[data-puck-entry] .pb-component-overlay--row.pb-component-overlay--active .cmsc-pb-row-editing{outline:2px solid color-mix(in srgb, var(--puck-color-azure-04,#0158ad) 70%, transparent)}}[data-puck-entry] .cmsc-pb-row-editing:hover,[data-puck-entry] .pb-component-overlay--row.pb-component-overlay--active .cmsc-pb-row-editing{outline-offset:-2px}.cmsc-pb-row-col[data-pb-editing="1"]{outline-offset:-1px;background:#6893d714;border-radius:4px;outline:1px dashed #7597ce}.cmsc-pb-column-inner{height:auto;min-height:0}.cmsc-pb-row-col[data-pb-editing="1"] .cmsc-pb-column-slot{box-sizing:border-box;border-radius:4px;flex-direction:column;gap:12px;width:100%;height:auto;min-height:0;padding:10px;display:flex}.cmsc-pb-row-col[data-pb-editing="1"] .cmsc-pb-column-slot:not(:has([data-puck-component])){min-height:4.5rem}.cmsc-pb-row-col[data-pb-editing="1"] .cmsc-pb-column-slot:has([data-puck-component]){height:auto;min-height:0;padding-bottom:10px}[data-puck-entry] [data-puck-dropzone].cmsc-pb-column-slot:has([data-puck-component]){--min-empty-height:0px!important;height:auto!important;min-height:0!important}[data-puck-entry] [data-puck-dropzone].cmsc-pb-column-slot:not(:has([data-puck-component])){min-height:4.5rem}.cmsc-pb-row-col[data-pb-editing="1"]:has([data-puck-component]){height:auto;min-height:0}[data-puck-entry]:has([data-puck-dragging]) .cmsc-pb-row-col[data-pb-editing="1"]{outline-color:#6391da}[data-puck-entry]:has([data-puck-dragging]) .cmsc-pb-row-col[data-pb-editing="1"] .cmsc-pb-column-slot{background:#3b82f614;outline:1px dashed #3b82f680}[data-puck-entry]:has([data-puck-dragging]) .cmsc-pb-row-cols--editing{background:#3b82f608}[data-puck-entry]:has([data-puck-dragging]) .cmsc-pb-row-col[data-pb-editing="1"] .cmsc-pb-column-slot>[data-puck-component]:not([data-puck-dragging]){outline-offset:2px;border-radius:4px;outline:1px solid #64748b59}.cmsc-pb-row-cols>*,.cmsc-pb-row-cols>[data-puck-dropzone],.cmsc-pb-row-cols>*>[data-puck-dropzone],.cmsc-pb-row-cols>[data-puck-dropzone]>div:not(.cmsc-pb-row-col),.cmsc-pb-row-cols>*>[data-puck-dropzone]>div:not(.cmsc-pb-row-col){display:contents}.cmsc-pb-row-col{grid-column:span var(--pb-col-span,12);box-sizing:border-box;min-width:0;max-width:100%}@media (min-width:768px){.cmsc-pb-row-col{grid-column:span var(--pb-col-span-md,var(--pb-col-span,12))}}@media (min-width:1024px){.cmsc-pb-row-col{grid-column:span var(--pb-col-span-lg,var(--pb-col-span-md,var(--pb-col-span,12)))}}.cmsc-pb-row-full-width{width:calc(100% + 2 * var(--pb-page-padding,24px));margin-left:calc(-1 * var(--pb-page-padding,24px));margin-right:calc(-1 * var(--pb-page-padding,24px))}.cmsc-pb-row-full-viewport{width:100vw;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw)}.cmsc-pb-row-full-width .cmsc-pb-row-inner,.cmsc-pb-row-full-viewport .cmsc-pb-row-inner,.cmsc-pb-full-bleed [data-row-section=in_flow] .cmsc-pb-row-inner{width:100%;max-width:1360px;padding-left:var(--pb-page-padding,24px);padding-right:var(--pb-page-padding,24px);box-sizing:border-box;margin-left:auto;margin-right:auto}.cmsc-pb-row-col [data-row-section=full_width],.cmsc-pb-row-col [data-row-section=full_viewport],.cmsc-pb-row-col [data-row-section=full_bleed]{width:100%!important;max-width:none!important;margin-left:0!important;margin-right:0!important}[data-puck-entry] .cmsc-pb-page{padding-inline:var(--pb-page-padding,24px);width:100%;max-width:1360px}[data-puck-entry] .cmsc-pb-page>[data-puck-dropzone]{box-sizing:border-box;width:100%;min-width:0;max-width:100%;padding-inline:0}[data-puck-entry] [data-puck-dropzone]:not(.cmsc-pb-row-slot),[data-puck-entry] [data-puck-component]:not(.cmsc-pb-row-col){box-sizing:border-box;width:100%;min-width:0;max-width:100%}[data-puck-entry] .cmsc-pb-row-col,[data-puck-entry] .cmsc-pb-row-col[data-puck-component]{width:auto;min-width:0;max-width:100%}[data-puck-entry] .cmsc-pb-row-cols{min-width:0;max-width:100%}[data-puck-entry] .cmsc-pb-row-full-width,[data-puck-entry] .cmsc-pb-row-full-viewport,[data-puck-entry] .cmsc-pb-full-bleed,[data-puck-entry] [data-row-section=full_width],[data-puck-entry] [data-row-section=full_viewport],[data-puck-entry] [data-row-section=full_bleed]{position:static;left:auto;transform:none;width:100%!important;max-width:100%!important;margin-left:0!important;margin-right:0!important}[data-puck-entry] .cmsc-pb-row-full-width .cmsc-pb-row-inner,[data-puck-entry] .cmsc-pb-row-full-viewport .cmsc-pb-row-inner,[data-puck-entry] .cmsc-pb-full-bleed [data-row-section=in_flow] .cmsc-pb-row-inner{max-width:none;padding-left:0;padding-right:0}.cmsc-pb-row-position[data-position=top]{justify-content:flex-start}.cmsc-pb-row-position[data-position=middle]{justify-content:center}.cmsc-pb-row-position[data-position=bottom]{justify-content:flex-end}@media (min-width:768px){.cmsc-pb-row-position[data-position-md=top]{justify-content:flex-start}.cmsc-pb-row-position[data-position-md=middle]{justify-content:center}.cmsc-pb-row-position[data-position-md=bottom]{justify-content:flex-end}}@media (min-width:1024px){.cmsc-pb-row-position[data-position-lg=top]{justify-content:flex-start}.cmsc-pb-row-position[data-position-lg=middle]{justify-content:center}.cmsc-pb-row-position[data-position-lg=bottom]{justify-content:flex-end}}.cmsc-pb-cols-align[data-align=top]{align-items:flex-start}.cmsc-pb-cols-align[data-align=middle]{align-items:center}.cmsc-pb-cols-align[data-align=bottom]{align-items:flex-end}.cmsc-pb-cols-align[data-align=stretch]{align-items:stretch}@media (min-width:768px){.cmsc-pb-cols-align[data-align-md=top]{align-items:flex-start}.cmsc-pb-cols-align[data-align-md=middle]{align-items:center}.cmsc-pb-cols-align[data-align-md=bottom]{align-items:flex-end}.cmsc-pb-cols-align[data-align-md=stretch]{align-items:stretch}}@media (min-width:1024px){.cmsc-pb-cols-align[data-align-lg=top]{align-items:flex-start}.cmsc-pb-cols-align[data-align-lg=middle]{align-items:center}.cmsc-pb-cols-align[data-align-lg=bottom]{align-items:flex-end}.cmsc-pb-cols-align[data-align-lg=stretch]{align-items:stretch}}.cmsc-pb-col-divider>*+*{border-left:1px solid #d9e0e7}.cmsc-pb-cols-reverse-mobile{direction:rtl}.cmsc-pb-cols-reverse-mobile>*{direction:ltr}@media (min-width:768px){.cmsc-pb-cols-reverse-mobile{direction:ltr}}.cmsc-pb-full-bleed{width:100vw;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw)}.cmsc-pb-slide .cmsc-pb-full-bleed,.cmsc-pb-slide .cmsc-pb-row-full-width,.cmsc-pb-slide .cmsc-pb-row-full-viewport,.cmsc-pb-carousel__track--slot>*>* .cmsc-pb-full-bleed,.cmsc-pb-carousel__track--slot>*>* .cmsc-pb-row-full-width,.cmsc-pb-carousel__track--slot>*>* .cmsc-pb-row-full-viewport,.cmsc-pb-carousel__track--slot [data-puck-dropzone$=\:slides]>* .cmsc-pb-full-bleed,.cmsc-pb-carousel__track--slot [data-puck-dropzone$=\:slides]>* .cmsc-pb-row-full-width,.cmsc-pb-carousel__track--slot [data-puck-dropzone$=\:slides]>* .cmsc-pb-row-full-viewport,.cmsc-pb-carousel__track--slot .cmsc-pb-content-slider-slot>* .cmsc-pb-full-bleed,.cmsc-pb-carousel__track--slot .cmsc-pb-content-slider-slot>* .cmsc-pb-row-full-width,.cmsc-pb-carousel__track--slot .cmsc-pb-content-slider-slot>* .cmsc-pb-row-full-viewport,[data-puck-entry] .cmsc-pb-slide .cmsc-pb-full-bleed,[data-puck-entry] .cmsc-pb-slide .cmsc-pb-row-full-width,[data-puck-entry] .cmsc-pb-slide .cmsc-pb-row-full-viewport{margin-left:0!important;margin-right:0!important;width:100%!important;max-width:100%!important;margin-inline:0!important}@media (min-width:768px){.cmsc-pb-row-align-md-start{align-items:flex-start}.cmsc-pb-row-align-md-center{align-items:center}.cmsc-pb-row-align-md-end{align-items:flex-end}.cmsc-pb-row-align-md-stretch{align-items:stretch}}@media (min-width:1024px){.cmsc-pb-row-align-lg-start{align-items:flex-start}.cmsc-pb-row-align-lg-center{align-items:center}.cmsc-pb-row-align-lg-end{align-items:flex-end}.cmsc-pb-row-align-lg-stretch{align-items:stretch}}.cmsc-pb-text-align[data-align=left]{text-align:left}.cmsc-pb-text-align[data-align=center]{text-align:center}.cmsc-pb-text-align[data-align=right]{text-align:right}@media (min-width:768px){.cmsc-pb-text-align[data-align-md=left]{text-align:left}.cmsc-pb-text-align[data-align-md=center]{text-align:center}.cmsc-pb-text-align[data-align-md=right]{text-align:right}}@media (min-width:1024px){.cmsc-pb-text-align[data-align-lg=left]{text-align:left}.cmsc-pb-text-align[data-align-lg=center]{text-align:center}.cmsc-pb-text-align[data-align-lg=right]{text-align:right}}.cmsc-pb-btn-primary{color:#fff;background-color:#1261a6;border-color:#1261a6}.cmsc-pb-btn-secondary{color:#1261a6;background-color:#fff;border-color:#1261a6}.cmsc-pb-btn-ghost{color:#1261a6;background-color:#0000;border-color:#0000}@media (min-width:768px){.cmsc-pb-btn-variant-md-primary{color:#fff;background-color:#1261a6;border-color:#1261a6}.cmsc-pb-btn-variant-md-secondary{color:#1261a6;background-color:#fff;border-color:#1261a6}.cmsc-pb-btn-variant-md-ghost{color:#1261a6;background-color:#0000;border-color:#0000}}@media (min-width:1024px){.cmsc-pb-btn-variant-lg-primary{color:#fff;background-color:#1261a6;border-color:#1261a6}.cmsc-pb-btn-variant-lg-secondary{color:#1261a6;background-color:#fff;border-color:#1261a6}.cmsc-pb-btn-variant-lg-ghost{color:#1261a6;background-color:#0000;border-color:#0000}}.cmsc-pb-text-size{font-size:var(--pb-text-size)}@media (min-width:768px){.cmsc-pb-text-size{font-size:var(--pb-text-size-md,var(--pb-text-size))}}@media (min-width:1024px){.cmsc-pb-text-size{font-size:var(--pb-text-size-lg,var(--pb-text-size-md,var(--pb-text-size)))}}.cmsc-pb-text-weight{font-weight:var(--pb-text-weight)}@media (min-width:768px){.cmsc-pb-text-weight{font-weight:var(--pb-text-weight-md,var(--pb-text-weight))}}@media (min-width:1024px){.cmsc-pb-text-weight{font-weight:var(--pb-text-weight-lg,var(--pb-text-weight-md,var(--pb-text-weight)))}}.cmsc-pb-text-leading{line-height:var(--pb-text-leading)}@media (min-width:768px){.cmsc-pb-text-leading{line-height:var(--pb-text-leading-md,var(--pb-text-leading))}}@media (min-width:1024px){.cmsc-pb-text-leading{line-height:var(--pb-text-leading-lg,var(--pb-text-leading-md,var(--pb-text-leading)))}}.cmsc-pb-image-width{width:var(--pb-image-width);max-width:100%;height:auto}@media (min-width:768px){.cmsc-pb-image-width{width:var(--pb-image-width-md,var(--pb-image-width))}}@media (min-width:1024px){.cmsc-pb-image-width{width:var(--pb-image-width-lg,var(--pb-image-width-md,var(--pb-image-width)))}}.cmsc-pb-carousel__track{scroll-snap-type:x mandatory;scrollbar-width:none;display:flex;overflow-x:auto}.cmsc-pb-carousel__track::-webkit-scrollbar{display:none}.cmsc-pb-carousel__track--slot{overflow-x:auto}.cmsc-pb-carousel__track--slot>*{gap:var(--slide-gap,16px);box-sizing:border-box;width:max-content;min-width:100%;display:flex}.cmsc-pb-carousel__track--slot>*>*{flex:0 0 var(--slide-stride,var(--slide-basis,100%));scroll-snap-align:start;min-width:0;max-width:var(--slide-stride,var(--slide-basis,100%));box-sizing:border-box;overflow:hidden}.cmsc-pb-carousel__track--slot [data-puck-dropzone$=\:slides],.cmsc-pb-carousel__track--slot .cmsc-pb-content-slider-slot{gap:var(--slide-gap,16px);box-sizing:border-box;width:max-content;min-width:100%;display:flex}.cmsc-pb-carousel__track--slot [data-puck-dropzone$=\:slides]>*,.cmsc-pb-carousel__track--slot .cmsc-pb-content-slider-slot>*{flex:0 0 var(--slide-stride,var(--slide-basis,100%));scroll-snap-align:start;min-width:0;max-width:var(--slide-stride,var(--slide-basis,100%));box-sizing:border-box;overflow:hidden}.cmsc-pb-carousel__slide{scroll-snap-align:start;min-width:0}.cmsc-pb-carousel__arrow{z-index:12;cursor:pointer;background:#fff;border:1px solid #e2e8f0;border-radius:50%;width:36px;height:36px;font-size:20px;line-height:1;position:absolute;top:50%;transform:translateY(-50%)}.cmsc-pb-carousel__arrow--prev{left:8px}.cmsc-pb-carousel__arrow--next{right:8px}.cmsc-pb-carousel__dots{z-index:12;justify-content:center;gap:8px;margin-top:12px;display:flex;position:relative}.cmsc-pb-carousel__dot{cursor:pointer;background:#cbd5e1;border:none;border-radius:50%;width:8px;height:8px;padding:0}.cmsc-pb-carousel__dot--active{background:#334155}.cmsc-pb-carousel--equal-height .cmsc-pb-carousel__track,.cmsc-pb-carousel--equal-height .cmsc-pb-carousel__track--slot>*,.cmsc-pb-carousel--equal-height .cmsc-pb-carousel__track--slot [data-puck-dropzone$=\:slides],.cmsc-pb-carousel--equal-height .cmsc-pb-carousel__track--slot .cmsc-pb-content-slider-slot{align-items:stretch}.cmsc-pb-carousel--equal-height .cmsc-pb-carousel__slide,.cmsc-pb-carousel--equal-height .cmsc-pb-carousel__track--slot>*>*,.cmsc-pb-carousel--equal-height .cmsc-pb-carousel__track--slot [data-puck-dropzone$=\:slides]>*,.cmsc-pb-carousel--equal-height .cmsc-pb-carousel__track--slot .cmsc-pb-content-slider-slot>*{flex-direction:column;align-self:stretch;display:flex}.cmsc-pb-carousel--equal-height .cmsc-pb-product-card{flex:auto;min-height:100%}.cmsc-pb-carousel--equal-height .cmsc-pb-product-card__body{flex:auto}.cmsc-pb-carousel--editor-preview .cmsc-pb-carousel__viewport{overflow:hidden}.cmsc-pb-carousel--editor-preview .cmsc-pb-carousel__track{scroll-snap-type:none;overflow-x:hidden}.cmsc-pb-carousel--editor-preview .cmsc-pb-carousel__track--slot>*,.cmsc-pb-carousel--editor-preview .cmsc-pb-carousel__track--slot [data-puck-dropzone$=\:slides],.cmsc-pb-carousel--editor-preview .cmsc-pb-carousel__track--slot .cmsc-pb-content-slider-slot{flex-flow:row;gap:0;width:100%;min-width:0;max-width:100%;display:flex;transform:none!important}.cmsc-pb-carousel--editor-preview .cmsc-pb-carousel__track--slot>*>*,.cmsc-pb-carousel--editor-preview .cmsc-pb-carousel__track--slot [data-puck-dropzone$=\:slides]>*,.cmsc-pb-carousel--editor-preview .cmsc-pb-carousel__track--slot .cmsc-pb-content-slider-slot>*{flex:0 0 100%;width:100%;min-width:0;max-width:100%;overflow:hidden}.cmsc-pb-carousel--editor-preview .cmsc-pb-carousel__slide{flex:0 0 100%;width:100%;max-width:100%}.cmsc-pb-carousel--editor-preview .cmsc-pb-carousel__dots{z-index:4;pointer-events:auto;position:relative}.cmsc-pb-carousel--editor-preview .cmsc-pb-carousel__dot{pointer-events:auto;cursor:pointer}.cmsc-pb-image-slider__slide{background:#f1f5f9;border-radius:8px;position:relative;overflow:hidden}.cmsc-pb-image-slider__image{object-fit:cover;width:100%;height:100%;min-height:180px;display:block}.cmsc-pb-image-slider__placeholder{color:#64748b;justify-content:center;align-items:center;min-height:180px;font-size:.875rem;display:flex}.cmsc-pb-image-slider__title{z-index:1;color:#fff;background:#0f172ab8;border-radius:6px;max-width:calc(100% - 24px);padding:8px 12px;font-size:.875rem;font-weight:600;line-height:1.3;position:absolute}.cmsc-pb-image-slider__title--top-left{top:12px;left:12px}.cmsc-pb-image-slider__title--top-center{text-align:center;top:12px;left:50%;transform:translate(-50%)}.cmsc-pb-image-slider__title--top-right{text-align:right;top:12px;right:12px}.cmsc-pb-image-slider__title--center{text-align:center;top:50%;left:50%;transform:translate(-50%,-50%)}.cmsc-pb-image-slider__title--bottom-left{bottom:12px;left:12px}.cmsc-pb-image-slider__title--bottom-center{text-align:center;bottom:12px;left:50%;transform:translate(-50%)}.cmsc-pb-image-slider__title--bottom-right{text-align:right;bottom:12px;right:12px}.cmsc-pb-social{flex-wrap:wrap;align-items:center;margin:0;padding:0;list-style:none;display:inline-flex}.cmsc-pb-social--vertical-list{flex-direction:column;align-items:flex-start}.cmsc-pb-social__link{color:inherit;align-items:center;gap:8px;text-decoration:none;display:inline-flex}.cmsc-pb-social__label{font-size:.875rem;font-weight:500}.cmsc-pb-social--pills .cmsc-pb-social__link{background:#f8fafc;border:1px solid #e2e8f0;border-radius:999px;padding:8px 12px}.cmsc-pb-icon-picker{flex-direction:column;gap:8px;display:flex}.cmsc-pb-icon-picker__selected{color:#334155;align-items:center;gap:8px;font-size:.875rem;display:inline-flex}.cmsc-pb-icon-picker__search{border:1px solid #cbd5e1;border-radius:6px;width:100%;padding:6px 8px;font-size:.875rem}.cmsc-pb-icon-picker__grid{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;grid-template-columns:repeat(6,minmax(0,1fr));gap:4px;max-height:220px;padding:4px;display:grid;overflow:auto}.cmsc-pb-icon-picker__item{aspect-ratio:1;color:#15202b;cursor:pointer;background:#fff;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.cmsc-pb-icon-picker__item:hover{border-color:#94a3b8}.cmsc-pb-icon-picker__item--active{color:#0f766e;background:#ccfbf1;border-color:#0f766e}.cmsc-pb-icon-picker__empty{color:#64748b;margin:0;font-size:.75rem}.cmsc-pb-spacer{align-items:center;width:100%;display:flex;position:relative}.cmsc-pb-spacer__divider{border:0;border-top:1px solid #e2e8f0;width:100%;margin:0}.cmsc-pb-feature-list{margin:0;padding:0;list-style:none;display:grid}.cmsc-pb-feature-list__icon{margin-bottom:8px;display:inline-flex}.cmsc-pb-feature-list__title{color:#15202b;margin:0 0 4px;font-size:1.05rem;font-weight:600}.cmsc-pb-feature-list__desc{color:#475569;margin:0;font-size:.9rem;line-height:1.45}.cmsc-pb-hero{box-sizing:border-box;flex-direction:column;display:flex;position:relative;overflow:hidden}.cmsc-pb-hero>.cmsc-pb-bg-content{flex-direction:column;flex:auto;align-self:stretch;width:100%;min-height:100%;display:flex;position:relative;padding:0!important}.cmsc-pb-hero__frame{flex-direction:column;flex:auto;justify-content:center;width:100%;min-height:100%;display:flex;position:relative}.cmsc-pb-hero__overlay{z-index:0;pointer-events:none;background-color:rgb(15 23 42/var(--cmsc-hero-overlay,.4));position:absolute;inset:0}.cmsc-pb-hero__content{z-index:1;box-sizing:border-box;width:100%;position:relative}.cmsc-pb-hero__heading{margin:0 0 12px;font-size:clamp(1.75rem,3vw,2.5rem);font-weight:700;line-height:1.15}.cmsc-pb-hero__subtitle{opacity:.92;margin:0 0 20px;font-size:1.05rem;line-height:1.5}.cmsc-pb-hero__cta{border:1px solid #0000;border-radius:8px;align-items:center;padding:10px 18px;font-weight:600;text-decoration:none;display:inline-flex}.cmsc-pb-hero__cta:not(.cmsc-pb-btn-variant):not([style*=background]){color:#0f172a;background:#fff}.cmsc-pb-logo-strip{flex-wrap:wrap;align-items:center;margin:0;padding:0;list-style:none;display:flex}.cmsc-pb-logo-strip__img{object-fit:contain;width:auto;max-width:160px}.cmsc-pb-logo-strip--grayscale .cmsc-pb-logo-strip__img{filter:grayscale();opacity:.8}.cmsc-pb-testimonial__quote{color:#15202b;margin:0 0 16px;font-size:1.15rem;line-height:1.55}.cmsc-pb-testimonial__footer{align-items:center;gap:12px;display:flex}.cmsc-pb-testimonial__avatar{object-fit:cover;border-radius:999px;width:44px;height:44px}.cmsc-pb-testimonial__author{color:#15202b;font-weight:600}.cmsc-pb-testimonial__role{color:#64748b;font-size:.875rem}.cmsc-pb-stats{margin:0;padding:0;list-style:none;display:grid}.cmsc-pb-stats__value{font-size:clamp(1.5rem,2.5vw,2rem);font-weight:700;line-height:1.1}.cmsc-pb-stats__label{color:#64748b;margin-top:4px;font-size:.9rem}.cmsc-pb-announcement{text-align:center;width:100%;padding:10px 16px;font-size:.9rem;font-weight:500}.cmsc-pb-announcement__link{text-underline-offset:2px;text-decoration:underline}.cmsc-pb-table-wrap{width:100%;overflow-x:auto}.cmsc-pb-table{border-collapse:collapse;width:100%;font-size:.9rem}.cmsc-pb-table th,.cmsc-pb-table td{text-align:left;border-bottom:1px solid #e2e8f0;padding:10px 12px}.cmsc-pb-table th{color:#15202b;background:#f8fafc;font-weight:600}.cmsc-pb-table--striped tbody tr:nth-child(2n){background:#f8fafc}.cmsc-pb-table-cells-field{flex-direction:column;gap:8px;display:flex}.cmsc-pb-table-cells-field__row{flex-direction:column;gap:4px;display:flex}.cmsc-pb-table-cells-field__label{opacity:.8;font-size:12px;font-weight:500}.cmsc-pb-newsletter__heading,.cmsc-pb-contact__heading{color:#15202b;margin:0 0 8px;font-size:1.25rem;font-weight:650}.cmsc-pb-newsletter__desc,.cmsc-pb-contact__desc{color:#475569;margin:0 0 16px;line-height:1.45}.cmsc-pb-newsletter__form{flex-wrap:wrap;gap:8px;display:flex}.cmsc-pb-newsletter__input{border:1px solid #cbd5e1;border-radius:8px;flex:200px;min-width:0;padding:10px 12px}.cmsc-pb-newsletter__button{color:#fff;cursor:pointer;background:#0f766e;border:0;border-radius:8px;padding:10px 16px;font-weight:600}.cmsc-pb-contact__iframe{background:#f8fafc;border:0;border-radius:8px;width:100%}.cmsc-pb-contact__mailto{color:#0f766e;font-weight:600}.cmsc-pb-slide{border-radius:inherit;isolation:isolate;max-width:100%;min-height:0;overflow:hidden}.cmsc-pb-slide>.cmsc-pb-bg-content,.cmsc-pb-slide .cmsc-pb-slide-slot{border-radius:inherit;min-width:0;max-width:100%;overflow:hidden}.cmsc-pb-slide .cmsc-pb-full-bleed,.cmsc-pb-slide .cmsc-pb-row-full-width,.cmsc-pb-slide .cmsc-pb-row-full-viewport,.cmsc-pb-slide [data-row-section]{box-sizing:border-box;max-width:100%}.cmsc-pb-carousel--editor-preview .cmsc-pb-content-slider-slot,.cmsc-pb-carousel--editor-preview [data-puck-dropzone$=\:slides]{min-height:0}.cmsc-pb-carousel--editor-preview .cmsc-pb-slide--editing{box-sizing:border-box;background:#f8fafc;border:1px dashed #94a3b8;border-radius:8px;min-height:0;padding:12px;overflow:hidden}.cmsc-pb-carousel--editor-preview .cmsc-pb-slide--editing .cmsc-pb-slide-slot{border-radius:6px;min-height:120px}.cmsc-pb-carousel--editor-preview .cmsc-pb-slide--editing:has(.cmsc-pb-slide-slot [data-puck-component]){background:#fff;border-color:#cbd5e1;min-height:0}.cmsc-pb-carousel--editor-preview .cmsc-pb-slide--editing:has(.cmsc-pb-slide-slot [data-puck-component]) .cmsc-pb-slide-slot{min-height:0}.cmsc-pb-bg-video{object-fit:cover;z-index:0;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.cmsc-pb-bg-content{z-index:1;position:relative}@keyframes cmsc-pb-skel-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.cmsc-pb-skel-block{background:linear-gradient(90deg,#e8edf2 25%,#f4f6f8 50%,#e8edf2 75%) 0 0/200% 100%;border-radius:6px;animation:1.4s ease-in-out infinite cmsc-pb-skel-shimmer}.cmsc-pb-skel-product-card{pointer-events:none}.cmsc-pb-skel-product-card__media-fill{border-radius:0;width:100%;height:100%;min-height:100%}.cmsc-pb-skel-product-card__line{width:100%;height:12px}.cmsc-pb-skel-product-card__line--sku{width:38%;height:10px}.cmsc-pb-skel-product-card__line--name{width:92%;height:14px}.cmsc-pb-skel-product-card__line--stock{width:32%;height:10px}.cmsc-pb-skel-product-card__line--price{width:42%;height:16px;margin-top:2px}.cmsc-pb-skel-carousel__track{gap:var(--pb-skel-gap,16px);display:flex;overflow:hidden}@media (min-width:768px){.cmsc-pb-skel-carousel__track{gap:var(--pb-skel-gap-md,var(--pb-skel-gap,16px))}}@media (min-width:1024px){.cmsc-pb-skel-carousel__track{gap:var(--pb-skel-gap-lg,var(--pb-skel-gap-md,var(--pb-skel-gap,16px)))}}.cmsc-pb-skel-carousel__slide{flex:0 0 calc(var(--slide-basis,100%) - var(--pb-skel-gap,16px));min-width:0}@media (min-width:768px){.cmsc-pb-skel-carousel__slide{flex:0 0 calc(var(--slide-basis-md,var(--slide-basis,100%)) - var(--pb-skel-gap-md,var(--pb-skel-gap,16px)))}}@media (min-width:1024px){.cmsc-pb-skel-carousel__slide{flex:0 0 calc(var(--slide-basis-lg,var(--slide-basis-md,var(--slide-basis,100%))) - var(--pb-skel-gap-lg,var(--pb-skel-gap-md,var(--pb-skel-gap,16px))))}}.cmsc-pb-skel-grid{margin:0;padding:0;list-style:none}.cmsc-pb-skel-list{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.cmsc-pb-skel-category-line{height:16px}.cmsc-pb-skel-category-card{flex-direction:column;gap:8px;display:flex}.cmsc-pb-skel-category-card__media{aspect-ratio:4/3;width:100%}.cmsc-pb-skel-category-card__line{width:70%;height:14px}.cmsc-pb-tabs__list{border-bottom:1px solid #e2e8f0;gap:4px;margin-bottom:12px;display:flex}.cmsc-pb-tabs--align-center .cmsc-pb-tabs__list{justify-content:center}.cmsc-pb-tabs--align-stretch .cmsc-pb-tabs__tab{flex:1}.cmsc-pb-tabs__tab{cursor:pointer;color:#64748b;background:0 0;border:none;padding:10px 14px;font-size:14px}.cmsc-pb-tabs--underline .cmsc-pb-tabs__tab--active{color:#0f172a;border-bottom:2px solid #0f172a;margin-bottom:-1px}.cmsc-pb-tabs--pills .cmsc-pb-tabs__list{border:none}.cmsc-pb-tabs--pills .cmsc-pb-tabs__tab--active{color:#fff;background:#0f172a;border-radius:999px}.cmsc-pb-tabs--boxed .cmsc-pb-tabs__tab--active{background:#f1f5f9;border-radius:6px 6px 0 0}.cmsc-pb-accordion__item{border-bottom:1px solid #e2e8f0}.cmsc-pb-accordion--bordered .cmsc-pb-accordion__item{border:1px solid #e2e8f0;border-radius:8px;margin-bottom:8px}.cmsc-pb-accordion--flush .cmsc-pb-accordion__item{border-bottom:none}.cmsc-pb-accordion__trigger{cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:8px;width:100%;padding:12px 0;font-size:15px;font-weight:600;display:flex}.cmsc-pb-accordion__panel{padding:0 0 12px}.cmsc-pb-product-card{background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;display:flex;overflow:hidden}.cmsc-pb-product-card--horizontal{flex-direction:row}.cmsc-pb-product-card--compact .cmsc-pb-product-card__body{padding:8px}.cmsc-pb-product-card__media{background:#f8fafc;justify-content:center;align-items:center;display:flex;overflow:hidden}.cmsc-pb-product-card__media--square{aspect-ratio:1}.cmsc-pb-product-card__media--43{aspect-ratio:4/3}.cmsc-pb-product-card__media--169{aspect-ratio:16/9}.cmsc-pb-product-card__media--auto{aspect-ratio:auto;min-height:120px}.cmsc-pb-product-card__media img{object-fit:contain;max-width:70%;max-height:70%}.cmsc-pb-product-card__body{flex-direction:column;gap:4px;padding:12px;display:flex}.cmsc-pb-product-card__name{color:inherit;font-weight:600;text-decoration:none}.cmsc-pb-product-card__sku,.cmsc-pb-product-card__stock{color:#64748b;font-size:12px}.cmsc-pb-product-card__cta{color:#fff;background:#0f172a;border-radius:6px;width:fit-content;margin-top:8px;padding:8px 12px;font-size:13px;text-decoration:none;display:inline-flex}.cmsc-pb-product-grid{margin:0;padding:0;list-style:none;display:grid}.cmsc-pb-product-grid--list{flex-direction:column;display:flex}.cmsc-pb-product-grid--equal-height{align-items:stretch}.cmsc-pb-product-grid--equal-height>li{min-height:100%;display:flex}.cmsc-pb-product-grid--equal-height .cmsc-pb-product-card{flex:auto;min-height:100%}.cmsc-pb-product-grid--equal-height .cmsc-pb-product-card__body{flex:auto}.cmsc-pb-category-list{margin:0;padding:0;list-style:none}.cmsc-pb-category-list--inline{flex-wrap:wrap;gap:8px;display:flex}.cmsc-pb-category-list--chips .cmsc-pb-category-list__link{background:#f1f5f9;border-radius:999px;padding:6px 12px;display:inline-block}.cmsc-pb-category-list__link{color:inherit;text-decoration:none}.cmsc-pb-category-list__count{color:#64748b;margin-left:4px}.cmsc-pb-category-grid{margin:0;padding:0;list-style:none;display:grid}.cmsc-pb-category-grid--equal-height{align-items:stretch}.cmsc-pb-category-grid--equal-height>li{min-height:100%;display:flex}.cmsc-pb-category-grid--equal-height .cmsc-pb-category-grid__card{flex:auto;min-height:100%}.cmsc-pb-category-grid__card{color:inherit;background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;min-height:120px;padding:12px;text-decoration:none;display:flex}.cmsc-pb-category-grid--stacked .cmsc-pb-category-grid__card{gap:4px}.cmsc-pb-category-grid--minimal .cmsc-pb-category-grid__card{min-height:auto;box-shadow:none;background:0 0;border:none;border-radius:0;padding:8px 0}.cmsc-pb-category-grid--minimal .cmsc-pb-category-grid__image{display:none}.cmsc-pb-category-grid--overlay .cmsc-pb-category-grid__card{color:#fff;border:none;justify-content:flex-end;min-height:160px;padding:16px;position:relative;overflow:hidden}.cmsc-pb-category-grid--overlay .cmsc-pb-category-grid__image{z-index:0;border-radius:8px;height:100%;margin:0;position:absolute;inset:0}.cmsc-pb-category-grid--overlay .cmsc-pb-category-grid__image:after{content:"";border-radius:inherit;background:linear-gradient(#0f172a2e,#0f172ab8);position:absolute;inset:0}.cmsc-pb-category-grid--overlay .cmsc-pb-category-grid__name,.cmsc-pb-category-grid--overlay .cmsc-pb-category-grid__count{z-index:1;position:relative}.cmsc-pb-category-grid--overlay .cmsc-pb-category-grid__count{color:#e2e8f0e6}.cmsc-pb-category-grid__image{background:linear-gradient(135deg,#e2e8f0,#f8fafc);border-radius:6px;height:80px;margin-bottom:8px;display:block}.cmsc-pb-map{background:#f1f5f9;border-radius:8px;width:100%;position:relative;overflow:hidden}.cmsc-pb-map__leaflet,.cmsc-pb-map .leaflet-container{z-index:0;width:100%;height:100%}.cmsc-pb-map__iframe,.cmsc-pb-video iframe{border:0;border-radius:8px;width:100%;height:100%;display:block}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
@@ -0,0 +1,43 @@
1
+ import { type PuckComponent } from '@measured/puck';
2
+ import type { AccordionProps } from '../schema/component-types.js';
3
+ export declare const Accordion: {
4
+ render: PuckComponent<AccordionProps>;
5
+ label?: string;
6
+ defaultProps?: AccordionProps;
7
+ fields?: import("@measured/puck").Fields<AccordionProps, {}>;
8
+ permissions?: Partial<import("@measured/puck").Permissions>;
9
+ inline?: boolean;
10
+ resolveFields?: (data: Omit<import("@measured/puck").ComponentData<AccordionProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
11
+ changed: Partial<Record<keyof AccordionProps, boolean> & {
12
+ id: string;
13
+ }>;
14
+ fields: import("@measured/puck").Fields<AccordionProps, {}>;
15
+ lastFields: import("@measured/puck").Fields<AccordionProps, {}>;
16
+ lastData: Omit<import("@measured/puck").ComponentData<AccordionProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
17
+ appState: import("@measured/puck").AppState;
18
+ parent: import("@measured/puck").ComponentData | null;
19
+ }) => import("@measured/puck").Fields<AccordionProps, {}> | Promise<import("@measured/puck").Fields<AccordionProps, {}>>;
20
+ resolveData?: (data: Omit<import("@measured/puck").ComponentData<AccordionProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
21
+ changed: Partial<Record<keyof AccordionProps, boolean> & {
22
+ id: string;
23
+ }>;
24
+ lastData: Omit<import("@measured/puck").ComponentData<AccordionProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
25
+ metadata: import("@measured/puck").Metadata;
26
+ trigger: import("@measured/puck").ResolveDataTrigger;
27
+ }) => (Omit<Omit<import("@measured/puck").ComponentData<AccordionProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, "props"> & {
28
+ props?: Partial<AccordionProps>;
29
+ }) | Promise<Omit<Omit<import("@measured/puck").ComponentData<AccordionProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, "props"> & {
30
+ props?: Partial<AccordionProps>;
31
+ }>;
32
+ resolvePermissions?: (data: Omit<import("@measured/puck").ComponentData<AccordionProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
33
+ changed: Partial<Record<keyof AccordionProps, boolean> & {
34
+ id: string;
35
+ }>;
36
+ lastPermissions: Partial<import("@measured/puck").Permissions>;
37
+ permissions: Partial<import("@measured/puck").Permissions>;
38
+ appState: import("@measured/puck").AppState;
39
+ lastData: Omit<import("@measured/puck").ComponentData<AccordionProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
40
+ }) => Promise<Partial<import("@measured/puck").Permissions>> | Partial<import("@measured/puck").Permissions>;
41
+ metadata?: import("@measured/puck").Metadata;
42
+ };
43
+ //# sourceMappingURL=Accordion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../src/components/Accordion.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAsHnE,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA8B,CAAC"}
@@ -0,0 +1,81 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import {} from '@measured/puck';
5
+ import { withHideOn } from '@endora-commerce/page-builder-core';
6
+ import { BoxStyled } from './box-styles.js';
7
+ import { BOX_BORDER_FIELD, BOX_MARGIN_FIELD, BOX_PADDING_FIELD, DEFAULT_BOX_PROPS, } from '../fields/shared-fields.js';
8
+ import { sanitizeHtml } from '../utils/sanitize-html.js';
9
+ const AccordionRender = (props) => {
10
+ const { items = [], allowMultiple = false, defaultOpen = [], iconPosition = 'end', variant = 'default', puck, ...box } = props;
11
+ const editing = puck?.isEditing === true;
12
+ const [open, setOpen] = useState(() => new Set(defaultOpen));
13
+ const toggle = (index) => {
14
+ setOpen((prev) => {
15
+ const next = new Set(prev);
16
+ if (next.has(index)) {
17
+ next.delete(index);
18
+ }
19
+ else {
20
+ if (!allowMultiple)
21
+ next.clear();
22
+ next.add(index);
23
+ }
24
+ return next;
25
+ });
26
+ };
27
+ if (items.length === 0) {
28
+ return (_jsx(BoxStyled, { ...box, ...(editing ? { previewTier: 'desktop' } : {}), children: _jsx("p", { className: "cmsc:text-sm cmsc:text-[#64748b]", children: "Add accordion items in the sidebar" }) }));
29
+ }
30
+ return (_jsx(BoxStyled, { ...box, ...(editing ? { previewTier: 'desktop' } : {}), children: _jsx("div", { className: `cmsc-pb-accordion cmsc-pb-accordion--${variant} cmsc-pb-accordion--icon-${iconPosition}`, children: items.map((item, i) => {
31
+ const expanded = open.has(i);
32
+ return (_jsxs("div", { className: "cmsc-pb-accordion__item", children: [_jsxs("button", { type: "button", className: "cmsc-pb-accordion__trigger", "aria-expanded": expanded, onClick: () => toggle(i), children: [iconPosition === 'start' ? _jsx("span", { className: "cmsc-pb-accordion__icon", "aria-hidden": true, children: expanded ? '−' : '+' }) : null, _jsx("span", { className: "cmsc-pb-accordion__title", children: item.title || `Item ${i + 1}` }), iconPosition === 'end' ? _jsx("span", { className: "cmsc-pb-accordion__icon", "aria-hidden": true, children: expanded ? '−' : '+' }) : null] }), _jsx("div", { className: "cmsc-pb-accordion__panel", hidden: !expanded, children: _jsx("div", { dangerouslySetInnerHTML: { __html: sanitizeHtml(item.content ?? '') } }) })] }, i));
33
+ }) }) }));
34
+ };
35
+ const accordionConfig = {
36
+ label: 'Accordion',
37
+ fields: {
38
+ items: {
39
+ type: 'array',
40
+ label: 'Items',
41
+ arrayFields: {
42
+ title: { type: 'text', label: 'Header' },
43
+ content: { type: 'textarea', label: 'Content (HTML)' },
44
+ },
45
+ defaultItemProps: { title: 'Section', content: '<p>Content</p>' },
46
+ },
47
+ allowMultiple: { type: 'radio', label: 'Allow multiple open', options: [{ label: 'Yes', value: true }, { label: 'No', value: false }] },
48
+ defaultOpen: { type: 'number', label: 'Default open index', min: 0 },
49
+ iconPosition: {
50
+ type: 'select',
51
+ label: 'Icon position',
52
+ options: [
53
+ { label: 'Start', value: 'start' },
54
+ { label: 'End', value: 'end' },
55
+ ],
56
+ },
57
+ variant: {
58
+ type: 'select',
59
+ label: 'Style',
60
+ options: [
61
+ { label: 'Default', value: 'default' },
62
+ { label: 'Flush', value: 'flush' },
63
+ { label: 'Bordered', value: 'bordered' },
64
+ ],
65
+ },
66
+ margin: BOX_MARGIN_FIELD,
67
+ padding: BOX_PADDING_FIELD,
68
+ border: BOX_BORDER_FIELD,
69
+ },
70
+ defaultProps: {
71
+ items: [{ title: 'Section 1', content: '<p>First section</p>' }],
72
+ allowMultiple: false,
73
+ defaultOpen: [],
74
+ iconPosition: 'end',
75
+ variant: 'default',
76
+ ...DEFAULT_BOX_PROPS,
77
+ },
78
+ render: AccordionRender,
79
+ };
80
+ export const Accordion = withHideOn(accordionConfig);
81
+ //# sourceMappingURL=Accordion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../../src/components/Accordion.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { type PuckComponent } from '@measured/puck';
2
+ import type { AnnouncementBarProps } from '../schema/component-types.js';
3
+ export declare const AnnouncementBar: {
4
+ render: PuckComponent<AnnouncementBarProps>;
5
+ label?: string;
6
+ defaultProps?: AnnouncementBarProps;
7
+ fields?: import("@measured/puck").Fields<AnnouncementBarProps, {}>;
8
+ permissions?: Partial<import("@measured/puck").Permissions>;
9
+ inline?: boolean;
10
+ resolveFields?: (data: Omit<import("@measured/puck").ComponentData<AnnouncementBarProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
11
+ changed: Partial<Record<keyof AnnouncementBarProps, boolean> & {
12
+ id: string;
13
+ }>;
14
+ fields: import("@measured/puck").Fields<AnnouncementBarProps, {}>;
15
+ lastFields: import("@measured/puck").Fields<AnnouncementBarProps, {}>;
16
+ lastData: Omit<import("@measured/puck").ComponentData<AnnouncementBarProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
17
+ appState: import("@measured/puck").AppState;
18
+ parent: import("@measured/puck").ComponentData | null;
19
+ }) => import("@measured/puck").Fields<AnnouncementBarProps, {}> | Promise<import("@measured/puck").Fields<AnnouncementBarProps, {}>>;
20
+ resolveData?: (data: Omit<import("@measured/puck").ComponentData<AnnouncementBarProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
21
+ changed: Partial<Record<keyof AnnouncementBarProps, boolean> & {
22
+ id: string;
23
+ }>;
24
+ lastData: Omit<import("@measured/puck").ComponentData<AnnouncementBarProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
25
+ metadata: import("@measured/puck").Metadata;
26
+ trigger: import("@measured/puck").ResolveDataTrigger;
27
+ }) => (Omit<Omit<import("@measured/puck").ComponentData<AnnouncementBarProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, "props"> & {
28
+ props?: Partial<AnnouncementBarProps>;
29
+ }) | Promise<Omit<Omit<import("@measured/puck").ComponentData<AnnouncementBarProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, "props"> & {
30
+ props?: Partial<AnnouncementBarProps>;
31
+ }>;
32
+ resolvePermissions?: (data: Omit<import("@measured/puck").ComponentData<AnnouncementBarProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
33
+ changed: Partial<Record<keyof AnnouncementBarProps, boolean> & {
34
+ id: string;
35
+ }>;
36
+ lastPermissions: Partial<import("@measured/puck").Permissions>;
37
+ permissions: Partial<import("@measured/puck").Permissions>;
38
+ appState: import("@measured/puck").AppState;
39
+ lastData: Omit<import("@measured/puck").ComponentData<AnnouncementBarProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
40
+ }) => Promise<Partial<import("@measured/puck").Permissions>> | Partial<import("@measured/puck").Permissions>;
41
+ metadata?: import("@measured/puck").Metadata;
42
+ };
43
+ //# sourceMappingURL=AnnouncementBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnouncementBar.d.ts","sourceRoot":"","sources":["../../src/components/AnnouncementBar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AA8CzE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAoC,CAAC"}
@@ -0,0 +1,27 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import {} from '@measured/puck';
4
+ import { createColorField, withHideOn } from '@endora-commerce/page-builder-core';
5
+ const AnnouncementBarRender = (props) => {
6
+ const { text, href = '', backgroundColor = '#0f766e', textColor = '#ffffff', } = props;
7
+ const inner = _jsx("span", { className: "cmsc-pb-announcement__text", children: text });
8
+ return (_jsx("div", { className: "cmsc-pb-announcement", style: { backgroundColor, color: textColor }, role: "status", children: href ? (_jsx("a", { className: "cmsc-pb-announcement__link", href: href, style: { color: textColor }, children: inner })) : (inner) }));
9
+ };
10
+ const announcementBarConfig = {
11
+ label: 'Announcement bar',
12
+ fields: {
13
+ text: { type: 'text', label: 'Message' },
14
+ href: { type: 'text', label: 'Link URL (optional)' },
15
+ backgroundColor: createColorField({ label: 'Background' }),
16
+ textColor: createColorField({ label: 'Text color' }),
17
+ },
18
+ defaultProps: {
19
+ text: 'Free shipping on orders over €500 — shop now',
20
+ href: '',
21
+ backgroundColor: '#0f766e',
22
+ textColor: '#ffffff',
23
+ },
24
+ render: AnnouncementBarRender,
25
+ };
26
+ export const AnnouncementBar = withHideOn(announcementBarConfig);
27
+ //# sourceMappingURL=AnnouncementBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnouncementBar.js","sourceRoot":"","sources":["../../src/components/AnnouncementBar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAA4C,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAGlF,MAAM,qBAAqB,GAAwC,CAAC,KAAK,EAAE,EAAE;IAC3E,MAAM,EACJ,IAAI,EACJ,IAAI,GAAG,EAAE,EACT,eAAe,GAAG,SAAS,EAC3B,SAAS,GAAG,SAAS,GACtB,GAAG,KAAK,CAAC;IAEV,MAAM,KAAK,GAAG,eAAM,SAAS,EAAC,4BAA4B,YAAE,IAAI,GAAQ,CAAC;IAEzE,OAAO,CACL,cACE,SAAS,EAAC,sBAAsB,EAChC,KAAK,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,EAC5C,IAAI,EAAC,QAAQ,YAEZ,IAAI,CAAC,CAAC,CAAC,CACN,YAAG,SAAS,EAAC,4BAA4B,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,YAC9E,KAAK,GACJ,CACL,CAAC,CAAC,CAAC,CACF,KAAK,CACN,GACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAA0C;IACnE,KAAK,EAAE,kBAAkB;IACzB,MAAM,EAAE;QACN,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;QACxC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE;QACpD,eAAe,EAAE,gBAAgB,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QAC1D,SAAS,EAAE,gBAAgB,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;KACrD;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,8CAA8C;QACpD,IAAI,EAAE,EAAE;QACR,eAAe,EAAE,SAAS;QAC1B,SAAS,EAAE,SAAS;KACrB;IACD,MAAM,EAAE,qBAAqB;CAC9B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { type PuckComponent } from '@measured/puck';
2
+ import type { ButtonProps } from '../schema/component-types.js';
3
+ export declare const Button: {
4
+ render: PuckComponent<ButtonProps>;
5
+ label?: string;
6
+ defaultProps?: ButtonProps;
7
+ fields?: import("@measured/puck").Fields<ButtonProps, {}>;
8
+ permissions?: Partial<import("@measured/puck").Permissions>;
9
+ inline?: boolean;
10
+ resolveFields?: (data: Omit<import("@measured/puck").ComponentData<ButtonProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
11
+ changed: Partial<Record<keyof ButtonProps, boolean> & {
12
+ id: string;
13
+ }>;
14
+ fields: import("@measured/puck").Fields<ButtonProps, {}>;
15
+ lastFields: import("@measured/puck").Fields<ButtonProps, {}>;
16
+ lastData: Omit<import("@measured/puck").ComponentData<ButtonProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
17
+ appState: import("@measured/puck").AppState;
18
+ parent: import("@measured/puck").ComponentData | null;
19
+ }) => import("@measured/puck").Fields<ButtonProps, {}> | Promise<import("@measured/puck").Fields<ButtonProps, {}>>;
20
+ resolveData?: (data: Omit<import("@measured/puck").ComponentData<ButtonProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
21
+ changed: Partial<Record<keyof ButtonProps, boolean> & {
22
+ id: string;
23
+ }>;
24
+ lastData: Omit<import("@measured/puck").ComponentData<ButtonProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
25
+ metadata: import("@measured/puck").Metadata;
26
+ trigger: import("@measured/puck").ResolveDataTrigger;
27
+ }) => (Omit<Omit<import("@measured/puck").ComponentData<ButtonProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, "props"> & {
28
+ props?: Partial<ButtonProps>;
29
+ }) | Promise<Omit<Omit<import("@measured/puck").ComponentData<ButtonProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, "props"> & {
30
+ props?: Partial<ButtonProps>;
31
+ }>;
32
+ resolvePermissions?: (data: Omit<import("@measured/puck").ComponentData<ButtonProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
33
+ changed: Partial<Record<keyof ButtonProps, boolean> & {
34
+ id: string;
35
+ }>;
36
+ lastPermissions: Partial<import("@measured/puck").Permissions>;
37
+ permissions: Partial<import("@measured/puck").Permissions>;
38
+ appState: import("@measured/puck").AppState;
39
+ lastData: Omit<import("@measured/puck").ComponentData<ButtonProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
40
+ }) => Promise<Partial<import("@measured/puck").Permissions>> | Partial<import("@measured/puck").Permissions>;
41
+ metadata?: import("@measured/puck").Metadata;
42
+ };
43
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAS1E,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,8BAA8B,CAAC;AAiL/E,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA2B,CAAC"}
@@ -0,0 +1,122 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import {} from '@measured/puck';
4
+ import { createColorField, PB_RESPONSIVE_METADATA, resolveResponsive, withHideOn, } from '@endora-commerce/page-builder-core';
5
+ import { usePreviewBreakpointTier } from '@endora-commerce/page-builder-core/client';
6
+ import { BoxStyled } from './box-styles.js';
7
+ import { BOX_BORDER_FIELD, BOX_MARGIN_FIELD, BOX_PADDING_FIELD, DEFAULT_BOX_PROPS, TEXT_COLOR_FIELD, } from '../fields/shared-fields.js';
8
+ import { resolveButtonHref } from './button-link.js';
9
+ const variantStyles = {
10
+ primary: 'cmsc-pb-btn-primary',
11
+ secondary: 'cmsc-pb-btn-secondary',
12
+ ghost: 'cmsc-pb-btn-ghost',
13
+ };
14
+ const BUTTON_FIELDS = {
15
+ label: { type: 'text', label: 'Label' },
16
+ linkType: {
17
+ type: 'select',
18
+ label: 'Link type',
19
+ options: [
20
+ { label: 'Static URL', value: 'url' },
21
+ { label: 'Product', value: 'product' },
22
+ { label: 'Category', value: 'category' },
23
+ { label: 'CMS page', value: 'page' },
24
+ ],
25
+ },
26
+ linkSlug: { type: 'text', label: 'Link target (slug)' },
27
+ href: { type: 'text', label: 'URL' },
28
+ target: {
29
+ type: 'select',
30
+ label: 'Target',
31
+ options: [
32
+ { label: 'Same tab', value: '_self' },
33
+ { label: 'New tab', value: '_blank' },
34
+ ],
35
+ },
36
+ variant: {
37
+ type: 'select',
38
+ label: 'Variant',
39
+ metadata: PB_RESPONSIVE_METADATA,
40
+ options: [
41
+ { label: 'Primary', value: 'primary' },
42
+ { label: 'Secondary', value: 'secondary' },
43
+ { label: 'Ghost', value: 'ghost' },
44
+ ],
45
+ },
46
+ backgroundColor: createColorField({ label: 'Background color' }),
47
+ textColor: TEXT_COLOR_FIELD,
48
+ margin: BOX_MARGIN_FIELD,
49
+ padding: BOX_PADDING_FIELD,
50
+ border: BOX_BORDER_FIELD,
51
+ };
52
+ function variantClasses(variant) {
53
+ const mobile = resolveResponsive(variant, 'mobile', 'primary');
54
+ const tablet = resolveResponsive(variant, 'tablet', 'primary');
55
+ const desktop = resolveResponsive(variant, 'desktop', 'primary');
56
+ const classes = [variantStyles[mobile], 'cmsc-pb-btn-variant'];
57
+ if (tablet !== mobile)
58
+ classes.push(`cmsc-pb-btn-variant-md-${tablet}`);
59
+ if (desktop !== tablet)
60
+ classes.push(`cmsc-pb-btn-variant-lg-${desktop}`);
61
+ return classes.join(' ');
62
+ }
63
+ function buttonColorStyle(props) {
64
+ const style = {};
65
+ if (props.backgroundColor && props.backgroundColor !== 'transparent') {
66
+ style.backgroundColor = props.backgroundColor;
67
+ style.borderColor = props.backgroundColor;
68
+ }
69
+ if (props.textColor && props.textColor !== 'transparent') {
70
+ style.color = props.textColor;
71
+ }
72
+ return style;
73
+ }
74
+ function ButtonAnchor({ label, href, target, variantClass, colorStyle, }) {
75
+ const hasCustomColors = Object.keys(colorStyle).length > 0;
76
+ return (_jsx("a", { href: href, target: target, rel: target === '_blank' ? 'noreferrer' : undefined, className: `cmsc:font-sans cmsc:inline-flex cmsc:items-center cmsc:justify-center cmsc:min-h-[40px] cmsc:px-[18px] cmsc:border cmsc:border-solid cmsc:rounded-[8px] cmsc:text-[14px] cmsc:font-bold cmsc:leading-none cmsc:no-underline ${hasCustomColors ? '' : variantClass}`, style: colorStyle, children: label }));
77
+ }
78
+ const ButtonEditingRender = (props) => {
79
+ const tier = usePreviewBreakpointTier();
80
+ const { label, target, variant, linkType, linkSlug, href, backgroundColor, textColor, ...box } = props;
81
+ const resolvedVariant = resolveResponsive(variant, tier, 'primary');
82
+ const resolvedHref = resolveButtonHref({ linkType, linkSlug, href });
83
+ return (_jsx(BoxStyled, { previewTier: tier, ...box, children: _jsx(ButtonAnchor, { label: label, href: resolvedHref, target: target, variantClass: variantStyles[resolvedVariant], colorStyle: buttonColorStyle({ backgroundColor, textColor }) }) }));
84
+ };
85
+ const ButtonPublishedRender = (props) => {
86
+ const { label, target, variant, linkType, linkSlug, href, backgroundColor, textColor, ...box } = props;
87
+ const resolvedHref = resolveButtonHref({ linkType, linkSlug, href });
88
+ return (_jsx(BoxStyled, { ...box, children: _jsx(ButtonAnchor, { label: label, href: resolvedHref, target: target, variantClass: variantClasses(variant), colorStyle: buttonColorStyle({ backgroundColor, textColor }) }) }));
89
+ };
90
+ const buttonConfig = {
91
+ label: 'Button',
92
+ fields: BUTTON_FIELDS,
93
+ defaultProps: {
94
+ label: 'Call to action',
95
+ linkType: 'url',
96
+ linkSlug: '',
97
+ href: '/',
98
+ target: '_self',
99
+ variant: 'primary',
100
+ ...DEFAULT_BOX_PROPS,
101
+ },
102
+ resolveFields: (data) => {
103
+ const linkType = data.props.linkType ?? 'url';
104
+ if (linkType === 'url') {
105
+ const { linkSlug: _removed, ...rest } = BUTTON_FIELDS;
106
+ return rest;
107
+ }
108
+ const { href: _removed, ...rest } = BUTTON_FIELDS;
109
+ return rest;
110
+ },
111
+ resolveData: async ({ props }) => {
112
+ const linkType = props.linkType ?? 'url';
113
+ const href = resolveButtonHref(props);
114
+ if (linkType !== 'url' && href !== props.href) {
115
+ return { props: { ...props, href } };
116
+ }
117
+ return { props };
118
+ },
119
+ render: (props) => props.puck?.isEditing ? _jsx(ButtonEditingRender, { ...props }) : _jsx(ButtonPublishedRender, { ...props }),
120
+ };
121
+ export const Button = withHideOn(buttonConfig);
122
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":"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"}