@xiwebdesign/xicms-core 4.17.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 (436) hide show
  1. package/dist/XiCMSProvider.d.ts +58 -0
  2. package/dist/XiCMSProvider.js +165 -0
  3. package/dist/XiCMSProvider.js.map +1 -0
  4. package/dist/admin/AdminApp.d.ts +4 -0
  5. package/dist/admin/AdminApp.js +62 -0
  6. package/dist/admin/AdminApp.js.map +1 -0
  7. package/dist/admin/AdminHelp.d.ts +2 -0
  8. package/dist/admin/AdminHelp.js +65 -0
  9. package/dist/admin/AdminHelp.js.map +1 -0
  10. package/dist/admin/NewsEditor.d.ts +2 -0
  11. package/dist/admin/NewsEditor.js +171 -0
  12. package/dist/admin/NewsEditor.js.map +1 -0
  13. package/dist/admin/SuperadminPanel.d.ts +4 -0
  14. package/dist/admin/SuperadminPanel.js +101 -0
  15. package/dist/admin/SuperadminPanel.js.map +1 -0
  16. package/dist/admin/blockEditors/StyleEditor.d.ts +10 -0
  17. package/dist/admin/blockEditors/StyleEditor.js +78 -0
  18. package/dist/admin/blockEditors/StyleEditor.js.map +1 -0
  19. package/dist/admin/blockEditors/index.d.ts +16 -0
  20. package/dist/admin/blockEditors/index.js +1602 -0
  21. package/dist/admin/blockEditors/index.js.map +1 -0
  22. package/dist/admin/editors/RichTextEditor.d.ts +10 -0
  23. package/dist/admin/editors/RichTextEditor.js +86 -0
  24. package/dist/admin/editors/RichTextEditor.js.map +1 -0
  25. package/dist/admin/forms/FormsPanel.d.ts +3 -0
  26. package/dist/admin/forms/FormsPanel.js +203 -0
  27. package/dist/admin/forms/FormsPanel.js.map +1 -0
  28. package/dist/admin/index.d.ts +21 -0
  29. package/dist/admin/index.js +38 -0
  30. package/dist/admin/index.js.map +1 -0
  31. package/dist/admin/lib/compressImage.d.ts +12 -0
  32. package/dist/admin/lib/compressImage.js +53 -0
  33. package/dist/admin/lib/compressImage.js.map +1 -0
  34. package/dist/admin/lib/mediaUsage.d.ts +9 -0
  35. package/dist/admin/lib/mediaUsage.js +25 -0
  36. package/dist/admin/lib/mediaUsage.js.map +1 -0
  37. package/dist/admin/lib/pagesClient.d.ts +38 -0
  38. package/dist/admin/lib/pagesClient.js +143 -0
  39. package/dist/admin/lib/pagesClient.js.map +1 -0
  40. package/dist/admin/lib/slugify.d.ts +2 -0
  41. package/dist/admin/lib/slugify.js +7 -0
  42. package/dist/admin/lib/slugify.js.map +1 -0
  43. package/dist/admin/lib/upload.d.ts +13 -0
  44. package/dist/admin/lib/upload.js +40 -0
  45. package/dist/admin/lib/upload.js.map +1 -0
  46. package/dist/admin/lib/zodFields.d.ts +27 -0
  47. package/dist/admin/lib/zodFields.js +48 -0
  48. package/dist/admin/lib/zodFields.js.map +1 -0
  49. package/dist/admin/media/MediaManager.d.ts +3 -0
  50. package/dist/admin/media/MediaManager.js +132 -0
  51. package/dist/admin/media/MediaManager.js.map +1 -0
  52. package/dist/admin/media/MediaPicker.d.ts +24 -0
  53. package/dist/admin/media/MediaPicker.js +93 -0
  54. package/dist/admin/media/MediaPicker.js.map +1 -0
  55. package/dist/admin/pages/PageEditor.d.ts +5 -0
  56. package/dist/admin/pages/PageEditor.js +239 -0
  57. package/dist/admin/pages/PageEditor.js.map +1 -0
  58. package/dist/admin/pages/PagesPanel.d.ts +3 -0
  59. package/dist/admin/pages/PagesPanel.js +92 -0
  60. package/dist/admin/pages/PagesPanel.js.map +1 -0
  61. package/dist/admin/panelRegistry.d.ts +20 -0
  62. package/dist/admin/panelRegistry.js +23 -0
  63. package/dist/admin/panelRegistry.js.map +1 -0
  64. package/dist/admin/patterns/PatternInserter.d.ts +10 -0
  65. package/dist/admin/patterns/PatternInserter.js +58 -0
  66. package/dist/admin/patterns/PatternInserter.js.map +1 -0
  67. package/dist/admin/settings/SettingsPanel.d.ts +3 -0
  68. package/dist/admin/settings/SettingsPanel.js +304 -0
  69. package/dist/admin/settings/SettingsPanel.js.map +1 -0
  70. package/dist/admin/settings/moduleSettingsForm.d.ts +12 -0
  71. package/dist/admin/settings/moduleSettingsForm.js +45 -0
  72. package/dist/admin/settings/moduleSettingsForm.js.map +1 -0
  73. package/dist/admin/stats/StatsPanel.d.ts +4 -0
  74. package/dist/admin/stats/StatsPanel.js +80 -0
  75. package/dist/admin/stats/StatsPanel.js.map +1 -0
  76. package/dist/admin/ui/ArrayEditor.d.ts +16 -0
  77. package/dist/admin/ui/ArrayEditor.js +38 -0
  78. package/dist/admin/ui/ArrayEditor.js.map +1 -0
  79. package/dist/admin/ui/ConfirmDialog.d.ts +22 -0
  80. package/dist/admin/ui/ConfirmDialog.js +47 -0
  81. package/dist/admin/ui/ConfirmDialog.js.map +1 -0
  82. package/dist/admin/ui/cn.d.ts +3 -0
  83. package/dist/admin/ui/cn.js +9 -0
  84. package/dist/admin/ui/cn.js.map +1 -0
  85. package/dist/admin/ui/dialog.d.ts +9 -0
  86. package/dist/admin/ui/dialog.js +47 -0
  87. package/dist/admin/ui/dialog.js.map +1 -0
  88. package/dist/admin/ui/index.d.ts +7 -0
  89. package/dist/admin/ui/index.js +29 -0
  90. package/dist/admin/ui/index.js.map +1 -0
  91. package/dist/admin/ui/primitives.d.ts +37 -0
  92. package/dist/admin/ui/primitives.js +137 -0
  93. package/dist/admin/ui/primitives.js.map +1 -0
  94. package/dist/admin/ui/select.d.ts +11 -0
  95. package/dist/admin/ui/select.js +27 -0
  96. package/dist/admin/ui/select.js.map +1 -0
  97. package/dist/admin/ui/switch.d.ts +6 -0
  98. package/dist/admin/ui/switch.js +22 -0
  99. package/dist/admin/ui/switch.js.map +1 -0
  100. package/dist/admin/ui/tabs.d.ts +5 -0
  101. package/dist/admin/ui/tabs.js +36 -0
  102. package/dist/admin/ui/tabs.js.map +1 -0
  103. package/dist/admin/ui/toast.d.ts +19 -0
  104. package/dist/admin/ui/toast.js +24 -0
  105. package/dist/admin/ui/toast.js.map +1 -0
  106. package/dist/admin/visual/VisualEditor.d.ts +10 -0
  107. package/dist/admin/visual/VisualEditor.js +597 -0
  108. package/dist/admin/visual/VisualEditor.js.map +1 -0
  109. package/dist/admin/visual/reorder.d.ts +6 -0
  110. package/dist/admin/visual/reorder.js +12 -0
  111. package/dist/admin/visual/reorder.js.map +1 -0
  112. package/dist/admin.css +1 -0
  113. package/dist/auth/AuthProvider.d.ts +30 -0
  114. package/dist/auth/AuthProvider.js +110 -0
  115. package/dist/auth/AuthProvider.js.map +1 -0
  116. package/dist/auth/LoginForm.d.ts +4 -0
  117. package/dist/auth/LoginForm.js +122 -0
  118. package/dist/auth/LoginForm.js.map +1 -0
  119. package/dist/auth/roles.d.ts +15 -0
  120. package/dist/auth/roles.js +21 -0
  121. package/dist/auth/roles.js.map +1 -0
  122. package/dist/blocks/BlockErrorBoundary.d.ts +32 -0
  123. package/dist/blocks/BlockErrorBoundary.js +39 -0
  124. package/dist/blocks/BlockErrorBoundary.js.map +1 -0
  125. package/dist/blocks/BlockRenderer.d.ts +15 -0
  126. package/dist/blocks/BlockRenderer.js +24 -0
  127. package/dist/blocks/BlockRenderer.js.map +1 -0
  128. package/dist/blocks/blockStyle.d.ts +14 -0
  129. package/dist/blocks/blockStyle.js +14 -0
  130. package/dist/blocks/blockStyle.js.map +1 -0
  131. package/dist/blocks/builtins/Accordion.d.ts +2 -0
  132. package/dist/blocks/builtins/Accordion.js +45 -0
  133. package/dist/blocks/builtins/Accordion.js.map +1 -0
  134. package/dist/blocks/builtins/Agenda.d.ts +23 -0
  135. package/dist/blocks/builtins/Agenda.js +102 -0
  136. package/dist/blocks/builtins/Agenda.js.map +1 -0
  137. package/dist/blocks/builtins/Banner.d.ts +2 -0
  138. package/dist/blocks/builtins/Banner.js +45 -0
  139. package/dist/blocks/builtins/Banner.js.map +1 -0
  140. package/dist/blocks/builtins/BeforeAfter.d.ts +2 -0
  141. package/dist/blocks/builtins/BeforeAfter.js +44 -0
  142. package/dist/blocks/builtins/BeforeAfter.js.map +1 -0
  143. package/dist/blocks/builtins/Booking.d.ts +2 -0
  144. package/dist/blocks/builtins/Booking.js +27 -0
  145. package/dist/blocks/builtins/Booking.js.map +1 -0
  146. package/dist/blocks/builtins/Breadcrumbs.d.ts +10 -0
  147. package/dist/blocks/builtins/Breadcrumbs.js +73 -0
  148. package/dist/blocks/builtins/Breadcrumbs.js.map +1 -0
  149. package/dist/blocks/builtins/Cards.d.ts +2 -0
  150. package/dist/blocks/builtins/Cards.js +94 -0
  151. package/dist/blocks/builtins/Cards.js.map +1 -0
  152. package/dist/blocks/builtins/Columns.d.ts +2 -0
  153. package/dist/blocks/builtins/Columns.js +22 -0
  154. package/dist/blocks/builtins/Columns.js.map +1 -0
  155. package/dist/blocks/builtins/Contact.d.ts +7 -0
  156. package/dist/blocks/builtins/Contact.js +121 -0
  157. package/dist/blocks/builtins/Contact.js.map +1 -0
  158. package/dist/blocks/builtins/Countdown.d.ts +18 -0
  159. package/dist/blocks/builtins/Countdown.js +65 -0
  160. package/dist/blocks/builtins/Countdown.js.map +1 -0
  161. package/dist/blocks/builtins/Cta.d.ts +2 -0
  162. package/dist/blocks/builtins/Cta.js +52 -0
  163. package/dist/blocks/builtins/Cta.js.map +1 -0
  164. package/dist/blocks/builtins/Downloads.d.ts +2 -0
  165. package/dist/blocks/builtins/Downloads.js +32 -0
  166. package/dist/blocks/builtins/Downloads.js.map +1 -0
  167. package/dist/blocks/builtins/Elements.d.ts +4 -0
  168. package/dist/blocks/builtins/Elements.js +64 -0
  169. package/dist/blocks/builtins/Elements.js.map +1 -0
  170. package/dist/blocks/builtins/Embed.d.ts +2 -0
  171. package/dist/blocks/builtins/Embed.js +30 -0
  172. package/dist/blocks/builtins/Embed.js.map +1 -0
  173. package/dist/blocks/builtins/Faq.d.ts +6 -0
  174. package/dist/blocks/builtins/Faq.js +110 -0
  175. package/dist/blocks/builtins/Faq.js.map +1 -0
  176. package/dist/blocks/builtins/FormBlock.d.ts +2 -0
  177. package/dist/blocks/builtins/FormBlock.js +221 -0
  178. package/dist/blocks/builtins/FormBlock.js.map +1 -0
  179. package/dist/blocks/builtins/Gallery.d.ts +23 -0
  180. package/dist/blocks/builtins/Gallery.js +177 -0
  181. package/dist/blocks/builtins/Gallery.js.map +1 -0
  182. package/dist/blocks/builtins/Hero.d.ts +2 -0
  183. package/dist/blocks/builtins/Hero.js +47 -0
  184. package/dist/blocks/builtins/Hero.js.map +1 -0
  185. package/dist/blocks/builtins/ImageBlock.d.ts +2 -0
  186. package/dist/blocks/builtins/ImageBlock.js +24 -0
  187. package/dist/blocks/builtins/ImageBlock.js.map +1 -0
  188. package/dist/blocks/builtins/Jobs.d.ts +8 -0
  189. package/dist/blocks/builtins/Jobs.js +65 -0
  190. package/dist/blocks/builtins/Jobs.js.map +1 -0
  191. package/dist/blocks/builtins/Layout.d.ts +3 -0
  192. package/dist/blocks/builtins/Layout.js +67 -0
  193. package/dist/blocks/builtins/Layout.js.map +1 -0
  194. package/dist/blocks/builtins/MapBlock.d.ts +2 -0
  195. package/dist/blocks/builtins/MapBlock.js +31 -0
  196. package/dist/blocks/builtins/MapBlock.js.map +1 -0
  197. package/dist/blocks/builtins/NewsListBlock.d.ts +2 -0
  198. package/dist/blocks/builtins/NewsListBlock.js +24 -0
  199. package/dist/blocks/builtins/NewsListBlock.js.map +1 -0
  200. package/dist/blocks/builtins/Newsletter.d.ts +2 -0
  201. package/dist/blocks/builtins/Newsletter.js +84 -0
  202. package/dist/blocks/builtins/Newsletter.js.map +1 -0
  203. package/dist/blocks/builtins/OpenNowBadge.d.ts +9 -0
  204. package/dist/blocks/builtins/OpenNowBadge.js +20 -0
  205. package/dist/blocks/builtins/OpenNowBadge.js.map +1 -0
  206. package/dist/blocks/builtins/OpeningHours.d.ts +2 -0
  207. package/dist/blocks/builtins/OpeningHours.js +47 -0
  208. package/dist/blocks/builtins/OpeningHours.js.map +1 -0
  209. package/dist/blocks/builtins/PdfBlock.d.ts +2 -0
  210. package/dist/blocks/builtins/PdfBlock.js +97 -0
  211. package/dist/blocks/builtins/PdfBlock.js.map +1 -0
  212. package/dist/blocks/builtins/Portfolio.d.ts +2 -0
  213. package/dist/blocks/builtins/Portfolio.js +94 -0
  214. package/dist/blocks/builtins/Portfolio.js.map +1 -0
  215. package/dist/blocks/builtins/Pricing.d.ts +6 -0
  216. package/dist/blocks/builtins/Pricing.js +77 -0
  217. package/dist/blocks/builtins/Pricing.js.map +1 -0
  218. package/dist/blocks/builtins/RichTextBlock.d.ts +2 -0
  219. package/dist/blocks/builtins/RichTextBlock.js +18 -0
  220. package/dist/blocks/builtins/RichTextBlock.js.map +1 -0
  221. package/dist/blocks/builtins/Search.d.ts +2 -0
  222. package/dist/blocks/builtins/Search.js +99 -0
  223. package/dist/blocks/builtins/Search.js.map +1 -0
  224. package/dist/blocks/builtins/Sections.d.ts +5 -0
  225. package/dist/blocks/builtins/Sections.js +183 -0
  226. package/dist/blocks/builtins/Sections.js.map +1 -0
  227. package/dist/blocks/builtins/Slider.d.ts +2 -0
  228. package/dist/blocks/builtins/Slider.js +131 -0
  229. package/dist/blocks/builtins/Slider.js.map +1 -0
  230. package/dist/blocks/builtins/Spacer.d.ts +2 -0
  231. package/dist/blocks/builtins/Spacer.js +19 -0
  232. package/dist/blocks/builtins/Spacer.js.map +1 -0
  233. package/dist/blocks/builtins/Team.d.ts +2 -0
  234. package/dist/blocks/builtins/Team.js +70 -0
  235. package/dist/blocks/builtins/Team.js.map +1 -0
  236. package/dist/blocks/builtins/Testimonials.d.ts +8 -0
  237. package/dist/blocks/builtins/Testimonials.js +82 -0
  238. package/dist/blocks/builtins/Testimonials.js.map +1 -0
  239. package/dist/blocks/builtins/Video.d.ts +9 -0
  240. package/dist/blocks/builtins/Video.js +77 -0
  241. package/dist/blocks/builtins/Video.js.map +1 -0
  242. package/dist/blocks/builtins/WhatsappChat.d.ts +8 -0
  243. package/dist/blocks/builtins/WhatsappChat.js +51 -0
  244. package/dist/blocks/builtins/WhatsappChat.js.map +1 -0
  245. package/dist/blocks/builtins/Widgets.d.ts +13 -0
  246. package/dist/blocks/builtins/Widgets.js +308 -0
  247. package/dist/blocks/builtins/Widgets.js.map +1 -0
  248. package/dist/blocks/builtins/consentEmbed.d.ts +17 -0
  249. package/dist/blocks/builtins/consentEmbed.js +31 -0
  250. package/dist/blocks/builtins/consentEmbed.js.map +1 -0
  251. package/dist/blocks/builtins/index.d.ts +46 -0
  252. package/dist/blocks/builtins/index.js +121 -0
  253. package/dist/blocks/builtins/index.js.map +1 -0
  254. package/dist/blocks/builtins/lib/bookingUrl.d.ts +8 -0
  255. package/dist/blocks/builtins/lib/bookingUrl.js +50 -0
  256. package/dist/blocks/builtins/lib/bookingUrl.js.map +1 -0
  257. package/dist/blocks/builtins/lib/fileIcon.d.ts +2 -0
  258. package/dist/blocks/builtins/lib/fileIcon.js +45 -0
  259. package/dist/blocks/builtins/lib/fileIcon.js.map +1 -0
  260. package/dist/blocks/builtins/lib/ics.d.ts +17 -0
  261. package/dist/blocks/builtins/lib/ics.js +50 -0
  262. package/dist/blocks/builtins/lib/ics.js.map +1 -0
  263. package/dist/blocks/builtins/lib/openingHours.d.ts +20 -0
  264. package/dist/blocks/builtins/lib/openingHours.js +79 -0
  265. package/dist/blocks/builtins/lib/openingHours.js.map +1 -0
  266. package/dist/blocks/builtins/lib/searchRank.d.ts +22 -0
  267. package/dist/blocks/builtins/lib/searchRank.js +45 -0
  268. package/dist/blocks/builtins/lib/searchRank.js.map +1 -0
  269. package/dist/blocks/builtins/lib/submitForm.d.ts +6 -0
  270. package/dist/blocks/builtins/lib/submitForm.js +14 -0
  271. package/dist/blocks/builtins/lib/submitForm.js.map +1 -0
  272. package/dist/blocks/context.d.ts +8 -0
  273. package/dist/blocks/context.js +20 -0
  274. package/dist/blocks/context.js.map +1 -0
  275. package/dist/blocks/index.d.ts +9 -0
  276. package/dist/blocks/index.js +21 -0
  277. package/dist/blocks/index.js.map +1 -0
  278. package/dist/blocks/registry.d.ts +75 -0
  279. package/dist/blocks/registry.js +71 -0
  280. package/dist/blocks/registry.js.map +1 -0
  281. package/dist/blocks/ui/index.d.ts +35 -0
  282. package/dist/blocks/ui/index.js +48 -0
  283. package/dist/blocks/ui/index.js.map +1 -0
  284. package/dist/components/EditBar.d.ts +2 -0
  285. package/dist/components/EditBar.js +20 -0
  286. package/dist/components/EditBar.js.map +1 -0
  287. package/dist/components/EditableImage.d.ts +18 -0
  288. package/dist/components/EditableImage.js +62 -0
  289. package/dist/components/EditableImage.js.map +1 -0
  290. package/dist/components/EditableRichText.d.ts +14 -0
  291. package/dist/components/EditableRichText.js +26 -0
  292. package/dist/components/EditableRichText.js.map +1 -0
  293. package/dist/components/EditableText.d.ts +21 -0
  294. package/dist/components/EditableText.js +25 -0
  295. package/dist/components/EditableText.js.map +1 -0
  296. package/dist/components/News.d.ts +38 -0
  297. package/dist/components/News.js +128 -0
  298. package/dist/components/News.js.map +1 -0
  299. package/dist/components/PageView.d.ts +8 -0
  300. package/dist/components/PageView.js +28 -0
  301. package/dist/components/PageView.js.map +1 -0
  302. package/dist/components/ResponsiveImage.d.ts +16 -0
  303. package/dist/components/ResponsiveImage.js +39 -0
  304. package/dist/components/ResponsiveImage.js.map +1 -0
  305. package/dist/components/site/SiteFooter.d.ts +12 -0
  306. package/dist/components/site/SiteFooter.js +34 -0
  307. package/dist/components/site/SiteFooter.js.map +1 -0
  308. package/dist/config.d.ts +8 -0
  309. package/dist/config.js +17 -0
  310. package/dist/config.js.map +1 -0
  311. package/dist/content/ContentProvider.d.ts +23 -0
  312. package/dist/content/ContentProvider.js +86 -0
  313. package/dist/content/ContentProvider.js.map +1 -0
  314. package/dist/content/types.d.ts +41 -0
  315. package/dist/content/types.js +1 -0
  316. package/dist/content/types.js.map +1 -0
  317. package/dist/demo/DemoStudio.d.ts +7 -0
  318. package/dist/demo/DemoStudio.js +54 -0
  319. package/dist/demo/DemoStudio.js.map +1 -0
  320. package/dist/demo/demoStore.d.ts +26 -0
  321. package/dist/demo/demoStore.js +115 -0
  322. package/dist/demo/demoStore.js.map +1 -0
  323. package/dist/editor/EditorProvider.d.ts +12 -0
  324. package/dist/editor/EditorProvider.js +22 -0
  325. package/dist/editor/EditorProvider.js.map +1 -0
  326. package/dist/firebase/admin.d.ts +7 -0
  327. package/dist/firebase/admin.js +31 -0
  328. package/dist/firebase/admin.js.map +1 -0
  329. package/dist/firebase/appcheck.d.ts +6 -0
  330. package/dist/firebase/appcheck.js +23 -0
  331. package/dist/firebase/appcheck.js.map +1 -0
  332. package/dist/firebase/client.d.ts +9 -0
  333. package/dist/firebase/client.js +44 -0
  334. package/dist/firebase/client.js.map +1 -0
  335. package/dist/firebase/region.d.ts +5 -0
  336. package/dist/firebase/region.js +7 -0
  337. package/dist/firebase/region.js.map +1 -0
  338. package/dist/index.d.ts +54 -0
  339. package/dist/index.js +172 -0
  340. package/dist/index.js.map +1 -0
  341. package/dist/layers.css +13 -0
  342. package/dist/lock/DemoLock.d.ts +5 -0
  343. package/dist/lock/DemoLock.js +35 -0
  344. package/dist/lock/DemoLock.js.map +1 -0
  345. package/dist/media/ImageContext.d.ts +41 -0
  346. package/dist/media/ImageContext.js +74 -0
  347. package/dist/media/ImageContext.js.map +1 -0
  348. package/dist/modules/builtins.d.ts +46 -0
  349. package/dist/modules/builtins.js +462 -0
  350. package/dist/modules/builtins.js.map +1 -0
  351. package/dist/modules/consent/ConsentBanner.d.ts +42 -0
  352. package/dist/modules/consent/ConsentBanner.js +119 -0
  353. package/dist/modules/consent/ConsentBanner.js.map +1 -0
  354. package/dist/modules/consent/useConsent.d.ts +28 -0
  355. package/dist/modules/consent/useConsent.js +52 -0
  356. package/dist/modules/consent/useConsent.js.map +1 -0
  357. package/dist/modules/context.d.ts +20 -0
  358. package/dist/modules/context.js +31 -0
  359. package/dist/modules/context.js.map +1 -0
  360. package/dist/modules/contract.d.ts +9 -0
  361. package/dist/modules/contract.js +38 -0
  362. package/dist/modules/contract.js.map +1 -0
  363. package/dist/modules/defineModule.d.ts +11 -0
  364. package/dist/modules/defineModule.js +7 -0
  365. package/dist/modules/defineModule.js.map +1 -0
  366. package/dist/modules/index.d.ts +13 -0
  367. package/dist/modules/index.js +44 -0
  368. package/dist/modules/index.js.map +1 -0
  369. package/dist/modules/overrides.d.ts +17 -0
  370. package/dist/modules/overrides.js +25 -0
  371. package/dist/modules/overrides.js.map +1 -0
  372. package/dist/modules/registry.d.ts +40 -0
  373. package/dist/modules/registry.js +79 -0
  374. package/dist/modules/registry.js.map +1 -0
  375. package/dist/modules/types.d.ts +66 -0
  376. package/dist/modules/types.js +1 -0
  377. package/dist/modules/types.js.map +1 -0
  378. package/dist/patterns/builtins.d.ts +31 -0
  379. package/dist/patterns/builtins.js +415 -0
  380. package/dist/patterns/builtins.js.map +1 -0
  381. package/dist/patterns/index.d.ts +6 -0
  382. package/dist/patterns/index.js +9 -0
  383. package/dist/patterns/index.js.map +1 -0
  384. package/dist/patterns/patterns.d.ts +28 -0
  385. package/dist/patterns/patterns.js +53 -0
  386. package/dist/patterns/patterns.js.map +1 -0
  387. package/dist/render/PageRenderer.d.ts +13 -0
  388. package/dist/render/PageRenderer.js +14 -0
  389. package/dist/render/PageRenderer.js.map +1 -0
  390. package/dist/render/PublishedPage.d.ts +13 -0
  391. package/dist/render/PublishedPage.js +16 -0
  392. package/dist/render/PublishedPage.js.map +1 -0
  393. package/dist/schema/blocks.d.ts +15052 -0
  394. package/dist/schema/blocks.js +794 -0
  395. package/dist/schema/blocks.js.map +1 -0
  396. package/dist/schema/forms.d.ts +111 -0
  397. package/dist/schema/forms.js +47 -0
  398. package/dist/schema/forms.js.map +1 -0
  399. package/dist/schema/index.d.ts +11 -0
  400. package/dist/schema/index.js +16 -0
  401. package/dist/schema/index.js.map +1 -0
  402. package/dist/schema/pages.d.ts +674 -0
  403. package/dist/schema/pages.js +37 -0
  404. package/dist/schema/pages.js.map +1 -0
  405. package/dist/schema/seo.d.ts +29 -0
  406. package/dist/schema/seo.js +17 -0
  407. package/dist/schema/seo.js.map +1 -0
  408. package/dist/schema/settings.d.ts +1126 -0
  409. package/dist/schema/settings.js +128 -0
  410. package/dist/schema/settings.js.map +1 -0
  411. package/dist/schema/siteConfig.d.ts +722 -0
  412. package/dist/schema/siteConfig.js +39 -0
  413. package/dist/schema/siteConfig.js.map +1 -0
  414. package/dist/server/env.d.ts +10 -0
  415. package/dist/server/env.js +36 -0
  416. package/dist/server/env.js.map +1 -0
  417. package/dist/server/index.d.ts +10 -0
  418. package/dist/server/index.js +51 -0
  419. package/dist/server/index.js.map +1 -0
  420. package/dist/server/pages.d.ts +15 -0
  421. package/dist/server/pages.js +99 -0
  422. package/dist/server/pages.js.map +1 -0
  423. package/dist/server/sanitize.d.ts +2 -0
  424. package/dist/server/sanitize.js +55 -0
  425. package/dist/server/sanitize.js.map +1 -0
  426. package/dist/server/seo.d.ts +116 -0
  427. package/dist/server/seo.js +179 -0
  428. package/dist/server/seo.js.map +1 -0
  429. package/dist/settings/useSiteSettings.d.ts +25 -0
  430. package/dist/settings/useSiteSettings.js +68 -0
  431. package/dist/settings/useSiteSettings.js.map +1 -0
  432. package/dist/styles.css +2495 -0
  433. package/dist/theme/presets.d.ts +12 -0
  434. package/dist/theme/presets.js +147 -0
  435. package/dist/theme/presets.js.map +1 -0
  436. package/package.json +112 -0
