@xiwebdesign/xicms-core 7.31.0 → 8.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (482) hide show
  1. package/dist/XiCMSProvider.js +23 -7
  2. package/dist/XiCMSProvider.js.map +1 -1
  3. package/dist/admin/AdminApp.js +175 -93
  4. package/dist/admin/AdminApp.js.map +1 -1
  5. package/dist/admin/AdminHelp.d.ts +1 -1
  6. package/dist/admin/AdminHelp.js +44 -36
  7. package/dist/admin/AdminHelp.js.map +1 -1
  8. package/dist/admin/CoreVersion.d.ts +6 -3
  9. package/dist/admin/CoreVersion.js +60 -24
  10. package/dist/admin/CoreVersion.js.map +1 -1
  11. package/dist/admin/NewsEditor.d.ts +7 -0
  12. package/dist/admin/NewsEditor.js +117 -75
  13. package/dist/admin/NewsEditor.js.map +1 -1
  14. package/dist/admin/SuperadminPanel.js +1 -1
  15. package/dist/admin/SuperadminPanel.js.map +1 -1
  16. package/dist/admin/ZoekPalet.d.ts +15 -0
  17. package/dist/admin/ZoekPalet.js +123 -0
  18. package/dist/admin/ZoekPalet.js.map +1 -0
  19. package/dist/admin/blockEditors/GenericEditor.js +36 -18
  20. package/dist/admin/blockEditors/GenericEditor.js.map +1 -1
  21. package/dist/admin/blockEditors/StyleEditor.js +37 -3
  22. package/dist/admin/blockEditors/StyleEditor.js.map +1 -1
  23. package/dist/admin/blockEditors/SymbolRefEditor.js +44 -2
  24. package/dist/admin/blockEditors/SymbolRefEditor.js.map +1 -1
  25. package/dist/admin/blockEditors/index.js +154 -73
  26. package/dist/admin/blockEditors/index.js.map +1 -1
  27. package/dist/admin/customBlocks/CustomBlocksPanel.js +18 -7
  28. package/dist/admin/customBlocks/CustomBlocksPanel.js.map +1 -1
  29. package/dist/admin/dashboard/DashboardPanel.js +26 -16
  30. package/dist/admin/dashboard/DashboardPanel.js.map +1 -1
  31. package/dist/admin/editors/RichTextEditor.d.ts +4 -3
  32. package/dist/admin/editors/RichTextEditor.js +19 -60
  33. package/dist/admin/editors/RichTextEditor.js.map +1 -1
  34. package/dist/admin/editors/fontSizeExtension.js +7 -1
  35. package/dist/admin/editors/fontSizeExtension.js.map +1 -1
  36. package/dist/admin/editors/slashMenu.d.ts +18 -0
  37. package/dist/admin/editors/slashMenu.js +34 -0
  38. package/dist/admin/editors/slashMenu.js.map +1 -0
  39. package/dist/admin/editors/useRijkeTekst.d.ts +48 -0
  40. package/dist/admin/editors/useRijkeTekst.js +310 -0
  41. package/dist/admin/editors/useRijkeTekst.js.map +1 -0
  42. package/dist/admin/forms/FormsPanel.d.ts +11 -2
  43. package/dist/admin/forms/FormsPanel.js +218 -65
  44. package/dist/admin/forms/FormsPanel.js.map +1 -1
  45. package/dist/admin/lib/blokInfo.d.ts +17 -0
  46. package/dist/admin/lib/blokInfo.js +80 -0
  47. package/dist/admin/lib/blokInfo.js.map +1 -0
  48. package/dist/admin/lib/foutNaarMens.d.ts +1 -0
  49. package/dist/admin/lib/foutNaarMens.js +22 -0
  50. package/dist/admin/lib/foutNaarMens.js.map +1 -0
  51. package/dist/admin/lib/gewisteVelden.d.ts +13 -0
  52. package/dist/admin/lib/gewisteVelden.js +31 -0
  53. package/dist/admin/lib/gewisteVelden.js.map +1 -0
  54. package/dist/admin/lib/heroHulp.d.ts +11 -0
  55. package/dist/admin/lib/heroHulp.js +18 -0
  56. package/dist/admin/lib/heroHulp.js.map +1 -0
  57. package/dist/admin/lib/kleur.js +2 -3
  58. package/dist/admin/lib/kleur.js.map +1 -1
  59. package/dist/admin/lib/leesbaarheid.d.ts +34 -0
  60. package/dist/admin/lib/leesbaarheid.js +82 -0
  61. package/dist/admin/lib/leesbaarheid.js.map +1 -0
  62. package/dist/admin/lib/lengteAdvies.d.ts +1 -0
  63. package/dist/admin/lib/lengteAdvies.js +16 -0
  64. package/dist/admin/lib/lengteAdvies.js.map +1 -0
  65. package/dist/admin/lib/mediaLijst.d.ts +26 -0
  66. package/dist/admin/lib/mediaLijst.js +42 -0
  67. package/dist/admin/lib/mediaLijst.js.map +1 -0
  68. package/dist/admin/lib/mediaUsage.d.ts +12 -1
  69. package/dist/admin/lib/mediaUsage.js +43 -33
  70. package/dist/admin/lib/mediaUsage.js.map +1 -1
  71. package/dist/admin/lib/menuHulp.d.ts +16 -0
  72. package/dist/admin/lib/menuHulp.js +41 -0
  73. package/dist/admin/lib/menuHulp.js.map +1 -0
  74. package/dist/admin/lib/onopgeslagen.d.ts +10 -0
  75. package/dist/admin/lib/onopgeslagen.js +35 -0
  76. package/dist/admin/lib/onopgeslagen.js.map +1 -0
  77. package/dist/admin/lib/pagesClient.d.ts +55 -2
  78. package/dist/admin/lib/pagesClient.js +126 -28
  79. package/dist/admin/lib/pagesClient.js.map +1 -1
  80. package/dist/admin/lib/paginaGebruik.d.ts +56 -0
  81. package/dist/admin/lib/paginaGebruik.js +109 -0
  82. package/dist/admin/lib/paginaGebruik.js.map +1 -0
  83. package/dist/admin/lib/publicatieCheck.d.ts +25 -0
  84. package/dist/admin/lib/publicatieCheck.js +114 -0
  85. package/dist/admin/lib/publicatieCheck.js.map +1 -0
  86. package/dist/admin/lib/scrollNaarDetail.d.ts +6 -0
  87. package/dist/admin/lib/scrollNaarDetail.js +20 -0
  88. package/dist/admin/lib/scrollNaarDetail.js.map +1 -0
  89. package/dist/admin/lib/symbolsClient.d.ts +10 -0
  90. package/dist/admin/lib/symbolsClient.js +14 -1
  91. package/dist/admin/lib/symbolsClient.js.map +1 -1
  92. package/dist/admin/lib/tekstVeld.d.ts +8 -0
  93. package/dist/admin/lib/tekstVeld.js +10 -0
  94. package/dist/admin/lib/tekstVeld.js.map +1 -0
  95. package/dist/admin/lib/useIsSuperadmin.d.ts +2 -0
  96. package/dist/admin/lib/useIsSuperadmin.js +13 -0
  97. package/dist/admin/lib/useIsSuperadmin.js.map +1 -0
  98. package/dist/admin/lib/veldTaal.d.ts +14 -0
  99. package/dist/admin/lib/veldTaal.js +248 -0
  100. package/dist/admin/lib/veldTaal.js.map +1 -0
  101. package/dist/admin/lib/versieVergelijk.d.ts +17 -0
  102. package/dist/admin/lib/versieVergelijk.js +24 -0
  103. package/dist/admin/lib/versieVergelijk.js.map +1 -0
  104. package/dist/admin/lib/zodFields.js +22 -4
  105. package/dist/admin/lib/zodFields.js.map +1 -1
  106. package/dist/admin/lib/zodFout.d.ts +9 -0
  107. package/dist/admin/lib/zodFout.js +63 -0
  108. package/dist/admin/lib/zodFout.js.map +1 -0
  109. package/dist/admin/media/MediaManager.js +162 -32
  110. package/dist/admin/media/MediaManager.js.map +1 -1
  111. package/dist/admin/media/MediaPicker.d.ts +3 -0
  112. package/dist/admin/media/MediaPicker.js +84 -31
  113. package/dist/admin/media/MediaPicker.js.map +1 -1
  114. package/dist/admin/menu/MenuPanel.js +144 -83
  115. package/dist/admin/menu/MenuPanel.js.map +1 -1
  116. package/dist/admin/navContext.d.ts +3 -0
  117. package/dist/admin/navContext.js +13 -1
  118. package/dist/admin/navContext.js.map +1 -1
  119. package/dist/admin/pages/PageEditor.js +146 -30
  120. package/dist/admin/pages/PageEditor.js.map +1 -1
  121. package/dist/admin/pages/PagesPanel.js +215 -61
  122. package/dist/admin/pages/PagesPanel.js.map +1 -1
  123. package/dist/admin/pages/StarterKiezer.d.ts +12 -0
  124. package/dist/admin/pages/StarterKiezer.js +113 -0
  125. package/dist/admin/pages/StarterKiezer.js.map +1 -0
  126. package/dist/admin/panelRegistry.d.ts +1 -1
  127. package/dist/admin/panelRegistry.js +2 -1
  128. package/dist/admin/panelRegistry.js.map +1 -1
  129. package/dist/admin/patterns/PatternInserter.js +1 -1
  130. package/dist/admin/patterns/PatternInserter.js.map +1 -1
  131. package/dist/admin/settings/BedrijfInstellingen.d.ts +20 -0
  132. package/dist/admin/settings/BedrijfInstellingen.js +159 -0
  133. package/dist/admin/settings/BedrijfInstellingen.js.map +1 -0
  134. package/dist/admin/settings/MailTemplates.js +5 -4
  135. package/dist/admin/settings/MailTemplates.js.map +1 -1
  136. package/dist/admin/settings/SettingsPanel.js +120 -78
  137. package/dist/admin/settings/SettingsPanel.js.map +1 -1
  138. package/dist/admin/settings/SnapshotsCard.js +4 -4
  139. package/dist/admin/settings/SnapshotsCard.js.map +1 -1
  140. package/dist/admin/settings/VorigeTerugzetten.d.ts +15 -0
  141. package/dist/admin/settings/VorigeTerugzetten.js +89 -0
  142. package/dist/admin/settings/VorigeTerugzetten.js.map +1 -0
  143. package/dist/admin/shop/CategoriesTab.js +6 -4
  144. package/dist/admin/shop/CategoriesTab.js.map +1 -1
  145. package/dist/admin/shop/DiscountsTab.js +4 -2
  146. package/dist/admin/shop/DiscountsTab.js.map +1 -1
  147. package/dist/admin/shop/OrdersTab.js +57 -19
  148. package/dist/admin/shop/OrdersTab.js.map +1 -1
  149. package/dist/admin/shop/ProductPaneel.js +2 -1
  150. package/dist/admin/shop/ProductPaneel.js.map +1 -1
  151. package/dist/admin/shop/ProductsTab.js +40 -19
  152. package/dist/admin/shop/ProductsTab.js.map +1 -1
  153. package/dist/admin/shop/ShopPanel.js +13 -1
  154. package/dist/admin/shop/ShopPanel.js.map +1 -1
  155. package/dist/admin/shop/ShopSettingsTab.js +56 -17
  156. package/dist/admin/shop/ShopSettingsTab.js.map +1 -1
  157. package/dist/admin/shop/productClient.js +7 -3
  158. package/dist/admin/shop/productClient.js.map +1 -1
  159. package/dist/admin/stats/NietGevonden.d.ts +10 -0
  160. package/dist/admin/stats/NietGevonden.js +78 -0
  161. package/dist/admin/stats/NietGevonden.js.map +1 -0
  162. package/dist/admin/stats/StatsPanel.js +6 -1
  163. package/dist/admin/stats/StatsPanel.js.map +1 -1
  164. package/dist/admin/stats/lib.d.ts +2 -0
  165. package/dist/admin/stats/lib.js.map +1 -1
  166. package/dist/admin/ui/ConfirmDialog.js +10 -1
  167. package/dist/admin/ui/ConfirmDialog.js.map +1 -1
  168. package/dist/admin/ui/Icon.d.ts +34 -0
  169. package/dist/admin/ui/Icon.js +44 -0
  170. package/dist/admin/ui/Icon.js.map +1 -0
  171. package/dist/admin/ui/ImageField.d.ts +15 -0
  172. package/dist/admin/ui/ImageField.js +67 -0
  173. package/dist/admin/ui/ImageField.js.map +1 -0
  174. package/dist/admin/ui/KleurVeld.d.ts +25 -0
  175. package/dist/admin/ui/KleurVeld.js +76 -0
  176. package/dist/admin/ui/KleurVeld.js.map +1 -0
  177. package/dist/admin/ui/LaadStaat.d.ts +21 -0
  178. package/dist/admin/ui/LaadStaat.js +43 -0
  179. package/dist/admin/ui/LaadStaat.js.map +1 -0
  180. package/dist/admin/ui/LeesbaarheidPaneel.d.ts +10 -0
  181. package/dist/admin/ui/LeesbaarheidPaneel.js +68 -0
  182. package/dist/admin/ui/LeesbaarheidPaneel.js.map +1 -0
  183. package/dist/admin/ui/LinkDialog.d.ts +22 -0
  184. package/dist/admin/ui/LinkDialog.js +131 -0
  185. package/dist/admin/ui/LinkDialog.js.map +1 -0
  186. package/dist/admin/ui/LinkVeld.d.ts +14 -0
  187. package/dist/admin/ui/LinkVeld.js +49 -0
  188. package/dist/admin/ui/LinkVeld.js.map +1 -0
  189. package/dist/admin/ui/PreviewLinkResultaat.d.ts +14 -0
  190. package/dist/admin/ui/PreviewLinkResultaat.js +52 -0
  191. package/dist/admin/ui/PreviewLinkResultaat.js.map +1 -0
  192. package/dist/admin/ui/charts.js +5 -5
  193. package/dist/admin/ui/charts.js.map +1 -1
  194. package/dist/admin/ui/primitives.d.ts +16 -6
  195. package/dist/admin/ui/primitives.js +98 -26
  196. package/dist/admin/ui/primitives.js.map +1 -1
  197. package/dist/admin/ui/select.js +5 -2
  198. package/dist/admin/ui/select.js.map +1 -1
  199. package/dist/admin/ui/switch.d.ts +3 -1
  200. package/dist/admin/ui/switch.js +6 -3
  201. package/dist/admin/ui/switch.js.map +1 -1
  202. package/dist/admin/ui/toast.d.ts +2 -1
  203. package/dist/admin/ui/toast.js +17 -11
  204. package/dist/admin/ui/toast.js.map +1 -1
  205. package/dist/admin/visual/BlokKiezer.d.ts +34 -0
  206. package/dist/admin/visual/BlokKiezer.js +225 -0
  207. package/dist/admin/visual/BlokKiezer.js.map +1 -0
  208. package/dist/admin/visual/InlineGereedschap.d.ts +52 -0
  209. package/dist/admin/visual/InlineGereedschap.js +356 -0
  210. package/dist/admin/visual/InlineGereedschap.js.map +1 -0
  211. package/dist/admin/visual/InlineRijkeTekst.d.ts +23 -0
  212. package/dist/admin/visual/InlineRijkeTekst.js +152 -0
  213. package/dist/admin/visual/InlineRijkeTekst.js.map +1 -0
  214. package/dist/admin/visual/VisualEditor.js +273 -125
  215. package/dist/admin/visual/VisualEditor.js.map +1 -1
  216. package/dist/admin.css +1 -1
  217. package/dist/auth/AuthProvider.js +1 -0
  218. package/dist/auth/AuthProvider.js.map +1 -1
  219. package/dist/bedrijf/bedrijf.d.ts +44 -0
  220. package/dist/bedrijf/bedrijf.js +125 -0
  221. package/dist/bedrijf/bedrijf.js.map +1 -0
  222. package/dist/blocks/BlockRenderer.js +11 -1
  223. package/dist/blocks/BlockRenderer.js.map +1 -1
  224. package/dist/blocks/blockStyle.d.ts +7 -0
  225. package/dist/blocks/blockStyle.js +16 -3
  226. package/dist/blocks/blockStyle.js.map +1 -1
  227. package/dist/blocks/builtinSchemas.js +6 -0
  228. package/dist/blocks/builtinSchemas.js.map +1 -1
  229. package/dist/blocks/builtins/AgendaRender.d.ts +22 -0
  230. package/dist/blocks/builtins/AgendaRender.js +69 -9
  231. package/dist/blocks/builtins/AgendaRender.js.map +1 -1
  232. package/dist/blocks/builtins/Availability.d.ts +1 -0
  233. package/dist/blocks/builtins/Availability.js +23 -0
  234. package/dist/blocks/builtins/Availability.js.map +1 -0
  235. package/dist/blocks/builtins/AvailabilityRender.d.ts +12 -0
  236. package/dist/blocks/builtins/AvailabilityRender.js +105 -0
  237. package/dist/blocks/builtins/AvailabilityRender.js.map +1 -0
  238. package/dist/blocks/builtins/BeforeAfterRender.js +4 -3
  239. package/dist/blocks/builtins/BeforeAfterRender.js.map +1 -1
  240. package/dist/blocks/builtins/Booking.js +1 -1
  241. package/dist/blocks/builtins/Booking.js.map +1 -1
  242. package/dist/blocks/builtins/BreadcrumbsRender.d.ts +4 -3
  243. package/dist/blocks/builtins/BreadcrumbsRender.js +14 -8
  244. package/dist/blocks/builtins/BreadcrumbsRender.js.map +1 -1
  245. package/dist/blocks/builtins/ColumnsRender.d.ts +1 -1
  246. package/dist/blocks/builtins/ColumnsRender.js +3 -1
  247. package/dist/blocks/builtins/ColumnsRender.js.map +1 -1
  248. package/dist/blocks/builtins/Contact.js +1 -1
  249. package/dist/blocks/builtins/Contact.js.map +1 -1
  250. package/dist/blocks/builtins/ContactRender.d.ts +1 -1
  251. package/dist/blocks/builtins/ContactRender.js +37 -8
  252. package/dist/blocks/builtins/ContactRender.js.map +1 -1
  253. package/dist/blocks/builtins/Cta.js +1 -1
  254. package/dist/blocks/builtins/Cta.js.map +1 -1
  255. package/dist/blocks/builtins/CtaRender.d.ts +1 -1
  256. package/dist/blocks/builtins/CtaRender.js +5 -4
  257. package/dist/blocks/builtins/CtaRender.js.map +1 -1
  258. package/dist/blocks/builtins/Embed.js +1 -1
  259. package/dist/blocks/builtins/Embed.js.map +1 -1
  260. package/dist/blocks/builtins/FormBlock.js +1 -0
  261. package/dist/blocks/builtins/FormBlock.js.map +1 -1
  262. package/dist/blocks/builtins/FormBlockRender.d.ts +6 -0
  263. package/dist/blocks/builtins/FormBlockRender.js +88 -16
  264. package/dist/blocks/builtins/FormBlockRender.js.map +1 -1
  265. package/dist/blocks/builtins/GalleryRender.js +3 -2
  266. package/dist/blocks/builtins/GalleryRender.js.map +1 -1
  267. package/dist/blocks/builtins/Hero.js +1 -1
  268. package/dist/blocks/builtins/Hero.js.map +1 -1
  269. package/dist/blocks/builtins/HeroRender.js +7 -3
  270. package/dist/blocks/builtins/HeroRender.js.map +1 -1
  271. package/dist/blocks/builtins/OpenNowBadge.d.ts +4 -2
  272. package/dist/blocks/builtins/OpenNowBadge.js +6 -6
  273. package/dist/blocks/builtins/OpenNowBadge.js.map +1 -1
  274. package/dist/blocks/builtins/OpeningHoursRender.d.ts +8 -2
  275. package/dist/blocks/builtins/OpeningHoursRender.js +27 -6
  276. package/dist/blocks/builtins/OpeningHoursRender.js.map +1 -1
  277. package/dist/blocks/builtins/PriceList.d.ts +1 -0
  278. package/dist/blocks/builtins/PriceList.js +25 -0
  279. package/dist/blocks/builtins/PriceList.js.map +1 -0
  280. package/dist/blocks/builtins/PriceListRender.d.ts +17 -0
  281. package/dist/blocks/builtins/PriceListRender.js +87 -0
  282. package/dist/blocks/builtins/PriceListRender.js.map +1 -0
  283. package/dist/blocks/builtins/RichTextBlockRender.js +6 -1
  284. package/dist/blocks/builtins/RichTextBlockRender.js.map +1 -1
  285. package/dist/blocks/builtins/SectionHeading.d.ts +1 -0
  286. package/dist/blocks/builtins/SectionHeading.js +14 -0
  287. package/dist/blocks/builtins/SectionHeading.js.map +1 -0
  288. package/dist/blocks/builtins/SectionHeadingRender.d.ts +7 -0
  289. package/dist/blocks/builtins/SectionHeadingRender.js +14 -0
  290. package/dist/blocks/builtins/SectionHeadingRender.js.map +1 -0
  291. package/dist/blocks/builtins/SliderRender.js +3 -2
  292. package/dist/blocks/builtins/SliderRender.js.map +1 -1
  293. package/dist/blocks/builtins/SymbolRef.js +1 -1
  294. package/dist/blocks/builtins/SymbolRef.js.map +1 -1
  295. package/dist/blocks/builtins/TeamRender.js +6 -1
  296. package/dist/blocks/builtins/TeamRender.js.map +1 -1
  297. package/dist/blocks/builtins/Testimonials.js +3 -1
  298. package/dist/blocks/builtins/Testimonials.js.map +1 -1
  299. package/dist/blocks/builtins/TestimonialsRender.js +4 -0
  300. package/dist/blocks/builtins/TestimonialsRender.js.map +1 -1
  301. package/dist/blocks/builtins/WhatsappChatRender.d.ts +1 -1
  302. package/dist/blocks/builtins/WhatsappChatRender.js +3 -1
  303. package/dist/blocks/builtins/WhatsappChatRender.js.map +1 -1
  304. package/dist/blocks/builtins/Widgets.js +2 -2
  305. package/dist/blocks/builtins/Widgets.js.map +1 -1
  306. package/dist/blocks/builtins/WidgetsRender.js +3 -1
  307. package/dist/blocks/builtins/WidgetsRender.js.map +1 -1
  308. package/dist/blocks/builtins/consentEmbed.js +26 -9
  309. package/dist/blocks/builtins/consentEmbed.js.map +1 -1
  310. package/dist/blocks/builtins/index.d.ts +3 -0
  311. package/dist/blocks/builtins/index.js +6 -0
  312. package/dist/blocks/builtins/index.js.map +1 -1
  313. package/dist/blocks/builtins/lib/autoComplete.d.ts +7 -0
  314. package/dist/blocks/builtins/lib/autoComplete.js +20 -0
  315. package/dist/blocks/builtins/lib/autoComplete.js.map +1 -0
  316. package/dist/blocks/builtins/lib/bookingUrl.d.ts +2 -2
  317. package/dist/blocks/builtins/lib/bookingUrl.js +1 -1
  318. package/dist/blocks/builtins/lib/bookingUrl.js.map +1 -1
  319. package/dist/blocks/builtins/lib/ical.d.ts +24 -0
  320. package/dist/blocks/builtins/lib/ical.js +82 -0
  321. package/dist/blocks/builtins/lib/ical.js.map +1 -0
  322. package/dist/blocks/builtins/lib/vandaag.d.ts +8 -0
  323. package/dist/blocks/builtins/lib/vandaag.js +22 -0
  324. package/dist/blocks/builtins/lib/vandaag.js.map +1 -0
  325. package/dist/blocks/registry.d.ts +6 -0
  326. package/dist/blocks/registry.js.map +1 -1
  327. package/dist/blocks/ui/index.js +1 -0
  328. package/dist/blocks/ui/index.js.map +1 -1
  329. package/dist/components/EditBar.js +2 -4
  330. package/dist/components/EditBar.js.map +1 -1
  331. package/dist/components/News.js +26 -18
  332. package/dist/components/News.js.map +1 -1
  333. package/dist/components/PageView.d.ts +7 -1
  334. package/dist/components/PageView.js +17 -0
  335. package/dist/components/PageView.js.map +1 -1
  336. package/dist/components/ResponsiveImage.js +18 -20
  337. package/dist/components/ResponsiveImage.js.map +1 -1
  338. package/dist/components/onderOffset.d.ts +13 -0
  339. package/dist/components/onderOffset.js +74 -0
  340. package/dist/components/onderOffset.js.map +1 -0
  341. package/dist/components/site/Bedrijfsnummers.d.ts +9 -0
  342. package/dist/components/site/Bedrijfsnummers.js +12 -0
  343. package/dist/components/site/Bedrijfsnummers.js.map +1 -0
  344. package/dist/components/site/SiteFooter.d.ts +6 -1
  345. package/dist/components/site/SiteFooter.js +62 -9
  346. package/dist/components/site/SiteFooter.js.map +1 -1
  347. package/dist/components/site/SiteHeader.d.ts +15 -0
  348. package/dist/components/site/SiteHeader.js +70 -0
  349. package/dist/components/site/SiteHeader.js.map +1 -0
  350. package/dist/components/site/SiteNav.d.ts +2 -0
  351. package/dist/components/site/SiteNav.js +29 -5
  352. package/dist/components/site/SiteNav.js.map +1 -1
  353. package/dist/demo/DemoStudio.js +2 -2
  354. package/dist/demo/DemoStudio.js.map +1 -1
  355. package/dist/demo/demoStore.d.ts +13 -0
  356. package/dist/demo/demoStore.js +36 -0
  357. package/dist/demo/demoStore.js.map +1 -1
  358. package/dist/editor/EditorProvider.js +15 -4
  359. package/dist/editor/EditorProvider.js.map +1 -1
  360. package/dist/firebase/functionsClient.js +5 -1
  361. package/dist/firebase/functionsClient.js.map +1 -1
  362. package/dist/index.d.ts +5 -1
  363. package/dist/index.js +20 -1
  364. package/dist/index.js.map +1 -1
  365. package/dist/media/ImageContext.d.ts +17 -0
  366. package/dist/media/ImageContext.js +65 -20
  367. package/dist/media/ImageContext.js.map +1 -1
  368. package/dist/media/altInHtml.d.ts +9 -0
  369. package/dist/media/altInHtml.js +17 -0
  370. package/dist/media/altInHtml.js.map +1 -0
  371. package/dist/media/srcset.d.ts +12 -0
  372. package/dist/media/srcset.js +13 -0
  373. package/dist/media/srcset.js.map +1 -0
  374. package/dist/modules/builtins.d.ts +1 -0
  375. package/dist/modules/builtins.js +22 -9
  376. package/dist/modules/builtins.js.map +1 -1
  377. package/dist/modules/consent/ConsentBanner.d.ts +5 -0
  378. package/dist/modules/consent/ConsentBanner.js +8 -7
  379. package/dist/modules/consent/ConsentBanner.js.map +1 -1
  380. package/dist/modules/consent/standaard.d.ts +12 -0
  381. package/dist/modules/consent/standaard.js +10 -0
  382. package/dist/modules/consent/standaard.js.map +1 -0
  383. package/dist/modules/consent/useConsent.d.ts +4 -0
  384. package/dist/modules/consent/useConsent.js +30 -1
  385. package/dist/modules/consent/useConsent.js.map +1 -1
  386. package/dist/modules/shop/blocks/Cart.js +5 -3
  387. package/dist/modules/shop/blocks/Cart.js.map +1 -1
  388. package/dist/modules/shop/blocks/Checkout.js +56 -35
  389. package/dist/modules/shop/blocks/Checkout.js.map +1 -1
  390. package/dist/modules/shop/blocks/Donation.js +4 -4
  391. package/dist/modules/shop/blocks/Donation.js.map +1 -1
  392. package/dist/modules/shop/blocks/ProductDetail.js +19 -3
  393. package/dist/modules/shop/blocks/ProductDetail.js.map +1 -1
  394. package/dist/modules/shop/blocks/ProductGrid.d.ts +3 -1
  395. package/dist/modules/shop/blocks/ProductGrid.js +8 -4
  396. package/dist/modules/shop/blocks/ProductGrid.js.map +1 -1
  397. package/dist/modules/shop/blocks/ShopCategories.js +4 -3
  398. package/dist/modules/shop/blocks/ShopCategories.js.map +1 -1
  399. package/dist/modules/shop/lib.d.ts +4 -0
  400. package/dist/modules/shop/lib.js +14 -0
  401. package/dist/modules/shop/lib.js.map +1 -1
  402. package/dist/modules/shop/settings.d.ts +3 -0
  403. package/dist/modules/shop/settings.js +14 -0
  404. package/dist/modules/shop/settings.js.map +1 -1
  405. package/dist/modules/shop/strings.d.ts +4 -0
  406. package/dist/modules/shop/strings.js +8 -0
  407. package/dist/modules/shop/strings.js.map +1 -1
  408. package/dist/next/envCheck.d.ts +42 -0
  409. package/dist/next/envCheck.js +106 -0
  410. package/dist/next/envCheck.js.map +1 -0
  411. package/dist/next/index.cjs +185 -2
  412. package/dist/next/index.d.ts +2 -0
  413. package/dist/next/index.js +8 -1
  414. package/dist/next/index.js.map +1 -1
  415. package/dist/next/securityHeaders.d.ts +36 -0
  416. package/dist/next/securityHeaders.js +74 -0
  417. package/dist/next/securityHeaders.js.map +1 -0
  418. package/dist/patterns/builtins.d.ts +7 -0
  419. package/dist/patterns/builtins.js +138 -3
  420. package/dist/patterns/builtins.js.map +1 -1
  421. package/dist/releaseNotes.js +148 -0
  422. package/dist/releaseNotes.js.map +1 -1
  423. package/dist/render/PublishedPage.d.ts +2 -1
  424. package/dist/render/PublishedPage.js +10 -4
  425. package/dist/render/PublishedPage.js.map +1 -1
  426. package/dist/schema/blocks.d.ts +473 -0
  427. package/dist/schema/blocks.js +105 -5
  428. package/dist/schema/blocks.js.map +1 -1
  429. package/dist/schema/business.d.ts +118 -0
  430. package/dist/schema/business.js +75 -0
  431. package/dist/schema/business.js.map +1 -0
  432. package/dist/schema/fields.d.ts +2 -1
  433. package/dist/schema/fields.js.map +1 -1
  434. package/dist/schema/forms.d.ts +18 -0
  435. package/dist/schema/forms.js +18 -3
  436. package/dist/schema/forms.js.map +1 -1
  437. package/dist/schema/mail.d.ts +10 -0
  438. package/dist/schema/mail.js +7 -0
  439. package/dist/schema/mail.js.map +1 -1
  440. package/dist/schema/settings.d.ts +103 -0
  441. package/dist/schema/settings.js +24 -3
  442. package/dist/schema/settings.js.map +1 -1
  443. package/dist/schema/shop.d.ts +2 -0
  444. package/dist/schema/shop.js +4 -0
  445. package/dist/schema/shop.js.map +1 -1
  446. package/dist/schema/shopGeld.d.ts +1 -0
  447. package/dist/schema/shopGeld.js +1 -0
  448. package/dist/schema/shopGeld.js.map +1 -1
  449. package/dist/schema/siteConfig.d.ts +69 -1
  450. package/dist/schema/siteConfig.js +7 -2
  451. package/dist/schema/siteConfig.js.map +1 -1
  452. package/dist/server/blockData.d.ts +1 -1
  453. package/dist/server/blockData.js +74 -18
  454. package/dist/server/blockData.js.map +1 -1
  455. package/dist/server/cspRapport.d.ts +20 -0
  456. package/dist/server/cspRapport.js +56 -0
  457. package/dist/server/cspRapport.js.map +1 -0
  458. package/dist/server/fonts.d.ts +3 -0
  459. package/dist/server/fonts.js +39 -0
  460. package/dist/server/fonts.js.map +1 -0
  461. package/dist/server/index.d.ts +3 -0
  462. package/dist/server/index.js +8 -0
  463. package/dist/server/index.js.map +1 -1
  464. package/dist/server/sanitize.js +2 -0
  465. package/dist/server/sanitize.js.map +1 -1
  466. package/dist/settings/useSiteSettings.js +4 -1
  467. package/dist/settings/useSiteSettings.js.map +1 -1
  468. package/dist/starters/starters.d.ts +69 -0
  469. package/dist/starters/starters.js +171 -0
  470. package/dist/starters/starters.js.map +1 -0
  471. package/dist/styles.css +1181 -212
  472. package/dist/theme/color.d.ts +10 -0
  473. package/dist/theme/color.js +17 -1
  474. package/dist/theme/color.js.map +1 -1
  475. package/dist/theme/fontFallback.d.ts +23 -0
  476. package/dist/theme/fontFallback.js +58 -0
  477. package/dist/theme/fontFallback.js.map +1 -0
  478. package/dist/theme/fonts.d.ts +11 -0
  479. package/dist/theme/fonts.js +16 -0
  480. package/dist/theme/fonts.js.map +1 -0
  481. package/dist/version.js +1 -1
  482. package/package.json +5 -4
package/dist/styles.css CHANGED
@@ -250,9 +250,7 @@
250
250
  .xicms-ve__shell {
251
251
  display: contents;
252
252
  }
253
- .xicms-ve__title {
254
- font-size: 0.95rem;
255
- }
253
+
256
254
  .xicms-ve__path {
257
255
  font-size: 0.8rem;
258
256
  opacity: 0.7;
@@ -278,6 +276,8 @@
278
276
  }
279
277
  .xicms-ve__histbtn {
280
278
  appearance: none;
279
+ display: inline-grid;
280
+ place-items: center;
281
281
  border: 1px solid rgba(255, 255, 255, 0.25);
282
282
  border-radius: 6px;
283
283
  background: transparent;
@@ -330,15 +330,7 @@
330
330
  onvindbaar. Het paneel positioneert zichzelf nu als vaste lade (hieronder). */
331
331
  display: contents;
332
332
  }
333
- .xicms-ve__canvas {
334
- overflow: auto;
335
- padding: 1.5rem;
336
- background: #fff;
337
- background-image:
338
- linear-gradient(rgba(0, 0, 0, 0.03) 1px, transparent 1px),
339
- linear-gradient(90deg, rgba(0, 0, 0, 0.03) 1px, transparent 1px);
340
- background-size: 24px 24px;
341
- }
333
+
342
334
  .xicms-ve__panel {
343
335
  overflow-x: hidden; /* een net-te-breed veld mag de lade niet horizontaal laten scrollen */
344
336
  /* Vaste lade rechts, van onder de editorbalk tot aan de demo-balk (of de schermrand).
@@ -354,7 +346,7 @@
354
346
  /* Boven de blokknoppen en potloodjes (10004-10005): die horen bij de pagina en moeten onder
355
347
  de lade doorlopen, niet er bovenop zweven. */
356
348
  z-index: 10007;
357
- box-shadow: -12px 0 32px rgba(15, 23, 42, 0.18);
349
+ box-shadow: -12px 0 32px rgba(28, 25, 23, 0.18);
358
350
  overflow: auto;
359
351
  border-left: 1px solid var(--color-border, #e2e8f0);
360
352
  background: var(--color-background-card, #fff);
@@ -393,9 +385,6 @@
393
385
  font-size: 0.9rem;
394
386
  color: var(--color-text-secondary, #475569);
395
387
  }
396
- .xicms-ve__inserter-select {
397
- width: 16rem;
398
- }
399
388
 
400
389
  /* Responsief: op telefoon/smal tablet stackt de editor (canvas boven, instellingen als onderpaneel)
401
390
  en wrappen de balk en de toevoeg-rij, zodat inline bewerken ook op kleine schermen werkt. */
@@ -409,9 +398,7 @@
409
398
  order: 3;
410
399
  flex-basis: 100%;
411
400
  }
412
- .xicms-ve__canvas {
413
- padding: 1rem;
414
- }
401
+
415
402
  /* Zolang de onder-lade open is heeft de publiceerknop geen plek: hij lag er qua z-index
416
403
  ónder (onklikbaar) en erboven zou hij het formulier afdekken. De lade heeft zijn eigen
417
404
  ✓ Opgeslagen/✕ Sluiten; publiceren doe je daarna — de knop komt terug zodra de lade sluit. */
@@ -425,82 +412,31 @@
425
412
  left: 0;
426
413
  right: 0;
427
414
  width: auto;
428
- max-height: 60vh;
415
+ max-height: 70vh;
429
416
  border-left: 0;
430
- border-top: 2px solid #cbd5e1;
431
- box-shadow: 0 -12px 32px rgba(15, 23, 42, 0.18);
417
+ /* 8.11: een echte "bottom sheet": afgeronde bovenkant en een greep, zoals op een telefoon
418
+ gebruikelijk — geen kale grijze streep. */
419
+ border-top: 0;
420
+ border-radius: 16px 16px 0 0;
421
+ padding-top: 1.4rem;
422
+ box-shadow: 0 -12px 40px rgba(28, 25, 23, 0.22);
423
+ }
424
+ .xicms-ve__panel::before {
425
+ content: "";
426
+ position: sticky;
427
+ top: -0.9rem;
428
+ display: block;
429
+ width: 40px;
430
+ height: 4px;
431
+ margin: -0.9rem auto 0.5rem;
432
+ border-radius: 999px;
433
+ background: color-mix(in srgb, currentColor 22%, transparent);
432
434
  }
433
435
  .xicms-ve__inserter {
434
436
  flex-wrap: wrap;
435
437
  }
436
- /* Touch-raakdoelen: de blok-toolbarknoppen (✏️ ↑ ↓ ⎘ 🗑) waren op een telefoon te klein om
437
- betrouwbaar te raken (WCAG raakdoel ≥ 44px op mobiel). */
438
- .xicms-ve-block__toolbar button {
439
- min-width: 40px;
440
- min-height: 40px;
441
- font-size: 1rem;
442
- }
443
- .xicms-ve__inserter-select {
444
- width: 100%;
445
- }
446
- }
447
- /* Blok-frame in het canvas */
448
- .xicms-ve-block {
449
- position: relative;
450
- outline: 2px solid transparent;
451
- outline-offset: 2px;
452
- border-radius: 4px;
453
- transition: outline-color 0.12s;
454
- }
455
- .xicms-ve-block:hover {
456
- outline-color: rgba(79, 70, 229, 0.35);
457
- }
458
- .xicms-ve-block.is-selected {
459
- outline-color: var(--xicms-primary, #4f46e5);
460
- }
461
- .xicms-ve-block__select {
462
- position: absolute;
463
- inset: 0;
464
- z-index: 1;
465
- background: transparent;
466
- border: 0;
467
- cursor: pointer;
468
- }
469
- .xicms-ve-block.is-selected .xicms-ve-block__select {
470
- /* Geselecteerd: laat interactie met de inhoud toe (de editor staat in het zijpaneel). */
471
- pointer-events: none;
472
- }
473
- .xicms-ve-block__content {
474
- position: relative;
475
- }
476
- /* Drag-and-drop herordenen: greep + invoeg-indicator. */
477
- .xicms-ve-block__drag {
478
- cursor: grab;
479
- letter-spacing: -2px;
480
- }
481
- .xicms-ve-block__drag:active {
482
- cursor: grabbing;
483
- }
484
- .xicms-ve-block.is-dragging {
485
- opacity: 0.45;
486
- }
487
- .xicms-ve-block.is-drop-before::before,
488
- .xicms-ve-block.is-drop-after::after {
489
- content: "";
490
- position: absolute;
491
- left: 0;
492
- right: 0;
493
- height: 3px;
494
- border-radius: 2px;
495
- background: var(--xicms-primary, #4f46e5);
496
- z-index: 4;
497
- }
498
- .xicms-ve-block.is-drop-before::before {
499
- top: -6px;
500
- }
501
- .xicms-ve-block.is-drop-after::after {
502
- bottom: -6px;
503
438
  }
439
+
504
440
  /* Inline (in-canvas) bewerkbaar tekstveld in de visuele editor.
505
441
  In rust bewust ONZICHTBAAR: het blok zou anders als een formulier vol stippellijnen lezen, en
506
442
  dan zie je de pagina niet meer. Het potloodje ernaast wijst het veld aan; de omlijning verschijnt
@@ -513,14 +449,14 @@
513
449
  }
514
450
  .xicms-ve-inline:hover,
515
451
  .xicms-ve-inline.is-hover {
516
- outline-color: rgba(79, 70, 229, 0.45);
517
- background: rgba(79, 70, 229, 0.05);
452
+ outline-color: rgba(var(--xicms-tool-accent-rgb, 79, 70, 229), 0.45);
453
+ background: rgba(var(--xicms-tool-accent-rgb, 79, 70, 229), 0.05);
518
454
  }
519
455
  .xicms-ve-inline.is-editing {
520
456
  cursor: text;
521
457
  outline: 2px solid var(--xicms-primary, #4f46e5);
522
458
  outline-offset: 3px;
523
- background: rgba(79, 70, 229, 0.06);
459
+ background: rgba(var(--xicms-tool-accent-rgb, 79, 70, 229), 0.06);
524
460
  }
525
461
  /* Het potlood: de bewuste stap tussen "dit kán" en "ik bewerk het nu". Zo licht mogelijk — geen
526
462
  rand, geen schaduw, geen wit schijfje: een blok met tien velden moet geen kerstboom worden.
@@ -538,7 +474,7 @@
538
474
  /* Het canvas toont de site van de klant: die kan wit zijn of een donkere foto. Eén vaste kleur
539
475
  verdwijnt dus altijd ergens. Een donker, halfdoorzichtig schijfje met een wit potlood houdt
540
476
  zich op allebei staande — licht genoeg om niet op te dringen, donker genoeg om te zien. */
541
- background: rgba(15, 23, 42, 0.4);
477
+ background: rgba(28, 25, 23, 0.4);
542
478
  color: #fff;
543
479
  cursor: pointer;
544
480
  opacity: 0.5;
@@ -550,10 +486,10 @@
550
486
  /* Donker blijven, niet de merkkleur: `--xicms-primary` is van de klant en kan licht zijn
551
487
  (goud, lime) — dan werd dit wit-op-licht en "verdween" de knop precies bij het aanwijzen.
552
488
  Gereedschap houdt zijn eigen kleuren (zie het EditBar-commentaar). */
553
- background: rgba(15, 23, 42, 0.92);
489
+ background: rgba(28, 25, 23, 0.92);
554
490
  }
555
491
  .xicms-ve-pencil:focus-visible {
556
- outline: 2px solid #a5b4fc;
492
+ outline: 2px solid var(--xicms-tool-focus, #a5b4fc);
557
493
  outline-offset: 1px;
558
494
  }
559
495
  /* Het potlood van het veld dat je NU bewerkt wordt een groen vinkje: "het is goed, klaar met dit
@@ -594,7 +530,7 @@
594
530
  background: rgba(255, 255, 255, 0.16);
595
531
  }
596
532
  .xicms-ve-fmtbar button:focus-visible {
597
- outline: 2px solid #a5b4fc;
533
+ outline: 2px solid var(--xicms-tool-focus, #a5b4fc);
598
534
  outline-offset: 1px;
599
535
  }
600
536
  .xicms-ve-fmtbar__sep {
@@ -603,6 +539,45 @@
603
539
  margin: 3px 4px;
604
540
  background: rgba(255, 255, 255, 0.25);
605
541
  }
542
+ /* 8.6: de werkbalk van de volledige editor op de site. */
543
+ .xicms-ve-fmtbar { flex-wrap: wrap; max-width: calc(100vw - 16px); }
544
+ .xicms-ve-fmtbar button.is-actief { background: rgba(255, 255, 255, 0.24); }
545
+ .xicms-ve-fmtbar button.xicms-ve-fmtbar__klaar {
546
+ margin-left: 4px;
547
+ padding: 0 12px;
548
+ background: #16a34a;
549
+ font-weight: 600;
550
+ }
551
+ .xicms-ve-fmtbar button.xicms-ve-fmtbar__klaar:hover { background: #15803d; }
552
+ .xicms-ve-fmtbar__tip {
553
+ padding: 0 6px 0 8px;
554
+ color: rgba(255, 255, 255, 0.6);
555
+ font-size: 0.75rem;
556
+ white-space: nowrap;
557
+ }
558
+ .xicms-ve-fmtbar__tip kbd {
559
+ padding: 0 4px;
560
+ border: 1px solid rgba(255, 255, 255, 0.35);
561
+ border-radius: 4px;
562
+ font: inherit;
563
+ }
564
+ @media (max-width: 640px) { .xicms-ve-fmtbar__tip { display: none; } }
565
+ /* Het bewerkvlak zelf: de tekst houdt de opmaak van de site (zelfde klassen als het origineel). */
566
+ .xicms-ve-rijk {
567
+ border-radius: 4px;
568
+ outline: 2px solid var(--xicms-primary, #4f46e5);
569
+ outline-offset: 3px;
570
+ background: rgba(var(--xicms-tool-accent-rgb, 79, 70, 229), 0.04);
571
+ }
572
+ .xicms-ve-rijk .ProseMirror { outline: none; min-height: 2.5em; cursor: text; }
573
+ .xicms-ve-rijk .ProseMirror img { max-width: 100%; height: auto; }
574
+ .xicms-ve-rijk .ProseMirror img.ProseMirror-selectednode { outline: 3px solid var(--xicms-primary, #4f46e5); }
575
+ .xicms-ve-rijk .ProseMirror table { border-collapse: collapse; width: 100%; }
576
+ .xicms-ve-rijk .ProseMirror th,
577
+ .xicms-ve-rijk .ProseMirror td { border: 1px solid rgba(100, 116, 139, 0.45); padding: 0.35em 0.5em; vertical-align: top; min-width: 3em; }
578
+ .xicms-ve-rijk .ProseMirror th p,
579
+ .xicms-ve-rijk .ProseMirror td p { margin: 0; }
580
+ .xicms-ve-rijk .ProseMirror .selectedCell { background: rgba(var(--xicms-tool-accent-rgb, 79, 70, 229), 0.1); }
606
581
  /* Inline afbeelding vervangen (visuele editor): icoontje over het beeld van het geselecteerde blok. */
607
582
  .xicms-ve-img { line-height: 0; }
608
583
  .xicms-ve-img__btn {
@@ -640,57 +615,7 @@
640
615
  border-radius: 6px;
641
616
  }
642
617
  .xicms-ve-img:hover { outline-style: solid; }
643
- .xicms-ve-block__toolbar {
644
- position: absolute;
645
- top: 0;
646
- right: 0;
647
- z-index: 2;
648
- display: none;
649
- align-items: center;
650
- gap: 0.15rem;
651
- padding: 0.2rem 0.35rem;
652
- background: #0f172a;
653
- color: #fff;
654
- border-radius: 0 0 0 8px;
655
- font-size: 0.8rem;
656
- }
657
- .xicms-ve-block:hover .xicms-ve-block__toolbar,
658
- .xicms-ve-block.is-selected .xicms-ve-block__toolbar {
659
- display: flex;
660
- }
661
- .xicms-ve-block__label {
662
- opacity: 0.8;
663
- margin-right: 0.4rem;
664
- }
665
- .xicms-ve-block__toolbar button {
666
- background: none;
667
- border: 0;
668
- color: #fff;
669
- cursor: pointer;
670
- padding: 0.1rem 0.3rem;
671
- border-radius: 4px;
672
- font-size: 0.85rem;
673
- }
674
- .xicms-ve-block__toolbar button:hover:not(:disabled) {
675
- background: rgba(255, 255, 255, 0.15);
676
- }
677
- .xicms-ve-block__toolbar button:disabled {
678
- opacity: 0.35;
679
- cursor: default;
680
- }
681
- @media (max-width: 720px) {
682
- /* Op mobiel is er geen hover — de toolbar toont alleen bij selectie, en de brede knoppenrij
683
- (5 knoppen × 40px raakdoel) besloeg dan bijna de volledige breedte en viel absoluut-gepositioneerd
684
- over de eerste regel van de bloktekst heen (moeilijk te lezen, en per ongeluk 🗑 raken lag voor
685
- de hand). In-flow boven het blok i.p.v. eroverheen. Ná de losstaande regel hierboven gezet zodat
686
- hij in de cascade wint (media queries geven zelf geen extra specificiteit). */
687
- .xicms-ve-block__toolbar {
688
- position: static;
689
- flex-wrap: wrap;
690
- border-radius: 8px;
691
- margin-bottom: 0.35rem;
692
- }
693
- }
618
+
694
619
 
695
620
  /* Foutkaart voor een block dat niet kon renderen (alleen zichtbaar in de editor-preview). */
696
621
  .xicms-block-error {
@@ -759,14 +684,6 @@
759
684
  .xicms-card:has(a):hover { transform: none; }
760
685
  }
761
686
 
762
- /* Bewerkbare elementen in edit-modus */
763
- .xicms-editable {
764
- outline: 2px dashed var(--xicms-accent, #4f46e5);
765
- outline-offset: 3px;
766
- border-radius: 4px;
767
- cursor: text;
768
- }
769
-
770
687
  /* Zwevende werkbalk voor editors */
771
688
  /*
772
689
  * De beheerbalk ZWEEFT ONDERAAN, gecentreerd — en in beide toestanden op precies dezelfde plek.
@@ -807,7 +724,7 @@
807
724
  * doorschijnend glas (meer verzadiging in de blur, minder dekking) en de schaduw werd zachter,
808
725
  * zodat het als gereedschap ernaast zweeft in plaats van als een blok erbovenop te liggen.
809
726
  */
810
- background: rgba(30, 41, 59, 0.72);
727
+ background: rgba(41, 37, 36, 0.72);
811
728
  -webkit-backdrop-filter: saturate(1.8) blur(16px);
812
729
  backdrop-filter: saturate(1.8) blur(16px);
813
730
  color: #fff;
@@ -915,7 +832,7 @@
915
832
  color: #fff;
916
833
  }
917
834
  .xicms-editbar__btn:focus-visible {
918
- outline: 2px solid #a5b4fc;
835
+ outline: 2px solid var(--xicms-tool-focus, #a5b4fc);
919
836
  outline-offset: 2px;
920
837
  }
921
838
  /*
@@ -1022,7 +939,8 @@
1022
939
  /* Knopvarianten (gedeeld door hero/cta) */
1023
940
  .xicms-btn--primary {
1024
941
  background: var(--xicms-primary, #4f46e5);
1025
- color: #fff;
942
+ /* 8.12: tekstkleur rekent mee (wit op donker, donker op licht) — wit op een gele merkkleur was onleesbaar. */
943
+ color: var(--xicms-on-primary, #fff);
1026
944
  }
1027
945
  .xicms-btn--secondary {
1028
946
  background: var(--xicms-accent, #6366f1);
@@ -1162,6 +1080,12 @@
1162
1080
  font-size: 1.2rem;
1163
1081
  opacity: 0.85;
1164
1082
  margin: 0;
1083
+ /* 8.12: een ondertitel leest prettig tot ±60 tekens per regel; daarboven liep hij op een breed
1084
+ scherm in één lange streep van rand tot rand. */
1085
+ max-width: 60ch;
1086
+ }
1087
+ .xicms-hero[data-align="center"] .xicms-hero__sub {
1088
+ margin-inline: auto;
1165
1089
  }
1166
1090
  .xicms-hero__buttons,
1167
1091
  .xicms-cta__buttons {
@@ -1215,6 +1139,32 @@
1215
1139
  .xicms-richtext > :first-child {
1216
1140
  margin-top: 0;
1217
1141
  }
1142
+ /* 8.6: lijsten, citaten en lijnen in rich text. De reset van het thema haalt bolletjes en inspringing
1143
+ weg, dus een opsomming uit de editor stond op de site als losse regels. `:where()` houdt de
1144
+ specificiteit laag: een site die zelf lijsten opmaakt, wint. */
1145
+ .xicms-richtext :where(ul, ol) {
1146
+ margin: 0 0 1em;
1147
+ padding-left: 1.4em;
1148
+ }
1149
+ .xicms-richtext :where(ul) { list-style: disc; }
1150
+ .xicms-richtext :where(ol) { list-style: decimal; }
1151
+ .xicms-richtext :where(li) { margin: 0.2em 0; }
1152
+ /* Gecentreerd blok: bolletjes bij de tekst, niet los in de linkermarge. */
1153
+ .xicms-block--align-center .xicms-richtext :where(ul, ol) { list-style-position: inside; padding-left: 0; }
1154
+ /* TipTap zet <p> in elke <li>; als blok zou het bolletje dan op een eigen regel staan. */
1155
+ .xicms-block--align-center .xicms-richtext :where(li > p) { display: inline; }
1156
+ .xicms-richtext :where(li > p) { margin: 0; }
1157
+ .xicms-richtext :where(blockquote) {
1158
+ margin: 1em 0;
1159
+ padding: 0.2em 0 0.2em 1em;
1160
+ border-left: 3px solid var(--xicms-primary, #4f46e5);
1161
+ font-style: italic;
1162
+ }
1163
+ .xicms-richtext :where(hr) {
1164
+ margin: 1.5em 0;
1165
+ border: 0;
1166
+ border-top: 1px solid rgba(100, 116, 139, 0.35);
1167
+ }
1218
1168
  .xicms-richtext a {
1219
1169
  color: var(--xicms-primary, #4f46e5);
1220
1170
  }
@@ -1338,14 +1288,7 @@
1338
1288
  .xicms-lightbox__nav--prev { left: 0.4rem; }
1339
1289
  .xicms-lightbox__nav--next { right: 0.4rem; }
1340
1290
  }
1341
- .xicms-cta {
1342
- text-align: center;
1343
- padding: 2.5rem 1.25rem;
1344
- background: var(--xicms-bg, #f8fafc);
1345
- border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.1));
1346
- border-radius: var(--xicms-radius, 12px);
1347
- margin: 1.5rem 0;
1348
- }
1291
+
1349
1292
  .xicms-columns {
1350
1293
  display: grid;
1351
1294
  gap: 1.25rem;
@@ -1396,11 +1339,12 @@
1396
1339
  .xicms-form__success {
1397
1340
  padding: 1rem;
1398
1341
  border-radius: 10px;
1399
- background: #ecfdf5;
1400
- color: #065f46;
1342
+ /* 8.12: tokens, zodat de melding in donkere modus meekleurt. */
1343
+ background: color-mix(in srgb, var(--xicms-success-fg, #15803d) 12%, transparent);
1344
+ color: var(--xicms-success-fg, #065f46);
1401
1345
  }
1402
1346
  .xicms-form__error {
1403
- color: #dc2626;
1347
+ color: var(--xicms-danger-fg, #b91c1c);
1404
1348
  margin: 0;
1405
1349
  }
1406
1350
 
@@ -1541,24 +1485,10 @@
1541
1485
  font-size: 0.9rem;
1542
1486
  font-weight: 600;
1543
1487
  }
1544
- /* Radiogroep in formulieren. */
1488
+ /* Radiogroep in formulieren: sinds 8.0 een Astryx RadioList, die zijn eigen opmaak meebrengt.
1489
+ `.xicms-form__radios` blijft als stabiele haak op de container. */
1545
1490
  .xicms-form__radios {
1546
- border: 0;
1547
1491
  margin: 0;
1548
- padding: 0;
1549
- display: grid;
1550
- gap: 0.35rem;
1551
- }
1552
- .xicms-form__radios legend {
1553
- font-size: 0.9rem;
1554
- font-weight: 600;
1555
- margin-bottom: 0.25rem;
1556
- }
1557
- .xicms-form__radio {
1558
- display: flex;
1559
- align-items: center;
1560
- gap: 0.5rem;
1561
- font-size: 0.95rem;
1562
1492
  }
1563
1493
 
1564
1494
  /* Uitgelichte kaart (cards-blok). */
@@ -1967,19 +1897,89 @@
1967
1897
  .xicms-footer__bottom a {
1968
1898
  color: inherit;
1969
1899
  }
1900
+ /* 8.16: "KvK … · Btw …" direct naast het copyright; de Beheer-link blijft rechts. */
1901
+ .xicms-footer__nummers {
1902
+ margin-right: auto;
1903
+ }
1904
+
1905
+ /* "Website gemaakt door Xi Webdesign": één stille regel, erft de kleur en het
1906
+ font van de footer eromheen zodat hij op elke klantstijl past. */
1907
+ .xicms-footer__credit {
1908
+ display: flex;
1909
+ flex-wrap: wrap;
1910
+ align-items: center;
1911
+ gap: 0.15rem 0.5rem;
1912
+ margin-top: 1rem;
1913
+ padding-top: 0.85rem;
1914
+ border-top: 1px solid color-mix(in srgb, currentColor 12%, transparent);
1915
+ font-size: 0.78rem;
1916
+ line-height: 1.5;
1917
+ opacity: 0.6;
1918
+ }
1919
+ .xicms-footer__credit:hover {
1920
+ opacity: 0.85;
1921
+ }
1922
+ .xicms-footer__credit a {
1923
+ color: inherit;
1924
+ text-decoration: none;
1925
+ }
1926
+ .xicms-footer__credit-merk {
1927
+ display: inline-flex;
1928
+ align-items: center;
1929
+ gap: 0.4rem;
1930
+ font-weight: 650;
1931
+ }
1932
+ .xicms-footer__credit-merk svg {
1933
+ width: 0.95rem;
1934
+ height: 0.95rem;
1935
+ flex: none;
1936
+ }
1937
+ .xicms-footer__credit-merk:hover,
1938
+ .xicms-footer__credit-cta:hover {
1939
+ text-decoration: underline;
1940
+ text-underline-offset: 2px;
1941
+ }
1942
+ .xicms-footer__credit-cta {
1943
+ text-decoration: underline;
1944
+ text-underline-offset: 2px;
1945
+ text-decoration-color: color-mix(in srgb, currentColor 35%, transparent);
1946
+ }
1970
1947
 
1971
1948
  /* Embed-consent placeholder (video/kaart/booking zonder toestemming) */
1972
1949
  .xicms-embed-consent {
1973
1950
  display: grid;
1974
1951
  place-items: center;
1952
+ align-content: center;
1953
+ gap: 0.85rem;
1975
1954
  min-height: 160px;
1976
- padding: 1rem;
1955
+ padding: 1.25rem 1rem;
1977
1956
  border: 1px dashed var(--xicms-border-strong, rgba(0, 0, 0, 0.2));
1978
1957
  border-radius: var(--xicms-radius, 10px);
1979
1958
  background: var(--xicms-muted, rgba(0, 0, 0, 0.03));
1980
1959
  text-align: center;
1981
1960
  font-size: 0.9rem;
1982
1961
  }
1962
+ /* 8.16: uitleg + "Toestaan en laden" direct bij de video/kaart. */
1963
+ .xicms-embed-consent__tekst {
1964
+ max-width: 34rem;
1965
+ }
1966
+ .xicms-embed-consent__tekst p {
1967
+ margin: 0;
1968
+ }
1969
+ .xicms-embed-consent__titel {
1970
+ font-weight: 600;
1971
+ margin-bottom: 0.25rem !important;
1972
+ }
1973
+ .xicms-embed-consent__knoppen {
1974
+ display: flex;
1975
+ flex-wrap: wrap;
1976
+ justify-content: center;
1977
+ align-items: center;
1978
+ gap: 0.5rem 1rem;
1979
+ }
1980
+ .xicms-embed-consent__knoppen > * {
1981
+ white-space: nowrap;
1982
+ }
1983
1983
  /* Lichte preview-placeholder in de editor (geen echte iframe/script — mode="preview"-contract). */
1984
1984
  .xicms-embed-preview {
1985
1985
  min-height: 96px;
@@ -2346,7 +2346,8 @@
2346
2346
  position: fixed;
2347
2347
  left: 0;
2348
2348
  right: 0;
2349
- bottom: 0;
2349
+ /* 8.16: boven vaste balken onderaan (demobalk, belbalk, eigen CTA-balk) — gemeten door useOnderOffset. */
2350
+ bottom: var(--xicms-onder, 0px);
2350
2351
  z-index: 9995;
2351
2352
  padding: clamp(0.75rem, 2vw, 1.25rem);
2352
2353
  display: flex;
@@ -2380,7 +2381,7 @@
2380
2381
  .xicms-consent__reopen {
2381
2382
  position: fixed;
2382
2383
  left: 0.9rem;
2383
- bottom: 0.9rem;
2384
+ bottom: calc(0.9rem + var(--xicms-onder, 0px));
2384
2385
  z-index: 9994;
2385
2386
  width: 2.75rem; /* ≥44px raakdoel */
2386
2387
  height: 2.75rem;
@@ -2579,8 +2580,8 @@
2579
2580
  border-radius: var(--xicms-radius, 10px);
2580
2581
  font: inherit;
2581
2582
  }
2582
- .xicms-widget--cta { background: var(--xicms-primary, #4f46e5); color: #fff; }
2583
- .xicms-widget--cta .xicms-widget__title { color: #fff; }
2583
+ .xicms-widget--cta { background: var(--xicms-primary, #4f46e5); color: var(--xicms-on-primary, #fff); }
2584
+ .xicms-widget--cta .xicms-widget__title { color: var(--xicms-on-primary, #fff); }
2584
2585
  .xicms-widget__grid { display: grid; gap: 0.4rem; }
2585
2586
  .xicms-widget__grid[data-cols="2"] { grid-template-columns: repeat(2, 1fr); }
2586
2587
  .xicms-widget__grid[data-cols="3"] { grid-template-columns: repeat(3, 1fr); }
@@ -2776,7 +2777,7 @@
2776
2777
  /* Zwevende WhatsApp-knop. */
2777
2778
  .xicms-whatsapp {
2778
2779
  position: fixed;
2779
- bottom: 1.1rem;
2780
+ bottom: calc(1.1rem + var(--xicms-onder, 0px));
2780
2781
  z-index: 9990;
2781
2782
  display: inline-flex;
2782
2783
  align-items: center;
@@ -3197,7 +3198,7 @@
3197
3198
  gap: 2px;
3198
3199
  padding: 2px;
3199
3200
  border-radius: 999px;
3200
- background: rgba(15, 23, 42, 0.42);
3201
+ background: rgba(28, 25, 23, 0.42);
3201
3202
  -webkit-backdrop-filter: blur(6px);
3202
3203
  backdrop-filter: blur(6px);
3203
3204
  opacity: 0.5;
@@ -3206,7 +3207,7 @@
3206
3207
  .xicms-ve-blokknoppen:hover,
3207
3208
  .xicms-ve-blokknoppen:focus-within {
3208
3209
  opacity: 1;
3209
- background: rgba(15, 23, 42, 0.9);
3210
+ background: rgba(28, 25, 23, 0.9);
3210
3211
  }
3211
3212
  .xicms-ve-blokknop {
3212
3213
  appearance: none;
@@ -3226,7 +3227,7 @@
3226
3227
  background: rgba(255, 255, 255, 0.22);
3227
3228
  }
3228
3229
  .xicms-ve-blokknop:focus-visible {
3229
- outline: 2px solid #a5b4fc;
3230
+ outline: 2px solid var(--xicms-tool-focus, #a5b4fc);
3230
3231
  outline-offset: 1px;
3231
3232
  }
3232
3233
  /* De rest van het gereedschap (verplaatsen, dupliceren, verwijderen) toont zich bij aanwijzen,
@@ -3285,22 +3286,26 @@
3285
3286
  }
3286
3287
 
3287
3288
  /*
3288
- * Rood en onderstreept = dit staat nog NIET op de live site.
3289
+ * Gemarkeerd (zachte tint + stippellijn, tot 8.11 rood) = dit staat nog NIET op de live site.
3289
3290
  *
3290
3291
  * Bewust een onderstreping en niet alleen kleur: kleur alleen is geen boodschap voor wie
3291
3292
  * kleurenblind is, en dit is te belangrijk om aan kleur alleen op te hangen. De streep loopt onder
3292
3293
  * de tekst door zonder de regelhoogte te veranderen, zodat de pagina niet verspringt zodra je iets
3293
3294
  * wijzigt — anders zou de markering zelf de layout laten dansen tijdens het typen.
3294
3295
  */
3296
+ /* 8.11: nog niet live = een subtiele markering, niet meer rode tekst met een golflijn. Dat las
3297
+ als een spelfout of foutmelding, was op donkere vlakken onleesbaar en overschreef de typografie
3298
+ van de site. Nu: een zachte achtergrondtint en een stippellijn eronder, in de gereedschapskleur —
3299
+ de tekst zelf houdt zijn eigen kleur. */
3295
3300
  .xicms-ve-gewijzigd {
3296
- color: #b91c1c !important;
3297
- text-decoration: underline wavy #b91c1c 1px;
3298
- text-underline-offset: 3px;
3301
+ background: color-mix(in srgb, var(--xicms-tool-accent, #4f46e5) 9%, transparent);
3302
+ text-decoration: underline dotted color-mix(in srgb, var(--xicms-tool-accent, #4f46e5) 70%, transparent) 2px;
3303
+ text-underline-offset: 4px;
3304
+ border-radius: 3px;
3299
3305
  }
3300
- /* Een heel nieuw of verplaatst blok: een streep in de kantlijn i.p.v. alle tekst rood. Alles rood
3301
- kleuren van een blok dat in zijn geheel nieuw is, is geen informatie maar een rode lap. */
3306
+ /* Een heel nieuw of verplaatst blok: een streep in de kantlijn i.p.v. alle tekst gemarkeerd. */
3302
3307
  .xicms-ve-nieuw {
3303
- box-shadow: inset 3px 0 0 0 #b91c1c;
3308
+ box-shadow: inset 3px 0 0 0 var(--xicms-tool-accent, #4f46e5);
3304
3309
  }
3305
3310
 
3306
3311
  /*
@@ -3314,8 +3319,9 @@
3314
3319
  /* Eénmalige starthint van de bewerkmodus: vast onder de balk, midden, weg te klikken. */
3315
3320
  .xicms-ve-starthint {
3316
3321
  position: fixed;
3317
- /* Vlak onder het zwevende pilletje (10px top + ±34px hoogte + 6px lucht). */
3318
- top: 50px;
3322
+ /* 8.11: boven de balk, die sinds 7.22 ONDERAAN staat. Met `top: 50px` (nog van de balk bovenin)
3323
+ lag de hint over het menu van de site — precies waar je als eerste naar kijkt. */
3324
+ bottom: calc(64px + var(--xicms-bottombar, 0px));
3319
3325
  left: 50%;
3320
3326
  transform: translateX(-50%);
3321
3327
  z-index: 10006;
@@ -3325,11 +3331,11 @@
3325
3331
  max-width: min(92vw, 560px);
3326
3332
  padding: 0.6rem 0.9rem;
3327
3333
  border-radius: 12px;
3328
- background: rgba(15, 23, 42, 0.94);
3334
+ background: rgba(28, 25, 23, 0.94);
3329
3335
  color: #fff;
3330
3336
  font-size: 0.85rem;
3331
3337
  line-height: 1.45;
3332
- box-shadow: 0 12px 32px rgba(15, 23, 42, 0.35);
3338
+ box-shadow: 0 12px 32px rgba(28, 25, 23, 0.35);
3333
3339
  }
3334
3340
  .xicms-ve-starthint button {
3335
3341
  flex: none;
@@ -3345,7 +3351,9 @@
3345
3351
 
3346
3352
  /* Vervolg-actie in een toast ("Bekijk als bezoeker →"). */
3347
3353
  .xicms-toast__actie {
3348
- display: inline-block;
3354
+ /* Eigen regel onder de titel (8.2): inline plakte "Ongedaan maken" tegen de tekst aan. */
3355
+ display: block;
3356
+ width: fit-content;
3349
3357
  margin-top: 0.45rem;
3350
3358
  padding: 0.3rem 0.7rem;
3351
3359
  border: 1px solid currentColor;
@@ -3400,16 +3408,16 @@
3400
3408
  transition: background 0.15s ease, transform 0.15s ease;
3401
3409
  }
3402
3410
  .xicms-ve-publiceer.is-klaar {
3403
- background: #2563eb;
3411
+ background: var(--xicms-tool-accent, #4f46e5);
3404
3412
  color: #fff;
3405
3413
  cursor: pointer;
3406
3414
  }
3407
3415
  .xicms-ve-publiceer.is-klaar:hover {
3408
- background: #1d4ed8;
3416
+ background: color-mix(in srgb, var(--xicms-tool-accent, #4f46e5) 85%, #000);
3409
3417
  transform: translateY(-1px);
3410
3418
  }
3411
3419
  .xicms-ve-publiceer:focus-visible {
3412
- outline: 2px solid #a5b4fc;
3420
+ outline: 2px solid var(--xicms-tool-focus, #a5b4fc);
3413
3421
  outline-offset: 3px;
3414
3422
  }
3415
3423
  .xicms-ve-publiceer__label {
@@ -3431,7 +3439,7 @@
3431
3439
  padding: 0.45rem 0.9rem;
3432
3440
  border: 1px solid rgba(255, 255, 255, 0.14);
3433
3441
  border-radius: 999px;
3434
- background: rgba(15, 23, 42, 0.75);
3442
+ background: rgba(28, 25, 23, 0.75);
3435
3443
  color: rgba(255, 255, 255, 0.85);
3436
3444
  font: inherit;
3437
3445
  font-size: 0.78rem;
@@ -3444,7 +3452,7 @@
3444
3452
  color: #fff;
3445
3453
  }
3446
3454
  .xicms-ve-verwerp:focus-visible {
3447
- outline: 2px solid #a5b4fc;
3455
+ outline: 2px solid var(--xicms-tool-focus, #a5b4fc);
3448
3456
  outline-offset: 2px;
3449
3457
  }
3450
3458
  @media (min-width: 721px) {
@@ -3462,7 +3470,6 @@
3462
3470
  opacity: 0.9;
3463
3471
  }
3464
3472
 
3465
-
3466
3473
  /* ── Hoofdnavigatie (SiteNav, 7.24) ───────────────────────────────────────────
3467
3474
  * Unstyled-by-default: alleen de structuur die een submenu nodig heeft. Kleuren/afstanden komen
3468
3475
  * uit de site zelf (.site-header nav a in de template) of uit een eigen `.xicms-nav`-laag. */
@@ -3571,3 +3578,965 @@
3571
3578
  background: #f59e0b;
3572
3579
  box-shadow: 0 0 0 2px #0f172a;
3573
3580
  }
3581
+
3582
+ /* Raakdoelen op touch (8.2). Het potlood (18px, half doorzichtig) en de blokknoppen (26px) waren op
3583
+ een telefoon of tablet nauwelijks te raken; de oude touch-regel gold nog voor een toolbar die niet
3584
+ meer bestaat. Het zichtbare formaat blijft gelijk (de posities worden in JS op die maat berekend);
3585
+ een onzichtbare ::before vergroot alleen het raakvlak tot ~44px. Op touch ook vol zichtbaar: er is
3586
+ geen hover die ze anders tevoorschijn haalt. */
3587
+ @media (pointer: coarse) {
3588
+ .xicms-ve-pencil,
3589
+ .xicms-ve-blokknop {
3590
+ position: relative;
3591
+ opacity: 1;
3592
+ }
3593
+ .xicms-ve-pencil {
3594
+ position: fixed;
3595
+ }
3596
+ .xicms-ve-pencil::before,
3597
+ .xicms-ve-blokknop::before {
3598
+ content: "";
3599
+ position: absolute;
3600
+ inset: -11px;
3601
+ }
3602
+ .xicms-ve-blokknop::before {
3603
+ inset: -8px;
3604
+ }
3605
+ .xicms-ve-blokknoppen {
3606
+ gap: 10px;
3607
+ padding: 6px;
3608
+ opacity: 1;
3609
+ background: rgba(28, 25, 23, 0.85);
3610
+ }
3611
+ }
3612
+
3613
+ /* Laadmelding van de editor (8.2): de chunk komt pas bij "Bewerken"; tot dan zag je niets. */
3614
+ .xicms-editor-laden {
3615
+ position: fixed;
3616
+ left: 50%;
3617
+ bottom: 1.25rem;
3618
+ transform: translateX(-50%);
3619
+ z-index: 10010;
3620
+ display: flex;
3621
+ align-items: center;
3622
+ gap: 0.75rem;
3623
+ padding: 0.6rem 1rem;
3624
+ border-radius: 999px;
3625
+ background: rgba(28, 25, 23, 0.92);
3626
+ color: #fff;
3627
+ font: 500 0.9rem/1.3 system-ui, sans-serif;
3628
+ box-shadow: 0 8px 24px rgba(28, 25, 23, 0.25);
3629
+ }
3630
+ .xicms-editor-laden button {
3631
+ appearance: none;
3632
+ border: 0;
3633
+ border-radius: 999px;
3634
+ padding: 0.3rem 0.8rem;
3635
+ background: rgba(255, 255, 255, 0.16);
3636
+ color: inherit;
3637
+ font: inherit;
3638
+ cursor: pointer;
3639
+ }
3640
+ .xicms-editor-laden button:focus-visible {
3641
+ outline: 2px solid #fff;
3642
+ outline-offset: 2px;
3643
+ }
3644
+
3645
+ /* 8.8: pagina-overgangen (siteConfig.paginaOvergang), via React <ViewTransition>. */
3646
+ ::view-transition-old(.xicms-vervagen) { animation: 120ms ease-in both xicms-vt-uit; }
3647
+ ::view-transition-new(.xicms-vervagen) { animation: 200ms ease-out 60ms both xicms-vt-in; }
3648
+ ::view-transition-old(.xicms-schuiven) { animation: 140ms ease-in both xicms-vt-uit, 300ms ease-in-out both xicms-vt-omhoog; }
3649
+ ::view-transition-new(.xicms-schuiven) { animation: 220ms ease-out 100ms both xicms-vt-in, 300ms ease-in-out both xicms-vt-erin; }
3650
+ @keyframes xicms-vt-uit { to { opacity: 0; } }
3651
+ @keyframes xicms-vt-in { from { opacity: 0; } }
3652
+ @keyframes xicms-vt-omhoog { to { translate: 0 -12px; } }
3653
+ @keyframes xicms-vt-erin { from { translate: 0 12px; } }
3654
+ @media (prefers-reduced-motion: reduce) {
3655
+ ::view-transition-group(*),
3656
+ ::view-transition-old(*),
3657
+ ::view-transition-new(*) { animation: none !important; }
3658
+ }
3659
+
3660
+ /* 8.10: een gekleurd vlak over de volle breedte houdt zijn inhoud op containerbreedte — anders raakt
3661
+ de tekst de rand van het scherm. Links in een donker vlak volgen de tekstkleur (de merkkleur is
3662
+ daar vaak onleesbaar). */
3663
+ .xicms-block--bg.xicms-block--full {
3664
+ padding-left: max(var(--xicms-container-pad), calc((100vw - var(--xicms-container-max)) / 2));
3665
+ padding-right: max(var(--xicms-container-pad), calc((100vw - var(--xicms-container-max)) / 2));
3666
+ }
3667
+ .xicms-block--bg-donker .xicms-richtext a,
3668
+ .xicms-block--bg-donker :where(p, li) > a {
3669
+ color: inherit;
3670
+ text-decoration: underline;
3671
+ }
3672
+
3673
+ /* 8.10: tekst die de klant typt mag de layout niet breken.
3674
+ - Een lang Nederlands samengesteld woord ("arbeidsongeschiktheidsverzekering") in een groot
3675
+ koppen-font viel op een telefoon half buiten beeld (`.xicms-root` knipt horizontaal af). Breken
3676
+ binnen het woord is lelijk, maar beter dan onzichtbaar — en gebeurt alleen bij echte overloop.
3677
+ - Een tabel uit Excel is vaak breder dan een telefoon: hij scrolt nu zelf, de pagina niet.
3678
+ - Een staande telefoonfoto in een afbeeldingsblok werd ruim 1000px hoog. */
3679
+ /* Niet op h3/h4: die staan meestal in smalle kaarten, waar een woord dat net iets te breed is
3680
+ anders zijn laatste letter op een eigen regel kreeg ("Kindvriendelij-k"); een paar pixels
3681
+ uitsteken binnen de kaart is daar beter. */
3682
+ .xicms-root :where(h1, h2, .xicms-richtext, .xicms-richtext :where(p, li)) {
3683
+ /* Alleen breken als een woord écht niet past. Geen `hyphens: auto`: dat brak ook woorden die
3684
+ prima op een eigen regel pasten ("Bood-schap" in een hero) — lelijker dan het probleem. */
3685
+ overflow-wrap: break-word;
3686
+ }
3687
+ .xicms-richtext table {
3688
+ display: block;
3689
+ max-width: 100%;
3690
+ overflow-x: auto;
3691
+ }
3692
+ .xicms-image:not([data-ratio]) img,
3693
+ .xicms-image[data-ratio="auto"] img {
3694
+ display: block;
3695
+ width: auto;
3696
+ max-width: 100%;
3697
+ max-height: 80vh;
3698
+ margin-inline: auto;
3699
+ }
3700
+
3701
+ /* 8.11: een blok dat (nog) niets toont — een galerij zonder foto's, een video zonder adres — was
3702
+ in de editor onvindbaar: 0×0, dus geen potlood en geen tandwiel, en "weg" zodra je het paneel
3703
+ sloot. In de werkversie staat er nu een vak met zijn naam. Bezoekers zien niets. */
3704
+ [data-xicms-block][data-xicms-block-label]:empty {
3705
+ display: block !important;
3706
+ margin: 1.5rem auto;
3707
+ max-width: var(--xicms-container-max);
3708
+ padding: 2.25rem 1.25rem;
3709
+ border: 2px dashed color-mix(in srgb, currentColor 25%, transparent);
3710
+ border-radius: 12px;
3711
+ text-align: center;
3712
+ font: 500 0.95rem/1.4 system-ui, sans-serif;
3713
+ color: color-mix(in srgb, currentColor 65%, transparent);
3714
+ }
3715
+ [data-xicms-block][data-xicms-block-label]:empty::before {
3716
+ content: "Leeg blok: " attr(data-xicms-block-label) " — vul het in met het tandwiel ⚙";
3717
+ }
3718
+
3719
+ /* ── 8.11: gereedschap op de pagina (InlineGereedschap) ──────────────────────────────────────
3720
+ Gereedschapstokens: één accent en één glas voor alles wat de editor óp de site tekent. Golf 14
3721
+ zet het bestaande editorgereedschap op dezelfde tokens. */
3722
+ :root {
3723
+ --xicms-tool-glas: rgba(28, 25, 23, 0.9);
3724
+ --xicms-tool-glas-licht: rgba(28, 25, 23, 0.55);
3725
+ --xicms-tool-fg: #fafaf9;
3726
+ --xicms-tool-muted: rgba(250, 250, 249, 0.68);
3727
+ --xicms-tool-accent: #4f46e5;
3728
+ --xicms-tool-accent-rgb: 79, 70, 229;
3729
+ --xicms-tool-focus: #a5b4fc;
3730
+ --xicms-tool-schaduw: 0 8px 24px rgba(2, 6, 23, 0.28);
3731
+ }
3732
+ .xicms-ve-snel,
3733
+ .xicms-ve-item,
3734
+ .xicms-ve-plus,
3735
+ .xicms-ve-linkchip {
3736
+ position: fixed;
3737
+ z-index: 10005;
3738
+ font: 500 12.5px/1.2 system-ui, -apple-system, "Segoe UI", sans-serif;
3739
+ color: var(--xicms-tool-fg);
3740
+ background: var(--xicms-tool-glas);
3741
+ -webkit-backdrop-filter: blur(8px);
3742
+ backdrop-filter: blur(8px);
3743
+ box-shadow: var(--xicms-tool-schaduw);
3744
+ }
3745
+ .xicms-ve-snel {
3746
+ display: flex;
3747
+ flex-wrap: wrap;
3748
+ align-items: center;
3749
+ gap: 4px 10px;
3750
+ max-width: min(640px, calc(100vw - 120px));
3751
+ padding: 4px 6px 4px 10px;
3752
+ border-radius: 12px;
3753
+ }
3754
+ .xicms-ve-snel__groep {
3755
+ display: inline-flex;
3756
+ align-items: center;
3757
+ gap: 2px;
3758
+ }
3759
+ .xicms-ve-snel__label {
3760
+ margin-right: 4px;
3761
+ color: var(--xicms-tool-muted);
3762
+ }
3763
+ .xicms-ve-snel__knop,
3764
+ .xicms-ve-snel__meer,
3765
+ .xicms-ve-item button {
3766
+ appearance: none;
3767
+ min-width: 28px;
3768
+ height: 28px;
3769
+ padding: 0 8px;
3770
+ border: 0;
3771
+ border-radius: 8px;
3772
+ background: transparent;
3773
+ color: inherit;
3774
+ font: inherit;
3775
+ cursor: pointer;
3776
+ }
3777
+ .xicms-ve-snel__knop:hover,
3778
+ .xicms-ve-snel__meer:hover,
3779
+ .xicms-ve-item button:hover:not(:disabled) {
3780
+ background: rgba(255, 255, 255, 0.16);
3781
+ }
3782
+ .xicms-ve-snel__knop[aria-checked="true"] {
3783
+ background: var(--xicms-tool-fg);
3784
+ color: #1c1917;
3785
+ }
3786
+ .xicms-ve-snel__meer {
3787
+ margin-left: 2px;
3788
+ border-left: 1px solid rgba(255, 255, 255, 0.18);
3789
+ border-radius: 0 8px 8px 0;
3790
+ }
3791
+ .xicms-ve-item {
3792
+ display: flex;
3793
+ gap: 1px;
3794
+ padding: 2px;
3795
+ border-radius: 10px;
3796
+ transform: translateX(-100%);
3797
+ }
3798
+ .xicms-ve-item button:disabled {
3799
+ opacity: 0.35;
3800
+ cursor: default;
3801
+ }
3802
+ .xicms-ve-item button.is-gevaar:hover {
3803
+ background: rgba(239, 68, 68, 0.85);
3804
+ }
3805
+ .xicms-ve-plus {
3806
+ transform: translateX(-50%);
3807
+ padding: 6px 14px;
3808
+ border: 0;
3809
+ border-radius: 999px;
3810
+ cursor: pointer;
3811
+ }
3812
+ .xicms-ve-plus:hover {
3813
+ background: var(--xicms-tool-accent);
3814
+ }
3815
+ .xicms-ve-linkchip {
3816
+ max-width: 320px;
3817
+ overflow: hidden;
3818
+ padding: 5px 10px;
3819
+ border: 0;
3820
+ border-radius: 8px;
3821
+ text-overflow: ellipsis;
3822
+ white-space: nowrap;
3823
+ cursor: pointer;
3824
+ }
3825
+ .xicms-ve-linkchip:hover {
3826
+ background: var(--xicms-tool-accent);
3827
+ }
3828
+ :is(.xicms-ve-snel__knop, .xicms-ve-snel__meer, .xicms-ve-item button, .xicms-ve-plus, .xicms-ve-linkchip):focus-visible {
3829
+ outline: 2px solid var(--xicms-tool-focus);
3830
+ outline-offset: 1px;
3831
+ }
3832
+ @media (pointer: coarse) {
3833
+ .xicms-ve-snel__knop,
3834
+ .xicms-ve-snel__meer,
3835
+ .xicms-ve-item button {
3836
+ min-width: 40px;
3837
+ height: 40px;
3838
+ }
3839
+ .xicms-ve-plus,
3840
+ .xicms-ve-linkchip {
3841
+ padding: 10px 16px;
3842
+ }
3843
+ }
3844
+
3845
+ /* 8.11: "+" op de naad onder een blok — hier iets toevoegen. */
3846
+ .xicms-ve-tussenplus {
3847
+ position: fixed;
3848
+ z-index: 10004;
3849
+ display: grid;
3850
+ place-items: center;
3851
+ width: 30px;
3852
+ height: 30px;
3853
+ transform: translate(-50%, -50%);
3854
+ border: 2px solid #fff;
3855
+ border-radius: 999px;
3856
+ background: var(--xicms-tool-glas);
3857
+ color: var(--xicms-tool-fg);
3858
+ font: 600 18px/1 system-ui, sans-serif;
3859
+ box-shadow: var(--xicms-tool-schaduw);
3860
+ cursor: pointer;
3861
+ transition: transform 0.12s ease, background 0.12s ease;
3862
+ }
3863
+ .xicms-ve-tussenplus:hover,
3864
+ .xicms-ve-tussenplus:focus-visible {
3865
+ background: var(--xicms-tool-accent);
3866
+ transform: translate(-50%, -50%) scale(1.12);
3867
+ outline: none;
3868
+ }
3869
+ @media (pointer: coarse) {
3870
+ .xicms-ve-tussenplus { width: 40px; height: 40px; }
3871
+ }
3872
+
3873
+ /* 8.11: kaders rond blokken (BlokKader). */
3874
+ .xicms-ve-kader {
3875
+ position: fixed;
3876
+ z-index: 10003;
3877
+ pointer-events: none;
3878
+ border-radius: 4px;
3879
+ }
3880
+ .xicms-ve-kader.is-aangewezen {
3881
+ outline: 1.5px dashed color-mix(in srgb, var(--xicms-tool-accent) 70%, transparent);
3882
+ outline-offset: -1px;
3883
+ }
3884
+ .xicms-ve-kader.is-gekozen {
3885
+ outline: 2px solid var(--xicms-tool-accent);
3886
+ outline-offset: -2px;
3887
+ }
3888
+ .xicms-ve-kader__naam {
3889
+ position: absolute;
3890
+ top: 0;
3891
+ left: 0;
3892
+ padding: 2px 8px;
3893
+ border-radius: 0 0 6px 0;
3894
+ background: var(--xicms-tool-accent);
3895
+ color: #fff;
3896
+ font: 600 11px/1.5 system-ui, sans-serif;
3897
+ }
3898
+
3899
+ /* 8.11: zijlade open op een breed scherm → de balk centreert in de ruimte náást de lade, anders
3900
+ schoof de publiceerknop (die met de lade meeschuift) over de balk heen. */
3901
+ @media (min-width: 721px) {
3902
+ :root:has(.xicms-ve__panel) .xicms-ve__bar {
3903
+ left: calc((100vw - clamp(360px, 28vw, 480px)) / 2);
3904
+ max-width: calc(100vw - clamp(360px, 28vw, 480px) - 340px);
3905
+ }
3906
+ /* De lade zegt zelf "✓ Opgeslagen"; dubbel in de balk maakte hem te breed. */
3907
+ :root:has(.xicms-ve__panel) .xicms-ve__status {
3908
+ display: none;
3909
+ }
3910
+ }
3911
+
3912
+ /* 8.11: tijdens het bewerken hoort de cookiemelding van de site niet over je werk te liggen; de
3913
+ beheerder ziet hem als bezoeker ("Live site") gewoon weer. */
3914
+ :root:has(.xicms-ve__shell) .xicms-consent {
3915
+ display: none;
3916
+ }
3917
+ @media (max-width: 720px) {
3918
+ .xicms-ve-starthint {
3919
+ left: 12px;
3920
+ right: 12px;
3921
+ transform: none;
3922
+ max-width: none;
3923
+ flex-direction: column;
3924
+ align-items: stretch;
3925
+ bottom: calc(110px + var(--xicms-bottombar, 0px));
3926
+ }
3927
+ }
3928
+ @media (max-width: 720px) {
3929
+ /* Telefoon: de snelle keuzes als één scrollbare rij over de volle breedte, niet als blok over
3930
+ de kaarten heen. */
3931
+ .xicms-ve-snel {
3932
+ left: 8px !important;
3933
+ right: 8px;
3934
+ max-width: none;
3935
+ flex-wrap: nowrap;
3936
+ overflow-x: auto;
3937
+ scrollbar-width: none;
3938
+ }
3939
+ .xicms-ve-snel__groep,
3940
+ .xicms-ve-snel__label,
3941
+ .xicms-ve-snel__knop {
3942
+ flex: none;
3943
+ white-space: nowrap;
3944
+ }
3945
+ }
3946
+
3947
+ /* ── 8.12: nieuwslijst als raster ───────────────────────────────────────────────────────── */
3948
+ .xicms-nieuwslijst {
3949
+ display: grid;
3950
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));
3951
+ gap: 1.25rem;
3952
+ }
3953
+ .xicms-nieuwslijst > :not(.xicms-nieuwskaart) {
3954
+ grid-column: 1 / -1;
3955
+ }
3956
+ .xicms-nieuwskaart {
3957
+ position: relative;
3958
+ display: flex;
3959
+ flex-direction: column;
3960
+ overflow: hidden;
3961
+ padding: 0;
3962
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
3963
+ }
3964
+ .xicms-nieuwskaart:hover {
3965
+ transform: translateY(-2px);
3966
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.08);
3967
+ }
3968
+ .xicms-nieuwskaart__beeld {
3969
+ display: block;
3970
+ width: 100%;
3971
+ aspect-ratio: 16 / 10;
3972
+ height: auto;
3973
+ object-fit: cover;
3974
+ }
3975
+ .xicms-nieuwskaart__tekst {
3976
+ display: grid;
3977
+ gap: 0.35rem;
3978
+ padding: 1rem 1.15rem 1.25rem;
3979
+ }
3980
+ .xicms-nieuwskaart__datum {
3981
+ margin: 0;
3982
+ font-size: 0.8rem;
3983
+ opacity: 0.7;
3984
+ }
3985
+ .xicms-nieuwskaart__titel {
3986
+ margin: 0;
3987
+ font-size: 1.2rem;
3988
+ line-height: 1.3;
3989
+ }
3990
+ .xicms-nieuwskaart__titel a {
3991
+ color: inherit;
3992
+ text-decoration: none;
3993
+ }
3994
+ /* De hele kaart is de link (één tabstop, geen geneste links). */
3995
+ .xicms-nieuwskaart__titel a::after {
3996
+ content: "";
3997
+ position: absolute;
3998
+ inset: 0;
3999
+ }
4000
+ .xicms-nieuwskaart:hover .xicms-nieuwskaart__titel a,
4001
+ .xicms-nieuwskaart__titel a:focus-visible {
4002
+ text-decoration: underline;
4003
+ text-underline-offset: 3px;
4004
+ }
4005
+ .xicms-nieuwskaart__concept {
4006
+ margin-left: 0.5rem;
4007
+ font-size: 0.75rem;
4008
+ color: var(--xicms-warning-fg, #b45309);
4009
+ }
4010
+ .xicms-nieuwskaart__samenvatting {
4011
+ margin: 0;
4012
+ opacity: 0.85;
4013
+ }
4014
+ @media (prefers-reduced-motion: reduce) {
4015
+ .xicms-nieuwskaart { transition: none; }
4016
+ .xicms-nieuwskaart:hover { transform: none; }
4017
+ }
4018
+
4019
+ /* 8.12: echte omlijnde knop (Btn variant "outline"). Op een hero-foto houdt de hero zijn eigen,
4020
+ lichte variant (die selector is specifieker). */
4021
+ .xicms-root .astryx-button.xicms-btn-omlijnd {
4022
+ box-shadow: inset 0 0 0 1.5px currentColor;
4023
+ color: var(--xicms-primary, var(--color-accent));
4024
+ }
4025
+ .xicms-root .astryx-button.xicms-btn-omlijnd:hover {
4026
+ background: color-mix(in srgb, var(--xicms-primary, #4f46e5) 8%, transparent);
4027
+ }
4028
+
4029
+ /* 8.13: openingstijden uit het bedrijfsprofiel — toelichting en afwijkende dagen. */
4030
+ .xicms-hours__noot {
4031
+ margin: 0.5rem 0 0;
4032
+ font-size: 0.9rem;
4033
+ opacity: 0.8;
4034
+ }
4035
+ .xicms-hours__afwijkend {
4036
+ margin-top: 1rem;
4037
+ padding: 0.75rem 1rem;
4038
+ border-radius: var(--xicms-radius-sm, 8px);
4039
+ background: color-mix(in srgb, var(--xicms-warning-fg, #b45309) 10%, transparent);
4040
+ border-left: 3px solid var(--xicms-warning-fg, #b45309);
4041
+ }
4042
+ .xicms-hours__afwijkend ul {
4043
+ display: grid;
4044
+ gap: 0.25rem;
4045
+ margin: 0.4rem 0 0;
4046
+ padding: 0;
4047
+ list-style: none;
4048
+ }
4049
+ .xicms-hours__afwijkend li {
4050
+ display: flex;
4051
+ justify-content: space-between;
4052
+ gap: 1rem;
4053
+ font-size: 0.95rem;
4054
+ }
4055
+
4056
+ /* ── 8.13: SiteHeader ──────────────────────────────────────────────────────────────────────── */
4057
+ .xicms-header {
4058
+ position: relative;
4059
+ z-index: 40;
4060
+ background: var(--xicms-bg, #fff);
4061
+ border-bottom: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.08));
4062
+ }
4063
+ .xicms-header.is-sticky {
4064
+ position: sticky;
4065
+ top: var(--xicms-topbar, 0px);
4066
+ background: color-mix(in srgb, var(--xicms-bg, #fff) 90%, transparent);
4067
+ -webkit-backdrop-filter: saturate(1.4) blur(10px);
4068
+ backdrop-filter: saturate(1.4) blur(10px);
4069
+ }
4070
+ .xicms-header__binnen {
4071
+ display: flex;
4072
+ align-items: center;
4073
+ gap: 1.5rem;
4074
+ max-width: var(--xicms-container-max);
4075
+ margin: 0 auto;
4076
+ padding: 0.85rem var(--xicms-container-pad);
4077
+ }
4078
+ .xicms-header__merk {
4079
+ display: inline-flex;
4080
+ align-items: center;
4081
+ flex: none;
4082
+ color: inherit;
4083
+ font-family: var(--xicms-font-heading, inherit);
4084
+ font-size: 1.2rem;
4085
+ font-weight: 700;
4086
+ text-decoration: none;
4087
+ }
4088
+ .xicms-header__merk img {
4089
+ display: block;
4090
+ width: auto;
4091
+ max-width: 220px;
4092
+ object-fit: contain;
4093
+ }
4094
+ .xicms-header__nav {
4095
+ display: flex;
4096
+ flex: 1;
4097
+ align-items: center;
4098
+ justify-content: flex-end;
4099
+ }
4100
+ .xicms-header__menu .xicms-nav__list {
4101
+ display: flex;
4102
+ flex-wrap: wrap;
4103
+ gap: 0.25rem 1.25rem;
4104
+ }
4105
+ .xicms-header__menu .xicms-nav__link {
4106
+ color: inherit;
4107
+ text-decoration: none;
4108
+ font-weight: 500;
4109
+ }
4110
+ .xicms-header__menu .xicms-nav__link[aria-current="page"] {
4111
+ color: var(--xicms-primary);
4112
+ }
4113
+ .xicms-header__cta,
4114
+ .xicms-mobielbalk__cta {
4115
+ display: inline-flex;
4116
+ align-items: center;
4117
+ flex: none;
4118
+ padding: 0.6rem 1.1rem;
4119
+ border-radius: var(--xicms-radius-sm, 8px);
4120
+ background: var(--xicms-primary);
4121
+ color: var(--xicms-on-primary, #fff);
4122
+ font-weight: 600;
4123
+ text-decoration: none;
4124
+ }
4125
+ .xicms-header__cta:hover,
4126
+ .xicms-mobielbalk__cta:hover {
4127
+ filter: brightness(0.95);
4128
+ }
4129
+ .xicms-header__cta--in-menu,
4130
+ .xicms-header__knop {
4131
+ display: none;
4132
+ }
4133
+ .xicms-header__knop {
4134
+ width: 44px;
4135
+ height: 44px;
4136
+ margin-left: auto;
4137
+ place-items: center;
4138
+ border: 0;
4139
+ border-radius: 10px;
4140
+ background: transparent;
4141
+ color: inherit;
4142
+ cursor: pointer;
4143
+ }
4144
+ .xicms-header__streepjes,
4145
+ .xicms-header__streepjes::before,
4146
+ .xicms-header__streepjes::after {
4147
+ display: block;
4148
+ width: 22px;
4149
+ height: 2px;
4150
+ border-radius: 2px;
4151
+ background: currentColor;
4152
+ transition: transform 0.2s ease, opacity 0.2s ease;
4153
+ }
4154
+ .xicms-header__streepjes { position: relative; }
4155
+ .xicms-header__streepjes::before,
4156
+ .xicms-header__streepjes::after {
4157
+ content: "";
4158
+ position: absolute;
4159
+ left: 0;
4160
+ }
4161
+ .xicms-header__streepjes::before { top: -7px; }
4162
+ .xicms-header__streepjes::after { top: 7px; }
4163
+ .xicms-header.is-open .xicms-header__streepjes { background: transparent; }
4164
+ .xicms-header.is-open .xicms-header__streepjes::before { transform: translateY(7px) rotate(45deg); }
4165
+ .xicms-header.is-open .xicms-header__streepjes::after { transform: translateY(-7px) rotate(-45deg); }
4166
+
4167
+ @media (max-width: 900px) {
4168
+ .xicms-header__knop { display: grid; }
4169
+ .xicms-header__binnen > .xicms-header__cta { display: none; }
4170
+ .xicms-header__nav {
4171
+ position: absolute;
4172
+ top: 100%;
4173
+ left: 0;
4174
+ right: 0;
4175
+ display: none;
4176
+ flex-direction: column;
4177
+ align-items: stretch;
4178
+ gap: 1rem;
4179
+ max-height: calc(100dvh - 70px);
4180
+ overflow-y: auto;
4181
+ padding: 1rem var(--xicms-container-pad) 1.5rem;
4182
+ background: var(--xicms-bg, #fff);
4183
+ border-bottom: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.08));
4184
+ box-shadow: 0 16px 32px rgba(0, 0, 0, 0.08);
4185
+ }
4186
+ .xicms-header.is-open .xicms-header__nav { display: flex; }
4187
+ .xicms-header__menu .xicms-nav__list {
4188
+ flex-direction: column;
4189
+ align-items: stretch;
4190
+ gap: 0;
4191
+ text-align: left;
4192
+ }
4193
+ .xicms-header__menu .xicms-nav__item,
4194
+ .xicms-header__menu .xicms-nav__pair {
4195
+ width: 100%;
4196
+ }
4197
+ .xicms-header__menu .xicms-nav__link {
4198
+ display: block;
4199
+ padding: 0.8rem 0;
4200
+ font-size: 1.1rem;
4201
+ border-bottom: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.06));
4202
+ }
4203
+ .xicms-header__cta--in-menu {
4204
+ display: inline-flex;
4205
+ justify-content: center;
4206
+ }
4207
+ }
4208
+
4209
+ /* Mobiele balk onderaan (header.mobielBalk). */
4210
+ .xicms-mobielbalk { display: none; }
4211
+ @media (max-width: 720px) {
4212
+ .xicms-mobielbalk {
4213
+ position: fixed;
4214
+ inset: auto 0 0 0;
4215
+ z-index: 35;
4216
+ display: flex;
4217
+ gap: 0.5rem;
4218
+ padding: 0.6rem 0.75rem calc(0.6rem + env(safe-area-inset-bottom));
4219
+ background: var(--xicms-bg, #fff);
4220
+ border-top: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.08));
4221
+ box-shadow: 0 -8px 24px rgba(0, 0, 0, 0.08);
4222
+ }
4223
+ .xicms-mobielbalk > * {
4224
+ flex: 1;
4225
+ justify-content: center;
4226
+ }
4227
+ .xicms-mobielbalk__bel {
4228
+ display: inline-flex;
4229
+ align-items: center;
4230
+ padding: 0.6rem 1rem;
4231
+ border-radius: var(--xicms-radius-sm, 8px);
4232
+ box-shadow: inset 0 0 0 1.5px currentColor;
4233
+ color: var(--xicms-primary);
4234
+ font-weight: 600;
4235
+ text-decoration: none;
4236
+ }
4237
+ body:has(.xicms-mobielbalk) { padding-bottom: 72px; }
4238
+ /* Tijdens bewerken staat de editorbalk daar. */
4239
+ :root:has(.xicms-ve__shell) .xicms-mobielbalk { display: none; }
4240
+ }
4241
+
4242
+ /* ── 8.13: prijslijst / menukaart ─────────────────────────────────────────────────────────── */
4243
+ .xicms-prijslijst {
4244
+ display: grid;
4245
+ gap: 1.5rem;
4246
+ margin: 1.5rem 0;
4247
+ }
4248
+ .xicms-prijslijst__kop {
4249
+ display: grid;
4250
+ gap: 0.4rem;
4251
+ }
4252
+ .xicms-prijslijst__intro {
4253
+ margin: 0;
4254
+ max-width: 60ch;
4255
+ opacity: 0.8;
4256
+ }
4257
+ .xicms-prijslijst__secties {
4258
+ display: grid;
4259
+ gap: 2rem;
4260
+ }
4261
+ .xicms-prijslijst[data-variant="kolommen"] .xicms-prijslijst__secties {
4262
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr));
4263
+ gap: 2rem 3rem;
4264
+ }
4265
+ .xicms-prijslijst__sectietitel {
4266
+ margin: 0 0 0.25rem;
4267
+ font-family: var(--xicms-font-heading, inherit);
4268
+ font-size: 1.2rem;
4269
+ }
4270
+ .xicms-prijslijst__noot {
4271
+ margin: 0 0 0.5rem;
4272
+ font-size: 0.9rem;
4273
+ opacity: 0.7;
4274
+ }
4275
+ .xicms-prijslijst__regels {
4276
+ display: grid;
4277
+ gap: 0.15rem;
4278
+ margin: 0;
4279
+ padding: 0;
4280
+ list-style: none;
4281
+ }
4282
+ .xicms-prijslijst__regel {
4283
+ padding: 0.6rem 0;
4284
+ border-bottom: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.07));
4285
+ }
4286
+ .xicms-prijslijst__regel:last-child {
4287
+ border-bottom: 0;
4288
+ }
4289
+ .xicms-prijslijst__regel.is-uitgelicht .xicms-prijslijst__naam::after {
4290
+ content: " ★";
4291
+ color: var(--xicms-primary);
4292
+ }
4293
+ .xicms-prijslijst__lijn {
4294
+ display: flex;
4295
+ align-items: baseline;
4296
+ gap: 0.5rem;
4297
+ }
4298
+ .xicms-prijslijst__naam {
4299
+ font-weight: 600;
4300
+ }
4301
+ .xicms-prijslijst__puntjes {
4302
+ flex: 1;
4303
+ min-width: 1rem;
4304
+ border-bottom: 1.5px dotted color-mix(in srgb, currentColor 30%, transparent);
4305
+ transform: translateY(-0.25em);
4306
+ }
4307
+ .xicms-prijslijst__prijs {
4308
+ font-weight: 600;
4309
+ white-space: nowrap;
4310
+ font-variant-numeric: tabular-nums;
4311
+ }
4312
+ .xicms-prijslijst__details {
4313
+ display: flex;
4314
+ flex-wrap: wrap;
4315
+ align-items: center;
4316
+ gap: 0.25rem 0.75rem;
4317
+ margin-top: 0.2rem;
4318
+ font-size: 0.9rem;
4319
+ opacity: 0.8;
4320
+ }
4321
+ .xicms-prijslijst__duur::before {
4322
+ content: "◷ ";
4323
+ }
4324
+ .xicms-prijslijst__tag {
4325
+ padding: 0.05rem 0.5rem;
4326
+ border-radius: 999px;
4327
+ background: color-mix(in srgb, var(--xicms-primary, #4f46e5) 12%, transparent);
4328
+ color: var(--xicms-primary);
4329
+ font-size: 0.75rem;
4330
+ font-weight: 600;
4331
+ }
4332
+ .xicms-prijslijst__voetnoot {
4333
+ margin: 0;
4334
+ font-size: 0.85rem;
4335
+ opacity: 0.7;
4336
+ }
4337
+ /* Menu: gecentreerd, in de koppenletter, zonder puntjes. */
4338
+ .xicms-prijslijst[data-variant="menu"] {
4339
+ max-width: 680px;
4340
+ margin-inline: auto;
4341
+ text-align: center;
4342
+ }
4343
+ .xicms-prijslijst[data-variant="menu"] .xicms-prijslijst__intro { margin-inline: auto; }
4344
+ .xicms-prijslijst[data-variant="menu"] .xicms-prijslijst__sectietitel {
4345
+ font-size: 1.4rem;
4346
+ letter-spacing: 0.02em;
4347
+ }
4348
+ .xicms-prijslijst[data-variant="menu"] .xicms-prijslijst__regel { border-bottom: 0; }
4349
+ .xicms-prijslijst[data-variant="menu"] .xicms-prijslijst__lijn,
4350
+ .xicms-prijslijst[data-variant="menu"] .xicms-prijslijst__details {
4351
+ justify-content: center;
4352
+ }
4353
+ .xicms-prijslijst[data-variant="menu"] .xicms-prijslijst__puntjes { display: none; }
4354
+ .xicms-prijslijst[data-variant="menu"] .xicms-prijslijst__naam {
4355
+ font-family: var(--xicms-font-heading, inherit);
4356
+ font-size: 1.1rem;
4357
+ }
4358
+ .xicms-prijslijst[data-variant="menu"] .xicms-prijslijst__prijs::before { content: "· "; opacity: 0.5; }
4359
+
4360
+ /* ── 8.13: hero "naast" (tekst links, foto rechts) en vertrouwenspunten ─────────────────────── */
4361
+ .xicms-hero[data-layout="naast"] {
4362
+ display: grid;
4363
+ grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
4364
+ align-items: center;
4365
+ gap: clamp(1.5rem, 4vw, 4rem);
4366
+ }
4367
+ .xicms-hero[data-layout="naast"] .xicms-hero__inner {
4368
+ max-width: none;
4369
+ }
4370
+ .xicms-hero__beeld {
4371
+ overflow: hidden;
4372
+ aspect-ratio: 5 / 4;
4373
+ border-radius: var(--xicms-radius-lg, 24px);
4374
+ }
4375
+ .xicms-hero__beeld img {
4376
+ display: block;
4377
+ width: 100%;
4378
+ height: 100%;
4379
+ object-fit: cover;
4380
+ }
4381
+ @media (max-width: 900px) {
4382
+ .xicms-hero[data-layout="naast"] { grid-template-columns: 1fr; }
4383
+ }
4384
+ .xicms-hero__trust {
4385
+ display: flex;
4386
+ flex-wrap: wrap;
4387
+ gap: 0.4rem 1.25rem;
4388
+ margin: 1.25rem 0 0;
4389
+ padding: 0;
4390
+ list-style: none;
4391
+ font-size: 0.95rem;
4392
+ }
4393
+ .xicms-hero[data-align="center"] .xicms-hero__trust { justify-content: center; }
4394
+ .xicms-hero__trust li::before {
4395
+ content: "✓ ";
4396
+ color: var(--xicms-primary);
4397
+ font-weight: 700;
4398
+ }
4399
+ .xicms-hero[data-media="cover"] .xicms-hero__trust li::before { color: inherit; }
4400
+
4401
+ /* ── 8.13: sectiekop ───────────────────────────────────────────────────────────────────────── */
4402
+ .xicms-sectiekop {
4403
+ display: grid;
4404
+ gap: 0.5rem;
4405
+ margin: 2.5rem 0 1rem;
4406
+ }
4407
+ .xicms-sectiekop[data-align="center"] {
4408
+ justify-items: center;
4409
+ text-align: center;
4410
+ }
4411
+ .xicms-sectiekop__regel {
4412
+ margin: 0;
4413
+ color: var(--xicms-primary);
4414
+ font-size: 0.8rem;
4415
+ font-weight: 700;
4416
+ letter-spacing: 0.12em;
4417
+ text-transform: uppercase;
4418
+ }
4419
+ .xicms-sectiekop__intro {
4420
+ margin: 0;
4421
+ max-width: 60ch;
4422
+ font-size: 1.1rem;
4423
+ opacity: 0.8;
4424
+ }
4425
+
4426
+ .xicms-footer__column--bedrijf .xicms-footer__links + .xicms-footer__heading {
4427
+ margin-top: 1.25rem;
4428
+ }
4429
+
4430
+ /* 8.14: formulierveld "periode" (van – tot). */
4431
+ .xicms-form__periode {
4432
+ display: grid;
4433
+ grid-template-columns: repeat(2, minmax(0, 1fr));
4434
+ gap: 0.5rem 0.75rem;
4435
+ margin: 0;
4436
+ padding: 0;
4437
+ border: 0;
4438
+ }
4439
+ .xicms-form__periode legend {
4440
+ grid-column: 1 / -1;
4441
+ margin-bottom: 0.3rem;
4442
+ }
4443
+
4444
+ /* 8.14: agenda — status en prijs. */
4445
+ .xicms-agenda__status {
4446
+ display: inline-block;
4447
+ margin-right: 0.5rem;
4448
+ padding: 0.05rem 0.5rem;
4449
+ border-radius: 999px;
4450
+ font-size: 0.75rem;
4451
+ font-weight: 700;
4452
+ background: color-mix(in srgb, var(--xicms-danger-fg, #b91c1c) 14%, transparent);
4453
+ color: var(--xicms-danger-fg, #b91c1c);
4454
+ }
4455
+ .xicms-agenda__status[data-status="verplaatst"] {
4456
+ background: color-mix(in srgb, var(--xicms-warning-fg, #b45309) 14%, transparent);
4457
+ color: var(--xicms-warning-fg, #b45309);
4458
+ }
4459
+ .xicms-agenda__prijs {
4460
+ margin-left: 0.5rem;
4461
+ font-weight: 600;
4462
+ }
4463
+
4464
+ /* ── 8.15: beschikbaarheidskalender ──────────────────────────────────────────────────────── */
4465
+ .xicms-beschikbaar {
4466
+ display: grid;
4467
+ gap: 1rem;
4468
+ margin: 1.5rem 0;
4469
+ }
4470
+ .xicms-beschikbaar__intro,
4471
+ .xicms-beschikbaar__noot { margin: 0; opacity: 0.85; }
4472
+ .xicms-beschikbaar__melding {
4473
+ margin: 0;
4474
+ padding: 0.6rem 0.9rem;
4475
+ border-radius: var(--xicms-radius-sm, 8px);
4476
+ background: color-mix(in srgb, var(--xicms-warning-fg, #b45309) 10%, transparent);
4477
+ font-size: 0.9rem;
4478
+ }
4479
+ .xicms-beschikbaar__tabs { display: flex; flex-wrap: wrap; gap: 0.4rem; }
4480
+ .xicms-beschikbaar__tabs button {
4481
+ padding: 0.45rem 0.9rem;
4482
+ border: 1px solid var(--xicms-border, rgba(0, 0, 0, 0.12));
4483
+ border-radius: 999px;
4484
+ background: transparent;
4485
+ color: inherit;
4486
+ font: inherit;
4487
+ cursor: pointer;
4488
+ }
4489
+ .xicms-beschikbaar__tabs button[aria-selected="true"] {
4490
+ background: var(--xicms-primary);
4491
+ border-color: var(--xicms-primary);
4492
+ color: var(--xicms-on-primary, #fff);
4493
+ }
4494
+ .xicms-beschikbaar__maanden {
4495
+ display: grid;
4496
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr));
4497
+ gap: 1.25rem 2rem;
4498
+ }
4499
+ .xicms-beschikbaar__maandnaam {
4500
+ margin: 0 0 0.4rem;
4501
+ font-weight: 600;
4502
+ text-transform: capitalize;
4503
+ }
4504
+ .xicms-beschikbaar table { width: 100%; border-collapse: collapse; table-layout: fixed; }
4505
+ .xicms-beschikbaar th { font-size: 0.7rem; font-weight: 600; opacity: 0.6; text-transform: uppercase; padding-bottom: 0.2rem; }
4506
+ .xicms-beschikbaar td { padding: 1px; text-align: center; }
4507
+ .xicms-beschikbaar td button {
4508
+ width: 100%;
4509
+ aspect-ratio: 1;
4510
+ max-height: 40px;
4511
+ border: 0;
4512
+ border-radius: 6px;
4513
+ background: color-mix(in srgb, var(--xicms-success-fg, #15803d) 12%, transparent);
4514
+ color: inherit;
4515
+ font: inherit;
4516
+ font-size: 0.85rem;
4517
+ cursor: pointer;
4518
+ }
4519
+ .xicms-beschikbaar td button[data-status="bezet"] {
4520
+ background: color-mix(in srgb, currentColor 10%, transparent);
4521
+ text-decoration: line-through;
4522
+ opacity: 0.55;
4523
+ cursor: not-allowed;
4524
+ }
4525
+ .xicms-beschikbaar td button[data-status="voorbij"] { background: transparent; opacity: 0.3; cursor: default; }
4526
+ .xicms-beschikbaar td button[data-gekozen="1"] {
4527
+ background: var(--xicms-primary);
4528
+ color: var(--xicms-on-primary, #fff);
4529
+ opacity: 1;
4530
+ text-decoration: none;
4531
+ }
4532
+ .xicms-beschikbaar td button:focus-visible { outline: 2px solid var(--xicms-primary); outline-offset: 1px; }
4533
+ .xicms-beschikbaar__voet {
4534
+ display: flex;
4535
+ flex-wrap: wrap;
4536
+ align-items: center;
4537
+ gap: 0.75rem 1.5rem;
4538
+ }
4539
+ .xicms-beschikbaar__legenda { display: inline-flex; align-items: center; gap: 0.4rem; font-size: 0.85rem; opacity: 0.8; }
4540
+ .xicms-beschikbaar__legenda i { display: inline-block; width: 0.9rem; height: 0.9rem; border-radius: 3px; background: color-mix(in srgb, var(--xicms-success-fg, #15803d) 25%, transparent); }
4541
+ .xicms-beschikbaar__legenda i[data-status="bezet"] { background: color-mix(in srgb, currentColor 18%, transparent); margin-left: 0.5rem; }
4542
+ .xicms-beschikbaar__keuze { flex: 1; font-weight: 500; }