@@ -0,0 +1,2495 @@
1
+ /**
2
+ * Basis-stijlen voor de XiCMS-UI (editbar, demo-lock, formulieren, kaarten).
3
+ * Importeer dit één keer in je site, bv. in `app/layout.tsx`: import "@xiwebdesign/xicms-core/styles.css";
4
+ * De klantsite mag deze waarden overschrijven; het zijn bewust neutrale defaults.
5
+ */
6
+
7
+ .xicms-root {
8
+ font-family: var(--xicms-font, inherit);
9
+ /* Vangt de scrollbar-brede overflow van full-bleed blokken (width:100vw) zonder een scroll-
10
+ container te maken; overlays portalen naar document.body en blijven dus buiten deze clip. */
11
+ overflow-x: clip;
12
+ --xicms-radius: 10px;
13
+ --xicms-radius-sm: 6px;
14
+ --xicms-radius-lg: 14px;
15
+ /* Ruimteschaal (block-padding) */
16
+ --xicms-spacing-xs: 0.5rem;
17
+ --xicms-spacing-sm: 1rem;
18
+ --xicms-spacing-md: 2rem;
19
+ --xicms-spacing-lg: 3.5rem;
20
+ --xicms-spacing-xl: 5rem;
21
+ /* Container */
22
+ --xicms-container-max: 1200px;
23
+ --xicms-container-pad: 1.25rem;
24
+ /* Oppervlak- en randtokens: blokken gebruiken deze i.p.v. hardcoded wit/zwart-alpha,
25
+ zodat de donkere modus (en eigen thema's) overal doorwerken. */
26
+ --xicms-surface: #fff;
27
+ --xicms-border: rgba(0, 0, 0, 0.1);
28
+ --xicms-border-strong: rgba(0, 0, 0, 0.18);
29
+ --xicms-muted: rgba(0, 0, 0, 0.04);
30
+ /* Eén sterrenkleur voor reviews/ratings (blok én widget). */
31
+ --xicms-star: #f59e0b;
32
+ /* Statuskleuren (banner-tinten, open/gesloten-badge) — per site overschrijfbaar. */
33
+ --xicms-success: #059669;
34
+ --xicms-success-fg: #15803d;
35
+ --xicms-warning: #b45309;
36
+ --xicms-danger: #dc2626;
37
+ --xicms-danger-fg: #b91c1c;
38
+ }
39
+ /* Alleen voor screenreaders (bv. fieldset-legends die visueel dubbel zouden zijn). */
40
+ .xicms-sr-only {
41
+ position: absolute;
42
+ width: 1px;
43
+ height: 1px;
44
+ padding: 0;
45
+ margin: -1px;
46
+ overflow: hidden;
47
+ clip-path: inset(50%);
48
+ white-space: nowrap;
49
+ border: 0;
50
+ }
51
+
52
+ /* Zichtbare focus voor de eigen (niet-Astryx) knoppen/links — toetsenbordnavigatie moet overal
53
+ een ring krijgen, ook in overlays die buiten .xicms-root portalen (lightbox, consent). */
54
+ :is(
55
+ .xicms-slider__dot, .xicms-slider__arrow, .xicms-gallery__filterbtn, .xicms-banner__close,
56
+ .xicms-consent__btn, .xicms-consent__reopen, .xicms-consent__reopen-link, .xicms-whatsapp,
57
+ .xicms-lightbox__close, .xicms-lightbox__nav, .xicms-btn
58
+ ):focus-visible {
59
+ outline: 2px solid var(--xicms-primary, #4f46e5);
60
+ outline-offset: 2px;
61
+ }
62
+ /* In de lightbox (donkere overlay) is wit de enige gegarandeerd contrasterende ringkleur. */
63
+ :is(.xicms-lightbox__close, .xicms-lightbox__nav):focus-visible {
64
+ outline-color: #fff;
65
+ }
66
+
67
+ /* Koppen volgen een optioneel apart display/serif-font (theme.headingFont). */
68
+ .xicms-root :is(h1, h2, h3),
69
+ .xicms-root .xicms-hero__title {
70
+ font-family: var(--xicms-font-heading, var(--xicms-font, inherit));
71
+ }
72
+
73
+ /* Optionele donkere modus (volgt het systeem) — alleen actief bij theme.dark.auto.
74
+ `color-scheme` activeert light-dark() in de inline tokenwaarden (XiCMSProvider) én laat
75
+ native UI (scrollbars, formuliercontrols) meeschakelen. */
76
+ .xicms-root[data-dark="auto"] {
77
+ color-scheme: light dark;
78
+ }
79
+ @media (prefers-color-scheme: dark) {
80
+ .xicms-root[data-dark="auto"] {
81
+ --xicms-bg: var(--xicms-bg-dark, #0f172a);
82
+ --xicms-fg: var(--xicms-fg-dark, #e2e8f0);
83
+ --xicms-primary: var(--xicms-primary-dark, var(--xicms-primary));
84
+ /* Kaarten/inputs/randen schakelen mee — geen witte kaarten meer op een donkere pagina. */
85
+ --xicms-surface: var(--xicms-surface-dark, #1e293b);
86
+ --xicms-border: var(--xicms-border-dark, rgba(255, 255, 255, 0.14));
87
+ --xicms-border-strong: rgba(255, 255, 255, 0.26);
88
+ --xicms-muted: rgba(255, 255, 255, 0.06);
89
+ /* Statustekst licht genoeg voor donkere vlakken. */
90
+ --xicms-success-fg: #4ade80;
91
+ --xicms-danger-fg: #f87171;
92
+ background: var(--xicms-bg);
93
+ color: var(--xicms-fg);
94
+ }
95
+ }
96
+
97
+ /* Gedeelde blokstijl-wrapper (via block `_style`) */
98
+ .xicms-block--pad-none {
99
+ padding-top: 0;
100
+ padding-bottom: 0;
101
+ }
102
+ .xicms-block--pad-sm {
103
+ padding-top: var(--xicms-spacing-sm);
104
+ padding-bottom: var(--xicms-spacing-sm);
105
+ }
106
+ .xicms-block--pad-md {
107
+ padding-top: var(--xicms-spacing-md);
108
+ padding-bottom: var(--xicms-spacing-md);
109
+ }
110
+ .xicms-block--pad-lg {
111
+ padding-top: var(--xicms-spacing-lg);
112
+ padding-bottom: var(--xicms-spacing-lg);
113
+ }
114
+ .xicms-block--pad-xl {
115
+ padding-top: var(--xicms-spacing-xl);
116
+ padding-bottom: var(--xicms-spacing-xl);
117
+ }
118
+ .xicms-block--container {
119
+ max-width: var(--xicms-container-max);
120
+ margin-left: auto;
121
+ margin-right: auto;
122
+ padding-left: var(--xicms-container-pad);
123
+ padding-right: var(--xicms-container-pad);
124
+ }
125
+ .xicms-block--narrow {
126
+ max-width: 720px;
127
+ margin-left: auto;
128
+ margin-right: auto;
129
+ padding-left: var(--xicms-container-pad);
130
+ padding-right: var(--xicms-container-pad);
131
+ }
132
+ .xicms-block--full {
133
+ width: 100vw;
134
+ margin-left: calc(50% - 50vw);
135
+ margin-right: calc(50% - 50vw);
136
+ }
137
+ .xicms-block--align-left {
138
+ text-align: left;
139
+ }
140
+ .xicms-block--align-center {
141
+ text-align: center;
142
+ }
143
+ .xicms-block--align-right {
144
+ text-align: right;
145
+ }
146
+
147
+ /* Subtiele binnenkomst-animatie bij scrollen — progressive enhancement: browsers zonder
148
+ scroll-driven animations tonen het blok gewoon (geen verborgen content), en bij
149
+ prefers-reduced-motion gebeurt er niets. */
150
+ @media (prefers-reduced-motion: no-preference) {
151
+ @supports (animation-timeline: view()) {
152
+ [data-xicms-animate="fade"],
153
+ [data-xicms-animate="up"] {
154
+ animation: xicms-reveal linear both;
155
+ animation-timeline: view();
156
+ animation-range: entry 0% entry 45%;
157
+ }
158
+ [data-xicms-animate="up"] {
159
+ animation-name: xicms-reveal-up;
160
+ }
161
+ }
162
+ }
163
+ @keyframes xicms-reveal {
164
+ from {
165
+ opacity: 0;
166
+ }
167
+ to {
168
+ opacity: 1;
169
+ }
170
+ }
171
+ /* Transform-vrij (clip-path i.p.v. translateY): een `transform` zou een containing block maken,
172
+ waardoor `position:fixed`-kinderen (lightbox/modal) t.o.v. het blok positioneren i.p.v. de viewport. */
173
+ @keyframes xicms-reveal-up {
174
+ from {
175
+ opacity: 0;
176
+ clip-path: inset(0 0 1.25rem 0);
177
+ }
178
+ to {
179
+ opacity: 1;
180
+ clip-path: inset(0 0 0 0);
181
+ }
182
+ }
183
+
184
+ /* Toegankelijkheid: zichtbare focus op knoppen/links in de runtime-UI. */
185
+ .xicms-btn:focus-visible,
186
+ .xicms-root a:focus-visible {
187
+ outline: 2px solid var(--xicms-primary, #4f46e5);
188
+ outline-offset: 2px;
189
+ }
190
+
191
+ /* ── Visuele/inline pagina-editor (overlay) ───────────────────────────────── */
192
+ .xicms-ve {
193
+ position: fixed;
194
+ inset: 0;
195
+ z-index: 10000;
196
+ }
197
+ .xicms-ve__shell {
198
+ position: absolute;
199
+ inset: 0;
200
+ display: flex;
201
+ flex-direction: column;
202
+ background: #f1f5f9;
203
+ }
204
+ .xicms-ve__bar {
205
+ display: flex;
206
+ align-items: center;
207
+ gap: 0.75rem;
208
+ padding: 0.6rem 1rem;
209
+ background: #0f172a;
210
+ color: #fff;
211
+ flex: 0 0 auto;
212
+ }
213
+ .xicms-ve__title {
214
+ font-size: 0.95rem;
215
+ }
216
+ .xicms-ve__path {
217
+ font-size: 0.8rem;
218
+ opacity: 0.7;
219
+ }
220
+ .xicms-ve__status {
221
+ font-size: 0.8rem;
222
+ opacity: 0.85;
223
+ margin-left: auto;
224
+ }
225
+ .xicms-ve__bar-actions {
226
+ display: flex;
227
+ gap: 0.5rem;
228
+ }
229
+ .xicms-ve__histbtn {
230
+ appearance: none;
231
+ border: 1px solid rgba(255, 255, 255, 0.25);
232
+ border-radius: 6px;
233
+ background: transparent;
234
+ color: #fff;
235
+ font-size: 0.95rem;
236
+ line-height: 1;
237
+ padding: 0.3rem 0.5rem;
238
+ cursor: pointer;
239
+ }
240
+ .xicms-ve__histbtn:hover:not(:disabled) {
241
+ background: rgba(255, 255, 255, 0.12);
242
+ }
243
+ .xicms-ve__histbtn:disabled {
244
+ opacity: 0.35;
245
+ cursor: default;
246
+ }
247
+ /* Conflictbalk: iemand anders wijzigde deze pagina intussen (andere tab/collega). */
248
+ .xicms-ve__conflict {
249
+ display: flex;
250
+ flex-wrap: wrap;
251
+ align-items: center;
252
+ gap: 0.6rem;
253
+ padding: 0.55rem 1rem;
254
+ background: #fef3c7;
255
+ color: #78350f;
256
+ border-bottom: 1px solid #fcd34d;
257
+ font-size: 0.85rem;
258
+ flex: 0 0 auto;
259
+ }
260
+ /* Inklapbare secties in het zijpaneel (pagina-instellingen, versiegeschiedenis). */
261
+ .xicms-ve__section {
262
+ border: 1px solid #e2e8f0;
263
+ border-radius: 10px;
264
+ padding: 0.6rem 0.8rem;
265
+ background: #f8fafc;
266
+ }
267
+ .xicms-ve__section > summary {
268
+ cursor: pointer;
269
+ user-select: none;
270
+ }
271
+ .xicms-ve__body {
272
+ flex: 1 1 auto;
273
+ display: grid;
274
+ grid-template-columns: 1fr 360px;
275
+ min-height: 0;
276
+ }
277
+ .xicms-ve__canvas {
278
+ overflow: auto;
279
+ padding: 1.5rem;
280
+ background: #fff;
281
+ background-image:
282
+ linear-gradient(rgba(0, 0, 0, 0.03) 1px, transparent 1px),
283
+ linear-gradient(90deg, rgba(0, 0, 0, 0.03) 1px, transparent 1px);
284
+ background-size: 24px 24px;
285
+ }
286
+ .xicms-ve__panel {
287
+ overflow: auto;
288
+ border-left: 1px solid #e2e8f0;
289
+ background: #fff;
290
+ padding: 1rem;
291
+ }
292
+ .xicms-ve__hint {
293
+ color: #64748b;
294
+ font-size: 0.9rem;
295
+ padding: 1rem;
296
+ }
297
+ .xicms-ve__inserter {
298
+ display: flex;
299
+ align-items: center;
300
+ gap: 0.75rem;
301
+ margin-top: 1rem;
302
+ padding: 0.75rem;
303
+ border: 1px dashed #cbd5e1;
304
+ border-radius: 10px;
305
+ font-size: 0.9rem;
306
+ color: #475569;
307
+ }
308
+ .xicms-ve__inserter-select {
309
+ width: 16rem;
310
+ }
311
+
312
+ /* Responsief: op telefoon/smal tablet stackt de editor (canvas boven, instellingen als onderpaneel)
313
+ en wrappen de balk en de toevoeg-rij, zodat inline bewerken ook op kleine schermen werkt. */
314
+ @media (max-width: 720px) {
315
+ .xicms-ve__bar {
316
+ flex-wrap: wrap;
317
+ gap: 0.4rem 0.6rem;
318
+ }
319
+ .xicms-ve__status {
320
+ margin-left: 0;
321
+ order: 3;
322
+ flex-basis: 100%;
323
+ }
324
+ .xicms-ve__body {
325
+ grid-template-columns: 1fr;
326
+ grid-template-rows: 1fr auto;
327
+ }
328
+ .xicms-ve__canvas {
329
+ padding: 1rem;
330
+ }
331
+ .xicms-ve__panel {
332
+ border-left: 0;
333
+ border-top: 2px solid #cbd5e1;
334
+ max-height: 48vh;
335
+ }
336
+ .xicms-ve__inserter {
337
+ flex-wrap: wrap;
338
+ }
339
+ .xicms-ve__inserter-select {
340
+ width: 100%;
341
+ }
342
+ }
343
+ /* Blok-frame in het canvas */
344
+ .xicms-ve-block {
345
+ position: relative;
346
+ outline: 2px solid transparent;
347
+ outline-offset: 2px;
348
+ border-radius: 4px;
349
+ transition: outline-color 0.12s;
350
+ }
351
+ .xicms-ve-block:hover {
352
+ outline-color: rgba(79, 70, 229, 0.35);
353
+ }
354
+ .xicms-ve-block.is-selected {
355
+ outline-color: var(--xicms-primary, #4f46e5);
356
+ }
357
+ .xicms-ve-block__select {
358
+ position: absolute;
359
+ inset: 0;
360
+ z-index: 1;
361
+ background: transparent;
362
+ border: 0;
363
+ cursor: pointer;
364
+ }
365
+ .xicms-ve-block.is-selected .xicms-ve-block__select {
366
+ /* Geselecteerd: laat interactie met de inhoud toe (de editor staat in het zijpaneel). */
367
+ pointer-events: none;
368
+ }
369
+ .xicms-ve-block__content {
370
+ position: relative;
371
+ }
372
+ /* Drag-and-drop herordenen: greep + invoeg-indicator. */
373
+ .xicms-ve-block__drag {
374
+ cursor: grab;
375
+ letter-spacing: -2px;
376
+ }
377
+ .xicms-ve-block__drag:active {
378
+ cursor: grabbing;
379
+ }
380
+ .xicms-ve-block.is-dragging {
381
+ opacity: 0.45;
382
+ }
383
+ .xicms-ve-block.is-drop-before::before,
384
+ .xicms-ve-block.is-drop-after::after {
385
+ content: "";
386
+ position: absolute;
387
+ left: 0;
388
+ right: 0;
389
+ height: 3px;
390
+ border-radius: 2px;
391
+ background: var(--xicms-primary, #4f46e5);
392
+ z-index: 4;
393
+ }
394
+ .xicms-ve-block.is-drop-before::before {
395
+ top: -6px;
396
+ }
397
+ .xicms-ve-block.is-drop-after::after {
398
+ bottom: -6px;
399
+ }
400
+ /* Inline (in-canvas) bewerkbaar tekstveld in de visuele editor. */
401
+ .xicms-ve-inline {
402
+ cursor: text;
403
+ border-radius: 4px;
404
+ outline: 1px dashed rgba(79, 70, 229, 0.5);
405
+ outline-offset: 3px;
406
+ transition: outline-color 0.12s, background 0.12s;
407
+ }
408
+ .xicms-ve-inline:hover {
409
+ background: rgba(79, 70, 229, 0.06);
410
+ }
411
+ .xicms-ve-inline:focus {
412
+ outline: 2px solid var(--xicms-primary, #4f46e5);
413
+ outline-offset: 3px;
414
+ background: rgba(79, 70, 229, 0.06);
415
+ }
416
+ /* Inline afbeelding vervangen (visuele editor): icoontje over het beeld van het geselecteerde blok. */
417
+ .xicms-ve-img { line-height: 0; }
418
+ .xicms-ve-img__btn {
419
+ position: absolute;
420
+ top: 10px;
421
+ right: 10px;
422
+ z-index: 3;
423
+ display: inline-flex;
424
+ align-items: center;
425
+ gap: 0.4rem;
426
+ padding: 0.5rem 0.85rem;
427
+ border: 1px solid rgba(255, 255, 255, 0.25);
428
+ border-radius: 999px;
429
+ background: rgba(17, 24, 39, 0.92);
430
+ color: #fff;
431
+ font: 600 0.82rem/1 system-ui, sans-serif;
432
+ cursor: pointer;
433
+ box-shadow: 0 4px 14px rgba(0, 0, 0, 0.35);
434
+ transition: background 0.12s, transform 0.12s;
435
+ }
436
+ .xicms-ve-img__btn:hover { background: var(--color-accent, #4f46e5); transform: translateY(-1px); }
437
+ /* Vullende variant (hero-achtergrond): knop absoluut t.o.v. het blok-element. */
438
+ .xicms-ve-img__btn--fill {
439
+ position: absolute;
440
+ top: 3.2rem;
441
+ right: 1rem;
442
+ z-index: 4;
443
+ }
444
+ /* Duidelijke klik-affordance op het hele beeld van het geselecteerde blok. */
445
+ .xicms-ve-img {
446
+ cursor: pointer;
447
+ outline: 2px dashed color-mix(in srgb, var(--color-accent, #4f46e5) 60%, transparent);
448
+ outline-offset: -2px;
449
+ border-radius: 6px;
450
+ }
451
+ .xicms-ve-img:hover { outline-style: solid; }
452
+ .xicms-ve-block__toolbar {
453
+ position: absolute;
454
+ top: 0;
455
+ right: 0;
456
+ z-index: 2;
457
+ display: none;
458
+ align-items: center;
459
+ gap: 0.15rem;
460
+ padding: 0.2rem 0.35rem;
461
+ background: #0f172a;
462
+ color: #fff;
463
+ border-radius: 0 0 0 8px;
464
+ font-size: 0.8rem;
465
+ }
466
+ .xicms-ve-block:hover .xicms-ve-block__toolbar,
467
+ .xicms-ve-block.is-selected .xicms-ve-block__toolbar {
468
+ display: flex;
469
+ }
470
+ .xicms-ve-block__label {
471
+ opacity: 0.8;
472
+ margin-right: 0.4rem;
473
+ }
474
+ .xicms-ve-block__toolbar button {
475
+ background: none;
476
+ border: 0;
477
+ color: #fff;
478
+ cursor: pointer;
479
+ padding: 0.1rem 0.3rem;
480
+ border-radius: 4px;
481
+ font-size: 0.85rem;
482
+ }
483
+ .xicms-ve-block__toolbar button:hover:not(:disabled) {
484
+ background: rgba(255, 255, 255, 0.15);
485
+ }
486
+ .xicms-ve-block__toolbar button:disabled {
487
+ opacity: 0.35;
488
+ cursor: default;
489
+ }
490
+ @media (max-width: 720px) {
491
+ .xicms-ve__body {
492
+ grid-template-columns: 1fr;
493
+ }
494
+ .xicms-ve__panel {
495
+ display: none;
496
+ }
497
+ }
498
+
499
+ /* Foutkaart voor een block dat niet kon renderen (alleen zichtbaar in de editor-preview). */
500
+ .xicms-block-error {
501
+ display: grid;
502
+ gap: 0.25rem;
503
+ padding: 0.75rem 1rem;
504
+ margin: 0.5rem 0;
505
+ border: 1px dashed #f59e0b;
506
+ border-radius: var(--xicms-radius, 10px);
507
+ background: #fffbeb;
508
+ color: #92400e;
509
+ font-size: 0.9rem;
510
+ }
511
+
512
+ /* Knoppen */
513
+ .xicms-btn {
514
+ display: inline-flex;
515
+ align-items: center;
516
+ justify-content: center;
517
+ gap: 0.4rem;
518
+ padding: 0.5rem 0.9rem;
519
+ border: none;
520
+ border-radius: var(--xicms-radius, 10px);
521
+ background: var(--xicms-primary, #4f46e5);
522
+ color: #fff;
523
+ font: inherit;
524
+ font-weight: 600;
525
+ cursor: pointer;
526
+ text-decoration: none;
527
+ line-height: 1.1;
528
+ }
529
+ .xicms-btn:disabled {
530
+ opacity: 0.6;
531
+ cursor: not-allowed;
532
+ }
533
+ .xicms-btn--ghost {
534
+ background: transparent;
535
+ color: var(--xicms-fg, #0f172a);
536
+ border: 1px solid var(--xicms-border-strong, rgba(0, 0, 0, 0.18));
537
+ }
538
+
539
+ /* Invoervelden */
540
+ .xicms-input {
541
+ width: 100%;
542
+ padding: 0.55rem 0.7rem;
543
+ border: 1px solid var(--xicms-border-strong, rgba(0, 0, 0, 0.18));
544
+ border-radius: var(--xicms-radius, 10px);
545
+ font: inherit;
546
+ background: var(--xicms-surface, #fff);
547
+ color: var(--xicms-fg, #0f172a);
548
+ }
549
+
550
+ /* Kaarten — zachte gelaagde schaduw; kaarten met een link krijgen de hover-lift van cards-grid. */
551
+ .xicms-card {
552
+ background: var(--xicms-surface, #fff);
553
+ border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
554
+ border-radius: var(--xicms-radius, 10px);
555
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05), 0 6px 18px rgba(0, 0, 0, 0.04);
556
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
557
+ }
558
+ .xicms-card:has(a):hover {
559
+ transform: translateY(-2px);
560
+ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.07), 0 14px 30px rgba(0, 0, 0, 0.08);
561
+ }
562
+ @media (prefers-reduced-motion: reduce) {
563
+ .xicms-card:has(a):hover { transform: none; }
564
+ }
565
+
566
+ /* Bewerkbare elementen in edit-modus */
567
+ .xicms-editable {
568
+ outline: 2px dashed var(--xicms-accent, #4f46e5);
569
+ outline-offset: 3px;
570
+ border-radius: 4px;
571
+ cursor: text;
572
+ }
573
+
574
+ /* Zwevende werkbalk voor editors */
575
+ .xicms-editbar {
576
+ position: fixed;
577
+ bottom: 16px;
578
+ left: 50%;
579
+ transform: translateX(-50%);
580
+ z-index: 9999;
581
+ display: flex;
582
+ align-items: center;
583
+ gap: 0.5rem;
584
+ padding: 0.5rem 0.75rem;
585
+ background: #0f172a;
586
+ color: #fff;
587
+ border-radius: 999px;
588
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
589
+ }
590
+ .xicms-editbar .xicms-btn--ghost {
591
+ color: #fff;
592
+ border-color: rgba(255, 255, 255, 0.3);
593
+ }
594
+
595
+ /* Demo-bewerkmodus: bovenbalk met pseudo-login + duidelijke "niet opgeslagen"-melding */
596
+ .xicms-demostudio {
597
+ position: sticky;
598
+ top: 0;
599
+ z-index: 9000;
600
+ display: flex;
601
+ align-items: center;
602
+ gap: 0.75rem 1rem;
603
+ flex-wrap: wrap;
604
+ padding: 0.6rem 1.1rem;
605
+ background: #0f172a;
606
+ color: #fff;
607
+ border-bottom: 3px solid var(--xicms-accent, #f59e0b);
608
+ font-size: 0.9rem;
609
+ line-height: 1.4;
610
+ }
611
+ .xicms-demostudio__msg {
612
+ flex: 1 1 16rem;
613
+ min-width: 0;
614
+ }
615
+ .xicms-demostudio .xicms-btn {
616
+ flex: 0 0 auto;
617
+ }
618
+ .xicms-demostudio .xicms-btn--ghost {
619
+ color: #fff;
620
+ border-color: rgba(255, 255, 255, 0.35);
621
+ }
622
+
623
+ /* Demo-lock */
624
+ .xicms-demo-ribbon {
625
+ position: fixed;
626
+ top: 14px;
627
+ right: -38px;
628
+ z-index: 9998;
629
+ transform: rotate(45deg);
630
+ background: #dc2626;
631
+ color: #fff;
632
+ font-weight: 700;
633
+ letter-spacing: 0.15em;
634
+ font-size: 12px;
635
+ padding: 4px 48px;
636
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
637
+ pointer-events: none;
638
+ }
639
+ .xicms-demo-banner {
640
+ position: fixed;
641
+ bottom: 0;
642
+ left: 0;
643
+ right: 0;
644
+ z-index: 9998;
645
+ display: flex;
646
+ align-items: center;
647
+ justify-content: center;
648
+ flex-wrap: wrap;
649
+ gap: 0.75rem;
650
+ padding: 0.75rem 1rem;
651
+ background: #111827;
652
+ color: #fff;
653
+ font-size: 14px;
654
+ }
655
+
656
+ /* Knopvarianten (gedeeld door hero/cta) */
657
+ .xicms-btn--primary {
658
+ background: var(--xicms-primary, #4f46e5);
659
+ color: #fff;
660
+ }
661
+ .xicms-btn--secondary {
662
+ background: var(--xicms-accent, #6366f1);
663
+ color: #fff;
664
+ }
665
+ .xicms-btn--outline {
666
+ background: transparent;
667
+ color: var(--xicms-fg, #0f172a);
668
+ border: 1px solid currentColor;
669
+ }
670
+
671
+ /* ── Block-rendering (runtime, lichtgewicht — geen Tailwind) ───────────────── */
672
+ .xicms-hero {
673
+ position: relative;
674
+ display: flex;
675
+ flex-direction: column;
676
+ padding: 3rem 0;
677
+ overflow: hidden;
678
+ isolation: isolate;
679
+ }
680
+ .xicms-hero[data-align="center"] {
681
+ text-align: center;
682
+ align-items: center;
683
+ }
684
+ .xicms-hero[data-valign="center"] {
685
+ justify-content: center;
686
+ }
687
+ .xicms-hero[data-valign="bottom"] {
688
+ justify-content: flex-end;
689
+ }
690
+ /* dvh volgt de échte viewport op mobiel (adresbalk in/uit); vh blijft als fallback staan. */
691
+ .xicms-hero[data-height="sm"] {
692
+ min-height: 40vh;
693
+ min-height: 40dvh;
694
+ }
695
+ .xicms-hero[data-height="md"] {
696
+ min-height: 60vh;
697
+ min-height: 60dvh;
698
+ }
699
+ .xicms-hero[data-height="lg"] {
700
+ min-height: 80vh;
701
+ min-height: 80dvh;
702
+ }
703
+ .xicms-hero[data-height="full"] {
704
+ min-height: 100vh;
705
+ min-height: 100dvh;
706
+ }
707
+ .xicms-hero__media {
708
+ position: absolute;
709
+ inset: 0;
710
+ z-index: -2;
711
+ width: 100%;
712
+ height: 100%;
713
+ object-fit: cover;
714
+ }
715
+ /* Geen achtergrond-media → toon de afbeelding als gewone bovenstaande banner. */
716
+ .xicms-hero[data-height="auto"] .xicms-hero__media {
717
+ position: static;
718
+ max-height: 420px;
719
+ border-radius: 12px;
720
+ margin-bottom: 1.25rem;
721
+ }
722
+ .xicms-hero__overlay {
723
+ position: absolute;
724
+ inset: 0;
725
+ z-index: -1;
726
+ }
727
+ .xicms-hero__gradient {
728
+ position: absolute;
729
+ inset: 0;
730
+ background: linear-gradient(to top, rgba(0, 0, 0, 0.62) 0%, rgba(0, 0, 0, 0.18) 45%, transparent 75%);
731
+ pointer-events: none;
732
+ }
733
+ .xicms-hero__eyebrow {
734
+ display: inline-block;
735
+ text-transform: uppercase;
736
+ letter-spacing: 0.12em;
737
+ font-size: 0.8rem;
738
+ font-weight: 700;
739
+ opacity: 0.85;
740
+ margin-bottom: 0.4rem;
741
+ color: var(--xicms-primary, inherit);
742
+ }
743
+ .xicms-hero[data-media="cover"] .xicms-hero__eyebrow {
744
+ color: inherit;
745
+ }
746
+ .xicms-hero__inner {
747
+ display: grid;
748
+ gap: 0.75rem;
749
+ }
750
+ .xicms-hero__title {
751
+ font-size: clamp(2rem, 5vw, 3rem);
752
+ line-height: 1.05;
753
+ margin: 0 0 0.5rem;
754
+ }
755
+ .xicms-hero__sub {
756
+ font-size: 1.2rem;
757
+ opacity: 0.85;
758
+ margin: 0;
759
+ }
760
+ .xicms-hero__buttons,
761
+ .xicms-cta__buttons {
762
+ display: flex;
763
+ flex-wrap: wrap;
764
+ gap: 0.6rem;
765
+ margin-top: 0.5rem;
766
+ }
767
+ .xicms-hero[data-align="center"] .xicms-hero__buttons {
768
+ justify-content: center;
769
+ }
770
+ /* Dekkend hero-beeld/-video: lichte tekst + subtiele schaduw voor leesbaar contrast op elk beeld. */
771
+ .xicms-hero[data-media="cover"] .xicms-hero__title {
772
+ color: #fff;
773
+ text-shadow: 0 2px 14px rgba(0, 0, 0, 0.45);
774
+ }
775
+ .xicms-hero[data-media="cover"] .xicms-hero__sub {
776
+ color: rgba(255, 255, 255, 0.94);
777
+ text-shadow: 0 1px 10px rgba(0, 0, 0, 0.4);
778
+ }
779
+ /* Outline-knoppen op een beeld-hero: licht, zodat ze leesbaar contrasteren met het beeld. */
780
+ .xicms-hero[data-media="cover"] .xicms-btn--outline {
781
+ color: #fff;
782
+ border-color: rgba(255, 255, 255, 0.7);
783
+ }
784
+ /* Afbeelding-uitlijning + beeldverhouding */
785
+ .xicms-image[data-align="left"] {
786
+ margin-right: auto;
787
+ max-width: max-content;
788
+ }
789
+ .xicms-image[data-align="right"] {
790
+ margin-left: auto;
791
+ max-width: max-content;
792
+ }
793
+ .xicms-image[data-ratio="16/9"] img {
794
+ aspect-ratio: 16 / 9;
795
+ object-fit: cover;
796
+ }
797
+ .xicms-image[data-ratio="4/3"] img {
798
+ aspect-ratio: 4 / 3;
799
+ object-fit: cover;
800
+ }
801
+ .xicms-image[data-ratio="1/1"] img {
802
+ aspect-ratio: 1 / 1;
803
+ object-fit: cover;
804
+ }
805
+ .xicms-image[data-ratio="3/2"] img {
806
+ aspect-ratio: 3 / 2;
807
+ object-fit: cover;
808
+ }
809
+ .xicms-richtext > :first-child {
810
+ margin-top: 0;
811
+ }
812
+ .xicms-richtext a {
813
+ color: var(--xicms-primary, #4f46e5);
814
+ }
815
+ /* Ingevoegde afbeeldingen (WYSIWYG) blijven binnen de kolom en schalen responsief mee. */
816
+ .xicms-richtext img {
817
+ max-width: 100%;
818
+ height: auto;
819
+ border-radius: 8px;
820
+ margin: 1rem 0;
821
+ }
822
+ .xicms-image {
823
+ margin: 1.5rem 0;
824
+ }
825
+ .xicms-image img {
826
+ width: 100%;
827
+ border-radius: 12px;
828
+ }
829
+ .xicms-image figcaption {
830
+ font-size: 0.85rem;
831
+ opacity: 0.7;
832
+ margin-top: 0.4rem;
833
+ }
834
+ /* Galerij draait nu op Astryx Grid + per-blok aspect-ratio; `.xicms-gallery` is enkel nog een
835
+ stabiele styling-haak (geen eigen grid meer — dat zou de Astryx-layout overschrijven). */
836
+ .xicms-gallery__item {
837
+ margin: 0;
838
+ }
839
+ .xicms-gallery__caption {
840
+ font-size: 0.85rem;
841
+ opacity: 0.7;
842
+ margin-top: 0.3rem;
843
+ }
844
+ /* Lightbox-overlay */
845
+ .xicms-lightbox {
846
+ position: fixed;
847
+ inset: 0;
848
+ z-index: 9990;
849
+ display: flex;
850
+ align-items: center;
851
+ justify-content: center;
852
+ padding: 2rem;
853
+ background: rgba(0, 0, 0, 0.85);
854
+ cursor: zoom-out;
855
+ }
856
+ .xicms-lightbox__figure {
857
+ margin: 0;
858
+ max-width: 90vw;
859
+ max-height: 90vh;
860
+ }
861
+ .xicms-lightbox__figure img {
862
+ max-width: 90vw;
863
+ max-height: 80vh;
864
+ object-fit: contain;
865
+ border-radius: 8px;
866
+ }
867
+ .xicms-lightbox__figure figcaption {
868
+ color: #fff;
869
+ text-align: center;
870
+ margin-top: 0.6rem;
871
+ }
872
+ .xicms-lightbox__close {
873
+ position: absolute;
874
+ top: 1rem;
875
+ right: 1rem;
876
+ width: 2.75rem; /* ≥44px raakdoel (WCAG 2.5.8) */
877
+ height: 2.75rem;
878
+ border: 0;
879
+ border-radius: 999px;
880
+ background: rgba(255, 255, 255, 0.15);
881
+ color: #fff;
882
+ font-size: 1.25rem;
883
+ cursor: pointer;
884
+ }
885
+ .xicms-lightbox__nav {
886
+ position: absolute;
887
+ top: 50%;
888
+ transform: translateY(-50%);
889
+ width: 3rem;
890
+ height: 3rem;
891
+ border: 0;
892
+ border-radius: 999px;
893
+ background: rgba(255, 255, 255, 0.15);
894
+ color: #fff;
895
+ font-size: 1.75rem;
896
+ line-height: 1;
897
+ cursor: pointer;
898
+ }
899
+ .xicms-lightbox__nav:hover { background: rgba(255, 255, 255, 0.28); }
900
+ .xicms-lightbox__nav--prev { left: 1rem; }
901
+ .xicms-lightbox__nav--next { right: 1rem; }
902
+ .xicms-lightbox__counter {
903
+ position: absolute;
904
+ top: 1.2rem;
905
+ left: 50%;
906
+ transform: translateX(-50%);
907
+ color: #fff;
908
+ font-size: 0.9rem;
909
+ opacity: 0.85;
910
+ }
911
+ @media (max-width: 640px) {
912
+ .xicms-lightbox__nav { width: 2.5rem; height: 2.5rem; font-size: 1.4rem; }
913
+ .xicms-lightbox__nav--prev { left: 0.4rem; }
914
+ .xicms-lightbox__nav--next { right: 0.4rem; }
915
+ }
916
+ .xicms-cta {
917
+ text-align: center;
918
+ padding: 2.5rem 1.25rem;
919
+ background: var(--xicms-bg, #f8fafc);
920
+ border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
921
+ border-radius: var(--xicms-radius, 12px);
922
+ margin: 1.5rem 0;
923
+ }
924
+ .xicms-columns {
925
+ display: grid;
926
+ gap: 1.25rem;
927
+ margin: 1.5rem 0;
928
+ }
929
+ @media (max-width: 640px) {
930
+ .xicms-columns {
931
+ grid-template-columns: 1fr !important;
932
+ }
933
+ }
934
+ .xicms-newslist {
935
+ margin: 1.5rem 0;
936
+ }
937
+
938
+ /* Publiek formulier (block) */
939
+ .xicms-form {
940
+ display: grid;
941
+ gap: 0.85rem;
942
+ max-width: 520px;
943
+ }
944
+ .xicms-field {
945
+ display: grid;
946
+ gap: 0.3rem;
947
+ }
948
+ .xicms-field > span {
949
+ font-weight: 600;
950
+ font-size: 0.95rem;
951
+ }
952
+ .xicms-form input,
953
+ .xicms-form textarea,
954
+ .xicms-form select {
955
+ width: 100%;
956
+ padding: 0.6rem 0.7rem;
957
+ border: 1px solid var(--xicms-border-strong, rgba(0, 0, 0, 0.18));
958
+ border-radius: var(--xicms-radius, 10px);
959
+ font: inherit;
960
+ }
961
+ .xicms-form__success {
962
+ padding: 1rem;
963
+ border-radius: 10px;
964
+ background: #ecfdf5;
965
+ color: #065f46;
966
+ }
967
+ .xicms-form__error {
968
+ color: #dc2626;
969
+ margin: 0;
970
+ }
971
+
972
+ /* FAQ-block */
973
+ .xicms-faq {
974
+ margin: 1.5rem 0;
975
+ }
976
+ .xicms-faq-list {
977
+ display: grid;
978
+ gap: 0.5rem;
979
+ }
980
+ .xicms-faq-item {
981
+ border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
982
+ border-radius: var(--xicms-radius, 10px);
983
+ padding: 0.75rem 1rem;
984
+ }
985
+ .xicms-faq-item > summary {
986
+ cursor: pointer;
987
+ font-weight: 600;
988
+ }
989
+ .xicms-faq-item > p {
990
+ margin: 0.6rem 0 0;
991
+ }
992
+
993
+ /* Openingstijden-block */
994
+ .xicms-hours {
995
+ margin: 1.5rem 0;
996
+ }
997
+ /* Logo-marquee: doorlopende band; pauzeert bij hover, statisch bij reduced-motion. */
998
+ .xicms-logos__marquee {
999
+ width: 100%;
1000
+ overflow: hidden;
1001
+ -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
1002
+ mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
1003
+ }
1004
+ .xicms-logos__track {
1005
+ display: flex;
1006
+ gap: 3rem;
1007
+ width: max-content;
1008
+ animation: xicms-marquee 28s linear infinite;
1009
+ }
1010
+ .xicms-logos__track > * {
1011
+ flex: 0 0 auto;
1012
+ }
1013
+ .xicms-logos__row {
1014
+ flex-wrap: nowrap !important;
1015
+ }
1016
+ .xicms-logos__marquee:hover .xicms-logos__track {
1017
+ animation-play-state: paused;
1018
+ }
1019
+ @keyframes xicms-marquee {
1020
+ to { transform: translateX(calc(-50% - 1.5rem)); }
1021
+ }
1022
+ @media (prefers-reduced-motion: reduce) {
1023
+ .xicms-logos__track { animation: none; }
1024
+ }
1025
+
1026
+ /* Tijdlijn met iconen; optioneel alternerend op bredere schermen. */
1027
+ .xicms-timeline__list {
1028
+ list-style: none;
1029
+ margin: 0;
1030
+ padding: 0;
1031
+ display: grid;
1032
+ gap: 1.1rem;
1033
+ border-inline-start: 2px solid var(--color-border, var(--xicms-border, rgba(0, 0, 0, 0.1)));
1034
+ }
1035
+ .xicms-timeline__item {
1036
+ position: relative;
1037
+ padding-inline-start: 1.6rem;
1038
+ }
1039
+ .xicms-timeline__marker {
1040
+ position: absolute;
1041
+ left: -0.65rem;
1042
+ top: 0.1rem;
1043
+ display: inline-flex;
1044
+ align-items: center;
1045
+ justify-content: center;
1046
+ width: 1.3rem;
1047
+ height: 1.3rem;
1048
+ border-radius: 999px;
1049
+ background: var(--xicms-surface, #fff);
1050
+ border: 2px solid var(--xicms-primary, #4f46e5);
1051
+ font-size: 0.6rem;
1052
+ line-height: 1;
1053
+ color: var(--xicms-primary, #4f46e5);
1054
+ }
1055
+ @media (min-width: 780px) {
1056
+ .xicms-timeline--alternate .xicms-timeline__list {
1057
+ border-inline-start: 0;
1058
+ position: relative;
1059
+ }
1060
+ .xicms-timeline--alternate .xicms-timeline__list::before {
1061
+ content: "";
1062
+ position: absolute;
1063
+ left: 50%;
1064
+ top: 0;
1065
+ bottom: 0;
1066
+ width: 2px;
1067
+ background: var(--color-border, var(--xicms-border, rgba(0, 0, 0, 0.1)));
1068
+ }
1069
+ .xicms-timeline--alternate .xicms-timeline__item {
1070
+ width: 50%;
1071
+ padding-inline: 2rem;
1072
+ }
1073
+ .xicms-timeline--alternate .xicms-timeline__item:nth-child(odd) {
1074
+ text-align: right;
1075
+ }
1076
+ .xicms-timeline--alternate .xicms-timeline__item:nth-child(odd) .xicms-timeline__marker {
1077
+ left: auto;
1078
+ right: -0.65rem;
1079
+ }
1080
+ .xicms-timeline--alternate .xicms-timeline__item:nth-child(even) {
1081
+ margin-left: 50%;
1082
+ }
1083
+ .xicms-timeline--alternate .xicms-timeline__item:nth-child(even) .xicms-timeline__marker {
1084
+ left: -0.65rem;
1085
+ }
1086
+ }
1087
+
1088
+ .xicms-search__snippet {
1089
+ margin: 0.15rem 0 0;
1090
+ font-size: 0.82rem;
1091
+ color: var(--color-text-secondary, inherit);
1092
+ opacity: 0.85;
1093
+ }
1094
+ .xicms-search__snippet mark,
1095
+ .xicms-search__results mark {
1096
+ background: color-mix(in srgb, var(--xicms-primary, #4f46e5) 18%, transparent);
1097
+ color: inherit;
1098
+ border-radius: 3px;
1099
+ padding: 0 1px;
1100
+ }
1101
+ .xicms-form__native {
1102
+ display: grid;
1103
+ gap: 0.3rem;
1104
+ }
1105
+ .xicms-form__native-label {
1106
+ font-size: 0.9rem;
1107
+ font-weight: 600;
1108
+ }
1109
+ /* Radiogroep in formulieren. */
1110
+ .xicms-form__radios {
1111
+ border: 0;
1112
+ margin: 0;
1113
+ padding: 0;
1114
+ display: grid;
1115
+ gap: 0.35rem;
1116
+ }
1117
+ .xicms-form__radios legend {
1118
+ font-size: 0.9rem;
1119
+ font-weight: 600;
1120
+ margin-bottom: 0.25rem;
1121
+ }
1122
+ .xicms-form__radio {
1123
+ display: flex;
1124
+ align-items: center;
1125
+ gap: 0.5rem;
1126
+ font-size: 0.95rem;
1127
+ }
1128
+
1129
+ /* Uitgelichte kaart (cards-blok). */
1130
+ .xicms-cards__card--featured {
1131
+ outline: 2px solid var(--xicms-primary, #4f46e5);
1132
+ outline-offset: -2px;
1133
+ box-shadow: 0 8px 26px color-mix(in srgb, var(--xicms-primary, #4f46e5) 18%, transparent);
1134
+ }
1135
+
1136
+ /* Galerij-filterbalk (tags). */
1137
+ .xicms-gallery__filter {
1138
+ display: flex;
1139
+ flex-wrap: wrap;
1140
+ gap: 0.4rem;
1141
+ margin-bottom: 0.9rem;
1142
+ }
1143
+ .xicms-gallery__filterbtn {
1144
+ appearance: none;
1145
+ border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
1146
+ background: var(--xicms-surface, #fff);
1147
+ border-radius: 999px;
1148
+ padding: 0.3rem 0.85rem;
1149
+ font: inherit;
1150
+ font-size: 0.85rem;
1151
+ cursor: pointer;
1152
+ }
1153
+ .xicms-gallery__filterbtn[data-active="1"] {
1154
+ background: var(--xicms-primary, #4f46e5);
1155
+ border-color: var(--xicms-primary, #4f46e5);
1156
+ color: #fff;
1157
+ }
1158
+ .xicms-agenda__ics {
1159
+ display: inline-block;
1160
+ margin-top: 0.35rem;
1161
+ font-size: 0.82rem;
1162
+ color: var(--xicms-primary, #4f46e5);
1163
+ text-decoration: none;
1164
+ }
1165
+ .xicms-agenda__ics:hover {
1166
+ text-decoration: underline;
1167
+ }
1168
+ .xicms-hours__badge {
1169
+ display: inline-block;
1170
+ margin: 0.15rem 0 0.6rem;
1171
+ padding: 0.2rem 0.65rem;
1172
+ border-radius: 999px;
1173
+ font-size: 0.8rem;
1174
+ font-weight: 600;
1175
+ background: color-mix(in srgb, var(--xicms-success, #16a34a) 12%, transparent);
1176
+ color: var(--xicms-success-fg, #15803d);
1177
+ }
1178
+ .xicms-hours__badge[data-open="0"] {
1179
+ background: color-mix(in srgb, var(--xicms-danger, #dc2626) 10%, transparent);
1180
+ color: var(--xicms-danger-fg, #b91c1c);
1181
+ }
1182
+ .xicms-hours-table {
1183
+ width: 100%;
1184
+ border-collapse: collapse;
1185
+ }
1186
+ .xicms-hours-table th,
1187
+ .xicms-hours-table td {
1188
+ text-align: left;
1189
+ padding: 0.5rem 0.25rem;
1190
+ border-bottom: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
1191
+ }
1192
+ .xicms-hours-table th {
1193
+ font-weight: 600;
1194
+ }
1195
+ .xicms-hours-table td {
1196
+ text-align: right;
1197
+ }
1198
+
1199
+ /* Prijzen-block (kaarten) */
1200
+ .xicms-pricing {
1201
+ margin: 1.5rem 0;
1202
+ }
1203
+ .xicms-pricing__grid {
1204
+ display: grid;
1205
+ gap: 1rem;
1206
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
1207
+ }
1208
+ .xicms-pricing__card {
1209
+ display: grid;
1210
+ gap: 0.5rem;
1211
+ align-content: start;
1212
+ padding: 1.25rem;
1213
+ border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
1214
+ border-radius: var(--xicms-radius, 12px);
1215
+ background: var(--xicms-surface, #fff);
1216
+ }
1217
+ .xicms-pricing__card[data-highlighted="true"] {
1218
+ border-color: var(--xicms-primary, #4f46e5);
1219
+ box-shadow: 0 8px 24px rgba(79, 70, 229, 0.15);
1220
+ }
1221
+ .xicms-pricing__label {
1222
+ font-weight: 600;
1223
+ }
1224
+ .xicms-pricing__price {
1225
+ display: flex;
1226
+ align-items: baseline;
1227
+ gap: 0.25rem;
1228
+ }
1229
+ .xicms-pricing-price {
1230
+ font-size: 1.6rem;
1231
+ font-weight: 700;
1232
+ color: var(--xicms-primary, #4f46e5);
1233
+ }
1234
+ .xicms-pricing__period {
1235
+ font-size: 0.85rem;
1236
+ opacity: 0.7;
1237
+ }
1238
+ .xicms-pricing__features {
1239
+ list-style: none;
1240
+ margin: 0.25rem 0;
1241
+ padding: 0;
1242
+ display: grid;
1243
+ gap: 0.3rem;
1244
+ font-size: 0.9rem;
1245
+ }
1246
+ .xicms-pricing__features li::before {
1247
+ content: "✓ ";
1248
+ color: var(--xicms-primary, #4f46e5);
1249
+ font-weight: 700;
1250
+ }
1251
+ .xicms-pricing-detail {
1252
+ font-size: 0.85em;
1253
+ opacity: 0.7;
1254
+ }
1255
+ .xicms-pricing-note {
1256
+ margin: 0.75rem 0 0;
1257
+ font-size: 0.85em;
1258
+ opacity: 0.7;
1259
+ }
1260
+
1261
+ /* Team social/telefoon */
1262
+ .xicms-team__phone {
1263
+ display: block;
1264
+ font-size: 0.9rem;
1265
+ opacity: 0.8;
1266
+ }
1267
+ .xicms-team__social {
1268
+ list-style: none;
1269
+ margin: 0.3rem 0 0;
1270
+ padding: 0;
1271
+ display: flex;
1272
+ gap: 0.5rem;
1273
+ font-size: 0.85rem;
1274
+ }
1275
+ .xicms-team__social a {
1276
+ color: var(--xicms-primary, #4f46e5);
1277
+ }
1278
+
1279
+ /* Testimonials layout=list → één kolom */
1280
+ .xicms-testimonials[data-layout="list"] .xicms-testimonials__list {
1281
+ grid-template-columns: 1fr;
1282
+ }
1283
+
1284
+ /* CTA als vaste balk onderaan */
1285
+ .xicms-cta--sticky {
1286
+ position: fixed;
1287
+ left: 0;
1288
+ right: 0;
1289
+ bottom: 0;
1290
+ z-index: 40;
1291
+ display: flex;
1292
+ align-items: center;
1293
+ justify-content: space-between;
1294
+ gap: 1rem;
1295
+ flex-wrap: wrap;
1296
+ padding: 0.75rem 1.25rem;
1297
+ background: var(--xicms-bg, #ffffff);
1298
+ border-top: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
1299
+ box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.08);
1300
+ }
1301
+ .xicms-cta--sticky .xicms-cta-text {
1302
+ font-weight: 600;
1303
+ }
1304
+
1305
+ /* FAQ+ zoekveld */
1306
+ .xicms-faq__search {
1307
+ width: 100%;
1308
+ padding: 0.55rem 0.7rem;
1309
+ margin-bottom: 0.75rem;
1310
+ border: 1px solid var(--xicms-border-strong, rgba(0, 0, 0, 0.18));
1311
+ border-radius: var(--xicms-radius, 10px);
1312
+ font: inherit;
1313
+ }
1314
+ .xicms-faq__empty {
1315
+ opacity: 0.6;
1316
+ }
1317
+
1318
+ /* Reviews/testimonials-block */
1319
+ .xicms-testimonials {
1320
+ margin: 1.5rem 0;
1321
+ }
1322
+ .xicms-testimonials__list {
1323
+ list-style: none;
1324
+ margin: 0;
1325
+ padding: 0;
1326
+ display: grid;
1327
+ gap: 1rem;
1328
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
1329
+ }
1330
+ .xicms-testimonials__item {
1331
+ position: relative;
1332
+ border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
1333
+ border-radius: var(--xicms-radius, 12px);
1334
+ padding: 1.35rem 1.25rem 1.15rem;
1335
+ background: var(--xicms-surface, #fff);
1336
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
1337
+ }
1338
+ /* Decoratief aanhalingsteken in het accent — geeft de kaart karakter zonder extra markup. */
1339
+ .xicms-testimonials__item::before {
1340
+ content: "\201C";
1341
+ position: absolute;
1342
+ top: 0.35rem;
1343
+ right: 0.9rem;
1344
+ font-family: Georgia, "Times New Roman", serif;
1345
+ font-size: 3.2rem;
1346
+ line-height: 1;
1347
+ color: var(--xicms-primary, #4f46e5);
1348
+ opacity: 0.15;
1349
+ pointer-events: none;
1350
+ }
1351
+ .xicms-testimonials__rating {
1352
+ color: var(--xicms-star, #f59e0b);
1353
+ letter-spacing: 0.1em;
1354
+ }
1355
+ .xicms-testimonials__rating-empty {
1356
+ opacity: 0.25;
1357
+ }
1358
+ .xicms-testimonials__quote {
1359
+ margin: 0.5rem 0 0.75rem;
1360
+ font-style: italic;
1361
+ }
1362
+ .xicms-testimonials__author {
1363
+ display: flex;
1364
+ align-items: center;
1365
+ gap: 0.6rem;
1366
+ font-size: 0.9rem;
1367
+ }
1368
+ .xicms-testimonials__avatar {
1369
+ width: 2.25rem;
1370
+ height: 2.25rem;
1371
+ border-radius: 999px;
1372
+ object-fit: cover;
1373
+ }
1374
+ .xicms-testimonials__role {
1375
+ opacity: 0.7;
1376
+ }
1377
+
1378
+ /* Team-block */
1379
+ .xicms-team {
1380
+ margin: 1.5rem 0;
1381
+ }
1382
+ .xicms-team__list {
1383
+ list-style: none;
1384
+ margin: 0;
1385
+ padding: 0;
1386
+ display: grid;
1387
+ gap: 1.25rem;
1388
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
1389
+ }
1390
+ .xicms-team__photo {
1391
+ width: 100%;
1392
+ aspect-ratio: 1 / 1;
1393
+ object-fit: cover;
1394
+ border-radius: 12px;
1395
+ margin-bottom: 0.6rem;
1396
+ }
1397
+ .xicms-team__name {
1398
+ display: block;
1399
+ }
1400
+ .xicms-team__role {
1401
+ display: block;
1402
+ color: var(--xicms-primary, #4f46e5);
1403
+ font-size: 0.9rem;
1404
+ }
1405
+ .xicms-team__bio {
1406
+ font-size: 0.9rem;
1407
+ opacity: 0.8;
1408
+ margin: 0.4rem 0;
1409
+ }
1410
+
1411
+ /* Agenda-block */
1412
+ .xicms-agenda {
1413
+ margin: 1.5rem 0;
1414
+ }
1415
+ .xicms-agenda__list {
1416
+ list-style: none;
1417
+ margin: 0;
1418
+ padding: 0;
1419
+ display: grid;
1420
+ gap: 0.75rem;
1421
+ }
1422
+ .xicms-agenda__item {
1423
+ display: grid;
1424
+ grid-template-columns: minmax(140px, max-content) 1fr;
1425
+ gap: 0.25rem 1rem;
1426
+ padding: 0.6rem 0;
1427
+ border-bottom: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
1428
+ }
1429
+ .xicms-agenda__date {
1430
+ font-weight: 600;
1431
+ color: var(--xicms-primary, #4f46e5);
1432
+ }
1433
+ .xicms-agenda__location {
1434
+ display: block;
1435
+ font-size: 0.9rem;
1436
+ opacity: 0.7;
1437
+ }
1438
+
1439
+ /* Zoek-block */
1440
+ .xicms-search {
1441
+ position: relative;
1442
+ margin: 1rem 0;
1443
+ max-width: 480px;
1444
+ }
1445
+ .xicms-search__input {
1446
+ width: 100%;
1447
+ padding: 0.6rem 0.8rem;
1448
+ border: 1px solid var(--xicms-border-strong, rgba(0, 0, 0, 0.18));
1449
+ border-radius: var(--xicms-radius, 10px);
1450
+ font: inherit;
1451
+ }
1452
+ .xicms-search__results {
1453
+ list-style: none;
1454
+ margin: 0.4rem 0 0;
1455
+ padding: 0.3rem;
1456
+ border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
1457
+ border-radius: var(--xicms-radius, 10px);
1458
+ background: var(--xicms-surface, #fff);
1459
+ }
1460
+ .xicms-search__result a,
1461
+ .xicms-search__empty {
1462
+ display: block;
1463
+ padding: 0.4rem 0.5rem;
1464
+ border-radius: 6px;
1465
+ text-decoration: none;
1466
+ color: inherit;
1467
+ }
1468
+ .xicms-search__result a:hover {
1469
+ background: var(--xicms-muted, rgba(0, 0, 0, 0.05));
1470
+ }
1471
+ .xicms-search__empty {
1472
+ opacity: 0.6;
1473
+ }
1474
+
1475
+ /* Bewerkbare footer (SiteFooter) — neutrale defaults, volledig herstijlbaar door de site. */
1476
+ .xicms-footer {
1477
+ display: grid;
1478
+ gap: 1.25rem;
1479
+ padding: 2.75rem 1.25rem 2rem;
1480
+ margin-top: 3.5rem;
1481
+ border-top: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
1482
+ background: var(--xicms-muted, rgba(0, 0, 0, 0.03));
1483
+ font-size: 0.9rem;
1484
+ }
1485
+ .xicms-footer__columns {
1486
+ display: grid;
1487
+ gap: 1.5rem;
1488
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
1489
+ }
1490
+ .xicms-footer__heading {
1491
+ font-size: 0.78rem;
1492
+ text-transform: uppercase;
1493
+ letter-spacing: 0.07em;
1494
+ opacity: 0.65;
1495
+ margin: 0 0 0.6rem;
1496
+ }
1497
+ .xicms-footer__links {
1498
+ list-style: none;
1499
+ margin: 0;
1500
+ padding: 0;
1501
+ display: grid;
1502
+ gap: 0.3rem;
1503
+ }
1504
+ .xicms-footer__links a,
1505
+ .xicms-footer__social a {
1506
+ color: inherit;
1507
+ text-decoration: none;
1508
+ }
1509
+ .xicms-footer__links a:hover,
1510
+ .xicms-footer__social a:hover {
1511
+ text-decoration: underline;
1512
+ }
1513
+ .xicms-footer__social {
1514
+ list-style: none;
1515
+ margin: 0;
1516
+ padding: 0;
1517
+ display: flex;
1518
+ flex-wrap: wrap;
1519
+ gap: 0.75rem;
1520
+ }
1521
+ .xicms-footer__bottom {
1522
+ display: flex;
1523
+ flex-wrap: wrap;
1524
+ align-items: center;
1525
+ justify-content: space-between;
1526
+ gap: 0.5rem;
1527
+ opacity: 0.75;
1528
+ }
1529
+ .xicms-footer__bottom a {
1530
+ color: inherit;
1531
+ }
1532
+
1533
+ /* Embed-consent placeholder (video/kaart/booking zonder toestemming) */
1534
+ .xicms-embed-consent {
1535
+ display: grid;
1536
+ place-items: center;
1537
+ min-height: 160px;
1538
+ padding: 1rem;
1539
+ border: 1px dashed var(--xicms-border-strong, rgba(0, 0, 0, 0.2));
1540
+ border-radius: var(--xicms-radius, 10px);
1541
+ background: var(--xicms-muted, rgba(0, 0, 0, 0.03));
1542
+ text-align: center;
1543
+ font-size: 0.9rem;
1544
+ }
1545
+ /* Lichte preview-placeholder in de editor (geen echte iframe/script — mode="preview"-contract). */
1546
+ .xicms-embed-preview {
1547
+ min-height: 96px;
1548
+ height: 100%;
1549
+ color: var(--color-text-secondary, #555);
1550
+ border-color: var(--color-border, rgba(0, 0, 0, 0.2));
1551
+ background:
1552
+ repeating-linear-gradient(45deg, rgba(0, 0, 0, 0.02) 0 10px, transparent 10px 20px);
1553
+ }
1554
+
1555
+ /* Feature (beeld + tekst) */
1556
+ /* Feature draait nu op Astryx Grid; `.xicms-feature` is enkel nog een stabiele styling-haak
1557
+ (geen eigen grid meer). */
1558
+
1559
+ /* Counters (tellers) */
1560
+ .xicms-counters {
1561
+ margin: 1.5rem 0;
1562
+ text-align: center;
1563
+ }
1564
+ .xicms-counters__grid {
1565
+ display: grid;
1566
+ gap: 1rem;
1567
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
1568
+ }
1569
+ /* Class-gebaseerd (niet inline) zodat een site de counter-waarden kan herstijlen zonder !important. */
1570
+ .xicms-counters__value {
1571
+ display: block;
1572
+ font-size: clamp(2rem, 5vw, 2.75rem);
1573
+ font-weight: 700;
1574
+ line-height: 1.05;
1575
+ color: var(--color-accent, var(--xicms-primary, #4f46e5));
1576
+ }
1577
+ .xicms-counters__label {
1578
+ opacity: 0.75;
1579
+ }
1580
+
1581
+ /* Logo's */
1582
+ .xicms-logos {
1583
+ margin: 1.5rem 0;
1584
+ }
1585
+ .xicms-logos__grid {
1586
+ display: grid;
1587
+ gap: 1.5rem;
1588
+ grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
1589
+ align-items: center;
1590
+ }
1591
+ .xicms-logos__item img {
1592
+ max-width: 100%;
1593
+ max-height: 48px;
1594
+ margin: 0 auto;
1595
+ display: block;
1596
+ }
1597
+ .xicms-logos[data-grayscale="true"] img {
1598
+ filter: grayscale(1);
1599
+ opacity: 0.7;
1600
+ transition: filter 0.2s, opacity 0.2s;
1601
+ }
1602
+ .xicms-logos[data-grayscale="true"] img:hover {
1603
+ filter: none;
1604
+ opacity: 1;
1605
+ }
1606
+
1607
+ /* Timeline */
1608
+ .xicms-timeline {
1609
+ margin: 1.5rem 0;
1610
+ }
1611
+ .xicms-timeline__list {
1612
+ list-style: none;
1613
+ margin: 0;
1614
+ padding: 0;
1615
+ display: grid;
1616
+ gap: 1rem;
1617
+ border-left: 2px solid var(--xicms-primary, #4f46e5);
1618
+ padding-left: 1.25rem;
1619
+ }
1620
+ .xicms-timeline__item {
1621
+ position: relative;
1622
+ }
1623
+ .xicms-timeline__item::before {
1624
+ content: "";
1625
+ position: absolute;
1626
+ left: -1.6rem;
1627
+ top: 0.3rem;
1628
+ width: 0.65rem;
1629
+ height: 0.65rem;
1630
+ border-radius: 999px;
1631
+ background: var(--xicms-primary, #4f46e5);
1632
+ }
1633
+ .xicms-timeline__date {
1634
+ display: block;
1635
+ font-size: 0.8rem;
1636
+ opacity: 0.7;
1637
+ }
1638
+ .xicms-timeline__title {
1639
+ display: block;
1640
+ }
1641
+
1642
+ /* Video */
1643
+ .xicms-video {
1644
+ margin: 1.5rem 0;
1645
+ }
1646
+ .xicms-video__frame {
1647
+ position: relative;
1648
+ aspect-ratio: 16 / 9;
1649
+ }
1650
+ .xicms-video__frame iframe,
1651
+ .xicms-video__player {
1652
+ width: 100%;
1653
+ height: 100%;
1654
+ border: 0;
1655
+ border-radius: 12px;
1656
+ }
1657
+ /* Click-to-play-facade: thumbnail + play-knop; de speler laadt pas na een klik. */
1658
+ .xicms-video__facade {
1659
+ position: relative;
1660
+ display: block;
1661
+ width: 100%;
1662
+ aspect-ratio: 16 / 9;
1663
+ padding: 0;
1664
+ border: 0;
1665
+ border-radius: 12px;
1666
+ overflow: hidden;
1667
+ cursor: pointer;
1668
+ background: #0f172a;
1669
+ }
1670
+ .xicms-video__facade img,
1671
+ .xicms-video__facade-bg {
1672
+ position: absolute;
1673
+ inset: 0;
1674
+ width: 100%;
1675
+ height: 100%;
1676
+ object-fit: cover;
1677
+ }
1678
+ .xicms-video__facade-bg {
1679
+ background: linear-gradient(135deg, #1e293b, #0f172a);
1680
+ }
1681
+ .xicms-video__play {
1682
+ position: absolute;
1683
+ inset: 0;
1684
+ display: grid;
1685
+ place-items: center;
1686
+ font-size: 1.4rem;
1687
+ color: #fff;
1688
+ }
1689
+ .xicms-video__play::before {
1690
+ content: "";
1691
+ position: absolute;
1692
+ width: 4.2rem;
1693
+ height: 4.2rem;
1694
+ border-radius: 999px;
1695
+ background: rgba(15, 23, 42, 0.7);
1696
+ transition: transform 0.15s ease, background 0.15s ease;
1697
+ }
1698
+ .xicms-video__facade:hover .xicms-video__play::before {
1699
+ transform: scale(1.08);
1700
+ background: var(--xicms-primary, #4f46e5);
1701
+ }
1702
+ .xicms-video__play {
1703
+ z-index: 1;
1704
+ }
1705
+
1706
+ /* Banner */
1707
+ .xicms-banner {
1708
+ display: flex;
1709
+ align-items: center;
1710
+ justify-content: center;
1711
+ gap: 1rem;
1712
+ padding: 0.6rem 1rem;
1713
+ font-size: 0.95rem;
1714
+ background: var(--xicms-primary, #4f46e5);
1715
+ color: #fff;
1716
+ }
1717
+ .xicms-banner[data-tone="success"] {
1718
+ background: var(--xicms-success, #059669);
1719
+ }
1720
+ /* #b45309 i.p.v. #d97706: witte tekst op amber haalde geen 4.5:1 contrast. */
1721
+ .xicms-banner[data-tone="warning"] {
1722
+ background: var(--xicms-warning, #b45309);
1723
+ }
1724
+ .xicms-banner__link {
1725
+ color: #fff;
1726
+ text-decoration: underline;
1727
+ margin-left: 0.4rem;
1728
+ }
1729
+ .xicms-banner__close {
1730
+ background: none;
1731
+ border: 0;
1732
+ color: inherit;
1733
+ cursor: pointer;
1734
+ font-size: 1rem;
1735
+ /* Raakdoel ≥44px zonder de balk hoger te maken (negatieve marge compenseert de padding). */
1736
+ padding: 0.7rem;
1737
+ margin: -0.7rem;
1738
+ min-width: 2.75rem;
1739
+ min-height: 2.75rem;
1740
+ }
1741
+
1742
+ /* Contact */
1743
+ .xicms-contact {
1744
+ margin: 1.5rem 0;
1745
+ }
1746
+ .xicms-contact__list {
1747
+ display: grid;
1748
+ gap: 0.5rem;
1749
+ margin: 0;
1750
+ }
1751
+ .xicms-contact__row {
1752
+ display: grid;
1753
+ grid-template-columns: 8rem 1fr;
1754
+ gap: 0.5rem;
1755
+ }
1756
+ .xicms-contact__row dt {
1757
+ font-weight: 600;
1758
+ }
1759
+ .xicms-contact__row dd {
1760
+ margin: 0;
1761
+ }
1762
+
1763
+ /* Social */
1764
+ .xicms-social__list {
1765
+ list-style: none;
1766
+ margin: 0.5rem 0;
1767
+ padding: 0;
1768
+ display: flex;
1769
+ flex-wrap: wrap;
1770
+ gap: 0.75rem;
1771
+ }
1772
+ .xicms-social__list a {
1773
+ color: var(--xicms-primary, #4f46e5);
1774
+ }
1775
+ /* Icoon-variant: ronde knop met merk-glyph. */
1776
+ .xicms-social__iconlink {
1777
+ display: inline-flex;
1778
+ align-items: center;
1779
+ justify-content: center;
1780
+ width: 2.4rem;
1781
+ height: 2.4rem;
1782
+ border-radius: 999px;
1783
+ border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
1784
+ background: var(--xicms-surface, #fff);
1785
+ transition: transform 0.12s ease, border-color 0.12s ease;
1786
+ }
1787
+ .xicms-social__iconlink:hover {
1788
+ transform: translateY(-1px);
1789
+ border-color: var(--xicms-primary, #4f46e5);
1790
+ }
1791
+
1792
+ /* Kaart */
1793
+ .xicms-map {
1794
+ margin: 1.5rem 0;
1795
+ border-radius: 12px;
1796
+ overflow: hidden;
1797
+ }
1798
+
1799
+ /* Nieuwsbrief */
1800
+ .xicms-newsletter {
1801
+ margin: 1.5rem 0;
1802
+ }
1803
+ .xicms-newsletter__form {
1804
+ display: flex;
1805
+ flex-wrap: wrap;
1806
+ gap: 0.5rem;
1807
+ max-width: 480px;
1808
+ }
1809
+ .xicms-newsletter__form input {
1810
+ flex: 1;
1811
+ min-width: 200px;
1812
+ padding: 0.6rem 0.7rem;
1813
+ border: 1px solid var(--xicms-border-strong, rgba(0, 0, 0, 0.18));
1814
+ border-radius: var(--xicms-radius, 10px);
1815
+ font: inherit;
1816
+ }
1817
+
1818
+ /* Booking */
1819
+ .xicms-booking {
1820
+ margin: 1.5rem 0;
1821
+ }
1822
+ .xicms-booking__frame iframe {
1823
+ border-radius: 12px;
1824
+ }
1825
+
1826
+ /* Knopgroep */
1827
+ .xicms-buttons {
1828
+ display: flex;
1829
+ flex-wrap: wrap;
1830
+ gap: 0.6rem;
1831
+ margin: 1rem 0;
1832
+ }
1833
+ .xicms-buttons[data-align="center"] {
1834
+ justify-content: center;
1835
+ }
1836
+ .xicms-buttons[data-align="right"] {
1837
+ justify-content: flex-end;
1838
+ }
1839
+
1840
+ /* Uitspraak */
1841
+ .xicms-quote {
1842
+ margin: 1.5rem 0;
1843
+ padding-left: 1.25rem;
1844
+ border-left: 3px solid var(--xicms-primary, #4f46e5);
1845
+ }
1846
+ .xicms-quote blockquote {
1847
+ margin: 0;
1848
+ font-size: 1.25rem;
1849
+ font-style: italic;
1850
+ }
1851
+ .xicms-quote figcaption {
1852
+ margin-top: 0.5rem;
1853
+ font-size: 0.9rem;
1854
+ opacity: 0.8;
1855
+ }
1856
+ .xicms-quote__role {
1857
+ opacity: 0.7;
1858
+ }
1859
+
1860
+ /* Scheiding */
1861
+ .xicms-divider[data-spacing="sm"] {
1862
+ margin: var(--xicms-spacing-sm, 1rem) 0;
1863
+ }
1864
+ .xicms-divider[data-spacing="md"] {
1865
+ margin: var(--xicms-spacing-md, 2rem) 0;
1866
+ }
1867
+ .xicms-divider[data-spacing="lg"] {
1868
+ margin: var(--xicms-spacing-lg, 3.5rem) 0;
1869
+ }
1870
+ .xicms-divider[data-variant="line"] {
1871
+ border-top: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.12));
1872
+ }
1873
+ .xicms-divider[data-variant="dots"] {
1874
+ border-top: 2px dotted var(--xicms-border-strong, rgba(0, 0, 0, 0.2));
1875
+ }
1876
+
1877
+ /* Accordeon (generiek) */
1878
+ .xicms-accordion {
1879
+ margin: 1.5rem 0;
1880
+ }
1881
+ .xicms-accordion__list {
1882
+ display: grid;
1883
+ gap: 0.5rem;
1884
+ }
1885
+ .xicms-accordion__item {
1886
+ border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
1887
+ border-radius: var(--xicms-radius, 10px);
1888
+ padding: 0.75rem 1rem;
1889
+ }
1890
+ .xicms-accordion__item > summary {
1891
+ cursor: pointer;
1892
+ font-weight: 600;
1893
+ }
1894
+ .xicms-accordion__item > p {
1895
+ margin: 0.6rem 0 0;
1896
+ }
1897
+
1898
+ /* Embed (generieke iframe) */
1899
+ .xicms-embed {
1900
+ margin: 1.5rem 0;
1901
+ border-radius: 12px;
1902
+ overflow: hidden;
1903
+ }
1904
+
1905
+ /* Cookie-consent (AVG) */
1906
+ /* Cookie-banner: compacte kaart linksonder (desktop) / volle breedte (mobiel), op de thema-tokens. */
1907
+ .xicms-consent {
1908
+ position: fixed;
1909
+ left: 0;
1910
+ right: 0;
1911
+ bottom: 0;
1912
+ z-index: 9995;
1913
+ padding: clamp(0.75rem, 2vw, 1.25rem);
1914
+ display: flex;
1915
+ justify-content: flex-start;
1916
+ pointer-events: none;
1917
+ }
1918
+ @media (prefers-reduced-motion: reduce) {
1919
+ .xicms-consent__inner {
1920
+ animation: none !important;
1921
+ }
1922
+ }
1923
+ .xicms-consent__inner {
1924
+ pointer-events: auto;
1925
+ width: 100%;
1926
+ max-width: 30rem;
1927
+ display: grid;
1928
+ gap: 0.85rem;
1929
+ padding: 1.15rem 1.25rem 1.1rem;
1930
+ background: var(--color-background-card, var(--xicms-bg, #fff));
1931
+ color: var(--color-text-primary, inherit);
1932
+ border: 1px solid var(--color-border, rgba(0, 0, 0, 0.1));
1933
+ border-radius: var(--radius-container, 14px);
1934
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.18);
1935
+ animation: xicms-consent-in 0.25s ease both;
1936
+ }
1937
+ @keyframes xicms-consent-in {
1938
+ from { opacity: 0; transform: translateY(12px); }
1939
+ to { opacity: 1; transform: none; }
1940
+ }
1941
+ /* Zwevend knopje om cookievoorkeuren te heropenen (AVG: keuze altijd wijzigbaar). */
1942
+ .xicms-consent__reopen {
1943
+ position: fixed;
1944
+ left: 0.9rem;
1945
+ bottom: 0.9rem;
1946
+ z-index: 9994;
1947
+ width: 2.75rem; /* ≥44px raakdoel */
1948
+ height: 2.75rem;
1949
+ border-radius: 999px;
1950
+ border: 1px solid var(--color-border, rgba(0, 0, 0, 0.12));
1951
+ background: var(--color-background-card, var(--xicms-bg, #fff));
1952
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.14);
1953
+ font-size: 1.1rem;
1954
+ line-height: 1;
1955
+ cursor: pointer;
1956
+ opacity: 0.85;
1957
+ }
1958
+ .xicms-consent__reopen:hover { opacity: 1; transform: translateY(-1px); }
1959
+ /* Tekstvariant voor in een footer. */
1960
+ .xicms-consent__reopen-link {
1961
+ appearance: none;
1962
+ border: 0;
1963
+ background: none;
1964
+ padding: 0;
1965
+ font: inherit;
1966
+ color: inherit;
1967
+ text-decoration: underline;
1968
+ cursor: pointer;
1969
+ }
1970
+ .xicms-consent__head { display: grid; gap: 0.3rem; }
1971
+ .xicms-consent__title { margin: 0; font-weight: 700; font-size: 1.02rem; }
1972
+ .xicms-consent__message { margin: 0; font-size: 0.9rem; line-height: 1.5; color: var(--color-text-secondary, inherit); }
1973
+ .xicms-consent__link { color: var(--color-accent, var(--xicms-primary, #4f46e5)); font-weight: 600; }
1974
+
1975
+ .xicms-consent__categories {
1976
+ display: grid;
1977
+ gap: 0.4rem;
1978
+ border: 0;
1979
+ margin: 0;
1980
+ padding: 0.25rem 0;
1981
+ max-height: 13rem;
1982
+ overflow-y: auto;
1983
+ }
1984
+ .xicms-consent__category {
1985
+ display: flex;
1986
+ align-items: center;
1987
+ justify-content: space-between;
1988
+ gap: 1rem;
1989
+ padding: 0.65rem 0.75rem;
1990
+ border: 1px solid var(--color-border, rgba(0, 0, 0, 0.1));
1991
+ border-radius: var(--radius-element, 10px);
1992
+ cursor: pointer;
1993
+ }
1994
+ .xicms-consent__category[data-on="1"] { border-color: var(--color-accent, var(--xicms-primary, #4f46e5)); }
1995
+ .xicms-consent__cat-text { display: grid; gap: 0.1rem; }
1996
+ .xicms-consent__cat-label { font-weight: 600; font-size: 0.9rem; }
1997
+ .xicms-consent__cat-desc { font-size: 0.8rem; color: var(--color-text-secondary, inherit); opacity: 0.85; }
1998
+ .xicms-consent__required { font-weight: 500; opacity: 0.6; }
1999
+
2000
+ /* Toggle-switch (gebouwd op de checkbox; zichtbaar via de track). */
2001
+ .xicms-consent__switch { position: relative; flex: 0 0 auto; width: 2.6rem; height: 1.5rem; }
2002
+ .xicms-consent__switch input {
2003
+ position: absolute; inset: 0; margin: 0; opacity: 0; cursor: pointer;
2004
+ }
2005
+ .xicms-consent__switch input:disabled { cursor: not-allowed; }
2006
+ .xicms-consent__track {
2007
+ position: absolute; inset: 0; border-radius: 999px;
2008
+ background: var(--color-border, #cbd5e1); transition: background 0.18s;
2009
+ }
2010
+ .xicms-consent__track::after {
2011
+ content: ""; position: absolute; top: 3px; left: 3px;
2012
+ width: calc(1.5rem - 6px); height: calc(1.5rem - 6px);
2013
+ border-radius: 999px; background: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
2014
+ transition: transform 0.18s;
2015
+ }
2016
+ .xicms-consent__switch input:checked + .xicms-consent__track { background: var(--color-accent, var(--xicms-primary, #4f46e5)); }
2017
+ .xicms-consent__switch input:checked + .xicms-consent__track::after { transform: translateX(1.1rem); }
2018
+ .xicms-consent__switch input:focus-visible + .xicms-consent__track { outline: 2px solid var(--color-accent, #4f46e5); outline-offset: 2px; }
2019
+
2020
+ .xicms-consent__actions {
2021
+ display: flex;
2022
+ flex-wrap: wrap;
2023
+ gap: 0.5rem;
2024
+ }
2025
+ .xicms-consent__btn {
2026
+ flex: 1 1 auto;
2027
+ padding: 0.6rem 0.9rem;
2028
+ border-radius: var(--radius-element, 10px);
2029
+ font: inherit;
2030
+ font-size: 0.9rem;
2031
+ font-weight: 600;
2032
+ cursor: pointer;
2033
+ border: 1px solid var(--color-border, rgba(0, 0, 0, 0.15));
2034
+ background: transparent;
2035
+ color: inherit;
2036
+ transition: background 0.15s, border-color 0.15s;
2037
+ }
2038
+ .xicms-consent__btn--ghost:hover { background: var(--color-background-muted, rgba(0, 0, 0, 0.04)); }
2039
+ .xicms-consent__btn--primary {
2040
+ background: var(--color-accent, var(--xicms-primary, #4f46e5));
2041
+ color: var(--color-on-accent, #fff);
2042
+ border-color: transparent;
2043
+ flex-basis: 100%;
2044
+ }
2045
+ @media (min-width: 480px) {
2046
+ .xicms-consent__btn--primary { flex-basis: auto; }
2047
+ }
2048
+
2049
+ /* ════════════════════ Indeling: Met zijbalk ════════════════════ */
2050
+ .xicms-sidebar {
2051
+ display: grid;
2052
+ gap: var(--xicms-spacing-md, 1.5rem);
2053
+ }
2054
+ .xicms-sidebar__aside {
2055
+ display: grid;
2056
+ gap: var(--xicms-spacing-md, 1.5rem);
2057
+ align-content: start;
2058
+ }
2059
+ @media (min-width: 768px) {
2060
+ .xicms-sidebar[data-side="right"] { grid-template-columns: 1fr var(--xicms-aside-w, 18rem); }
2061
+ .xicms-sidebar[data-side="left"] { grid-template-columns: var(--xicms-aside-w, 18rem) 1fr; }
2062
+ .xicms-sidebar[data-width="sm"] { --xicms-aside-w: 14rem; }
2063
+ .xicms-sidebar[data-width="md"] { --xicms-aside-w: 18rem; }
2064
+ .xicms-sidebar[data-width="lg"] { --xicms-aside-w: 24rem; }
2065
+ .xicms-sidebar__aside--sticky { position: sticky; top: 1rem; }
2066
+ }
2067
+
2068
+ /* ════════════════════ Widgets (zijbalk-varianten) ════════════════════ */
2069
+ .xicms-widget {
2070
+ display: block;
2071
+ padding: 1rem 1.1rem;
2072
+ border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.08));
2073
+ border-radius: var(--xicms-radius, 12px);
2074
+ background: var(--xicms-surface, #fff);
2075
+ }
2076
+ .xicms-widget + .xicms-widget { margin-top: var(--xicms-spacing-sm, 1rem); }
2077
+ .xicms-widget__title {
2078
+ margin: 0 0 0.6rem;
2079
+ font-size: 0.95rem;
2080
+ font-weight: 700;
2081
+ }
2082
+ .xicms-widget__list {
2083
+ list-style: none;
2084
+ margin: 0;
2085
+ padding: 0;
2086
+ display: grid;
2087
+ gap: 0.6rem;
2088
+ }
2089
+ .xicms-widget__item {
2090
+ display: flex;
2091
+ gap: 0.6rem;
2092
+ align-items: flex-start;
2093
+ font-size: 0.9rem;
2094
+ }
2095
+ .xicms-widget__item--event,
2096
+ .xicms-widget__item--card { flex-direction: column; gap: 0.15rem; }
2097
+ .xicms-widget__link {
2098
+ display: block;
2099
+ font-weight: 600;
2100
+ color: inherit;
2101
+ text-decoration: none;
2102
+ }
2103
+ .xicms-widget__link:hover { text-decoration: underline; }
2104
+ .xicms-widget__meta {
2105
+ display: block;
2106
+ font-size: 0.78rem;
2107
+ opacity: 0.6;
2108
+ }
2109
+ .xicms-widget__sub {
2110
+ display: block;
2111
+ font-size: 0.82rem;
2112
+ opacity: 0.8;
2113
+ }
2114
+ .xicms-widget__empty { font-size: 0.85rem; opacity: 0.6; margin: 0; }
2115
+ .xicms-widget__thumb {
2116
+ width: 48px;
2117
+ height: 48px;
2118
+ object-fit: cover;
2119
+ border-radius: 8px;
2120
+ flex: none;
2121
+ }
2122
+ .xicms-widget__hours { width: 100%; border-collapse: collapse; font-size: 0.88rem; }
2123
+ .xicms-widget__hours th { text-align: left; font-weight: 500; padding: 0.15rem 0; }
2124
+ .xicms-widget__hours td { text-align: right; padding: 0.15rem 0; }
2125
+ .xicms-widget__hours-today { font-weight: 700; color: var(--xicms-primary, #4f46e5); }
2126
+ .xicms-widget__social { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.5rem; }
2127
+ .xicms-widget__social a {
2128
+ display: inline-block;
2129
+ padding: 0.25rem 0.6rem;
2130
+ border-radius: 999px;
2131
+ background: var(--xicms-muted, rgba(0, 0, 0, 0.05));
2132
+ font-size: 0.82rem;
2133
+ color: inherit;
2134
+ text-decoration: none;
2135
+ }
2136
+ .xicms-widget__form { display: grid; gap: 0.5rem; }
2137
+ .xicms-widget__form input {
2138
+ width: 100%;
2139
+ padding: 0.5rem 0.6rem;
2140
+ border: 1px solid var(--xicms-border-strong, rgba(0, 0, 0, 0.15));
2141
+ border-radius: var(--xicms-radius, 10px);
2142
+ font: inherit;
2143
+ }
2144
+ .xicms-widget--cta { background: var(--xicms-primary, #4f46e5); color: #fff; }
2145
+ .xicms-widget--cta .xicms-widget__title { color: #fff; }
2146
+ .xicms-widget__grid { display: grid; gap: 0.4rem; }
2147
+ .xicms-widget__grid[data-cols="2"] { grid-template-columns: repeat(2, 1fr); }
2148
+ .xicms-widget__grid[data-cols="3"] { grid-template-columns: repeat(3, 1fr); }
2149
+ .xicms-widget__grid[data-cols="4"] { grid-template-columns: repeat(4, 1fr); }
2150
+ .xicms-widget__photo { width: 100%; aspect-ratio: 1 / 1; object-fit: cover; border-radius: 8px; }
2151
+ .xicms-widget__quote { font-size: 0.9rem; }
2152
+ .xicms-widget__quote p { margin: 0.2rem 0; font-style: italic; }
2153
+ .xicms-widget__stars { color: var(--xicms-star, #f59e0b); letter-spacing: 1px; }
2154
+ .xicms-widget__cardicon { font-size: 1.2rem; }
2155
+ .xicms-widget__cardlink { display: flex; gap: 0.5rem; color: inherit; text-decoration: none; }
2156
+
2157
+ /* ════════════════════ Tabbladen ════════════════════ */
2158
+ .xicms-tabs__list {
2159
+ display: flex;
2160
+ flex-wrap: wrap;
2161
+ gap: 0.25rem;
2162
+ border-bottom: 2px solid var(--xicms-border, rgba(0, 0, 0, 0.08));
2163
+ margin-bottom: 1rem;
2164
+ }
2165
+ .xicms-tabs__tab {
2166
+ appearance: none;
2167
+ border: 0;
2168
+ background: transparent;
2169
+ padding: 0.55rem 0.9rem;
2170
+ font: inherit;
2171
+ font-weight: 600;
2172
+ cursor: pointer;
2173
+ color: inherit;
2174
+ opacity: 0.6;
2175
+ border-bottom: 2px solid transparent;
2176
+ margin-bottom: -2px;
2177
+ }
2178
+ .xicms-tabs__tab--active {
2179
+ opacity: 1;
2180
+ border-bottom-color: var(--xicms-primary, #4f46e5);
2181
+ color: var(--xicms-primary, #4f46e5);
2182
+ }
2183
+
2184
+ /* ════════════════════ Diensten / kaarten ════════════════════ */
2185
+ .xicms-cards__heading { margin: 0 0 0.25rem; }
2186
+ .xicms-cards__intro { margin: 0 0 1.25rem; opacity: 0.8; }
2187
+ .xicms-cards__grid { display: grid; gap: 1rem; }
2188
+ @media (min-width: 640px) {
2189
+ .xicms-cards__grid[data-cols="2"] { grid-template-columns: repeat(2, 1fr); }
2190
+ .xicms-cards__grid[data-cols="3"] { grid-template-columns: repeat(3, 1fr); }
2191
+ .xicms-cards__grid[data-cols="4"] { grid-template-columns: repeat(2, 1fr); }
2192
+ }
2193
+ @media (min-width: 960px) {
2194
+ .xicms-cards__grid[data-cols="4"] { grid-template-columns: repeat(4, 1fr); }
2195
+ }
2196
+ .xicms-cards__card {
2197
+ display: block;
2198
+ padding: 1.25rem;
2199
+ border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.08));
2200
+ border-radius: var(--xicms-radius, 12px);
2201
+ background: var(--xicms-surface, #fff);
2202
+ color: inherit;
2203
+ text-decoration: none;
2204
+ }
2205
+ .xicms-cards__card--link { transition: transform 0.15s ease, box-shadow 0.15s ease; }
2206
+ .xicms-cards__card--link:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08); }
2207
+ .xicms-cards__icon { font-size: 2rem; display: block; margin-bottom: 0.5rem; }
2208
+ .xicms-cards__image { width: 100%; height: 160px; object-fit: cover; border-radius: 10px; margin-bottom: 0.75rem; }
2209
+ .xicms-cards__title { margin: 0 0 0.35rem; font-size: 1.05rem; }
2210
+ .xicms-cards__text { margin: 0; opacity: 0.8; }
2211
+ .xicms-cards__link { display: inline-block; margin-top: 0.6rem; font-weight: 600; color: var(--xicms-primary, #4f46e5); }
2212
+
2213
+ /* ════════════════════ Downloads ════════════════════ */
2214
+ .xicms-downloads__list { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.5rem; }
2215
+ .xicms-downloads__link {
2216
+ display: flex;
2217
+ align-items: center;
2218
+ gap: 0.6rem;
2219
+ padding: 0.7rem 0.9rem;
2220
+ border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
2221
+ border-radius: var(--xicms-radius, 10px);
2222
+ color: inherit;
2223
+ text-decoration: none;
2224
+ background: var(--xicms-surface, #fff);
2225
+ }
2226
+ .xicms-downloads__link:hover { border-color: var(--xicms-primary, #4f46e5); }
2227
+ .xicms-downloads__icon { font-size: 1.2rem; }
2228
+ .xicms-downloads__label { font-weight: 600; flex: 1; }
2229
+ .xicms-downloads__meta { font-size: 0.8rem; opacity: 0.6; }
2230
+
2231
+ /* ════════════════════ Aftelteller ════════════════════ */
2232
+ .xicms-countdown { text-align: center; }
2233
+ .xicms-countdown__heading { margin: 0 0 0.75rem; }
2234
+ .xicms-countdown__digits { display: inline-flex; gap: 0.75rem; }
2235
+ .xicms-countdown__unit {
2236
+ min-width: 3.5rem;
2237
+ padding: 0.6rem 0.4rem;
2238
+ border-radius: var(--xicms-radius, 12px);
2239
+ background: var(--xicms-muted, rgba(0, 0, 0, 0.05));
2240
+ }
2241
+ .xicms-countdown__value { display: block; font-size: 1.8rem; font-weight: 800; line-height: 1; font-variant-numeric: tabular-nums; }
2242
+ .xicms-countdown__label { display: block; font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.05em; opacity: 0.6; margin-top: 0.25rem; }
2243
+ .xicms-countdown__expired { font-size: 1.4rem; font-weight: 700; }
2244
+ .xicms-widget--countdown .xicms-countdown__digits { gap: 0.4rem; }
2245
+ .xicms-widget--countdown .xicms-countdown__value { font-size: 1.3rem; }
2246
+ .xicms-widget--countdown .xicms-countdown__unit { min-width: 2.6rem; }
2247
+
2248
+ /* ════════════════════ Carrousel / slider ════════════════════ */
2249
+ .xicms-slider { position: relative; }
2250
+ .xicms-slider__viewport { position: relative; overflow: hidden; border-radius: var(--xicms-radius, 12px); }
2251
+ .xicms-slider__track { display: flex; transition: transform 0.4s ease; }
2252
+ @media (prefers-reduced-motion: reduce) {
2253
+ .xicms-slider__track { transition: none; }
2254
+ }
2255
+ .xicms-slider__slide { position: relative; flex: 0 0 100%; }
2256
+ .xicms-slider__image { width: 100%; aspect-ratio: var(--xicms-slider-ratio, 16 / 9); object-fit: cover; display: block; }
2257
+ .xicms-slider__caption {
2258
+ position: absolute;
2259
+ left: 0;
2260
+ right: 0;
2261
+ bottom: 0;
2262
+ padding: 0.75rem 1rem;
2263
+ background: linear-gradient(transparent, rgba(0, 0, 0, 0.6));
2264
+ color: #fff;
2265
+ font-weight: 600;
2266
+ }
2267
+ .xicms-slider__arrow {
2268
+ position: absolute;
2269
+ top: 50%;
2270
+ transform: translateY(-50%);
2271
+ width: 2.75rem; /* ≥44px raakdoel */
2272
+ height: 2.75rem;
2273
+ border-radius: 999px;
2274
+ border: 0;
2275
+ background: rgba(255, 255, 255, 0.85);
2276
+ color: #111;
2277
+ font-size: 1.4rem;
2278
+ line-height: 1;
2279
+ cursor: pointer;
2280
+ display: grid;
2281
+ place-items: center;
2282
+ }
2283
+ .xicms-slider__arrow--prev { left: 0.6rem; }
2284
+ .xicms-slider__arrow--next { right: 0.6rem; }
2285
+ .xicms-slider__dots { display: flex; justify-content: center; gap: 0.15rem; margin-top: 0.35rem; }
2286
+ /* Visueel een klein bolletje (content-box), maar een raakdoel van 24px+ (padding telt mee). */
2287
+ .xicms-slider__dot {
2288
+ width: 1.5rem;
2289
+ height: 1.5rem;
2290
+ border-radius: 999px;
2291
+ border: 0;
2292
+ background: var(--xicms-border-strong, rgba(0, 0, 0, 0.25));
2293
+ background-clip: content-box;
2294
+ cursor: pointer;
2295
+ padding: 0.45rem;
2296
+ }
2297
+ /* background-color (niet de shorthand): die zou background-clip: content-box resetten. */
2298
+ .xicms-slider__dot--active { background-color: var(--xicms-primary, #4f46e5); }
2299
+
2300
+ /* ── 4.16: nieuwe modules ─────────────────────────────────────────────────── */
2301
+
2302
+ /* Zwevende WhatsApp-knop. */
2303
+ .xicms-whatsapp {
2304
+ position: fixed;
2305
+ bottom: 1.1rem;
2306
+ z-index: 9990;
2307
+ display: inline-flex;
2308
+ align-items: center;
2309
+ gap: 0.5rem;
2310
+ padding: 0.7rem 0.9rem;
2311
+ border-radius: 999px;
2312
+ background: #25d366;
2313
+ color: #fff;
2314
+ text-decoration: none;
2315
+ font-weight: 600;
2316
+ box-shadow: 0 6px 20px rgba(0, 0, 0, 0.22);
2317
+ transition: transform 0.12s ease;
2318
+ }
2319
+ .xicms-whatsapp[data-position="br"] { right: 1.1rem; }
2320
+ .xicms-whatsapp[data-position="bl"] { left: 1.1rem; }
2321
+ .xicms-whatsapp:hover { transform: translateY(-2px); }
2322
+ /* In de editor-preview inline tonen (niet zwevend over het canvas). */
2323
+ .xicms-whatsapp[data-preview="1"] {
2324
+ position: static;
2325
+ margin: 0.5rem 0;
2326
+ }
2327
+
2328
+ /* Voor/na-vergelijker. */
2329
+ .xicms-beforeafter {
2330
+ margin: 0;
2331
+ position: relative;
2332
+ }
2333
+ .xicms-beforeafter__heading {
2334
+ font-weight: 700;
2335
+ margin-bottom: 0.6rem;
2336
+ }
2337
+ .xicms-beforeafter__stage {
2338
+ position: relative;
2339
+ width: 100%;
2340
+ height: 100%;
2341
+ overflow: hidden;
2342
+ border-radius: var(--xicms-radius, 12px);
2343
+ }
2344
+ .xicms-beforeafter__img {
2345
+ position: absolute;
2346
+ inset: 0;
2347
+ width: 100%;
2348
+ height: 100%;
2349
+ object-fit: cover;
2350
+ display: block;
2351
+ }
2352
+ .xicms-beforeafter__clip {
2353
+ position: absolute;
2354
+ inset: 0;
2355
+ }
2356
+ .xicms-beforeafter__divider {
2357
+ position: absolute;
2358
+ top: 0;
2359
+ bottom: 0;
2360
+ width: 3px;
2361
+ background: #fff;
2362
+ box-shadow: 0 0 8px rgba(0, 0, 0, 0.4);
2363
+ transform: translateX(-50%);
2364
+ display: grid;
2365
+ place-items: center;
2366
+ pointer-events: none;
2367
+ }
2368
+ .xicms-beforeafter__handle {
2369
+ background: #fff;
2370
+ color: #334155;
2371
+ border-radius: 999px;
2372
+ width: 2.2rem;
2373
+ height: 2.2rem;
2374
+ display: grid;
2375
+ place-items: center;
2376
+ font-size: 0.8rem;
2377
+ font-weight: 700;
2378
+ letter-spacing: -1px;
2379
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
2380
+ }
2381
+ .xicms-beforeafter__badge {
2382
+ position: absolute;
2383
+ top: 0.7rem;
2384
+ padding: 0.2rem 0.6rem;
2385
+ border-radius: 999px;
2386
+ background: rgba(15, 23, 42, 0.65);
2387
+ color: #fff;
2388
+ font-size: 0.75rem;
2389
+ font-weight: 600;
2390
+ pointer-events: none;
2391
+ }
2392
+ .xicms-beforeafter__badge--before { left: 0.7rem; }
2393
+ .xicms-beforeafter__badge--after { right: 0.7rem; }
2394
+ /* De range-input ligt onzichtbaar over het hele beeld: slepen/klikken/pijltjes werken native. */
2395
+ .xicms-beforeafter__range {
2396
+ position: absolute;
2397
+ inset: 0;
2398
+ width: 100%;
2399
+ height: 100%;
2400
+ margin: 0;
2401
+ opacity: 0;
2402
+ cursor: ew-resize;
2403
+ touch-action: none;
2404
+ }
2405
+ /* :has i.p.v. ~: de divider staat in de DOM vóór de range-input. */
2406
+ .xicms-beforeafter__stage:has(.xicms-beforeafter__range:focus-visible) .xicms-beforeafter__handle {
2407
+ outline: 2px solid var(--xicms-primary, #4f46e5);
2408
+ }
2409
+
2410
+ /* Portfolio/projecten. */
2411
+ .xicms-portfolio__item {
2412
+ display: block;
2413
+ width: 100%;
2414
+ padding: 0;
2415
+ border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
2416
+ border-radius: var(--xicms-radius, 12px);
2417
+ overflow: hidden;
2418
+ background: var(--xicms-surface, #fff);
2419
+ color: inherit;
2420
+ text-decoration: none;
2421
+ text-align: left;
2422
+ cursor: pointer;
2423
+ font: inherit;
2424
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
2425
+ }
2426
+ .xicms-portfolio__item:hover {
2427
+ transform: translateY(-2px);
2428
+ box-shadow: 0 10px 26px rgba(0, 0, 0, 0.1);
2429
+ }
2430
+ @media (prefers-reduced-motion: reduce) {
2431
+ .xicms-portfolio__item:hover { transform: none; }
2432
+ }
2433
+ .xicms-portfolio__body {
2434
+ display: grid;
2435
+ gap: 0.15rem;
2436
+ padding: 0.8rem 0.95rem 0.95rem;
2437
+ }
2438
+ .xicms-portfolio__cat {
2439
+ font-size: 0.72rem;
2440
+ text-transform: uppercase;
2441
+ letter-spacing: 0.07em;
2442
+ color: var(--xicms-primary, #4f46e5);
2443
+ font-weight: 700;
2444
+ }
2445
+ .xicms-portfolio__title {
2446
+ font-size: 1rem;
2447
+ }
2448
+ .xicms-portfolio__desc {
2449
+ font-size: 0.85rem;
2450
+ opacity: 0.7;
2451
+ }
2452
+
2453
+ /* Vacatures. */
2454
+ .xicms-jobs__head {
2455
+ display: flex;
2456
+ flex-wrap: wrap;
2457
+ align-items: baseline;
2458
+ justify-content: space-between;
2459
+ gap: 0.5rem;
2460
+ }
2461
+ .xicms-jobs__meta {
2462
+ font-size: 0.85rem;
2463
+ opacity: 0.65;
2464
+ }
2465
+
2466
+ /* Kruimelpad. */
2467
+ .xicms-breadcrumbs {
2468
+ font-size: 0.85rem;
2469
+ margin: 0.6rem 0;
2470
+ }
2471
+ .xicms-breadcrumbs__list {
2472
+ list-style: none;
2473
+ margin: 0;
2474
+ padding: 0;
2475
+ display: flex;
2476
+ flex-wrap: wrap;
2477
+ gap: 0.35rem;
2478
+ }
2479
+ .xicms-breadcrumbs__item + .xicms-breadcrumbs__item::before {
2480
+ content: "/";
2481
+ margin-right: 0.35rem;
2482
+ opacity: 0.4;
2483
+ }
2484
+ .xicms-breadcrumbs a {
2485
+ color: inherit;
2486
+ opacity: 0.7;
2487
+ text-decoration: none;
2488
+ }
2489
+ .xicms-breadcrumbs a:hover {
2490
+ opacity: 1;
2491
+ text-decoration: underline;
2492
+ }
2493
+ .xicms-breadcrumbs [aria-current="page"] {
2494
+ font-weight: 600;
2495
+ }