lintje 0.2.0 → 0.4.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 (320) hide show
  1. package/README.md +2 -2
  2. package/dist-elements/actions.js +1 -1
  3. package/dist-elements/chunks/{base-Bg-IFOPG.js → base-DRGvkF-r.js} +484 -309
  4. package/dist-elements/chunks/{controls-B1455oPG.js → controls-_4ac1Lpz.js} +7 -1
  5. package/dist-elements/chunks/{date-format-mHtZyBys.js → date-format-DxP9yfDp.js} +1 -1
  6. package/dist-elements/chunks/dialog-B7aRBtjy.js +28 -0
  7. package/dist-elements/chunks/{disclosure-BXTX04gM.js → disclosure-D39vAR5q.js} +1 -1
  8. package/dist-elements/chunks/{disclosure-CMXhX-Vb.js → disclosure-DirPLy2E.js} +6 -6
  9. package/dist-elements/chunks/download-C68kcwPj.js +206 -0
  10. package/dist-elements/chunks/{focus-trap-9BnE-xWv.js → focus-trap-Dv8zu64A.js} +1 -1
  11. package/dist-elements/chunks/input-BGMLam-O.js +195 -0
  12. package/dist-elements/chunks/input-lQTmOMOz.js +4 -0
  13. package/dist-elements/chunks/{player-DXOZEyEy.js → player-BApadXr8.js} +27 -27
  14. package/dist-elements/chunks/{sentence-BI3lwEuT.js → sentence-0wO85ZdJ.js} +3 -3
  15. package/dist-elements/chunks/{stagger-qGD3wmhg.js → stagger-BB_gcxBI.js} +88 -74
  16. package/dist-elements/content.js +1 -0
  17. package/dist-elements/core.js +1 -1
  18. package/dist-elements/custom-elements.json +8858 -7715
  19. package/dist-elements/data-types.json +6900 -0
  20. package/dist-elements/feedback.js +2 -1
  21. package/dist-elements/frame.js +0 -2
  22. package/dist-elements/guides/dashboard.md +8 -0
  23. package/dist-elements/guides/events.md +4 -5
  24. package/dist-elements/guides/loading.md +10 -9
  25. package/dist-elements/guides/page-contents.md +110 -0
  26. package/dist-elements/guides/start.md +12 -0
  27. package/dist-elements/inputs.js +3 -1
  28. package/dist-elements/layout.js +1 -1
  29. package/dist-elements/lintje.js +8562 -7138
  30. package/dist-elements/overlays.js +2 -2
  31. package/dist-elements/skills/lintje/SKILL.md +1 -1
  32. package/dist-elements/tables.js +1 -1
  33. package/dist-elements/tag/activity-log.js +15 -15
  34. package/dist-elements/tag/ai-label.js +10 -10
  35. package/dist-elements/tag/announcement.js +36 -76
  36. package/dist-elements/tag/app-search.js +49 -49
  37. package/dist-elements/tag/audio-player.js +57 -57
  38. package/dist-elements/tag/badge.d.ts +1 -1
  39. package/dist-elements/tag/badge.js +1 -1
  40. package/dist-elements/tag/breadcrumbs.js +15 -15
  41. package/dist-elements/tag/button.d.ts +1 -1
  42. package/dist-elements/tag/button.js +1 -1
  43. package/dist-elements/tag/card-list.js +12 -12
  44. package/dist-elements/tag/card.js +39 -44
  45. package/dist-elements/tag/chart.js +1357 -787
  46. package/dist-elements/tag/chat-answer.js +49 -49
  47. package/dist-elements/tag/chat-composer.js +75 -71
  48. package/dist-elements/tag/chat-message.js +8 -8
  49. package/dist-elements/tag/chat-strip.js +22 -22
  50. package/dist-elements/tag/chat-suggestions.js +12 -12
  51. package/dist-elements/tag/chat.js +56 -56
  52. package/dist-elements/tag/checkbox-group.d.ts +1 -0
  53. package/dist-elements/tag/checkbox-group.js +60 -0
  54. package/dist-elements/tag/checkbox.js +9 -8
  55. package/dist-elements/tag/code.js +9 -9
  56. package/dist-elements/tag/combobox.js +19 -18
  57. package/dist-elements/tag/conflict-alert.js +12 -12
  58. package/dist-elements/tag/copy-button.js +14 -14
  59. package/dist-elements/tag/data-table.js +880 -532
  60. package/dist-elements/tag/date-input.js +30 -29
  61. package/dist-elements/tag/date-range.js +39 -38
  62. package/dist-elements/tag/description-list.js +29 -32
  63. package/dist-elements/tag/dialog.d.ts +1 -0
  64. package/dist-elements/tag/dialog.js +144 -0
  65. package/dist-elements/tag/document-viewer.js +23 -23
  66. package/dist-elements/tag/drawer.js +28 -32
  67. package/dist-elements/tag/empty-state.js +19 -30
  68. package/dist-elements/tag/error-page.d.ts +1 -0
  69. package/dist-elements/tag/error-page.js +109 -0
  70. package/dist-elements/tag/error-summary.js +10 -10
  71. package/dist-elements/tag/expander.js +8 -8
  72. package/dist-elements/tag/explainer.js +11 -11
  73. package/dist-elements/tag/field.js +5 -5
  74. package/dist-elements/tag/file-upload.js +35 -34
  75. package/dist-elements/tag/filter-bar.js +56 -56
  76. package/dist-elements/tag/filter-sheet.js +11 -11
  77. package/dist-elements/tag/filter-zone.js +31 -31
  78. package/dist-elements/tag/find.d.ts +1 -0
  79. package/dist-elements/tag/find.js +128 -0
  80. package/dist-elements/tag/footer.js +21 -21
  81. package/dist-elements/tag/form-actions.js +29 -25
  82. package/dist-elements/tag/form-section.js +6 -6
  83. package/dist-elements/tag/form.js +12 -12
  84. package/dist-elements/tag/gallery.js +14 -14
  85. package/dist-elements/tag/grid-item.d.ts +1 -1
  86. package/dist-elements/tag/grid-item.js +1 -1
  87. package/dist-elements/tag/grid.d.ts +1 -1
  88. package/dist-elements/tag/grid.js +1 -1
  89. package/dist-elements/tag/hero.js +12 -12
  90. package/dist-elements/tag/highlight.js +5 -5
  91. package/dist-elements/tag/icon-button.d.ts +1 -1
  92. package/dist-elements/tag/icon-button.js +1 -1
  93. package/dist-elements/tag/icon.d.ts +1 -1
  94. package/dist-elements/tag/icon.js +1 -1
  95. package/dist-elements/tag/job-list.js +22 -44
  96. package/dist-elements/tag/kpi-row.js +12 -10
  97. package/dist-elements/tag/kpi.js +149 -140
  98. package/dist-elements/tag/level-meter.js +11 -11
  99. package/dist-elements/tag/list.js +55 -55
  100. package/dist-elements/tag/logo.js +30 -30
  101. package/dist-elements/tag/map.js +702 -671
  102. package/dist-elements/tag/menu-button.js +70 -69
  103. package/dist-elements/tag/modal.js +28 -37
  104. package/dist-elements/tag/multiselect.js +35 -34
  105. package/dist-elements/tag/note.js +5 -5
  106. package/dist-elements/tag/notifications.js +36 -36
  107. package/dist-elements/tag/number-input.js +13 -12
  108. package/dist-elements/tag/page-header.js +140 -37
  109. package/dist-elements/tag/pagination.js +54 -49
  110. package/dist-elements/tag/popover.d.ts +1 -1
  111. package/dist-elements/tag/popover.js +1 -1
  112. package/dist-elements/tag/progress-bar.d.ts +1 -1
  113. package/dist-elements/tag/progress-bar.js +1 -1
  114. package/dist-elements/tag/prose.js +6 -6
  115. package/dist-elements/tag/qr-code.js +7 -7
  116. package/dist-elements/tag/radio-group.js +13 -12
  117. package/dist-elements/tag/range.js +23 -22
  118. package/dist-elements/tag/recording-status.js +14 -14
  119. package/dist-elements/tag/repeater.js +10 -10
  120. package/dist-elements/tag/segmented.js +14 -13
  121. package/dist-elements/tag/select.js +11 -10
  122. package/dist-elements/tag/shell.js +356 -339
  123. package/dist-elements/tag/skeleton.d.ts +1 -1
  124. package/dist-elements/tag/skeleton.js +1 -1
  125. package/dist-elements/tag/slot-picker.js +16 -15
  126. package/dist-elements/tag/sortable-list.js +14 -14
  127. package/dist-elements/tag/spinner.d.ts +1 -1
  128. package/dist-elements/tag/spinner.js +1 -1
  129. package/dist-elements/tag/split-pane.js +12 -12
  130. package/dist-elements/tag/status-dot.d.ts +1 -1
  131. package/dist-elements/tag/status-dot.js +1 -1
  132. package/dist-elements/tag/stepper.js +21 -21
  133. package/dist-elements/tag/streaming-text.js +13 -13
  134. package/dist-elements/tag/sub-nav.js +39 -38
  135. package/dist-elements/tag/tabs.js +38 -38
  136. package/dist-elements/tag/tag-input.js +20 -19
  137. package/dist-elements/tag/text-editor.js +25 -24
  138. package/dist-elements/tag/text-input.js +15 -14
  139. package/dist-elements/tag/textarea.js +15 -14
  140. package/dist-elements/tag/tile.d.ts +1 -1
  141. package/dist-elements/tag/tile.js +1 -1
  142. package/dist-elements/tag/time-input.js +20 -19
  143. package/dist-elements/tag/toast.js +32 -23
  144. package/dist-elements/tag/toggle.js +9 -8
  145. package/dist-elements/tag/toggletip.js +27 -27
  146. package/dist-elements/tag/token-value.d.ts +1 -0
  147. package/dist-elements/tag/token-value.js +75 -0
  148. package/dist-elements/tag/tooltip.d.ts +1 -1
  149. package/dist-elements/tag/tooltip.js +1 -1
  150. package/dist-elements/tag/transcript.js +48 -48
  151. package/dist-elements/tag/translator.js +13 -13
  152. package/dist-elements/tag/tree-view.js +13 -13
  153. package/dist-elements/tag/user-menu.js +37 -37
  154. package/dist-elements/tag/video-player.js +21 -21
  155. package/dist-elements/tokens.css +120 -96
  156. package/dist-elements/tokens.json +1244 -0
  157. package/dist-elements/types/bundle/actions.d.ts +3 -3
  158. package/dist-elements/types/bundle/content.d.ts +1 -0
  159. package/dist-elements/types/bundle/feedback.d.ts +6 -5
  160. package/dist-elements/types/bundle/frame.d.ts +0 -2
  161. package/dist-elements/types/bundle/index.d.ts +0 -10
  162. package/dist-elements/types/bundle/inputs.d.ts +2 -0
  163. package/dist-elements/types/bundle/layout.d.ts +3 -3
  164. package/dist-elements/types/bundle/overlays.d.ts +3 -3
  165. package/dist-elements/types/categories.d.ts +4 -0
  166. package/dist-elements/types/{primitives → components/actions}/button/button.d.ts +13 -10
  167. package/dist-elements/types/components/actions/copy-button/copy-button.d.ts +8 -9
  168. package/dist-elements/types/{icons → components/actions}/icon/icon.d.ts +4 -5
  169. package/dist-elements/types/{primitives → components/actions}/icon-button/icon-button.d.ts +8 -6
  170. package/dist-elements/types/components/actions/menu-button/menu-button.d.ts +16 -18
  171. package/dist-elements/types/components/actions/qr-code/qr-code.d.ts +10 -10
  172. package/dist-elements/types/components/charts/chart/chart.d.ts +6 -5
  173. package/dist-elements/types/components/charts/explainer/explainer.d.ts +1 -1
  174. package/dist-elements/types/components/charts/kpi/kpi.d.ts +19 -11
  175. package/dist-elements/types/components/charts/kpi-row/kpi-row.d.ts +2 -8
  176. package/dist-elements/types/components/charts/note/note.d.ts +2 -2
  177. package/dist-elements/types/components/chat/chat/chat.d.ts +9 -11
  178. package/dist-elements/types/components/chat/chat-answer/chat-answer.d.ts +10 -11
  179. package/dist-elements/types/components/chat/chat-composer/chat-composer.d.ts +10 -12
  180. package/dist-elements/types/components/chat/chat-message/chat-message.d.ts +7 -8
  181. package/dist-elements/types/components/chat/chat-strip/chat-strip.d.ts +5 -5
  182. package/dist-elements/types/components/chat/chat-suggestions/chat-suggestions.d.ts +9 -10
  183. package/dist-elements/types/components/content/audio-player/audio-player.d.ts +15 -17
  184. package/dist-elements/types/components/content/code/code.d.ts +3 -4
  185. package/dist-elements/types/components/content/document-viewer/document-viewer.d.ts +10 -11
  186. package/dist-elements/types/components/content/gallery/gallery.d.ts +5 -4
  187. package/dist-elements/types/components/content/highlight/highlight.d.ts +5 -4
  188. package/dist-elements/types/components/content/prose/prose.d.ts +3 -4
  189. package/dist-elements/types/components/content/token-value/token-value.d.ts +42 -0
  190. package/dist-elements/types/components/content/transcript/transcript.d.ts +15 -28
  191. package/dist-elements/types/components/content/translator/translator.d.ts +12 -16
  192. package/dist-elements/types/components/content/video-player/video-player.d.ts +12 -14
  193. package/dist-elements/types/components/feedback/ai-label/ai-label.d.ts +3 -4
  194. package/dist-elements/types/components/feedback/announcement/announcement.d.ts +5 -9
  195. package/dist-elements/types/{primitives → components/feedback}/badge/badge.d.ts +10 -6
  196. package/dist-elements/types/components/feedback/conflict-alert/conflict-alert.d.ts +4 -5
  197. package/dist-elements/types/components/feedback/empty-state/empty-state.d.ts +5 -8
  198. package/dist-elements/types/components/feedback/error-page/error-page.d.ts +52 -0
  199. package/dist-elements/types/components/feedback/job-list/job-list.d.ts +9 -12
  200. package/dist-elements/types/components/feedback/level-meter/level-meter.d.ts +4 -6
  201. package/dist-elements/types/{primitives → components/feedback}/progress-bar/progress-bar.d.ts +9 -7
  202. package/dist-elements/types/components/feedback/recording-status/recording-status.d.ts +5 -6
  203. package/dist-elements/types/{primitives → components/feedback}/skeleton/skeleton.d.ts +2 -2
  204. package/dist-elements/types/{primitives → components/feedback}/spinner/spinner.d.ts +2 -3
  205. package/dist-elements/types/{primitives → components/feedback}/status-dot/status-dot.d.ts +5 -6
  206. package/dist-elements/types/components/feedback/streaming-text/streaming-text.d.ts +12 -9
  207. package/dist-elements/types/components/feedback/toast/toast.d.ts +8 -9
  208. package/dist-elements/types/components/filters/filter-bar/filter-bar.d.ts +9 -4
  209. package/dist-elements/types/components/filters/filter-sheet/filter-sheet.d.ts +7 -7
  210. package/dist-elements/types/components/filters/filter-zone/filter-zone.d.ts +4 -4
  211. package/dist-elements/types/components/forms/error-summary/error-summary.d.ts +6 -7
  212. package/dist-elements/types/components/forms/form/form.d.ts +5 -5
  213. package/dist-elements/types/components/forms/form-actions/form-actions.d.ts +10 -8
  214. package/dist-elements/types/components/forms/form-section/form-section.d.ts +6 -5
  215. package/dist-elements/types/components/forms/repeater/repeater.d.ts +15 -9
  216. package/dist-elements/types/components/forms/stepper/stepper.d.ts +6 -5
  217. package/dist-elements/types/components/frame/app-search/app-search.d.ts +7 -8
  218. package/dist-elements/types/components/frame/breadcrumbs/breadcrumbs.d.ts +2 -2
  219. package/dist-elements/types/components/frame/footer/footer.d.ts +3 -2
  220. package/dist-elements/types/components/frame/hero/hero.d.ts +7 -9
  221. package/dist-elements/types/components/frame/notifications/notifications.d.ts +7 -11
  222. package/dist-elements/types/components/frame/page-header/page-header.d.ts +13 -16
  223. package/dist-elements/types/components/frame/shell/shell.d.ts +15 -14
  224. package/dist-elements/types/components/frame/sub-nav/sub-nav.d.ts +10 -6
  225. package/dist-elements/types/components/frame/user-menu/user-menu.d.ts +13 -12
  226. package/dist-elements/types/components/index.d.ts +51 -12
  227. package/dist-elements/types/components/inputs/checkbox/checkbox.d.ts +4 -4
  228. package/dist-elements/types/components/inputs/checkbox-group/checkbox-group.d.ts +33 -0
  229. package/dist-elements/types/components/inputs/combobox/combobox.d.ts +14 -8
  230. package/dist-elements/types/components/inputs/date-input/date-input.d.ts +6 -6
  231. package/dist-elements/types/components/inputs/date-range/date-range.d.ts +13 -8
  232. package/dist-elements/types/components/inputs/field/field.d.ts +5 -3
  233. package/dist-elements/types/components/inputs/file-upload/file-upload.d.ts +8 -10
  234. package/dist-elements/types/components/inputs/find/find.d.ts +51 -0
  235. package/dist-elements/types/components/inputs/multiselect/multiselect.d.ts +4 -6
  236. package/dist-elements/types/components/inputs/number-input/number-input.d.ts +8 -7
  237. package/dist-elements/types/components/inputs/radio-group/radio-group.d.ts +2 -4
  238. package/dist-elements/types/components/inputs/range/range.d.ts +5 -6
  239. package/dist-elements/types/components/inputs/segmented/segmented.d.ts +7 -4
  240. package/dist-elements/types/components/inputs/select/select.d.ts +6 -3
  241. package/dist-elements/types/components/inputs/shared/input.d.ts +1 -1
  242. package/dist-elements/types/components/inputs/slot-picker/slot-picker.d.ts +6 -5
  243. package/dist-elements/types/components/inputs/tag-input/tag-input.d.ts +8 -6
  244. package/dist-elements/types/components/inputs/text-editor/text-editor.d.ts +8 -8
  245. package/dist-elements/types/components/inputs/text-input/text-input.d.ts +12 -7
  246. package/dist-elements/types/components/inputs/textarea/textarea.d.ts +12 -11
  247. package/dist-elements/types/components/inputs/time-input/time-input.d.ts +8 -9
  248. package/dist-elements/types/components/inputs/toggle/toggle.d.ts +3 -1
  249. package/dist-elements/types/components/layout/expander/expander.d.ts +10 -11
  250. package/dist-elements/types/{primitives → components/layout}/grid/grid.d.ts +4 -4
  251. package/dist-elements/types/{primitives → components/layout}/grid-item/grid-item.d.ts +2 -2
  252. package/dist-elements/types/components/layout/split-pane/split-pane.d.ts +6 -6
  253. package/dist-elements/types/components/layout/tabs/tabs.d.ts +12 -10
  254. package/dist-elements/types/{primitives → components/layout}/tile/tile.d.ts +22 -10
  255. package/dist-elements/types/components/map/map/map.d.ts +12 -11
  256. package/dist-elements/types/components/overlays/dialog/dialog.d.ts +49 -0
  257. package/dist-elements/types/components/overlays/drawer/drawer.d.ts +6 -5
  258. package/dist-elements/types/components/overlays/modal/modal.d.ts +9 -14
  259. package/dist-elements/types/{primitives → components/overlays}/popover/popover.d.ts +7 -6
  260. package/dist-elements/types/components/overlays/toggletip/toggletip.d.ts +4 -8
  261. package/dist-elements/types/{primitives → components/overlays}/tooltip/tooltip.d.ts +8 -8
  262. package/dist-elements/types/components/shared/announcement-block.d.ts +38 -0
  263. package/dist-elements/types/components/shared/charts/index.d.ts +5 -1
  264. package/dist-elements/types/components/shared/charts/kinds.d.ts +92 -0
  265. package/dist-elements/types/components/shared/charts/line-chart/line-chart.d.ts +2 -2
  266. package/dist-elements/types/components/shared/charts/map-chart/leaflet.d.ts +5 -0
  267. package/dist-elements/types/components/shared/charts/map-chart/map-chart.d.ts +1 -1
  268. package/dist-elements/types/components/shared/charts/radar-chart/radar-chart.d.ts +31 -0
  269. package/dist-elements/types/components/shared/charts/shared/axes.d.ts +3 -1
  270. package/dist-elements/types/components/shared/charts/shared/chart-states.d.ts +8 -19
  271. package/dist-elements/types/components/shared/charts/shared/controller.d.ts +12 -0
  272. package/dist-elements/types/components/shared/charts/shared/types.d.ts +62 -0
  273. package/dist-elements/types/components/shared/charts/stacked-area-chart/stacked-area-chart.d.ts +13 -0
  274. package/dist-elements/types/components/shared/content-tile.d.ts +1 -1
  275. package/dist-elements/types/components/{forms/form → shared}/controls.d.ts +3 -2
  276. package/dist-elements/types/components/shared/dialog.d.ts +9 -0
  277. package/dist-elements/types/components/shared/empty-state-block.d.ts +26 -0
  278. package/dist-elements/types/components/shared/overflow.d.ts +58 -0
  279. package/dist-elements/types/components/shared/tone.d.ts +18 -0
  280. package/dist-elements/types/components/tables/activity-log/activity-log.d.ts +3 -4
  281. package/dist-elements/types/components/tables/card/card.d.ts +17 -23
  282. package/dist-elements/types/components/tables/card-list/card-list.d.ts +9 -11
  283. package/dist-elements/types/components/tables/data-table/actions.d.ts +1 -1
  284. package/dist-elements/types/components/tables/data-table/data-table.d.ts +88 -19
  285. package/dist-elements/types/components/tables/data-table/editing.d.ts +1 -1
  286. package/dist-elements/types/components/tables/data-table/filters.d.ts +15 -6
  287. package/dist-elements/types/components/tables/description-list/description-list.d.ts +13 -12
  288. package/dist-elements/types/components/tables/list/list.d.ts +13 -24
  289. package/dist-elements/types/components/tables/pagination/pagination.d.ts +12 -11
  290. package/dist-elements/types/components/tables/sortable-list/sortable-list.d.ts +5 -6
  291. package/dist-elements/types/components/tables/tree-view/tree-view.d.ts +5 -5
  292. package/dist-elements/types/core/focus.d.ts +1 -1
  293. package/dist-elements/types/core/media.d.ts +2 -2
  294. package/dist-elements/types/core/motion.d.ts +5 -0
  295. package/dist-elements/types/core/print.d.ts +15 -0
  296. package/dist-elements/types/core/shortcuts.d.ts +2 -2
  297. package/dist-elements/types/icons/register.d.ts +1 -1
  298. package/dist-elements/types/types.d.ts +70 -10
  299. package/dist-icons/functioneel-kolommen.svg +1 -0
  300. package/dist-icons/functioneel-trechter.svg +1 -0
  301. package/package.json +1 -1
  302. package/dist-elements/chunks/confirm-dialog-D5EVGuil.js +0 -4
  303. package/dist-elements/chunks/download-y528pIHP.js +0 -230
  304. package/dist-elements/chunks/input-BtuNFSWk.js +0 -195
  305. package/dist-elements/tag/confirm-dialog.d.ts +0 -1
  306. package/dist-elements/tag/confirm-dialog.js +0 -118
  307. package/dist-elements/tag/session-expiry.d.ts +0 -1
  308. package/dist-elements/tag/session-expiry.js +0 -184
  309. package/dist-elements/tag/shortcuts.d.ts +0 -1
  310. package/dist-elements/tag/shortcuts.js +0 -104
  311. package/dist-elements/types/components/frame/session-expiry/session-expiry.d.ts +0 -55
  312. package/dist-elements/types/components/frame/shortcuts/shortcuts.d.ts +0 -41
  313. package/dist-elements/types/components/overlays/confirm-dialog/confirm-dialog.d.ts +0 -41
  314. package/dist-elements/types/primitives/index.d.ts +0 -33
  315. /package/dist-elements/types/components/content/{audio-player → shared}/playback.d.ts +0 -0
  316. /package/dist-elements/types/components/content/{audio-player → shared}/player.d.ts +0 -0
  317. /package/dist-elements/types/components/{inputs/date-input → shared}/date-format.d.ts +0 -0
  318. /package/dist-elements/types/{primitives → components}/shared/grid-item-element.d.ts +0 -0
  319. /package/dist-elements/types/{primitives → components}/shared/length.d.ts +0 -0
  320. /package/dist-elements/types/{primitives → components}/shared/place.d.ts +0 -0
@@ -1,6 +1,6 @@
1
- import { $ as e, A as t, Bt as n, Gt as r, H as i, Ht as a, I as o, It as s, Lt as c, Nt as l, Ot as u, Pt as d, Rt as ee, Tt as te, U as f, W as p, X as m, Y as ne, Z as h, et as g, qt as _, zt as v } from "../chunks/base-Bg-IFOPG.js";
1
+ import { $ as e, Gt as t, H as n, Ht as r, I as i, Jt as a, Kt as o, Lt as s, Pt as c, Q as l, Ut as u, Yt as ee, Z as d, Zt as f, at as p, en as m, lt as te, nn as h, ot as g, qt as ne, st as _, ut as v } from "../chunks/base-DRGvkF-r.js";
2
2
  import "./logo.js";
3
- import { n as y, r as re, t as b } from "../chunks/focus-trap-9BnE-xWv.js";
3
+ import { n as y, r as re, t as b } from "../chunks/focus-trap-Dv8zu64A.js";
4
4
  import "./toast.js";
5
5
  import "./qr-code.js";
6
6
  import { t as ie } from "../chunks/dialog-close-u75fVEw4.js";
@@ -14,86 +14,86 @@ var x = {
14
14
  phone: 40
15
15
  };
16
16
  function oe(e) {
17
- let { logo: t, emblem: n, ribbon: i, environment: a, home: s } = e, c = _`<lintje-logo
17
+ let { logo: t, emblem: r, ribbon: i, environment: a, home: o } = e, s = h`<lintje-logo
18
18
  full
19
19
  width=${i}
20
- src=${t ?? r}
21
- name=${n?.name ?? r}
22
- alt=${n?.label ?? r}
23
- byline=${n?.byline ?? r}
20
+ src=${t ?? m}
21
+ name=${r?.name ?? m}
22
+ alt=${r?.label ?? m}
23
+ byline=${r?.byline ?? m}
24
24
  ></lintje-logo>`;
25
- return _`<div class="lintje-logobar">
26
- ${s ? _`<a
25
+ return h`<div class="lintje-logobar">
26
+ ${o ? h`<a
27
27
  class="lintje-logobar__home focus-inset"
28
- href=${s.href}
28
+ href=${o.href}
29
29
  aria-label="Naar de startpagina"
30
30
  title="Naar de startpagina"
31
31
  @click=${(e) => {
32
- o(e) && s.onNavigate(e);
32
+ n(e) && o.onNavigate(e);
33
33
  }}
34
- >${c}</a
35
- >` : c}
36
- ${a ? _`<p class="lintje-logobar__environment" title=${a}>
34
+ >${s}</a
35
+ >` : s}
36
+ ${a ? h`<p class="lintje-logobar__environment" title=${a}>
37
37
  <span class="lintje-logobar__environment-label">${a}</span>
38
38
  <span class="lintje-logobar__environment-short" aria-hidden="true"
39
39
  >${a.slice(0, 3)}</span
40
40
  >
41
- </p>` : r}
41
+ </p>` : m}
42
42
  </div>`;
43
43
  }
44
44
  var S = (e) => !!e.href && !e.noAccess;
45
45
  function C(e) {
46
- return _`<span class="visually-hidden"
46
+ return h`<span class="visually-hidden"
47
47
  >${e.noAccess ? ", geen toegang" : ", niet beschikbaar"}</span
48
48
  >`;
49
49
  }
50
- function w(e, t, n) {
51
- o(n) && (e.onOpen(null), e.onNavigate(t, n));
50
+ function w(e, t, r) {
51
+ n(r) && (e.onOpen(null), e.onNavigate(t, r));
52
52
  }
53
53
  function se(e) {
54
54
  let t = e.badge;
55
- return t ? m({
55
+ return t ? g({
56
56
  value: t.value,
57
57
  variant: t.tone === "new" ? "label" : t.tone === "action" ? "unread" : "count",
58
58
  label: t.label,
59
59
  className: "lintje-navbar__badge"
60
- }) : r;
60
+ }) : m;
61
61
  }
62
62
  function ce(e, t) {
63
- if (!S(t)) return _`<span class="lintje-navbar__entry is-unavailable" aria-disabled="true"
63
+ if (!S(t)) return h`<span class="lintje-navbar__entry is-unavailable" aria-disabled="true"
64
64
  >${t.label}${C(t)}</span
65
65
  >`;
66
66
  let n = !!t.active;
67
- return _`<a
68
- class=${h({
67
+ return h`<a
68
+ class=${_({
69
69
  "lintje-navbar__entry": !0,
70
70
  "focus-inset": !0,
71
71
  "is-active": n
72
72
  })}
73
73
  href=${t.href}
74
- aria-current=${n ? "page" : r}
74
+ aria-current=${n ? "page" : m}
75
75
  @click=${(n) => w(e, t, n)}
76
76
  ><span class="lintje-navbar__label">${t.label}</span></a
77
77
  >`;
78
78
  }
79
79
  function le(e, t) {
80
- let n = _`${g(t.icon, {
80
+ let n = h`${v(t.icon, {
81
81
  size: 20,
82
82
  src: t.iconSrc
83
83
  })}
84
84
  <span class="lintje-navbar__page-text">
85
85
  <span class="lintje-navbar__label">${t.label}</span>
86
- ${t.metric ? _`<span class="lintje-navbar__metric"
86
+ ${t.metric ? h`<span class="lintje-navbar__metric"
87
87
  ><span class="lintje-navbar__metric-value">${t.metric.value}</span> ${t.metric.label}</span
88
- >` : r}
88
+ >` : m}
89
89
  </span>
90
- ${t.noAccess ? g("gebruiksvoorwerpen-hangslot-dicht", {
90
+ ${t.noAccess ? v("gebruiksvoorwerpen-hangslot-dicht", {
91
91
  size: 16,
92
92
  label: "Geen toegang"
93
- }) : S(t) ? r : C(t)}
93
+ }) : S(t) ? m : C(t)}
94
94
  ${se(t)}`;
95
- if (!S(t)) return _`<span
96
- class=${h({
95
+ if (!S(t)) return h`<span
96
+ class=${_({
97
97
  "lintje-navbar__page": !0,
98
98
  "is-unavailable": !0,
99
99
  "is-no-access": !!t.noAccess
@@ -101,51 +101,51 @@ function le(e, t) {
101
101
  aria-disabled="true"
102
102
  >${n}</span
103
103
  >`;
104
- let i = !!t.active;
105
- return _`<a
106
- class=${h({
104
+ let r = !!t.active;
105
+ return h`<a
106
+ class=${_({
107
107
  "lintje-navbar__page": !0,
108
- "is-active": i
108
+ "is-active": r
109
109
  })}
110
110
  href=${t.href}
111
- aria-current=${i ? "page" : r}
111
+ aria-current=${r ? "page" : m}
112
112
  @click=${(n) => w(e, t, n)}
113
113
  >${n}</a
114
114
  >`;
115
115
  }
116
- function T(e, t, n, i, a, o, s = {}) {
117
- let c = e.open === t, l = t === -1, u = `${n}-entry`;
118
- return _`<div class="lintje-navbar__group">
116
+ function T(e, t, n, r, i, a, o = {}) {
117
+ let s = e.open === t, c = t === -1, l = `${n}-entry`;
118
+ return h`<div class="lintje-navbar__group">
119
119
  <button
120
120
  type="button"
121
- id=${u}
122
- class=${h({
121
+ id=${l}
122
+ class=${_({
123
123
  "lintje-navbar__entry": !0,
124
124
  "lintje-navbar__entry--group": !0,
125
125
  "focus-inset": !0,
126
- "is-active": a,
127
- "is-open": c,
128
- ...s
126
+ "is-active": i,
127
+ "is-open": s,
128
+ ...o
129
129
  })}
130
- aria-expanded=${String(c)}
130
+ aria-expanded=${String(s)}
131
131
  aria-controls=${n}
132
132
  @click=${(n) => {
133
- e.onOpen(c && (l || n.detail === 0) ? null : t);
133
+ e.onOpen(s && (c || n.detail === 0) ? null : t);
134
134
  }}
135
- @mouseenter=${l ? r : () => e.onOpen(t)}
135
+ @mouseenter=${c ? m : () => e.onOpen(t)}
136
136
  >
137
- ${l ? c ? _`<span class="lintje-navbar__label">Sluiten</span>${g("functioneel-kruis", { size: 16 })}` : _`${g("functioneel-menu", { size: 16 })}<span class="lintje-navbar__label">${i}</span>` : _`<span class="lintje-navbar__label">${i}</span>
138
- ${g("functioneel-delta-omlaag", {
137
+ ${c ? s ? h`<span class="lintje-navbar__label">Sluiten</span>${v("functioneel-kruis", { size: 16 })}` : h`${v("functioneel-menu", { size: 16 })}<span class="lintje-navbar__label">${r}</span>` : h`<span class="lintje-navbar__label">${r}</span>
138
+ ${v("functioneel-delta-omlaag", {
139
139
  size: 16,
140
- rotate: c ? 180 : void 0
140
+ rotate: s ? 180 : void 0
141
141
  })}`}
142
142
  </button>
143
- ${c ? _`<div id=${n} class="lintje-navbar__submenu">${o(u)}</div>` : r}
143
+ ${s ? h`<div id=${n} class="lintje-navbar__submenu">${a(l)}</div>` : m}
144
144
  </div>`;
145
145
  }
146
146
  function E(e, t, n) {
147
- return _`<ul class="lintje-navbar__pages" aria-labelledby=${n}>
148
- ${t.map((t) => _`<li class="lintje-navbar__item">${le(e, t)}</li>`)}
147
+ return h`<ul class="lintje-navbar__pages" aria-labelledby=${n}>
148
+ ${t.map((t) => h`<li class="lintje-navbar__item">${le(e, t)}</li>`)}
149
149
  </ul>`;
150
150
  }
151
151
  var ue = (e) => e.some((e) => S(e) && !!e.active);
@@ -154,49 +154,49 @@ function de(e, t, n) {
154
154
  }
155
155
  function fe(e) {
156
156
  let t = `${e.id}-menu`, n = e.groups.filter((e) => !e.heading).flatMap((e) => e.items);
157
- return T(e, -1, t, "Menu", !1, (i) => _`${n.length ? E(e, n, i) : r}
158
- ${e.groups.map((n, i) => {
159
- if (!n.heading) return r;
160
- let a = `${t}-heading-${i}`;
161
- return _`<p id=${a} class="lintje-navbar__heading">${n.heading}</p>
162
- ${E(e, n.items, a)}`;
157
+ return T(e, -1, t, "Menu", !1, (r) => h`${n.length ? E(e, n, r) : m}
158
+ ${e.groups.map((n, r) => {
159
+ if (!n.heading) return m;
160
+ let i = `${t}-heading-${r}`;
161
+ return h`<p id=${i} class="lintje-navbar__heading">${n.heading}</p>
162
+ ${E(e, n.items, i)}`;
163
163
  })}`, { "lintje-navbar__entry--menu": !0 });
164
164
  }
165
165
  function pe(e) {
166
166
  let t = !!e.collapsed;
167
- return _`<div class="lintje-navbar" @mouseleave=${() => {
167
+ return h`<div class="lintje-navbar" @mouseleave=${() => {
168
168
  e.open !== -1 && e.onOpen(null);
169
169
  }}>
170
170
  <div class="lintje-navbar__start">
171
- ${e.start ?? r}
171
+ ${e.start ?? m}
172
172
  <nav class="lintje-navbar__entries" aria-label="Hoofdnavigatie">
173
173
  <div
174
- class=${h({
174
+ class=${_({
175
175
  "lintje-navbar__list": !0,
176
176
  "is-hidden": t
177
177
  })}
178
178
  ?inert=${t}
179
- aria-hidden=${t ? "true" : r}
179
+ aria-hidden=${t ? "true" : m}
180
180
  >
181
181
  ${e.groups.map((t, n) => t.heading ? de(e, t, n) : t.items.map((t) => ce(e, t)))}
182
182
  </div>
183
- ${t ? fe(e) : r}
183
+ ${t ? fe(e) : m}
184
184
  </nav>
185
185
  </div>
186
- ${e.end ? _`<div class="lintje-navbar__end">${e.end}</div>` : r}
186
+ ${e.end ? h`<div class="lintje-navbar__end">${e.end}</div>` : m}
187
187
  </div>`;
188
188
  }
189
189
  var me = class {
190
190
  #e;
191
191
  #t;
192
192
  #n;
193
- constructor(e) {
194
- this.host = e, this.collapsed = !1, this.#t = null, this.#n = [], this.#i = (e) => {
195
- if (e.key !== "Escape" || this.host.openGroup === null) return;
196
- let t = this.#r;
197
- if (t && !p(t)) return;
198
- let n = this.host.renderRoot.querySelector(".lintje-navbar__entry[aria-expanded=\"true\"]"), r = n?.parentElement, i = r ? f(r) : !1;
199
- this.host.openGroup = null, i && n?.focus();
193
+ constructor(n) {
194
+ this.host = n, this.collapsed = !1, this.#t = null, this.#n = [], this.#i = (t) => {
195
+ if (t.key !== "Escape" || this.host.openGroup === null) return;
196
+ let n = this.#r;
197
+ if (n && !e(n)) return;
198
+ let r = this.host.renderRoot.querySelector(".lintje-navbar__entry[aria-expanded=\"true\"]"), i = r?.parentElement, a = i ? l(i) : !1;
199
+ this.host.openGroup = null, a && r?.focus();
200
200
  }, this.#a = (e) => {
201
201
  if (this.host.openGroup === null) return;
202
202
  let t = this.#r;
@@ -205,7 +205,7 @@ var me = class {
205
205
  if (this.host.openGroup === null) return;
206
206
  let t = e.relatedTarget, n = this.#r;
207
207
  t && n && !n.contains(t) && (this.host.openGroup = null);
208
- }, e.addController(this), this.#e = new c(e, s);
208
+ }, n.addController(this), this.#e = new o(n, t);
209
209
  }
210
210
  get #r() {
211
211
  return this.host.renderRoot.querySelector(".lintje-navbar");
@@ -248,14 +248,14 @@ var me = class {
248
248
  }
249
249
  };
250
250
  function he(e) {
251
- return e ? _`<div class="lintje-header-scrim" aria-hidden="true"></div>` : r;
251
+ return e ? h`<div class="lintje-header-scrim" aria-hidden="true"></div>` : m;
252
252
  }
253
253
  //#endregion
254
254
  //#region src/components/frame/shell/navigation.ts
255
255
  var D = "Menu vastzetten";
256
256
  function ge(e) {
257
- let t = g(e ? "functioneel-punaise" : "functioneel-punaise-outline", { size: 16 });
258
- return t === r ? {
257
+ let t = v(e ? "functioneel-punaise" : "functioneel-punaise-outline", { size: 16 });
258
+ return t === m ? {
259
259
  content: "Vastzetten",
260
260
  asText: !0
261
261
  } : {
@@ -270,7 +270,7 @@ function O(e, t) {
270
270
  return !1;
271
271
  }
272
272
  }
273
- var k = (e) => f(e) && O(i(), ":focus-visible");
273
+ var k = (e) => l(e) && O(d(), ":focus-visible");
274
274
  function _e(e, t) {
275
275
  return {
276
276
  mouseenter: () => {
@@ -288,10 +288,10 @@ function _e(e, t) {
288
288
  },
289
289
  keydown: async (n) => {
290
290
  if (n.key !== "Escape" || !t || !e.railExpanded) return;
291
- let r = n.currentTarget, a = i(), o = re(r), s = a ? o.indexOf(a) : -1, c = (e) => !!e.closest(".lintje-nav__pin, .lintje-nav__logout");
292
- if (e.railExpanded = !1, s < 0 || !c(o[s])) return;
293
- let l = (e) => !c(e), u = o.slice(0, s).reverse().find(l) ?? o.slice(s + 1).find(l);
294
- await e.updateComplete, u?.isConnected && (e.railRefocus = !0, y(u).focus());
291
+ let r = n.currentTarget, i = d(), a = re(r), o = i ? a.indexOf(i) : -1, s = (e) => !!e.closest(".lintje-nav__pin, .lintje-nav__logout");
292
+ if (e.railExpanded = !1, o < 0 || !s(a[o])) return;
293
+ let c = (e) => !s(e), l = a.slice(0, o).reverse().find(c) ?? a.slice(o + 1).find(c);
294
+ await e.updateComplete, l?.isConnected && (e.railRefocus = !0, y(l).focus());
295
295
  }
296
296
  };
297
297
  }
@@ -301,15 +301,15 @@ var ve = class {
301
301
  #n;
302
302
  constructor(e) {
303
303
  this.#t = null, this.#n = null, this.draw = () => {
304
- let e = this.#r, n = this.#e.renderRoot.querySelector(".lintje-nav__thumb");
305
- if (this.#i(e), !e || !n) return;
306
- let r = e.clientHeight, i = e.scrollHeight;
307
- if (i <= r + 1) {
308
- n.style.height = "0px", n.style.transform = "";
304
+ let e = this.#r, t = this.#e.renderRoot.querySelector(".lintje-nav__thumb");
305
+ if (this.#i(e), !e || !t) return;
306
+ let n = e.clientHeight, r = e.scrollHeight;
307
+ if (r <= n + 1) {
308
+ t.style.height = "0px", t.style.transform = "";
309
309
  return;
310
310
  }
311
- let a = Math.max(t(this.#e, "--space-8", 32), Math.round(r * r / i)), o = e.offsetTop + Math.round(e.scrollTop / (i - r) * (r - a));
312
- n.style.height = `${a}px`, n.style.transform = `translateY(${o}px)`;
311
+ let a = Math.max(i(this.#e, "--space-8", 32), Math.round(n * n / r)), o = e.offsetTop + Math.round(e.scrollTop / (r - n) * (n - a));
312
+ t.style.height = `${a}px`, t.style.transform = `translateY(${o}px)`;
313
313
  }, this.grab = (e) => {
314
314
  let t = e.currentTarget, n = this.#r;
315
315
  if (!n || e.button !== 0) return;
@@ -343,122 +343,122 @@ var ve = class {
343
343
  }
344
344
  };
345
345
  function A(e) {
346
- let t = g("gebruiksvoorwerpen-hangslot-dicht", {
346
+ let t = v("gebruiksvoorwerpen-hangslot-dicht", {
347
347
  size: 16,
348
348
  label: "Geen toegang"
349
349
  });
350
- return t === r ? _`<span class=${e}>geen toegang</span>` : t;
350
+ return t === m ? h`<span class=${e}>geen toegang</span>` : t;
351
351
  }
352
352
  var j = (e) => `v${e.replace(/^v/, "")}`, M = (e) => e.label ?? "Vragen of feedback";
353
- function N(e, t, n, i) {
354
- let a = e.data, s = _`<lintje-logo
355
- width=${n}
356
- src=${a?.logo ?? r}
357
- name=${a?.emblem?.name ?? r}
358
- alt=${a?.emblem?.label ?? r}
359
- ></lintje-logo>`, c = a?.home;
360
- return c ? _`<a
361
- href=${c}
353
+ function N(e, t, r, i) {
354
+ let a = e.data, o = h`<lintje-logo
355
+ width=${r}
356
+ src=${a?.logo ?? m}
357
+ name=${a?.emblem?.name ?? m}
358
+ alt=${a?.emblem?.label ?? m}
359
+ ></lintje-logo>`, s = a?.home;
360
+ return s ? h`<a
361
+ href=${s}
362
362
  class=${t}
363
363
  aria-label="Naar de startpagina"
364
364
  title="Naar de startpagina"
365
365
  @click=${(t) => {
366
- o(t) && (i?.(), e.follow(c, t));
366
+ n(t) && (i?.(), e.follow(s, t));
367
367
  }}
368
- >${s}</a
369
- >` : _`<span class=${t}>${s}</span>`;
368
+ >${o}</a
369
+ >` : h`<span class=${t}>${o}</span>`;
370
370
  }
371
- function P(e, t, n) {
372
- let i = S(t), a = !i, s = _`
373
- ${g(t.icon, {
371
+ function P(e, t, r) {
372
+ let i = S(t), a = !i, o = h`
373
+ ${v(t.icon, {
374
374
  size: 20,
375
375
  src: t.iconSrc
376
376
  })}
377
- ${n ? _`<span class="lintje-nav__label">${t.label}</span>` : _`<span class="visually-hidden">${t.label}</span>`}
378
- ${n && t.metric ? _`<span class="lintje-nav__metric">${t.metric.value}</span>` : r}
379
- ${t.noAccess && n ? A("lintje-nav__metric") : r}
380
- ${!i && !(t.noAccess && n) ? C(t) : r}
381
- ${t.badge ? m({
377
+ ${r ? h`<span class="lintje-nav__label">${t.label}</span>` : h`<span class="visually-hidden">${t.label}</span>`}
378
+ ${r && t.metric ? h`<span class="lintje-nav__metric">${t.metric.value}</span>` : m}
379
+ ${t.noAccess && r ? A("lintje-nav__metric") : m}
380
+ ${!i && !(t.noAccess && r) ? C(t) : m}
381
+ ${t.badge ? g({
382
382
  value: t.badge.value,
383
383
  variant: t.badge.tone === "new" ? "label" : "unread",
384
384
  surface: t.badge.tone === "action" && !a ? void 0 : "nav",
385
385
  muted: a,
386
386
  label: t.badge.label,
387
387
  className: `lintje-nav__badge lintje-nav__badge--${t.badge.tone}`
388
- }) : r}
388
+ }) : m}
389
389
  `;
390
- return i ? _`<a
390
+ return i ? h`<a
391
391
  href=${t.href}
392
- class=${h({
392
+ class=${_({
393
393
  "lintje-nav__item": !0,
394
394
  "is-active": !!t.active
395
395
  })}
396
- aria-current=${t.active ? "page" : r}
397
- @click=${(n) => {
398
- o(n) && e.follow(t.href, n);
396
+ aria-current=${t.active ? "page" : m}
397
+ @click=${(r) => {
398
+ n(r) && e.follow(t.href, r);
399
399
  }}
400
- >${s}</a
401
- >` : _`<span
402
- class=${h({
400
+ >${o}</a
401
+ >` : h`<span
402
+ class=${_({
403
403
  "lintje-nav__item": !0,
404
404
  "is-no-page": !t.noAccess,
405
405
  "is-no-access": !!t.noAccess
406
406
  })}
407
407
  aria-disabled="true"
408
- title=${n ? r : t.label}
409
- >${s}</span
408
+ title=${r ? m : t.label}
409
+ >${o}</span
410
410
  >`;
411
411
  }
412
412
  function F(e, t) {
413
- let n = e.data, i = n?.menu ?? "pinned", a = e.wide.matches, o = i === "unpinned" || !a, s = !o || e.railExpanded, c = ge(i === "pinned"), l = _e(e, o);
414
- return _`
413
+ let n = e.data, r = n?.menu ?? "pinned", i = e.wide.matches, a = r === "unpinned" || !i, o = !a || e.railExpanded, s = ge(r === "pinned"), c = _e(e, a);
414
+ return h`
415
415
  <nav
416
- class=${h({
416
+ class=${_({
417
417
  "lintje-nav": !0,
418
- "lintje-nav--rail": o,
418
+ "lintje-nav--rail": a,
419
419
  "is-expanded": e.railExpanded
420
420
  })}
421
421
  aria-label="Hoofdnavigatie"
422
- @mouseenter=${l.mouseenter}
423
- @mouseleave=${l.mouseleave}
424
- @focusin=${l.focusin}
425
- @focusout=${l.focusout}
426
- @keydown=${l.keydown}
422
+ @mouseenter=${c.mouseenter}
423
+ @mouseleave=${c.mouseleave}
424
+ @focusin=${c.focusin}
425
+ @focusout=${c.focusout}
426
+ @keydown=${c.keydown}
427
427
  >
428
428
  <div class="lintje-nav__header">
429
429
  ${N(e, "lintje-nav__home", 44)}
430
- ${s && a ? _`<button
430
+ ${o && i ? h`<button
431
431
  type="button"
432
- class=${h({
432
+ class=${_({
433
433
  "lintje-nav__pin": !0,
434
- "lintje-nav__pin--text": c.asText
434
+ "lintje-nav__pin--text": s.asText
435
435
  })}
436
- aria-pressed=${i === "pinned"}
437
- aria-label=${c.asText ? r : D}
436
+ aria-pressed=${r === "pinned"}
437
+ aria-label=${s.asText ? m : D}
438
438
  title=${D}
439
439
  @click=${(t) => {
440
- e.changeView({ menu: i === "pinned" ? "unpinned" : "pinned" });
440
+ e.changeView({ menu: r === "pinned" ? "unpinned" : "pinned" });
441
441
  let n = t.currentTarget.closest(".lintje-nav");
442
442
  (!n || !k(n)) && (e.railExpanded = !1);
443
443
  }}
444
444
  >
445
- ${c.content}
446
- </button>` : r}
445
+ ${s.content}
446
+ </button>` : m}
447
447
  </div>
448
448
 
449
449
  <div class="lintje-nav__list" @scroll=${e.navScrollbar.draw}>
450
- ${t.map((t, n) => _`<div
450
+ ${t.map((t, n) => h`<div
451
451
  class="lintje-nav__group"
452
- role=${t.heading ? "group" : r}
453
- aria-labelledby=${t.heading ? `lintje-nav-group-${n}` : r}
452
+ role=${t.heading ? "group" : m}
453
+ aria-labelledby=${t.heading ? `lintje-nav-group-${n}` : m}
454
454
  >
455
455
  <!-- One element in both states, with a fixed height: the text heading when
456
456
  expanded, a line in the same spot in the rail. -->
457
- ${t.heading ? _`<p class="lintje-nav__section-heading" id=${`lintje-nav-group-${n}`}>
457
+ ${t.heading ? h`<p class="lintje-nav__section-heading" id=${`lintje-nav-group-${n}`}>
458
458
  <span class="lintje-nav__section-label">${t.heading}</span>
459
459
  <span class="lintje-nav__separator" aria-hidden="true"></span>
460
- </p>` : r}
461
- ${t.items.map((t) => P(e, t, s))}
460
+ </p>` : m}
461
+ ${t.items.map((t) => P(e, t, o))}
462
462
  </div>`)}
463
463
  </div>
464
464
  <!-- The list's scrollbar, right after it: its focus shows the thumb. -->
@@ -468,57 +468,57 @@ function F(e, t) {
468
468
  @pointerdown=${e.navScrollbar.grab}
469
469
  ></span>
470
470
 
471
- ${n?.environment ? _`<p class="lintje-nav__environment" title=${n.environment}>
471
+ ${n?.environment ? h`<p class="lintje-nav__environment" title=${n.environment}>
472
472
  <!-- Both texts always in the DOM, like the headings: the short one for the rail. -->
473
473
  <span class="lintje-nav__environment-label">${n.environment}</span>
474
474
  <span class="lintje-nav__environment-short" aria-hidden="true"
475
475
  >${n.environment.slice(0, 3)}</span
476
476
  >
477
- </p>` : r}
478
- ${ye(e, s)}
479
- ${n?.user ? _`<div class="lintje-nav__footer">
477
+ </p>` : m}
478
+ ${ye(e, o)}
479
+ ${n?.user ? h`<div class="lintje-nav__footer">
480
480
  <span class="lintje-nav__avatar">${n.user.initials}</span>
481
481
  <!-- Always in the DOM; the rail hides it with opacity. -->
482
482
  <span class="lintje-nav__user">
483
483
  <b>${n.user.name}</b>
484
- ${n.user.role ? _`<span class="lintje-nav__role">${n.user.role}</span>` : r}
484
+ ${n.user.role ? h`<span class="lintje-nav__role">${n.user.role}</span>` : m}
485
485
  </span>
486
- ${n.logout ? be(n.logout, "lintje-nav__logout-button", s) : r}
487
- </div>` : r}
486
+ ${n.logout ? be(n.logout, "lintje-nav__logout-button", o) : m}
487
+ </div>` : m}
488
488
  </nav>
489
489
  <!-- Darkens the page while the rail lies over it expanded; purely visual. -->
490
- ${o ? _`<div
491
- class=${h({
490
+ ${a ? h`<div
491
+ class=${_({
492
492
  "lintje-nav__scrim": !0,
493
493
  "is-visible": e.railExpanded
494
494
  })}
495
495
  aria-hidden="true"
496
- ></div>` : r}
496
+ ></div>` : m}
497
497
  `;
498
498
  }
499
499
  function ye(e, t) {
500
- let n = e.data, i = n?.version ? j(n.version) : null;
500
+ let n = e.data, r = n?.version ? j(n.version) : null;
501
501
  if (n?.feedback) {
502
502
  let e = M(n.feedback);
503
- return _`<a class="lintje-nav__item lintje-nav__feedback" href=${n.feedback.href}>
504
- ${g("functioneel-mail", {
503
+ return h`<a class="lintje-nav__item lintje-nav__feedback" href=${n.feedback.href}>
504
+ ${v("functioneel-mail", {
505
505
  size: 20,
506
506
  label: t ? void 0 : e
507
507
  })}
508
- ${t ? _`<span class="lintje-nav__label">${e}</span>` : r}
509
- ${t && i ? _`<span class="lintje-nav__metric lintje-nav__version">${i}</span>` : r}
508
+ ${t ? h`<span class="lintje-nav__label">${e}</span>` : m}
509
+ ${t && r ? h`<span class="lintje-nav__metric lintje-nav__version">${r}</span>` : m}
510
510
  </a>`;
511
511
  }
512
- return i ? _`<p class="lintje-nav__version-row">
513
- ${t ? _`<span class="lintje-nav__metric lintje-nav__version">${i}</span>` : r}
514
- </p>` : r;
512
+ return r ? h`<p class="lintje-nav__version-row">
513
+ ${t ? h`<span class="lintje-nav__metric lintje-nav__version">${r}</span>` : m}
514
+ </p>` : m;
515
515
  }
516
516
  function be(e, t, n) {
517
- let i = "Afmelden", a = g("functioneel-uitloggen", { size: 18 });
518
- return _`<form class="lintje-nav__logout" method="post" action=${e.href} ?hidden=${!n}>
517
+ let r = "Afmelden", i = v("functioneel-uitloggen", { size: 18 });
518
+ return h`<form class="lintje-nav__logout" method="post" action=${e.href} ?hidden=${!n}>
519
519
  <input type="hidden" name="csrf_token" value=${e.token} />
520
- <button type="submit" class=${t} aria-label=${i} title=${i}>
521
- ${a === r ? _`<span class="lintje-nav__logout-text">${i}</span>` : a}
520
+ <button type="submit" class=${t} aria-label=${r} title=${r}>
521
+ ${i === m ? h`<span class="lintje-nav__logout-text">${r}</span>` : i}
522
522
  </button>
523
523
  </form>`;
524
524
  }
@@ -542,7 +542,7 @@ var xe = [
542
542
  }
543
543
  ];
544
544
  function I(e, t, n) {
545
- return e.mobile.matches ? _`<div class="lintje-share__header">
545
+ return e.mobile.matches ? h`<div class="lintje-share__header">
546
546
  <h2 class="lintje-share__title" id="lintje-sheet-title">${t}</h2>
547
547
  <button
548
548
  type="button"
@@ -550,52 +550,52 @@ function I(e, t, n) {
550
550
  aria-label="${t} sluiten"
551
551
  @click=${n}
552
552
  >
553
- ${g("functioneel-kruis", { size: 16 })}
553
+ ${v("functioneel-kruis", { size: 16 })}
554
554
  </button>
555
- </div>` : r;
555
+ </div>` : m;
556
556
  }
557
557
  function Se(e) {
558
558
  return [e?.pageName, e?.name].filter(Boolean).join(" – ");
559
559
  }
560
560
  function L(e) {
561
- let t = g(e, { size: 16 });
562
- return t === r ? _`<span class="lintje-share__gap" aria-hidden="true"></span>` : t;
561
+ let t = v(e, { size: 16 });
562
+ return t === m ? h`<span class="lintje-share__gap" aria-hidden="true"></span>` : t;
563
563
  }
564
564
  function Ce(e) {
565
565
  let t = e.data, n = e.store.state.titleHidden;
566
- return _`<header class="lintje-top-bar">
566
+ return h`<header class="lintje-top-bar">
567
567
  <div class="lintje-top-bar__name">
568
568
  <div class="lintje-top-bar__words">
569
569
  <!-- The page's one h1. Below 768 px this bar is display: none and the mobile header
570
570
  carries it instead. -->
571
- ${t?.name ? _`<h1 class="lintje-top-bar__dashboard">${t.name}</h1>` : r}
572
- ${t?.pageName ? _`<span
573
- class=${h({
571
+ ${t?.name ? h`<h1 class="lintje-top-bar__dashboard">${t.name}</h1>` : m}
572
+ ${t?.pageName ? h`<span
573
+ class=${_({
574
574
  "lintje-top-bar__page": !0,
575
575
  "is-visible": n
576
576
  })}
577
577
  aria-hidden=${!n}
578
578
  >› ${t.pageName}</span
579
- >` : r}
579
+ >` : m}
580
580
  </div>
581
581
  </div>
582
582
 
583
583
  <div class="lintje-top-bar__actions">
584
- ${e.toolsCompact ? _`${e.renderSearch()}${e.renderNotifications()}${H(e)}` : we(e)}
584
+ ${e.toolsCompact ? h`${e.renderSearch()}${e.renderNotifications()}${H(e)}` : we(e)}
585
585
  </div>
586
586
  </header>`;
587
587
  }
588
588
  function we(e) {
589
589
  let t = e.data;
590
- return _`${t?.search ? _`<lintje-button
590
+ return h`${t?.search ? h`<lintje-button
591
591
  variant="tertiary"
592
592
  size="chrome"
593
593
  icon="functioneel-zoek"
594
594
  keyshortcuts="/"
595
595
  @click=${() => e.askSearch()}
596
596
  >Zoeken <kbd class="lintje-key lintje-top-bar__key" aria-hidden="true">/</kbd></lintje-button
597
- >` : r}${e.renderNotifications()}
598
- ${t?.view ? _`<div class="lintje-view" @focusout=${(t) => B(e, t)}>
597
+ >` : m}${e.renderNotifications()}
598
+ ${t?.view ? h`<div class="lintje-view" @focusout=${(t) => B(e, t)}>
599
599
  <lintje-button
600
600
  class="lintje-view__button"
601
601
  variant="tertiary"
@@ -606,9 +606,9 @@ function we(e) {
606
606
  @click=${() => R(e)}
607
607
  >Weergave</lintje-button
608
608
  >
609
- ${e.viewOpen ? U(e, t.view) : r}
610
- </div>` : r}
611
- ${t?.share ? _`<div class="lintje-share" @focusout=${(t) => B(e, t)}>
609
+ ${e.viewOpen ? U(e, t.view) : m}
610
+ </div>` : m}
611
+ ${t?.share ? h`<div class="lintje-share" @focusout=${(t) => B(e, t)}>
612
612
  <lintje-button
613
613
  class="lintje-share__button"
614
614
  variant="tertiary"
@@ -619,8 +619,8 @@ function we(e) {
619
619
  @click=${() => z(e)}
620
620
  >Delen</lintje-button
621
621
  >
622
- ${e.shareOpen ? K(e) : r}
623
- </div>` : r}`;
622
+ ${e.shareOpen ? K(e) : m}
623
+ </div>` : m}`;
624
624
  }
625
625
  function R(e) {
626
626
  e.viewOpen = !e.viewOpen, e.shareOpen = !1, e.openGroup = null;
@@ -632,43 +632,43 @@ function B(e, t) {
632
632
  let n = t.relatedTarget, r = t.currentTarget;
633
633
  !n || e.mobile.matches || r.contains(n) || (r.classList.contains("lintje-view") ? e.viewOpen = !1 : e.shareOpen = !1);
634
634
  }
635
- function V(e, t, n, i, a) {
636
- let o = g(t, { size: 20 });
637
- return _`<button
635
+ function V(e, t, n, r, i) {
636
+ let a = v(t, { size: 20 });
637
+ return h`<button
638
638
  type="button"
639
- class=${h({
639
+ class=${_({
640
640
  "lintje-shell__tool": !0,
641
- "lintje-shell__tool--text": o === r,
641
+ "lintje-shell__tool--text": a === m,
642
642
  [n]: !0
643
643
  })}
644
644
  aria-label=${e}
645
645
  title=${e}
646
- aria-expanded=${i}
647
- @click=${a}
646
+ aria-expanded=${r}
647
+ @click=${i}
648
648
  >
649
- ${o === r ? e : o}
649
+ ${a === m ? e : a}
650
650
  </button>`;
651
651
  }
652
652
  function H(e) {
653
653
  let t = e.data;
654
- return _`${t?.view ? _`<div class="lintje-view" @focusout=${(t) => B(e, t)}>
654
+ return h`${t?.view ? h`<div class="lintje-view" @focusout=${(t) => B(e, t)}>
655
655
  ${V("Weergave", "functioneel-darkmode", "lintje-view__button", e.viewOpen, () => R(e))}
656
- ${e.viewOpen ? U(e, t.view) : r}
657
- </div>` : r}${t?.share ? _`<div class="lintje-share" @focusout=${(t) => B(e, t)}>
656
+ ${e.viewOpen ? U(e, t.view) : m}
657
+ </div>` : m}${t?.share ? h`<div class="lintje-share" @focusout=${(t) => B(e, t)}>
658
658
  ${V("Delen", "functioneel-delen", "lintje-share__button", e.shareOpen, () => z(e))}
659
- ${e.shareOpen ? K(e) : r}
660
- </div>` : r}`;
659
+ ${e.shareOpen ? K(e) : m}
660
+ </div>` : m}`;
661
661
  }
662
662
  function U(e, t) {
663
663
  let n = () => {
664
664
  e.viewOpen = !1;
665
- }, i = e.mobile.matches;
666
- return _`
665
+ }, r = e.mobile.matches;
666
+ return h`
667
667
  <div class="lintje-share__scrim" @click=${n}></div>
668
668
  <div
669
669
  class="lintje-view__popover"
670
- role=${i ? "dialog" : "group"}
671
- aria-modal=${i ? "true" : r}
670
+ role=${r ? "dialog" : "group"}
671
+ aria-modal=${r ? "true" : m}
672
672
  aria-label="Weergave"
673
673
  tabindex="-1"
674
674
  >
@@ -679,20 +679,20 @@ function U(e, t) {
679
679
  ${xe.map((n) => W(n.label, "", n.text, n.value === t.mode, () => e.changeView({ mode: n.value }), !0))}
680
680
  </div>
681
681
  </div>
682
- ${t.layoutChoice ? _`<p class="lintje-share__heading">Menu</p>
682
+ ${t.layoutChoice ? h`<p class="lintje-share__heading">Menu</p>
683
683
  <div class="lintje-view__row">
684
684
  <div class="lintje-toggle-group" role="group" aria-label="Plaats van het menu">
685
685
  ${W("Menu als zijbalk", "", "Zijbalk", e.layout === "side", () => e.changeView({ layout: "side" }), !0)}
686
686
  ${W("Menu boven", "", "Boven", e.layout === "top", () => e.changeView({ layout: "top" }), !0)}
687
687
  </div>
688
- </div>` : r}
688
+ </div>` : m}
689
689
  ${Te(e, t)}
690
690
  </div>
691
691
  `;
692
692
  }
693
693
  function Te(e, t) {
694
694
  let n = t.themes;
695
- return n?.length ? _`<p class="lintje-share__heading" aria-hidden="true">Thema</p>
695
+ return n?.length ? h`<p class="lintje-share__heading" aria-hidden="true">Thema</p>
696
696
  <div class="lintje-view__row">
697
697
  <lintje-radio-group
698
698
  class="lintje-view__themes"
@@ -702,23 +702,23 @@ function Te(e, t) {
702
702
  .value=${t.theme ?? n[0].value}
703
703
  @lintje-change=${(t) => e.changeView({ theme: t.detail })}
704
704
  ></lintje-radio-group>
705
- </div>` : r;
705
+ </div>` : m;
706
706
  }
707
- function W(e, t, n, i, a, o = !1) {
708
- let s = o ? r : g(t, { size: 16 });
709
- return _`<button
707
+ function W(e, t, n, r, i, a = !1) {
708
+ let o = a ? m : v(t, { size: 16 });
709
+ return h`<button
710
710
  type="button"
711
- class=${h({
711
+ class=${_({
712
712
  "lintje-toggle-group__option": !0,
713
- "lintje-toggle-group__option--text": s === r,
714
- "is-active": i
713
+ "lintje-toggle-group__option--text": o === m,
714
+ "is-active": r
715
715
  })}
716
- aria-pressed=${i}
716
+ aria-pressed=${r}
717
717
  aria-label=${e}
718
718
  title=${e}
719
- @click=${a}
719
+ @click=${i}
720
720
  >
721
- ${s === r ? n : s}
721
+ ${o === m ? n : o}
722
722
  </button>`;
723
723
  }
724
724
  function G(e, t) {
@@ -729,7 +729,7 @@ function Ee(e, t = "") {
729
729
  return n ? n + e.slice(e.indexOf(":")) : e;
730
730
  }
731
731
  function De(e, t) {
732
- return _`
732
+ return h`
733
733
  <div class="lintje-share__scrim" @click=${t}></div>
734
734
  <div class="lintje-share__popover" role="dialog" aria-labelledby="lintje-share-phone">
735
735
  <button type="button" class="lintje-share__item lintje-share__back" @click=${() => G(e, !1)}>
@@ -753,17 +753,17 @@ function K(e) {
753
753
  e.shareOpen = !1;
754
754
  }, n = () => e.closePanel(".lintje-share__button");
755
755
  if (e.sharePhone) return De(e, t);
756
- let i = e.mobile.matches;
757
- return _`
756
+ let r = e.mobile.matches;
757
+ return h`
758
758
  <div class="lintje-share__scrim" @click=${t}></div>
759
759
  <div
760
760
  class="lintje-share__popover"
761
- role=${i ? "dialog" : "group"}
762
- aria-modal=${i ? "true" : r}
761
+ role=${r ? "dialog" : "group"}
762
+ aria-modal=${r ? "true" : m}
763
763
  aria-label="Delen"
764
764
  tabindex="-1"
765
765
  >
766
- ${i ? I(e, "Delen", t) : _`<p class="lintje-share__heading">Delen</p>`}
766
+ ${r ? I(e, "Delen", t) : h`<p class="lintje-share__heading">Delen</p>`}
767
767
  <button
768
768
  type="button"
769
769
  class="lintje-share__item"
@@ -804,7 +804,7 @@ function K(e) {
804
804
  "Abonneer: dagelijks om 08:00" needs a mail service, "Alle data (CSV)" an export
805
805
  of every tile. Each returns here with its action. -->
806
806
  <!-- The footer is the filter bar's "Je ziet" sentence, through the store. -->
807
- ${e.store.state.summary ? _`<p class="lintje-share__footer">${e.store.state.summary}</p>` : r}
807
+ ${e.store.state.summary ? h`<p class="lintje-share__footer">${e.store.state.summary}</p>` : m}
808
808
  </div>
809
809
  `;
810
810
  }
@@ -812,75 +812,75 @@ function K(e) {
812
812
  //#region src/components/frame/shell/mobile-header.ts
813
813
  function Oe(e) {
814
814
  let t = e.data, n = t?.version && !t.user ? j(t.version) : null;
815
- return _`
816
- ${t?.environment ? _`<p class="lintje-mobile-menu__environment">${t.environment}</p>` : r}
817
- ${t?.feedback ? _`<a class="lintje-mobile-menu__item lintje-mobile-menu__feedback" href=${t.feedback.href}>
818
- ${g("functioneel-mail", { size: 20 })}
815
+ return h`
816
+ ${t?.environment ? h`<p class="lintje-mobile-menu__environment">${t.environment}</p>` : m}
817
+ ${t?.feedback ? h`<a class="lintje-mobile-menu__item lintje-mobile-menu__feedback" href=${t.feedback.href}>
818
+ ${v("functioneel-mail", { size: 20 })}
819
819
  <span class="lintje-mobile-menu__label">${M(t.feedback)}</span>
820
- ${n ? _`<span class="lintje-mobile-menu__version">${n}</span>` : r}
821
- </a>` : n ? _`<p class="lintje-mobile-menu__item lintje-mobile-menu__feedback">
820
+ ${n ? h`<span class="lintje-mobile-menu__version">${n}</span>` : m}
821
+ </a>` : n ? h`<p class="lintje-mobile-menu__item lintje-mobile-menu__feedback">
822
822
  <span class="lintje-mobile-menu__version">${n}</span>
823
- </p>` : r}
823
+ </p>` : m}
824
824
  `;
825
825
  }
826
826
  function q(e, t) {
827
- let n = e.data, i = e.store.state.modifiedCount, a = e.menuOpen, o = "lintje-mobile-header__word";
828
- return _`<div
827
+ let n = e.data, r = e.store.state.modifiedCount, i = e.menuOpen, a = "lintje-mobile-header__word";
828
+ return h`<div
829
829
  class="lintje-mobile-chrome"
830
830
  tabindex="-1"
831
- role=${a ? "dialog" : r}
832
- aria-modal=${a ? "true" : r}
833
- aria-label=${a ? "Menu" : r}
831
+ role=${i ? "dialog" : m}
832
+ aria-modal=${i ? "true" : m}
833
+ aria-label=${i ? "Menu" : m}
834
834
  >
835
- <header class=${h({
835
+ <header class=${_({
836
836
  "lintje-mobile-header": !0,
837
837
  "is-compact": e.headerCompact
838
838
  })}>
839
- ${e.layout === "top" ? n?.name ? _`<h1 class="lintje-mobile-header__title" title=${n.name}>${n.name}</h1>` : r : _`
839
+ ${e.layout === "top" ? n?.name ? h`<h1 class="lintje-mobile-header__title" title=${n.name}>${n.name}</h1>` : m : h`
840
840
  <!-- The page's one h1 below 768 px. The header draws no name — the page
841
841
  header's kicker shows it — so the heading is there for the outline only.
842
842
  At 768 px and up this header is display: none and the top bar has it. -->
843
- ${n?.name ? _`<h1 class="visually-hidden">${n.name}</h1>` : r}
843
+ ${n?.name ? h`<h1 class="visually-hidden">${n.name}</h1>` : m}
844
844
  ${N(e, "lintje-mobile-header__home", 32, () => {
845
845
  e.menuOpen = !1;
846
846
  })}
847
847
  `}
848
848
  <div class="lintje-mobile-header__actions">
849
849
  <!-- Open, the menu is a dialog of its own: only its close button stays. -->
850
- ${a ? r : _`${e.renderSearch()}${e.renderNotifications()}${e.mobile.matches ? H(e) : r}${e.store.state.hasFilters ? _`<button
850
+ ${i ? m : h`${e.renderSearch()}${e.renderNotifications()}${e.mobile.matches ? H(e) : m}${e.store.state.hasFilters ? h`<button
851
851
  type="button"
852
852
  class="lintje-mobile-header__button"
853
853
  aria-haspopup="dialog"
854
854
  aria-expanded=${e.store.state.sheetOpen}
855
- @click=${() => u({ sheetOpen: !0 })}
855
+ @click=${() => s({ sheetOpen: !0 })}
856
856
  >
857
- ${g("functioneel-filters", { size: 16 })}
858
- <span class=${o}>Filters</span>
859
- ${i > 0 ? m({
860
- value: i,
861
- label: `${i} aangepast`,
857
+ ${v("functioneel-filters", { size: 16 })}
858
+ <span class=${a}>Filters</span>
859
+ ${r > 0 ? g({
860
+ value: r,
861
+ label: `${r} aangepast`,
862
862
  tone: "attention",
863
863
  className: "lintje-mobile-header__badge"
864
- }) : r}
865
- </button>` : r}`}
864
+ }) : m}
865
+ </button>` : m}`}
866
866
  <!-- One button in both states, so opening the menu leaves the focus
867
867
  where it is: only the label and the glyph change places. -->
868
868
  <button
869
869
  type="button"
870
870
  class="lintje-mobile-header__button"
871
- aria-expanded=${a}
871
+ aria-expanded=${i}
872
872
  aria-controls="lintje-mobile-menu-panel"
873
873
  @click=${() => {
874
874
  e.menuOpen = !e.menuOpen;
875
875
  }}
876
876
  >
877
- ${a ? _`<span class=${o}>Sluiten</span>${g("functioneel-kruis", { size: 16 })}` : _`${g("functioneel-menu", { size: 16 })}<span class=${o}>Menu</span>`}
877
+ ${i ? h`<span class=${a}>Sluiten</span>${v("functioneel-kruis", { size: 16 })}` : h`${v("functioneel-menu", { size: 16 })}<span class=${a}>Menu</span>`}
878
878
  </button>
879
879
  </div>
880
880
  </header>
881
881
 
882
- ${a || e.menuLeaving ? _`<div
883
- class=${h({
882
+ ${i || e.menuLeaving ? h`<div
883
+ class=${_({
884
884
  "lintje-mobile-menu": !0,
885
885
  "is-leaving": e.menuLeaving
886
886
  })}
@@ -891,51 +891,51 @@ function q(e, t) {
891
891
  }}
892
892
  >
893
893
  <nav class="lintje-mobile-menu__list" aria-label="Hoofdnavigatie">
894
- ${t.map((t, n) => _`<div
895
- role=${t.heading ? "group" : r}
896
- aria-labelledby=${t.heading ? `lintje-mobile-menu-group-${n}` : r}
894
+ ${t.map((t, n) => h`<div
895
+ role=${t.heading ? "group" : m}
896
+ aria-labelledby=${t.heading ? `lintje-mobile-menu-group-${n}` : m}
897
897
  >
898
- ${t.heading ? _`<p
898
+ ${t.heading ? h`<p
899
899
  class="lintje-mobile-menu__heading"
900
900
  id=${`lintje-mobile-menu-group-${n}`}
901
901
  >
902
902
  ${t.heading}
903
- </p>` : r}
903
+ </p>` : m}
904
904
  ${t.items.map((t) => ke(e, t))}
905
905
  </div>`)}
906
906
  </nav>
907
907
  ${Oe(e)} ${e.renderUserMenu(!0)}
908
- </div>` : r}
908
+ </div>` : m}
909
909
  </div>`;
910
910
  }
911
911
  function ke(e, t) {
912
- let n = _`
913
- ${g(t.icon, {
912
+ let r = h`
913
+ ${v(t.icon, {
914
914
  size: 20,
915
915
  src: t.iconSrc
916
916
  })}
917
917
  <span class="lintje-mobile-menu__label">${t.label}</span>
918
- ${t.noAccess ? A("lintje-mobile-menu__meta") : r}
919
- ${S(t) || t.noAccess ? r : C(t)}
918
+ ${t.noAccess ? A("lintje-mobile-menu__meta") : m}
919
+ ${S(t) || t.noAccess ? m : C(t)}
920
920
  `;
921
- return S(t) ? _`<a
921
+ return S(t) ? h`<a
922
922
  href=${t.href}
923
- class=${h({
923
+ class=${_({
924
924
  "lintje-mobile-menu__item": !0,
925
925
  "is-active": !!t.active
926
926
  })}
927
- aria-current=${t.active ? "page" : r}
928
- @click=${(n) => {
929
- o(n) && (e.menuOpen = !1, e.follow(t.href, n));
927
+ aria-current=${t.active ? "page" : m}
928
+ @click=${(r) => {
929
+ n(r) && (e.menuOpen = !1, e.follow(t.href, r));
930
930
  }}
931
- >${n}</a
932
- >` : _`<span class="lintje-mobile-menu__item is-muted" aria-disabled="true"
933
- >${n}</span
931
+ >${r}</a
932
+ >` : h`<span class="lintje-mobile-menu__item is-muted" aria-disabled="true"
933
+ >${r}</span
934
934
  >`;
935
935
  }
936
936
  //#endregion
937
937
  //#region src/components/frame/shell/header.css?inline
938
- var Ae = "/* Header of the top layout, drawn by `header.ts` inside the caller's shadow root. */\n\n/* The logo bar sits above the veil, so an open submenu does not dim it. A box wider than a narrow\n phone is cut at both sides alike, which keeps the ribbon centred. */\n.lintje-logobar {\n position: relative;\n z-index: 31;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n min-height: var(--h-logobar);\n overflow: hidden;\n background: var(--color-logobar-bg);\n color: var(--color-logobar-text);\n}\n.lintje-logobar__home { display: block; flex: none; color: inherit; }\n/* The logo link's ring is drawn inside its box (`focus-inset`): the bar cuts what stands outside\n its top edge. */\n\n/* The environment outside production: the accent, not a status. */\n.lintje-logobar__environment {\n position: absolute;\n top: var(--space-6);\n right: calc(var(--page-pad-x) + var(--page-gutter));\n height: var(--h-chip);\n margin: 0;\n padding: 0 var(--space-3);\n background: var(--color-nav-environment-bg);\n color: var(--color-nav-environment-text);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n line-height: var(--h-chip);\n white-space: nowrap;\n}\n.lintje-logobar__environment-short { display: none; }\n/* On a phone the organisation's name reaches the right edge: the block shrinks to three letters above it. */\n:where(.lintje-shell.is-phone) .lintje-logobar__environment {\n top: var(--space-2);\n right: var(--space-4);\n height: var(--h-chip-field);\n line-height: var(--h-chip-field);\n}\n/* The full name stays for a screen reader; the three letters are only seen. */\n:where(.lintje-shell.is-phone) .lintje-logobar__environment-label {\n position: absolute;\n width: 1px; height: 1px;\n margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n:where(.lintje-shell.is-phone) .lintje-logobar__environment-short { display: inline; }\n\n/* The bar is the submenu's positioning context, which is why a group is not one. Hover, active\n and edge are set on the bar for what inherits, and on each element at its end, because an\n element with a shadow root declares the tokens again on its own host. */\n.lintje-navbar,\n.lintje-navbar__end > * {\n --color-nav-hover: var(--color-navbar-hover);\n --color-nav-active: var(--color-navbar-active);\n --color-nav-active-edge: var(--color-navbar-active-edge);\n}\n.lintje-navbar__end > * { --lintje-tool-height: var(--h-navbar); }\n/* The colour runs to the edges; the content keeps to `--page-gutter`. */\n.lintje-navbar {\n position: relative;\n z-index: 30;\n display: flex;\n align-items: stretch;\n justify-content: space-between;\n gap: 0 var(--space-4);\n height: var(--h-navbar);\n padding: 0 calc(var(--space-3) + var(--page-gutter)) 0\n calc(var(--page-pad-x) - var(--space-5) + var(--page-gutter));\n background: var(--color-nav-bg);\n color: var(--color-nav-text);\n}\n/* Both widths are measured (`SubmenuController`): neither may depend on whether the entries or\n \"Menu\" stand there. */\n.lintje-navbar__start { display: flex; flex: 1 1 auto; align-items: stretch; min-width: 0; }\n.lintje-navbar__entries { display: flex; flex: 1 1 0; align-items: stretch; min-width: 0; }\n.lintje-navbar__list { display: flex; flex: none; align-items: stretch; width: max-content; }\n/* Hanging from the bar's end, the overflow falls off the left, where the page gains no scroll. */\n.lintje-navbar__list.is-hidden {\n position: absolute;\n top: 0;\n right: 0;\n visibility: hidden;\n pointer-events: none;\n}\n.lintje-navbar__group { display: flex; }\n.lintje-navbar__end { display: flex; flex: none; align-items: center; gap: var(--space-1); }\n/* The orange ring disappears on the theme's fill, so the bar takes `--color-focus-on-theme`. The\n open entry and the submenu stand on the page's surface and keep the standard ring. */\n.lintje-navbar :focus-visible { outline-color: var(--color-focus-on-theme); }\n.lintje-navbar .lintje-navbar__entry.is-open:focus-visible,\n.lintje-navbar .lintje-navbar__submenu :focus-visible { outline-color: var(--color-focus); }\n\n/* The edge is always there on both sides so the word stays centred; transparent until active. */\n.lintje-navbar__entry {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n box-sizing: border-box;\n height: var(--h-navbar);\n padding: 0 var(--space-5);\n border-top: var(--nav-edge) solid transparent;\n border-bottom: var(--nav-edge) solid transparent;\n color: var(--color-nav-text);\n font: var(--text-body);\n white-space: nowrap;\n text-decoration: none;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-navbar__entry:hover:not(.is-unavailable) { background: var(--color-navbar-hover); }\n.lintje-navbar__entry:hover:not(.is-unavailable) .lintje-navbar__label { text-decoration: underline; }\n/* Not bold: the bold cut sets narrower and reads as another size beside its neighbours. */\n.lintje-navbar__entry.is-active {\n background: var(--color-navbar-active);\n border-bottom-color: var(--color-navbar-active-edge);\n color: var(--color-nav-active-text);\n}\n.lintje-navbar__entry.is-open,\n.lintje-navbar__entry.is-open:hover {\n background: var(--color-bg-surface);\n border-bottom-color: transparent;\n color: var(--color-navbar-open-text);\n}\n.lintje-navbar__entry.is-open .lintje-navbar__label { text-decoration: none; }\n.lintje-navbar__entry.is-unavailable { color: var(--color-nav-disabled); cursor: default; }\n\n/* The shadow falls down only: `clip-path` cuts what would fall on the bar, so the open entry and\n the panel stay one shape. `--lintje-navbar-room` is measured. */\n.lintje-navbar__submenu {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n padding: var(--space-8) calc(var(--page-pad-x) + var(--page-gutter)) var(--space-10);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n border-bottom: 1px solid var(--color-border-default);\n box-shadow: var(--shadow-popover);\n clip-path: inset(0 0 -32px 0);\n max-height: var(--lintje-navbar-room, calc(100dvh - var(--h-navbar)));\n box-sizing: border-box;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n.lintje-navbar__heading {\n margin: var(--space-6) 0 var(--space-3);\n color: var(--color-text-muted);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n}\n.lintje-navbar__heading:first-child { margin-top: 0; }\n.lintje-navbar__pages {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: var(--space-4);\n margin: 0;\n padding: 0;\n list-style: none;\n animation:\n lintje-fade-in var(--dur-popover) linear,\n lintje-drop-in var(--dur-submenu) ease;\n}\n@media (max-width: 1023px) {\n .lintje-navbar__pages { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n}\n.lintje-navbar__item { display: flex; }\n\n/* The 1 px edge is always there, so hover moves nothing. */\n.lintje-navbar__page {\n flex: 1;\n display: flex;\n align-items: center;\n gap: var(--space-3);\n box-sizing: border-box;\n min-width: 0;\n min-height: 4rem;\n padding: var(--space-3) var(--space-4);\n background: var(--color-bg-subtle);\n border: 1px solid transparent;\n color: var(--color-text-primary);\n font: var(--text-body);\n text-decoration: none;\n transition: border-color var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-navbar__page-text { display: flex; flex: 1; flex-direction: column; min-width: 0; }\n.lintje-navbar__page .lintje-navbar__label { font-weight: 700; }\n.lintje-navbar__metric { color: var(--color-text-muted); font: var(--text-small); }\n.lintje-navbar__metric-value { color: var(--color-text-primary); }\n.lintje-navbar__page:hover:not(.is-unavailable) { border-color: var(--color-accent-line); }\n.lintje-navbar__page:hover:not(.is-unavailable) .lintje-navbar__label { text-decoration: underline; }\n.lintje-navbar__page.is-active {\n box-shadow: inset var(--nav-edge) 0 0 var(--color-accent-line);\n color: var(--color-accent-text);\n}\n.lintje-navbar__page.is-unavailable,\n.lintje-navbar__page.is-unavailable .lintje-navbar__metric-value { color: var(--color-text-muted); cursor: default; }\n.lintje-navbar__page.is-no-access .lintje-navbar__label { text-decoration: line-through; }\n\n/* Fixed to the viewport: the header may stand in a box of its own height above the page. */\n.lintje-header-scrim {\n position: fixed;\n inset: 0;\n z-index: 20;\n background: var(--color-overlay-nav);\n pointer-events: none;\n animation: lintje-fade-in var(--dur-scrim) var(--ease-in-motion);\n}\n\n@media print {\n .lintje-logobar, .lintje-navbar, .lintje-header-scrim { display: none; }\n}\n\n/* Forced colours: the browser drops the fill that carries the active page and the open group. */\n@media (forced-colors: active) {\n .lintje-navbar { border-bottom: 1px solid CanvasText; }\n .lintje-navbar__entry.is-active { border-bottom-color: Highlight; }\n .lintje-navbar__entry.is-open { outline: 1px solid CanvasText; outline-offset: -1px; }\n .lintje-navbar__entry.is-unavailable,\n .lintje-navbar__page.is-unavailable { color: GrayText; }\n .lintje-navbar__page { border-color: CanvasText; }\n .lintje-navbar__page.is-active { border-left: var(--nav-edge) solid Highlight; }\n .lintje-navbar__page.is-unavailable { border-color: GrayText; }\n .lintje-navbar__submenu { border: 1px solid CanvasText; }\n .lintje-navbar :focus-visible,\n .lintje-navbar .lintje-navbar__entry.is-open:focus-visible,\n .lintje-navbar .lintje-navbar__submenu :focus-visible { outline-color: Highlight; }\n}\n", je = ":host { display: block; min-width: 0; min-height: 100vh; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n/*\n * The page's left edge, for what pins itself to the viewport (the filter bar): the menu's width\n * beside the page, nothing above it. Custom properties reach the slotted content.\n */\n.lintje-shell {\n --lintje-shell-left: 0px;\n position: relative;\n display: flex;\n flex-direction: column;\n min-height: inherit;\n background: var(--color-bg-page);\n color: var(--color-text-primary);\n}\n/* A specimen's bars (z-index 25–31) would otherwise cover the outer shell's open menus. */\n.lintje-shell.is-nested { isolation: isolate; }\n.lintje-shell--side { --lintje-shell-left: var(--w-rail); flex-direction: row; }\n@media (min-width: 1440px) {\n .lintje-shell--side:not(.is-unpinned) { --lintje-shell-left: var(--w-nav); }\n}\n.lintje-shell--side:where(.is-phone) { --lintje-shell-left: 0px; }\n.lintje-shell__column {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n/* \"Naar de inhoud\": hidden until focused. The ring is drawn inside the box (`focus-inset`):\n outside it would lie on the theme fill (1.89:1, on Defensie 1:1); inside, its neighbour is\n white. */\n.lintje-shell__skip {\n position: absolute;\n top: var(--space-2);\n left: var(--space-2);\n z-index: 50;\n display: inline-flex;\n align-items: center;\n min-height: var(--h-touch);\n padding: var(--space-2) var(--space-4);\n background: var(--color-bg-surface);\n color: var(--color-link);\n font: var(--text-ui);\n text-decoration: underline;\n box-shadow: var(--shadow-popover);\n}\n.lintje-shell__skip:not(:focus) {\n width: 1px;\n height: 1px;\n min-height: 0;\n padding: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n box-shadow: none;\n}\n\n/* The main region takes the skip link's focus; it is not a control and draws no ring. */\n.lintje-shell__main {\n display: flex;\n flex-direction: column;\n flex: 1 0 auto;\n min-width: 0;\n}\n.lintje-shell__main:focus { outline: none; }\n/* Without content the last edge-to-edge part takes the room left: a conversation keeps its\n question box at the bottom of a short page. */\n.lintje-shell__main.is-bare ::slotted([slot='full']) { flex: 1 0 auto; }\n\n/* The content keeps to the design system's maximum width, as the bars above it do. */\n.lintje-shell__content {\n display: flex;\n flex-direction: column;\n gap: var(--grid-gutter);\n padding: var(--page-pad-y) calc(var(--page-pad-x) + var(--page-gutter)) var(--space-10);\n}\n.lintje-shell__content[hidden] { display: none; }\n:where(.lintje-shell.is-phone) .lintje-shell__content { padding: var(--space-4) var(--space-4) var(--space-8); gap: var(--space-3); }\n\n/*\n * Top layout. The navigation bar cannot be `sticky`: it would stick inside the header's own box\n * and leave with it, so its slot keeps the bar's height (`--h-navbar`) and the bar is pinned\n * once the slot has left the viewport.\n */\n.lintje-shell__sentinel { height: 1px; margin-bottom: -1px; }\n.lintje-shell__nav { position: relative; z-index: 25; min-height: var(--h-navbar); }\n.lintje-shell__nav.is-stuck .lintje-navbar {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n}\n\n/* Below 768 px the mobile header is the bar under the logo bar; its slot keeps the height. */\n.lintje-shell__mobile-bar { height: var(--h-topbar); }\n.lintje-shell__mobile-pin { position: relative; z-index: 25; }\n.lintje-shell__mobile-bar.is-stuck .lintje-shell__mobile-pin {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n}\n.lintje-shell--top .lintje-mobile-header {\n position: static;\n height: var(--h-topbar);\n align-items: center;\n gap: var(--space-3);\n}\n.lintje-shell--top .lintje-mobile-header__actions { margin-top: 0; flex: none; }\n.lintje-shell--top .lintje-mobile-menu {\n position: absolute;\n inset: 100% 0 auto 0;\n height: calc(100dvh - var(--h-topbar));\n}\n/* 16 px so two lines fit inside the 56 px bar; longer is cut with an ellipsis. */\n.lintje-mobile-header__title {\n display: -webkit-box;\n min-width: 0;\n overflow: hidden;\n color: var(--color-nav-text);\n font: var(--text-dashboard);\n font-size: 1rem;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n}\n/* The logo bar already shows the environment. */\n.lintje-shell--top .lintje-mobile-menu__environment { display: none; }\n\n/* The page's one h1; cut before it can push the entries out. */\n.lintje-shell__name {\n flex: 0 1 auto;\n min-width: 0;\n max-width: 24rem;\n margin: 0;\n padding: 0 var(--space-5);\n overflow: hidden;\n color: var(--color-nav-text);\n font: var(--text-dashboard);\n line-height: var(--h-navbar);\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n/* Bare glyphs in a bar; on the navigation bar their ring is the on-theme one (`header.css`). */\n.lintje-shell__tool {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: none;\n width: var(--h-touch);\n height: var(--lintje-tool-height, var(--h-touch));\n color: var(--color-nav-text);\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-shell__tool:hover { background: var(--color-nav-hover); }\n.lintje-shell__tool--text {\n width: auto;\n padding: 0 var(--space-3);\n font: var(--text-ui);\n}\n.lintje-navbar .lintje-shell__tool { height: var(--h-navbar); }\n\n/* The panels hang from the bar, not the tool. They stand on the page's surface: standard ring. */\n.lintje-navbar .lintje-view,\n.lintje-navbar .lintje-share { position: static; }\n.lintje-navbar .lintje-view__popover,\n.lintje-navbar .lintje-share__popover {\n top: 100%;\n right: calc(var(--space-3) + var(--page-gutter));\n}\n.lintje-navbar .lintje-view__popover :focus-visible,\n.lintje-navbar .lintje-share__popover :focus-visible { outline-color: var(--color-focus); }\n\n.lintje-shell__sheet-user { border-top: 1px solid var(--color-nav-line); }\n\n@media print { .lintje-shell__skip { display: none; } }\n\n@media (forced-colors: active) {\n .lintje-navbar .lintje-view__popover :focus-visible,\n .lintje-navbar .lintje-share__popover :focus-visible { outline-color: Highlight; }\n}\n", Me = "\n/* Dark is its own surface, not an inversion: every colour here is a `--color-nav-*` token. */\n.lintje-nav {\n width: var(--w-nav);\n flex: none;\n /* `align-self: flex-start`: a stretched flex child would make sticky do nothing. */\n position: sticky;\n top: 0;\n align-self: flex-start;\n height: 100vh;\n background: var(--color-nav-bg);\n color: var(--color-nav-text);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n /* Above the page also while the rail collapses: with a z-index only while expanded,\n later positioned content (charts, KPI tiles) painted over the shrinking menu. */\n z-index: 30;\n box-shadow: var(--shadow-nav);\n /* The margin mirrors the width growth, so width + margin-right is 72 px at every moment;\n otherwise the content jumps 216 px for one frame. */\n transition:\n width var(--dur-rail) var(--ease-in-motion),\n margin-right var(--dur-rail) var(--ease-in-motion);\n}\n/* The orange ring disappears into the theme fill: the menu takes the on-theme ring. */\n.lintje-nav :focus-visible { outline-color: var(--color-focus-on-theme); }\n.lintje-nav--rail { width: var(--w-rail); margin-right: 0; }\n/* Expanding lies on top of the content: 288 px drawn, 72 px taken. A negative right margin does\n that; `fixed` or `absolute` would make the page jump. */\n.lintje-nav--rail.is-expanded {\n width: var(--w-nav);\n margin-right: calc(var(--w-rail) - var(--w-nav));\n}\n/* The overlay behind the expanded rail. A sibling of the nav: inside its stacking context it\n would darken the menu itself. */\n.lintje-nav__scrim {\n position: fixed;\n inset: 0;\n z-index: 29;\n background: var(--color-overlay-nav);\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--dur-rail) var(--ease-in-motion);\n}\n.lintje-nav__scrim.is-visible { opacity: 1; }\n\n.lintje-nav__header {\n height: var(--h-nav-head);\n flex: none;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 0 var(--space-4) 0 12px;\n}\n\n.lintje-nav__pin {\n position: relative;\n width: var(--h-icon-button); height: var(--h-icon-button);\n margin-top: 12px;\n display: flex; align-items: center; justify-content: center;\n color: var(--color-nav-text);\n background: transparent;\n flex: none;\n}\n.lintje-nav__pin--text {\n width: auto;\n padding: 0 var(--space-2);\n font-size: 0.875rem;\n font-weight: 700;\n white-space: nowrap;\n}\n/* The pin and Afmelden: a transparent hit area takes the target to 48 px. */\n.lintje-nav__pin::after,\n.lintje-nav__logout-button::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2));\n}\n.lintje-nav__pin { transition: background var(--dur-hover) var(--ease-in-motion); }\n.lintje-nav__pin:hover { background: var(--color-nav-hover); }\n\n/* No native bar: a styled one takes width in every browser and the rows' fill would stop short\n of the menu's edge. `NavScrollbar` sizes and places the thumb drawn instead. */\n.lintje-nav__list { flex: 1; overflow-y: auto; overflow-x: hidden; scrollbar-width: none; }\n.lintje-nav__list::-webkit-scrollbar { display: none; }\n.lintje-nav__thumb {\n position: absolute;\n top: 0; right: 0;\n width: var(--space-2);\n height: 0;\n /* The menu's second ink reads on its fill and on a hovered row. */\n background: var(--color-nav-text-sub);\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--dur-hover) var(--ease-in-motion);\n}\n/* There while the pointer is on the menu or a drag lasts; the keyboard's focus shows it at once. */\n.lintje-nav:hover .lintje-nav__thumb,\n.lintje-nav__thumb.is-dragging,\n.lintje-nav__list:focus-within + .lintje-nav__thumb { opacity: 1; pointer-events: auto; }\n.lintje-nav__list:focus-within + .lintje-nav__thumb { transition: none; }\n.lintje-nav__group { display: flex; flex-direction: column; }\n\n/* The same height in both modes, so every row below stays in place when the rail expands. */\n.lintje-nav__section-heading {\n position: relative;\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n color: var(--color-nav-text-sub);\n padding: 22px var(--space-5) 6px;\n white-space: nowrap;\n margin: 0;\n}\n/* A line in the rail, text once it expands: the text fades in 80 ms after the width starts. */\n.lintje-nav__section-label {\n display: block;\n transition: opacity 160ms var(--ease-in-motion) 80ms, transform var(--dur-base) var(--ease-in-motion) 80ms;\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__section-label {\n opacity: 0;\n transform: translateX(-8px);\n transition: opacity 60ms var(--ease-out-motion), transform 0ms linear 60ms;\n}\n.lintje-nav__separator {\n position: absolute;\n left: 14px; right: 14px;\n top: 50%;\n height: 1px;\n background: var(--color-nav-line);\n opacity: 0;\n transform: scaleX(0);\n transform-origin: left center;\n transition: transform 140ms var(--ease-out-motion), opacity 0ms linear 140ms;\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__separator {\n opacity: 1;\n transform: none;\n transition: transform 160ms var(--ease-in-motion) 60ms;\n}\n\n/* One row in every mode. A 4 px border + 22 px padding centres the 20 px icon in the 72 px rail,\n in line with the logo. Expanding animates only the width, so the icon stays in place. */\n.lintje-nav__item {\n position: relative;\n height: var(--h-nav-row);\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--space-3);\n padding: 0 22px;\n border-left: var(--nav-edge) solid transparent;\n font-size: 1rem;\n color: var(--color-nav-text);\n text-decoration: none;\n white-space: nowrap;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-nav__item:hover:not(.is-no-page):not(.is-no-access) {\n background: var(--color-nav-hover);\n}\n.lintje-nav__item.is-active {\n background: var(--color-nav-active);\n border-left-color: var(--color-nav-active-edge);\n color: var(--color-nav-active-text);\n /* Not bold: the bold cut sets narrower and reads as another font size beside its neighbours. */\n}\n.lintje-nav__item:focus-visible { outline-offset: -3px; }\n\n.lintje-nav__item.is-no-page { color: var(--color-nav-disabled); cursor: default; }\n.lintje-nav__item.is-no-access { color: var(--color-nav-disabled); text-decoration: line-through; cursor: not-allowed; }\n\n.lintje-nav__label { flex: 1; overflow: hidden; text-overflow: ellipsis; }\n.lintje-nav--rail.is-expanded .lintje-nav__label,\n.lintje-nav--rail.is-expanded .lintje-nav__metric {\n animation: lintje-nav-text-in var(--dur-base) var(--ease-in-motion) 80ms backwards;\n}\n@keyframes lintje-nav-text-in { from { opacity: 0; transform: translateX(-8px); } }\n.lintje-nav__metric { font-size: 0.875rem; color: var(--color-nav-text-sub); flex: none; }\n.lintje-nav__item.is-no-access .lintje-nav__metric { text-decoration: none; }\n.lintje-nav__item.is-no-page .lintje-nav__metric { color: var(--color-nav-disabled); }\n\n/* The badge is the primitive's (`badge.css` adopted by the shell). In the rail a word (\"NIEUW\")\n does not fit: it becomes a dot, so the rail does not overflow. */\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__badge {\n position: absolute; top: 2px; right: var(--space-1);\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__badge--new {\n min-width: 8px; width: 8px; height: 8px; padding: 0;\n border-radius: 999px;\n font-size: 0; overflow: hidden;\n}\n\n/* Environment band, only outside production. Its fill is the theme's accent, not the attention\n status: on `defensie` (menu `#E17000`) the accent draws a blue band that reads against it. */\n.lintje-nav__environment {\n position: relative;\n flex: none;\n height: 2rem;\n margin: 0;\n background: var(--color-nav-environment-bg);\n color: var(--color-nav-environment-text);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n text-align: center;\n line-height: 2rem;\n white-space: nowrap;\n overflow: hidden;\n}\n.lintje-nav__environment-label,\n.lintje-nav__environment-short { position: absolute; inset: 0; }\n.lintje-nav__environment-label {\n transition: opacity 160ms var(--ease-in-motion) 80ms;\n}\n.lintje-nav__environment-short { opacity: 0; transition: opacity 60ms var(--ease-out-motion); }\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__environment-label { opacity: 0; transition: opacity 60ms var(--ease-out-motion); }\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__environment-short { opacity: 1; transition: opacity 160ms var(--ease-in-motion) 80ms; }\n\n.lintje-nav__feedback { flex: none; }\n.lintje-nav__version { font-family: var(--font-mono); font-size: 0.875rem; letter-spacing: .02em; margin-left: auto; }\n/* Without a contact the version gets a row with the menu row's geometry, so the user block does\n not move; not `.lintje-nav__item`, which carries a hover. */\n.lintje-nav__version-row {\n flex: none;\n height: var(--h-nav-row);\n margin: 0;\n display: flex;\n align-items: center;\n padding: 0 22px;\n border-left: var(--nav-edge) solid transparent;\n}\n\n/* \"Afmelden\": a real form, because signing out is a POST that leaves the page. */\n/* The form is `hidden` in the rail, not transparent, so the button is out of the tab order. */\n.lintje-nav__logout { flex: none; margin-left: auto; }\n.lintje-nav__logout[hidden] { display: none; }\n.lintje-nav__logout-button {\n position: relative;\n width: var(--h-icon-button); height: var(--h-icon-button);\n display: flex; align-items: center; justify-content: center;\n /* Quiet at rest; full text colour on hover and focus. */\n color: var(--color-nav-text-sub);\n background: transparent;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-nav__logout-button:hover,\n.lintje-nav__logout-button:focus-visible { background: var(--color-nav-hover); color: var(--color-nav-text); }\n.lintje-nav__logout-text { font-size: 0.875rem; font-weight: 700; white-space: nowrap; padding: 0 var(--space-2); }\n\n.lintje-nav__footer {\n flex: none;\n display: flex; align-items: center; gap: 10px;\n padding: var(--space-4) var(--space-5) var(--space-5) var(--space-4);\n border-top: 1px solid var(--color-nav-line);\n font-size: 1rem;\n}\n/* As high as name and role together (two 1.25rem lines); the left padding keeps it centred in\n the rail. */\n.lintje-nav__avatar {\n width: 2.5rem; height: 2.5rem; flex: none;\n display: flex; align-items: center; justify-content: center;\n border-radius: var(--radius-round);\n background: var(--color-nav-avatar-bg);\n color: var(--color-nav-avatar-text);\n font-size: 1rem; font-weight: 700;\n}\n/* Name and role fade and slide in like the headings; `nowrap` keeps one line. */\n.lintje-nav__user {\n display: flex; flex-direction: column; line-height: 1.25rem;\n min-width: 0; flex: 1 1 auto; white-space: nowrap;\n transition: opacity 160ms var(--ease-in-motion) 80ms, transform var(--dur-base) var(--ease-in-motion) 80ms;\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__user { opacity: 0; transform: translateX(-8px); transition: none; }\n.lintje-nav__user > b,\n.lintje-nav__role { overflow: hidden; text-overflow: ellipsis; }\n.lintje-nav__role { font-size: 0.875rem; color: var(--color-nav-text-sub); }\n\n:where(.lintje-shell.is-phone) .lintje-nav,\n:where(.lintje-shell.is-phone) .lintje-nav__scrim { display: none; }\n\n/* An emblem's black, if it has any, draws in the menu's text colour (`currentColor`). */\n.lintje-nav__home { display: block; flex: none; color: var(--color-nav-text); }\n\n\n@media print { .lintje-nav, .lintje-nav__scrim { display: none; } }\n\n/* Forced colours: the active row is a fill and a 4 px edge; the fill is dropped and the edge\n turns Highlight. A row without a page or access is GrayText. The ring is Highlight. The\n shadow is dropped, so an outline keeps the menu's edge against the page. */\n@media (forced-colors: active) {\n .lintje-nav { outline: 1px solid CanvasText; }\n .lintje-nav :focus-visible { outline-color: Highlight; }\n .lintje-nav__item { border-left-color: Canvas; }\n .lintje-nav__item.is-active { border-left-color: Highlight; }\n .lintje-nav__item.is-no-page,\n .lintje-nav__item.is-no-access { color: GrayText; }\n .lintje-nav__avatar { border: 1px solid CanvasText; }\n .lintje-nav__thumb { forced-color-adjust: none; background: CanvasText; }\n}\n", J = "\n/* One region: the open menu's dialog and the box its focus trap keeps Tab inside. It shows no\n ring when the trap pulls back stray focus. The region sticks, not the header: a sticky box\n stays inside its parent, and this one is as tall as the header. */\n.lintje-mobile-chrome { flex: none; position: sticky; top: 0; z-index: 25; }\n.lintje-mobile-chrome:focus { outline: none; }\n\n.lintje-mobile-header {\n display: none;\n height: var(--h-mobile-header);\n flex: none;\n background: var(--color-nav-bg);\n align-items: flex-start;\n justify-content: space-between;\n padding: 0 var(--space-4);\n /* Tools that do not fit must not widen the page, or a phone zooms out and they seem to fit\n (`headerCompact`). Sideways only: the focus ring stays inside the padding. */\n overflow-x: clip;\n}\n:where(.lintje-shell.is-phone) .lintje-mobile-header { display: flex; }\n/* On the theme fill the ring is the on-theme one, as in the desktop menu. */\n.lintje-mobile-header :focus-visible,\n.lintje-mobile-menu :focus-visible { outline-color: var(--color-focus-on-theme); }\n/* \"Weergave\" and \"Delen\" open from this header as sheets on the page's surface: standard ring. */\n.lintje-mobile-header .lintje-view__popover :focus-visible,\n.lintje-mobile-header .lintje-share__popover :focus-visible { outline-color: var(--color-focus); }\n\n.lintje-mobile-header__actions { margin-top: var(--space-3); display: flex; gap: var(--space-2); }\n.lintje-mobile-header__button {\n height: var(--h-touch);\n padding: 0 var(--space-3);\n background: var(--color-nav-active);\n color: var(--color-nav-text);\n border: 1px solid var(--color-nav-line);\n font-size: 0.875rem;\n font-weight: 700;\n display: flex; align-items: center; justify-content: center; gap: var(--space-2);\n /* Square when only the glyph shows (`headerCompact`). */\n min-width: var(--h-touch);\n}\n/* Without room the words are read, not shown: the glyph and the badge stay. */\n.lintje-mobile-header.is-compact .lintje-mobile-header__word {\n position: absolute;\n width: 1px; height: 1px;\n margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n/* The modified-filters count is the primitive badge's `attention` tone: near-black on the\n orange, because white on #E17000 is 3.2:1. */\n\n.lintje-mobile-menu {\n position: fixed;\n inset: var(--h-mobile-header) 0 0 0;\n z-index: 24;\n background: var(--color-nav-bg);\n color: var(--color-nav-text);\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n animation: lintje-menu-in var(--dur-sheet) var(--ease-in-motion);\n}\n.lintje-mobile-menu.is-leaving {\n animation: lintje-menu-out var(--dur-sheet) var(--ease-out-motion) forwards;\n pointer-events: none;\n}\n.lintje-mobile-menu__list { flex: 1; padding-bottom: var(--space-4); }\n.lintje-mobile-menu__heading {\n font-size: var(--label-size); font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking); text-transform: uppercase;\n color: var(--color-nav-text-sub);\n padding: 22px var(--space-5) 6px;\n}\n.lintje-mobile-menu__item {\n height: var(--h-touch);\n display: flex; align-items: center; gap: var(--space-3);\n padding: 0 var(--space-5);\n border-left: var(--nav-edge) solid transparent;\n color: var(--color-nav-text);\n font-size: 1rem;\n text-decoration: none;\n}\n.lintje-mobile-menu__item.is-active {\n background: var(--color-nav-active);\n border-left-color: var(--color-nav-active-edge);\n color: var(--color-nav-active-text);\n /* Not bold: the bold cut sets narrower and reads as another font size beside its neighbours. */\n}\n.lintje-mobile-menu__item.is-muted { color: var(--color-nav-disabled); }\n.lintje-mobile-menu__label { flex: 1; }\n.lintje-mobile-menu__meta { font-size: 0.875rem; color: var(--color-nav-disabled); flex: none; }\n/* The environment band and the feedback row with the version: below 768 px there is no rail,\n and a page's own footer is the host's, so this is the only place they can stand. */\n.lintje-mobile-menu__environment {\n flex: none;\n height: 2rem;\n margin: 0;\n background: var(--color-nav-environment-bg);\n color: var(--color-nav-environment-text);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n text-align: center;\n line-height: 2rem;\n white-space: nowrap;\n overflow: hidden;\n}\n.lintje-mobile-menu__feedback { flex: none; margin: 0; }\n.lintje-mobile-menu__version {\n flex: none;\n margin-left: auto;\n font-family: var(--font-mono); font-size: 0.875rem; letter-spacing: .02em;\n color: var(--color-nav-text-sub);\n}\n\n.lintje-mobile-header__home { display: block; flex: none; color: var(--color-nav-text); }\n\n\n@media print { .lintje-mobile-header, .lintje-mobile-menu { display: none; } }\n\n/* Forced colours: the active row's 4 px edge is Highlight, a muted row GrayText. */\n@media (forced-colors: active) {\n .lintje-mobile-header :focus-visible,\n .lintje-mobile-menu :focus-visible { outline-color: Highlight; }\n .lintje-mobile-header .lintje-view__popover :focus-visible,\n .lintje-mobile-header .lintje-share__popover :focus-visible { outline-color: Highlight; }\n .lintje-mobile-menu__item { border-left-color: Canvas; }\n .lintje-mobile-menu__item.is-active { border-left-color: Highlight; }\n .lintje-mobile-menu__item.is-muted { color: GrayText; }\n}\n", Ne = "/* The bar, the two toggle groups and the share popover are all drawn by the shell itself. */\n\n.lintje-top-bar {\n height: var(--h-topbar);\n flex: none;\n position: sticky;\n top: 0;\n z-index: 20;\n background: var(--color-bg-surface);\n border-bottom: 1px solid var(--color-border-default);\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 calc(var(--space-6) + var(--page-gutter));\n}\n/* The name and the page's name share a baseline and stand in the middle of the bar as one. */\n.lintje-top-bar__name { display: flex; align-items: center; gap: var(--space-1); min-width: 0; }\n.lintje-top-bar__words { display: flex; align-items: baseline; gap: 6px; min-width: 0; }\n/* The dashboard's name is a word, not a line, so it uses `--color-accent-text`. */\n.lintje-top-bar__dashboard {\n font: var(--text-dashboard);\n color: var(--color-accent-text);\n white-space: nowrap;\n}\n.lintje-top-bar__page {\n font-size: 1rem;\n color: var(--color-text-muted);\n opacity: 0;\n transition: opacity var(--dur-hover) var(--ease-in-motion);\n white-space: nowrap;\n}\n.lintje-top-bar__page.is-visible { opacity: 1; }\n\n.lintje-top-bar__actions { display: flex; flex: none; align-items: center; gap: var(--space-3); }\n.lintje-top-bar__key { margin-left: var(--space-1); }\n/* The tools of the navigation bar stand here on the page's surface; an element with a shadow\n root declares the tokens again on its own host, so they are set on each one too. */\n.lintje-top-bar__actions,\n.lintje-top-bar__actions > * {\n --color-nav-text: var(--color-text-primary);\n --color-nav-hover: var(--color-bg-subtle);\n --lintje-tool-height: var(--h-button-chrome);\n}\n\n.lintje-toggle-group {\n display: flex;\n height: var(--h-button-chrome);\n border: 1px solid var(--color-border-strong);\n}\n.lintje-toggle-group__option {\n position: relative;\n width: var(--h-button-chrome);\n display: flex; align-items: center; justify-content: center;\n color: var(--color-text-primary);\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n/* Without a file for its icon the option shows its short Dutch word instead.\n The group keeps its height; only the option gets as wide as the word. */\n.lintje-toggle-group__option--text {\n width: auto;\n padding: 0 var(--space-3);\n font-size: 0.875rem;\n font-weight: 700;\n white-space: nowrap;\n}\n.lintje-toggle-group__option:hover { background: var(--color-bg-subtle); }\n/* A 40 px option reaches the 48 px target through a transparent hit area 4 px above and\n below; the options of a group touch, so it does not reach sideways. */\n.lintje-toggle-group__option::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n/* The chosen half has no border of its own — the group draws one around both —\n so the primary-fill border is an inset ring: the same\n 1 px line, drawn inside the box, so neither half moves a pixel. Invisible in\n light (the token is the primary there), the tint in dark. */\n.lintje-toggle-group__option.is-active {\n background: var(--color-action-primary);\n color: var(--color-action-primary-text);\n box-shadow: inset 0 0 0 1px var(--color-action-primary-border);\n}\n\n/* The panels' side inset: their own as they hang from a tool, the filter sheet's as a sheet. */\n.lintje-view__popover,\n.lintje-share__popover { --lintje-panel-inset: 14px; }\n\n/* \"Weergave\": the share menu's panel, with a group of words under each heading. */\n.lintje-view { position: relative; }\n/* A panel sets the text colour of its surface: on the navigation bar it would take the bar's. */\n.lintje-view__popover {\n position: absolute;\n right: 0; top: calc(100% + 4px);\n z-index: 41;\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n border: 1px solid var(--color-border-popover);\n box-shadow: var(--shadow-popover);\n padding: var(--space-2) 0;\n animation: lintje-popover-in var(--dur-popover) var(--ease-in-motion);\n}\n.lintje-view__row { display: flex; padding: var(--space-1) var(--lintje-panel-inset) var(--space-2); }\n/* A theme's name stays one line; the panel grows to it. */\n.lintje-view__themes { white-space: nowrap; }\n\n.lintje-share { position: relative; }\n.lintje-share__scrim { position: fixed; inset: 0; z-index: 40; }\n.lintje-share__popover {\n position: absolute;\n right: 0; top: calc(100% + 4px);\n z-index: 41;\n width: 18.75rem;\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n border: 1px solid var(--color-border-popover);\n box-shadow: var(--shadow-popover);\n padding: var(--space-2) 0;\n animation: lintje-popover-in var(--dur-popover) var(--ease-in-motion);\n}\n.lintje-share__heading {\n font-size: var(--label-size); font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking); text-transform: uppercase;\n color: var(--color-text-muted);\n padding: var(--space-3) var(--lintje-panel-inset) 4px;\n}\n.lintje-share__item {\n width: 100%;\n display: flex; align-items: center; gap: 10px;\n min-height: var(--h-target);\n padding: 0 var(--lintje-panel-inset);\n font-size: 1rem;\n text-align: left;\n color: var(--color-text-primary);\n}\n.lintje-share__item:hover { background: var(--color-bg-subtle); }\n/* Where an icon is still missing: the label keeps the column's text edge. */\n.lintje-share__gap { width: 16px; flex: none; }\n.lintje-share__qr {\n display: flex; flex-direction: column; align-items: center; gap: var(--space-3);\n padding: var(--space-2) var(--lintje-panel-inset) var(--space-3);\n}\n.lintje-share__hint { text-align: center; }\n.lintje-share__code { align-self: stretch; }\n.lintje-share__footer {\n font: var(--text-meta); color: var(--color-text-muted);\n padding: var(--space-2) var(--lintje-panel-inset) 0;\n margin-top: var(--space-2);\n border-top: 1px solid var(--color-border-default);\n}\n\n:where(.lintje-shell.is-phone) .lintje-top-bar { display: none; }\n\n/* Below 768 px \"Weergave\" and \"Delen\" open from below, as the filter sheet does. A phone has its\n own way to a phone, so the QR code is not offered there. */\n:where(.lintje-shell.is-phone) .lintje-share__scrim {\n z-index: 60;\n background: var(--color-overlay-page);\n animation: lintje-fade-in var(--dur-scrim) var(--ease-in-motion);\n}\n:where(.lintje-shell.is-phone) .lintje-view__popover,\n:where(.lintje-shell.is-phone) .lintje-share__popover,\n:where(.lintje-shell.is-phone) .lintje-navbar .lintje-view__popover,\n:where(.lintje-shell.is-phone) .lintje-navbar .lintje-share__popover {\n position: fixed;\n inset: auto 0 0 0;\n z-index: 61;\n width: auto;\n max-height: 88vh;\n overflow-y: auto;\n padding-bottom: var(--space-4);\n border: 0;\n border-top: 1px solid var(--color-border-popover);\n box-shadow: none;\n animation: lintje-sheet-in var(--dur-sheet) var(--ease-in-motion);\n}\n:where(.lintje-shell.is-phone) .lintje-view__popover,\n:where(.lintje-shell.is-phone) .lintje-share__popover { padding-top: 0; --lintje-panel-inset: var(--space-4); }\n:where(.lintje-shell.is-phone) .lintje-view__popover:focus,\n:where(.lintje-shell.is-phone) .lintje-share__popover:focus { outline: none; }\n:where(.lintje-shell.is-phone) .lintje-share__phone { display: none; }\n/* The filter sheet's head; it stays while the sheet scrolls. */\n.lintje-share__header {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex; align-items: center; gap: var(--space-2);\n margin-bottom: var(--space-2);\n padding: var(--space-4);\n background: var(--color-bg-surface);\n border-bottom: 1px solid var(--color-border-popover);\n}\n.lintje-share__title { flex: 1; margin: 0; font: var(--text-h2); }\n\n\n/* On paper the chrome is not part of the page. */\n@media print { .lintje-top-bar { display: none; } }\n\n/* Forced colours: the chosen half is carried by its fill and an inset\n ring, both of which the browser drops. Every half takes a 1 px border inside\n its own box — Canvas at rest, Highlight when chosen — so nothing moves. */\n@media (forced-colors: active) {\n .lintje-toggle-group__option { border: 1px solid Canvas; }\n .lintje-toggle-group__option.is-active { border-color: Highlight; }\n}\n", Y = "lintje-shell-main", X = (e) => "links" in e, Z = (e) => e?.navigation?.flatMap((e) => X(e) ? e.links : [e]).find((e) => e.active);
938
+ var Ae = "/* Header of the top layout, drawn by `header.ts` inside the caller's shadow root. */\n\n/* The logo bar sits above the veil, so an open submenu does not dim it. A box wider than a narrow\n phone is cut at both sides alike, which keeps the ribbon centred. */\n.lintje-logobar {\n position: relative;\n z-index: 31;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n min-height: var(--h-logobar);\n overflow: hidden;\n background: var(--color-logobar-bg);\n color: var(--color-logobar-text);\n}\n.lintje-logobar__home { display: block; flex: none; color: inherit; }\n/* The logo link's ring is drawn inside its box (`focus-inset`): the bar cuts what stands outside\n its top edge. */\n\n/* The environment outside production: the accent, not a status. */\n.lintje-logobar__environment {\n position: absolute;\n top: var(--space-6);\n right: calc(var(--page-pad-x) + var(--page-gutter));\n height: var(--h-chip);\n margin: 0;\n padding: 0 var(--space-3);\n background: var(--color-nav-environment-bg);\n color: var(--color-nav-environment-text);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n line-height: var(--h-chip);\n white-space: nowrap;\n}\n.lintje-logobar__environment-short { display: none; }\n/* On a phone the organisation's name reaches the right edge: the block shrinks to three letters above it. */\n:where(.lintje-shell.is-phone) .lintje-logobar__environment {\n top: var(--space-2);\n right: var(--space-4);\n height: var(--h-chip-field);\n line-height: var(--h-chip-field);\n}\n/* The full name stays for a screen reader; the three letters are only seen. */\n:where(.lintje-shell.is-phone) .lintje-logobar__environment-label {\n position: absolute;\n width: 1px; height: 1px;\n margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n:where(.lintje-shell.is-phone) .lintje-logobar__environment-short { display: inline; }\n\n/* The bar is the submenu's positioning context, which is why a group is not one. Hover, active\n and edge are set on the bar for what inherits, and on each element at its end, because an\n element with a shadow root declares the tokens again on its own host. */\n.lintje-navbar,\n.lintje-navbar__end > * {\n --color-nav-hover: var(--color-navbar-hover);\n --color-nav-active: var(--color-navbar-active);\n --color-nav-active-edge: var(--color-navbar-active-edge);\n}\n.lintje-navbar__end > * { --lintje-tool-height: var(--h-navbar); }\n/* The colour runs to the edges; the content keeps to `--page-gutter`. */\n.lintje-navbar {\n position: relative;\n z-index: 30;\n display: flex;\n align-items: stretch;\n justify-content: space-between;\n gap: 0 var(--space-4);\n height: var(--h-navbar);\n padding: 0 calc(var(--space-3) + var(--page-gutter)) 0\n calc(var(--page-pad-x) - var(--space-5) + var(--page-gutter));\n background: var(--color-nav-bg);\n color: var(--color-nav-text);\n}\n/* Both widths are measured (`SubmenuController`): neither may depend on whether the entries or\n \"Menu\" stand there. */\n.lintje-navbar__start { display: flex; flex: 1 1 auto; align-items: stretch; min-width: 0; }\n.lintje-navbar__entries { display: flex; flex: 1 1 0; align-items: stretch; min-width: 0; }\n.lintje-navbar__list { display: flex; flex: none; align-items: stretch; width: max-content; }\n/* Hanging from the bar's end, the overflow falls off the left, where the page gains no scroll. */\n.lintje-navbar__list.is-hidden {\n position: absolute;\n top: 0;\n right: 0;\n visibility: hidden;\n pointer-events: none;\n}\n.lintje-navbar__group { display: flex; }\n.lintje-navbar__end { display: flex; flex: none; align-items: center; gap: var(--space-1); }\n/* The orange ring disappears on the theme's fill, so the bar takes `--color-focus-on-theme`. The\n open entry and the submenu stand on the page's surface and keep the standard ring. */\n.lintje-navbar :focus-visible { outline-color: var(--color-focus-on-theme); }\n.lintje-navbar .lintje-navbar__entry.is-open:focus-visible,\n.lintje-navbar .lintje-navbar__submenu :focus-visible { outline-color: var(--color-focus); }\n\n/* The edge is always there on both sides so the word stays centred; transparent until active. */\n.lintje-navbar__entry {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n box-sizing: border-box;\n height: var(--h-navbar);\n padding: 0 var(--space-5);\n border-top: var(--nav-edge) solid transparent;\n border-bottom: var(--nav-edge) solid transparent;\n color: var(--color-nav-text);\n font: var(--text-body);\n white-space: nowrap;\n text-decoration: none;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-navbar__entry:hover:not(.is-unavailable) { background: var(--color-navbar-hover); }\n.lintje-navbar__entry:hover:not(.is-unavailable) .lintje-navbar__label { text-decoration: underline; }\n/* Not bold: the bold cut sets narrower and reads as another size beside its neighbours. */\n.lintje-navbar__entry.is-active {\n background: var(--color-navbar-active);\n border-bottom-color: var(--color-navbar-active-edge);\n color: var(--color-nav-active-text);\n}\n.lintje-navbar__entry.is-open,\n.lintje-navbar__entry.is-open:hover {\n background: var(--color-bg-surface);\n border-bottom-color: transparent;\n color: var(--color-navbar-open-text);\n}\n.lintje-navbar__entry.is-open .lintje-navbar__label { text-decoration: none; }\n.lintje-navbar__entry.is-unavailable { color: var(--color-nav-disabled); cursor: default; }\n\n/* The shadow falls down only: `clip-path` cuts what would fall on the bar, so the open entry and\n the panel stay one shape. `--lintje-navbar-room` is measured. */\n.lintje-navbar__submenu {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n padding: var(--space-8) calc(var(--page-pad-x) + var(--page-gutter)) var(--space-10);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n border-bottom: 1px solid var(--color-border-default);\n box-shadow: var(--shadow-popover);\n clip-path: inset(0 0 -32px 0);\n max-height: var(--lintje-navbar-room, calc(100dvh - var(--h-navbar)));\n box-sizing: border-box;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n.lintje-navbar__heading {\n margin: var(--space-6) 0 var(--space-3);\n color: var(--color-text-muted);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n}\n.lintje-navbar__heading:first-child { margin-top: 0; }\n.lintje-navbar__pages {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: var(--space-4);\n margin: 0;\n padding: 0;\n list-style: none;\n animation:\n lintje-fade-in var(--dur-popover) linear,\n lintje-drop-in var(--dur-submenu) ease;\n}\n@media (max-width: 1023px) {\n .lintje-navbar__pages { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n}\n.lintje-navbar__item { display: flex; }\n\n/* The 1 px edge is always there, so hover moves nothing. */\n.lintje-navbar__page {\n flex: 1;\n display: flex;\n align-items: center;\n gap: var(--space-3);\n box-sizing: border-box;\n min-width: 0;\n min-height: 4rem;\n padding: var(--space-3) var(--space-4);\n background: var(--color-bg-subtle);\n border: 1px solid transparent;\n color: var(--color-text-primary);\n font: var(--text-body);\n text-decoration: none;\n transition: border-color var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-navbar__page-text { display: flex; flex: 1; flex-direction: column; min-width: 0; }\n.lintje-navbar__page .lintje-navbar__label { font-weight: 700; }\n.lintje-navbar__metric { color: var(--color-text-muted); font: var(--text-small); }\n.lintje-navbar__metric-value { color: var(--color-text-primary); }\n.lintje-navbar__page:hover:not(.is-unavailable) { border-color: var(--color-accent-line); }\n.lintje-navbar__page:hover:not(.is-unavailable) .lintje-navbar__label { text-decoration: underline; }\n.lintje-navbar__page.is-active {\n box-shadow: inset var(--nav-edge) 0 0 var(--color-accent-line);\n color: var(--color-accent-text);\n}\n.lintje-navbar__page.is-unavailable,\n.lintje-navbar__page.is-unavailable .lintje-navbar__metric-value { color: var(--color-text-muted); cursor: default; }\n.lintje-navbar__page.is-no-access .lintje-navbar__label { text-decoration: line-through; }\n\n/* Fixed to the viewport: the header may stand in a box of its own height above the page. */\n.lintje-header-scrim {\n position: fixed;\n inset: 0;\n z-index: 20;\n background: var(--color-overlay-nav);\n pointer-events: none;\n animation: lintje-fade-in var(--dur-scrim) var(--ease-in-motion);\n}\n\n@media print {\n .lintje-logobar, .lintje-navbar, .lintje-header-scrim { display: none; }\n}\n\n/* Forced colours: the browser drops the fill that carries the active page and the open group. */\n@media (forced-colors: active) {\n .lintje-navbar { border-bottom: 1px solid CanvasText; }\n .lintje-navbar__entry.is-active { border-bottom-color: Highlight; }\n .lintje-navbar__entry.is-open { outline: 1px solid CanvasText; outline-offset: -1px; }\n .lintje-navbar__entry.is-unavailable,\n .lintje-navbar__page.is-unavailable { color: GrayText; }\n .lintje-navbar__page { border-color: CanvasText; }\n .lintje-navbar__page.is-active { border-left: var(--nav-edge) solid Highlight; }\n .lintje-navbar__page.is-unavailable { border-color: GrayText; }\n .lintje-navbar__submenu { border: 1px solid CanvasText; }\n .lintje-navbar :focus-visible,\n .lintje-navbar .lintje-navbar__entry.is-open:focus-visible,\n .lintje-navbar .lintje-navbar__submenu :focus-visible { outline-color: Highlight; }\n}\n", je = ":host { display: block; min-width: 0; min-height: 100vh; }\n:host([hidden]) { display: none; }\n/* A short page is one sheet, not one sheet with the rest left empty. */\n@media print { :host { min-height: 0; } }\n\n/* ------------------------------------------------------------------------ */\n\n/*\n * The page's left edge, for what pins itself to the viewport (the filter bar): the menu's width\n * beside the page, nothing above it. Custom properties reach the slotted content.\n */\n.lintje-shell {\n --lintje-shell-left: 0px;\n position: relative;\n display: flex;\n flex-direction: column;\n min-height: inherit;\n background: var(--color-bg-page);\n color: var(--color-text-primary);\n}\n/* A specimen's bars (z-index 25–31) would otherwise cover the outer shell's open menus. */\n.lintje-shell.is-nested { isolation: isolate; }\n.lintje-shell--side { --lintje-shell-left: var(--w-rail); flex-direction: row; }\n@media (min-width: 1440px) {\n .lintje-shell--side:not(.is-unpinned) { --lintje-shell-left: var(--w-nav); }\n}\n.lintje-shell--side:where(.is-phone) { --lintje-shell-left: 0px; }\n.lintje-shell__column {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n/* \"Naar de inhoud\": hidden until focused. The ring is drawn inside the box (`focus-inset`):\n outside it would lie on the theme fill (1.89:1, on Defensie 1:1); inside, its neighbour is\n white. */\n.lintje-shell__skip {\n position: absolute;\n top: var(--space-2);\n left: var(--space-2);\n z-index: 50;\n display: inline-flex;\n align-items: center;\n min-height: var(--h-touch);\n padding: var(--space-2) var(--space-4);\n background: var(--color-bg-surface);\n color: var(--color-link);\n font: var(--text-ui);\n text-decoration: underline;\n box-shadow: var(--shadow-popover);\n}\n.lintje-shell__skip:not(:focus) {\n width: 1px;\n height: 1px;\n min-height: 0;\n padding: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n box-shadow: none;\n}\n\n/* The main region takes the skip link's focus; it is not a control and draws no ring. */\n.lintje-shell__main {\n display: flex;\n flex-direction: column;\n flex: 1 0 auto;\n min-width: 0;\n}\n.lintje-shell__main:focus { outline: none; }\n/* Without content the last edge-to-edge part takes the room left: a conversation keeps its\n question box at the bottom of a short page. */\n.lintje-shell__main.is-bare ::slotted([slot='full']) { flex: 1 0 auto; }\n\n/* The content keeps to the design system's maximum width, as the bars above it do. */\n.lintje-shell__content {\n display: flex;\n flex-direction: column;\n gap: var(--grid-gutter);\n padding: var(--page-pad-y) calc(var(--page-pad-x) + var(--page-gutter)) var(--space-10);\n}\n.lintje-shell__content[hidden] { display: none; }\n:where(.lintje-shell.is-phone) .lintje-shell__content { padding: var(--space-4) var(--space-4) var(--space-8); gap: var(--space-3); }\n\n/*\n * Top layout. The navigation bar cannot be `sticky`: it would stick inside the header's own box\n * and leave with it, so its slot keeps the bar's height (`--h-navbar`) and the bar is pinned\n * once the slot has left the viewport.\n */\n.lintje-shell__sentinel { height: 1px; margin-bottom: -1px; }\n.lintje-shell__nav { position: relative; z-index: 25; min-height: var(--h-navbar); }\n.lintje-shell__nav.is-stuck .lintje-navbar {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n}\n\n/* Below 768 px the mobile header is the bar under the logo bar; its slot keeps the height. */\n.lintje-shell__mobile-bar { height: var(--h-topbar); }\n.lintje-shell__mobile-pin { position: relative; z-index: 25; }\n.lintje-shell__mobile-bar.is-stuck .lintje-shell__mobile-pin {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n}\n.lintje-shell--top .lintje-mobile-header {\n position: static;\n height: var(--h-topbar);\n align-items: center;\n gap: var(--space-3);\n}\n.lintje-shell--top .lintje-mobile-header__actions { margin-top: 0; flex: none; }\n.lintje-shell--top .lintje-mobile-menu {\n position: absolute;\n inset: 100% 0 auto 0;\n height: calc(100dvh - var(--h-topbar));\n}\n/* 16 px so two lines fit inside the 56 px bar; longer is cut with an ellipsis. */\n.lintje-mobile-header__title {\n display: -webkit-box;\n min-width: 0;\n overflow: hidden;\n color: var(--color-nav-text);\n font: var(--text-dashboard);\n font-size: 1rem;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n}\n/* The logo bar already shows the environment. */\n.lintje-shell--top .lintje-mobile-menu__environment { display: none; }\n\n/* The page's one h1; cut before it can push the entries out. */\n.lintje-shell__name {\n flex: 0 1 auto;\n min-width: 0;\n max-width: 24rem;\n margin: 0;\n padding: 0 var(--space-5);\n overflow: hidden;\n color: var(--color-nav-text);\n font: var(--text-dashboard);\n line-height: var(--h-navbar);\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n/* Bare glyphs in a bar; on the navigation bar their ring is the on-theme one (`header.css`). */\n.lintje-shell__tool {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: none;\n width: var(--h-touch);\n height: var(--lintje-tool-height, var(--h-touch));\n color: var(--color-nav-text);\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-shell__tool:hover { background: var(--color-nav-hover); }\n.lintje-shell__tool--text {\n width: auto;\n padding: 0 var(--space-3);\n font: var(--text-ui);\n}\n.lintje-navbar .lintje-shell__tool { height: var(--h-navbar); }\n\n/* The panels hang from the bar, not the tool. They stand on the page's surface: standard ring. */\n.lintje-navbar .lintje-view,\n.lintje-navbar .lintje-share { position: static; }\n.lintje-navbar .lintje-view__popover,\n.lintje-navbar .lintje-share__popover {\n top: 100%;\n right: calc(var(--space-3) + var(--page-gutter));\n}\n.lintje-navbar .lintje-view__popover :focus-visible,\n.lintje-navbar .lintje-share__popover :focus-visible { outline-color: var(--color-focus); }\n\n.lintje-shell__sheet-user { border-top: 1px solid var(--color-nav-line); }\n\n/* On paper the bars give way to the logo and the application's name; the screen never shows it. */\n.lintje-shell__print-head { display: none; }\n\n@media print {\n .lintje-shell__skip,\n .lintje-shell__sentinel,\n .lintje-shell__nav,\n .lintje-shell__mobile-bar { display: none; }\n .lintje-shell__print-head {\n display: block;\n border-bottom: 1px solid var(--color-border-default);\n }\n .lintje-shell__print-logo {\n display: flex;\n justify-content: center;\n min-height: var(--h-logobar);\n }\n .lintje-shell__print-name {\n margin: 0;\n padding: var(--space-3) 0;\n color: var(--color-text-primary);\n font: var(--text-dashboard);\n }\n}\n\n@media (forced-colors: active) {\n .lintje-navbar .lintje-view__popover :focus-visible,\n .lintje-navbar .lintje-share__popover :focus-visible { outline-color: Highlight; }\n}\n", Me = "\n/* Dark is its own surface, not an inversion: every colour here is a `--color-nav-*` token. */\n.lintje-nav {\n width: var(--w-nav);\n flex: none;\n /* `align-self: flex-start`: a stretched flex child would make sticky do nothing. */\n position: sticky;\n top: 0;\n align-self: flex-start;\n height: 100vh;\n background: var(--color-nav-bg);\n color: var(--color-nav-text);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n /* Above the page also while the rail collapses: with a z-index only while expanded,\n later positioned content (charts, KPI tiles) painted over the shrinking menu. */\n z-index: 30;\n box-shadow: var(--shadow-nav);\n /* The margin mirrors the width growth, so width + margin-right is 72 px at every moment;\n otherwise the content jumps 216 px for one frame. */\n transition:\n width var(--dur-rail) var(--ease-in-motion),\n margin-right var(--dur-rail) var(--ease-in-motion);\n}\n/* The orange ring disappears into the theme fill: the menu takes the on-theme ring. */\n.lintje-nav :focus-visible { outline-color: var(--color-focus-on-theme); }\n.lintje-nav--rail { width: var(--w-rail); margin-right: 0; }\n/* Expanding lies on top of the content: 288 px drawn, 72 px taken. A negative right margin does\n that; `fixed` or `absolute` would make the page jump. */\n.lintje-nav--rail.is-expanded {\n width: var(--w-nav);\n margin-right: calc(var(--w-rail) - var(--w-nav));\n}\n/* The overlay behind the expanded rail. A sibling of the nav: inside its stacking context it\n would darken the menu itself. */\n.lintje-nav__scrim {\n position: fixed;\n inset: 0;\n z-index: 29;\n background: var(--color-overlay-nav);\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--dur-rail) var(--ease-in-motion);\n}\n.lintje-nav__scrim.is-visible { opacity: 1; }\n\n.lintje-nav__header {\n height: var(--h-nav-head);\n flex: none;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 0 var(--space-4) 0 12px;\n}\n\n.lintje-nav__pin {\n position: relative;\n width: var(--h-icon-button); height: var(--h-icon-button);\n margin-top: 12px;\n display: flex; align-items: center; justify-content: center;\n color: var(--color-nav-text);\n background: transparent;\n flex: none;\n}\n.lintje-nav__pin--text {\n width: auto;\n padding: 0 var(--space-2);\n font-size: 0.875rem;\n font-weight: 700;\n white-space: nowrap;\n}\n/* The pin and Afmelden: a transparent hit area takes the target to 48 px. */\n.lintje-nav__pin::after,\n.lintje-nav__logout-button::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2));\n}\n.lintje-nav__pin { transition: background var(--dur-hover) var(--ease-in-motion); }\n.lintje-nav__pin:hover { background: var(--color-nav-hover); }\n\n/* No native bar: a styled one takes width in every browser and the rows' fill would stop short\n of the menu's edge. `NavScrollbar` sizes and places the thumb drawn instead. */\n.lintje-nav__list { flex: 1; overflow-y: auto; overflow-x: hidden; scrollbar-width: none; }\n.lintje-nav__list::-webkit-scrollbar { display: none; }\n.lintje-nav__thumb {\n position: absolute;\n top: 0; right: 0;\n width: var(--space-2);\n height: 0;\n /* The menu's second ink reads on its fill and on a hovered row. */\n background: var(--color-nav-text-sub);\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--dur-hover) var(--ease-in-motion);\n}\n/* There while the pointer is on the menu or a drag lasts; the keyboard's focus shows it at once. */\n.lintje-nav:hover .lintje-nav__thumb,\n.lintje-nav__thumb.is-dragging,\n.lintje-nav__list:focus-within + .lintje-nav__thumb { opacity: 1; pointer-events: auto; }\n.lintje-nav__list:focus-within + .lintje-nav__thumb { transition: none; }\n.lintje-nav__group { display: flex; flex-direction: column; }\n\n/* The same height in both modes, so every row below stays in place when the rail expands. */\n.lintje-nav__section-heading {\n position: relative;\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n color: var(--color-nav-text-sub);\n padding: 22px var(--space-5) 6px;\n white-space: nowrap;\n margin: 0;\n}\n/* A line in the rail, text once it expands: the text fades in 80 ms after the width starts. */\n.lintje-nav__section-label {\n display: block;\n transition: opacity 160ms var(--ease-in-motion) 80ms, transform var(--dur-base) var(--ease-in-motion) 80ms;\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__section-label {\n opacity: 0;\n transform: translateX(-8px);\n transition: opacity 60ms var(--ease-out-motion), transform 0ms linear 60ms;\n}\n.lintje-nav__separator {\n position: absolute;\n left: 14px; right: 14px;\n top: 50%;\n height: 1px;\n background: var(--color-nav-line);\n opacity: 0;\n transform: scaleX(0);\n transform-origin: left center;\n transition: transform 140ms var(--ease-out-motion), opacity 0ms linear 140ms;\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__separator {\n opacity: 1;\n transform: none;\n transition: transform 160ms var(--ease-in-motion) 60ms;\n}\n\n/* One row in every mode. A 4 px border + 22 px padding centres the 20 px icon in the 72 px rail,\n in line with the logo. Expanding animates only the width, so the icon stays in place. */\n.lintje-nav__item {\n position: relative;\n height: var(--h-nav-row);\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--space-3);\n padding: 0 22px;\n border-left: var(--nav-edge) solid transparent;\n font-size: 1rem;\n color: var(--color-nav-text);\n text-decoration: none;\n white-space: nowrap;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-nav__item:hover:not(.is-no-page):not(.is-no-access) {\n background: var(--color-nav-hover);\n}\n.lintje-nav__item.is-active {\n background: var(--color-nav-active);\n border-left-color: var(--color-nav-active-edge);\n color: var(--color-nav-active-text);\n /* Not bold: the bold cut sets narrower and reads as another font size beside its neighbours. */\n}\n.lintje-nav__item:focus-visible { outline-offset: -3px; }\n\n.lintje-nav__item.is-no-page { color: var(--color-nav-disabled); cursor: default; }\n.lintje-nav__item.is-no-access { color: var(--color-nav-disabled); text-decoration: line-through; cursor: not-allowed; }\n\n.lintje-nav__label { flex: 1; overflow: hidden; text-overflow: ellipsis; }\n.lintje-nav--rail.is-expanded .lintje-nav__label,\n.lintje-nav--rail.is-expanded .lintje-nav__metric {\n animation: lintje-nav-text-in var(--dur-base) var(--ease-in-motion) 80ms backwards;\n}\n@keyframes lintje-nav-text-in { from { opacity: 0; transform: translateX(-8px); } }\n.lintje-nav__metric { font-size: 0.875rem; color: var(--color-nav-text-sub); flex: none; }\n.lintje-nav__item.is-no-access .lintje-nav__metric { text-decoration: none; }\n.lintje-nav__item.is-no-page .lintje-nav__metric { color: var(--color-nav-disabled); }\n\n/* The badge is `badge.css`, adopted by the shell. In the rail a word (\"NIEUW\")\n does not fit: it becomes a dot, so the rail does not overflow. */\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__badge {\n position: absolute; top: 2px; right: var(--space-1);\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__badge--new {\n min-width: 8px; width: 8px; height: 8px; padding: 0;\n border-radius: 999px;\n font-size: 0; overflow: hidden;\n}\n\n/* Environment band, only outside production. Its fill is the theme's accent, not the attention\n status: on `defensie` (menu `#E17000`) the accent draws a blue band that reads against it. */\n.lintje-nav__environment {\n position: relative;\n flex: none;\n height: 2rem;\n margin: 0;\n background: var(--color-nav-environment-bg);\n color: var(--color-nav-environment-text);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n text-align: center;\n line-height: 2rem;\n white-space: nowrap;\n overflow: hidden;\n}\n.lintje-nav__environment-label,\n.lintje-nav__environment-short { position: absolute; inset: 0; }\n.lintje-nav__environment-label {\n transition: opacity 160ms var(--ease-in-motion) 80ms;\n}\n.lintje-nav__environment-short { opacity: 0; transition: opacity 60ms var(--ease-out-motion); }\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__environment-label { opacity: 0; transition: opacity 60ms var(--ease-out-motion); }\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__environment-short { opacity: 1; transition: opacity 160ms var(--ease-in-motion) 80ms; }\n\n.lintje-nav__feedback { flex: none; }\n.lintje-nav__version { font-family: var(--font-mono); font-size: 0.875rem; letter-spacing: .02em; margin-left: auto; }\n/* Without a contact the version gets a row with the menu row's geometry, so the user block does\n not move; not `.lintje-nav__item`, which carries a hover. */\n.lintje-nav__version-row {\n flex: none;\n height: var(--h-nav-row);\n margin: 0;\n display: flex;\n align-items: center;\n padding: 0 22px;\n border-left: var(--nav-edge) solid transparent;\n}\n\n/* \"Afmelden\": a real form, because signing out is a POST that leaves the page. */\n/* The form is `hidden` in the rail, not transparent, so the button is out of the tab order. */\n.lintje-nav__logout { flex: none; margin-left: auto; }\n.lintje-nav__logout[hidden] { display: none; }\n.lintje-nav__logout-button {\n position: relative;\n width: var(--h-icon-button); height: var(--h-icon-button);\n display: flex; align-items: center; justify-content: center;\n /* Quiet at rest; full text colour on hover and focus. */\n color: var(--color-nav-text-sub);\n background: transparent;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-nav__logout-button:hover,\n.lintje-nav__logout-button:focus-visible { background: var(--color-nav-hover); color: var(--color-nav-text); }\n.lintje-nav__logout-text { font-size: 0.875rem; font-weight: 700; white-space: nowrap; padding: 0 var(--space-2); }\n\n.lintje-nav__footer {\n flex: none;\n display: flex; align-items: center; gap: 10px;\n padding: var(--space-4) var(--space-5) var(--space-5) var(--space-4);\n border-top: 1px solid var(--color-nav-line);\n font-size: 1rem;\n}\n/* As high as name and role together (two 1.25rem lines); the left padding keeps it centred in\n the rail. */\n.lintje-nav__avatar {\n width: 2.5rem; height: 2.5rem; flex: none;\n display: flex; align-items: center; justify-content: center;\n border-radius: var(--radius-round);\n background: var(--color-nav-avatar-bg);\n color: var(--color-nav-avatar-text);\n font-size: 1rem; font-weight: 700;\n}\n/* Name and role fade and slide in like the headings; `nowrap` keeps one line. */\n.lintje-nav__user {\n display: flex; flex-direction: column; line-height: 1.25rem;\n min-width: 0; flex: 1 1 auto; white-space: nowrap;\n transition: opacity 160ms var(--ease-in-motion) 80ms, transform var(--dur-base) var(--ease-in-motion) 80ms;\n}\n.lintje-nav--rail:not(.is-expanded) .lintje-nav__user { opacity: 0; transform: translateX(-8px); transition: none; }\n.lintje-nav__user > b,\n.lintje-nav__role { overflow: hidden; text-overflow: ellipsis; }\n.lintje-nav__role { font-size: 0.875rem; color: var(--color-nav-text-sub); }\n\n:where(.lintje-shell.is-phone) .lintje-nav,\n:where(.lintje-shell.is-phone) .lintje-nav__scrim { display: none; }\n\n/* An emblem's black, if it has any, draws in the menu's text colour (`currentColor`). */\n.lintje-nav__home { display: block; flex: none; color: var(--color-nav-text); }\n\n\n@media print { .lintje-nav, .lintje-nav__scrim { display: none; } }\n\n/* Forced colours: the active row is a fill and a 4 px edge; the fill is dropped and the edge\n turns Highlight. A row without a page or access is GrayText. The ring is Highlight. The\n shadow is dropped, so an outline keeps the menu's edge against the page. */\n@media (forced-colors: active) {\n .lintje-nav { outline: 1px solid CanvasText; }\n .lintje-nav :focus-visible { outline-color: Highlight; }\n .lintje-nav__item { border-left-color: Canvas; }\n .lintje-nav__item.is-active { border-left-color: Highlight; }\n .lintje-nav__item.is-no-page,\n .lintje-nav__item.is-no-access { color: GrayText; }\n .lintje-nav__avatar { border: 1px solid CanvasText; }\n .lintje-nav__thumb { forced-color-adjust: none; background: CanvasText; }\n}\n", J = "\n/* One region: the open menu's dialog and the box its focus trap keeps Tab inside. It shows no\n ring when the trap pulls back stray focus. The region sticks, not the header: a sticky box\n stays inside its parent, and this one is as tall as the header. */\n.lintje-mobile-chrome { flex: none; position: sticky; top: 0; z-index: 25; }\n.lintje-mobile-chrome:focus { outline: none; }\n\n.lintje-mobile-header {\n display: none;\n height: var(--h-mobile-header);\n flex: none;\n background: var(--color-nav-bg);\n align-items: flex-start;\n justify-content: space-between;\n padding: 0 var(--space-4);\n /* Tools that do not fit must not widen the page, or a phone zooms out and they seem to fit\n (`headerCompact`). Sideways only: the focus ring stays inside the padding. */\n overflow-x: clip;\n}\n:where(.lintje-shell.is-phone) .lintje-mobile-header { display: flex; }\n/* On the theme fill the ring is the on-theme one, as in the desktop menu. */\n.lintje-mobile-header :focus-visible,\n.lintje-mobile-menu :focus-visible { outline-color: var(--color-focus-on-theme); }\n/* \"Weergave\" and \"Delen\" open from this header as sheets on the page's surface: standard ring. */\n.lintje-mobile-header .lintje-view__popover :focus-visible,\n.lintje-mobile-header .lintje-share__popover :focus-visible { outline-color: var(--color-focus); }\n\n.lintje-mobile-header__actions { margin-top: var(--space-3); display: flex; gap: var(--space-2); }\n.lintje-mobile-header__button {\n height: var(--h-touch);\n padding: 0 var(--space-3);\n background: var(--color-nav-active);\n color: var(--color-nav-text);\n border: 1px solid var(--color-nav-line);\n font-size: 0.875rem;\n font-weight: 700;\n display: flex; align-items: center; justify-content: center; gap: var(--space-2);\n /* Square when only the glyph shows (`headerCompact`). */\n min-width: var(--h-touch);\n}\n/* Without room the words are read, not shown: the glyph and the badge stay. */\n.lintje-mobile-header.is-compact .lintje-mobile-header__word {\n position: absolute;\n width: 1px; height: 1px;\n margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n/* The modified-filters count is the badge's `attention` tone: near-black on the\n orange, because white on #E17000 is 3.2:1. */\n\n.lintje-mobile-menu {\n position: fixed;\n inset: var(--h-mobile-header) 0 0 0;\n z-index: 24;\n background: var(--color-nav-bg);\n color: var(--color-nav-text);\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n animation: lintje-menu-in var(--dur-sheet) var(--ease-in-motion);\n}\n.lintje-mobile-menu.is-leaving {\n animation: lintje-menu-out var(--dur-sheet) var(--ease-out-motion) forwards;\n pointer-events: none;\n}\n.lintje-mobile-menu__list { flex: 1; padding-bottom: var(--space-4); }\n.lintje-mobile-menu__heading {\n font-size: var(--label-size); font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking); text-transform: uppercase;\n color: var(--color-nav-text-sub);\n padding: 22px var(--space-5) 6px;\n}\n.lintje-mobile-menu__item {\n height: var(--h-touch);\n display: flex; align-items: center; gap: var(--space-3);\n padding: 0 var(--space-5);\n border-left: var(--nav-edge) solid transparent;\n color: var(--color-nav-text);\n font-size: 1rem;\n text-decoration: none;\n}\n.lintje-mobile-menu__item.is-active {\n background: var(--color-nav-active);\n border-left-color: var(--color-nav-active-edge);\n color: var(--color-nav-active-text);\n /* Not bold: the bold cut sets narrower and reads as another font size beside its neighbours. */\n}\n.lintje-mobile-menu__item.is-muted { color: var(--color-nav-disabled); }\n.lintje-mobile-menu__label { flex: 1; }\n.lintje-mobile-menu__meta { font-size: 0.875rem; color: var(--color-nav-disabled); flex: none; }\n/* The environment band and the feedback row with the version: below 768 px there is no rail,\n and a page's own footer is the host's, so this is the only place they can stand. */\n.lintje-mobile-menu__environment {\n flex: none;\n height: 2rem;\n margin: 0;\n background: var(--color-nav-environment-bg);\n color: var(--color-nav-environment-text);\n font-size: var(--label-size);\n font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking);\n text-transform: uppercase;\n text-align: center;\n line-height: 2rem;\n white-space: nowrap;\n overflow: hidden;\n}\n.lintje-mobile-menu__feedback { flex: none; margin: 0; }\n.lintje-mobile-menu__version {\n flex: none;\n margin-left: auto;\n font-family: var(--font-mono); font-size: 0.875rem; letter-spacing: .02em;\n color: var(--color-nav-text-sub);\n}\n\n.lintje-mobile-header__home { display: block; flex: none; color: var(--color-nav-text); }\n\n\n@media print { .lintje-mobile-header, .lintje-mobile-menu { display: none; } }\n\n/* Forced colours: the active row's 4 px edge is Highlight, a muted row GrayText. */\n@media (forced-colors: active) {\n .lintje-mobile-header :focus-visible,\n .lintje-mobile-menu :focus-visible { outline-color: Highlight; }\n .lintje-mobile-header .lintje-view__popover :focus-visible,\n .lintje-mobile-header .lintje-share__popover :focus-visible { outline-color: Highlight; }\n .lintje-mobile-menu__item { border-left-color: Canvas; }\n .lintje-mobile-menu__item.is-active { border-left-color: Highlight; }\n .lintje-mobile-menu__item.is-muted { color: GrayText; }\n}\n", Ne = "/* The bar, the two toggle groups and the share popover are all drawn by the shell itself. */\n\n.lintje-top-bar {\n height: var(--h-topbar);\n flex: none;\n position: sticky;\n top: 0;\n z-index: 20;\n background: var(--color-bg-surface);\n border-bottom: 1px solid var(--color-border-default);\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 calc(var(--space-6) + var(--page-gutter));\n}\n/* The name and the page's name share a baseline and stand in the middle of the bar as one. */\n.lintje-top-bar__name { display: flex; align-items: center; gap: var(--space-1); min-width: 0; }\n.lintje-top-bar__words { display: flex; align-items: baseline; gap: 6px; min-width: 0; }\n/* The dashboard's name is a word, not a line, so it uses `--color-accent-text`. */\n.lintje-top-bar__dashboard {\n font: var(--text-dashboard);\n color: var(--color-accent-text);\n white-space: nowrap;\n}\n.lintje-top-bar__page {\n font-size: 1rem;\n color: var(--color-text-muted);\n opacity: 0;\n transition: opacity var(--dur-hover) var(--ease-in-motion);\n white-space: nowrap;\n}\n.lintje-top-bar__page.is-visible { opacity: 1; }\n\n.lintje-top-bar__actions { display: flex; flex: none; align-items: center; gap: var(--space-3); }\n.lintje-top-bar__key { margin-left: var(--space-1); }\n/* The tools of the navigation bar stand here on the page's surface; an element with a shadow\n root declares the tokens again on its own host, so they are set on each one too. */\n.lintje-top-bar__actions,\n.lintje-top-bar__actions > * {\n --color-nav-text: var(--color-text-primary);\n --color-nav-hover: var(--color-bg-subtle);\n --lintje-tool-height: var(--h-button-chrome);\n}\n\n.lintje-toggle-group {\n display: flex;\n height: var(--h-button-chrome);\n border: 1px solid var(--color-border-strong);\n}\n.lintje-toggle-group__option {\n position: relative;\n width: var(--h-button-chrome);\n display: flex; align-items: center; justify-content: center;\n color: var(--color-text-primary);\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n/* Without a file for its icon the option shows its short Dutch word instead.\n The group keeps its height; only the option gets as wide as the word. */\n.lintje-toggle-group__option--text {\n width: auto;\n padding: 0 var(--space-3);\n font-size: 0.875rem;\n font-weight: 700;\n white-space: nowrap;\n}\n.lintje-toggle-group__option:hover { background: var(--color-bg-subtle); }\n/* A 40 px option reaches the 48 px target through a transparent hit area 4 px above and\n below; the options of a group touch, so it does not reach sideways. */\n.lintje-toggle-group__option::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n/* The chosen half has no border of its own — the group draws one around both —\n so the primary-fill border is an inset ring: the same\n 1 px line, drawn inside the box, so neither half moves a pixel. Invisible in\n light (the token is the primary there), the tint in dark. */\n.lintje-toggle-group__option.is-active {\n background: var(--color-action-primary);\n color: var(--color-action-primary-text);\n box-shadow: inset 0 0 0 1px var(--color-action-primary-border);\n}\n\n/* The panels' side inset: their own as they hang from a tool, the filter sheet's as a sheet. */\n.lintje-view__popover,\n.lintje-share__popover { --lintje-panel-inset: 14px; }\n\n/* \"Weergave\": the share menu's panel, with a group of words under each heading. */\n.lintje-view { position: relative; }\n/* A panel sets the text colour of its surface: on the navigation bar it would take the bar's. */\n.lintje-view__popover {\n position: absolute;\n right: 0; top: calc(100% + 4px);\n z-index: 41;\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n border: 1px solid var(--color-border-popover);\n box-shadow: var(--shadow-popover);\n padding: var(--space-2) 0;\n animation: lintje-popover-in var(--dur-popover) var(--ease-in-motion);\n}\n.lintje-view__row { display: flex; padding: var(--space-1) var(--lintje-panel-inset) var(--space-2); }\n/* A theme's name stays one line; the panel grows to it. */\n.lintje-view__themes { white-space: nowrap; }\n\n.lintje-share { position: relative; }\n.lintje-share__scrim { position: fixed; inset: 0; z-index: 40; }\n.lintje-share__popover {\n position: absolute;\n right: 0; top: calc(100% + 4px);\n z-index: 41;\n width: 18.75rem;\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n border: 1px solid var(--color-border-popover);\n box-shadow: var(--shadow-popover);\n padding: var(--space-2) 0;\n animation: lintje-popover-in var(--dur-popover) var(--ease-in-motion);\n}\n.lintje-share__heading {\n font-size: var(--label-size); font-weight: var(--label-weight);\n letter-spacing: var(--label-tracking); text-transform: uppercase;\n color: var(--color-text-muted);\n padding: var(--space-3) var(--lintje-panel-inset) 4px;\n}\n.lintje-share__item {\n width: 100%;\n display: flex; align-items: center; gap: 10px;\n min-height: var(--h-target);\n padding: 0 var(--lintje-panel-inset);\n font-size: 1rem;\n text-align: left;\n color: var(--color-text-primary);\n}\n.lintje-share__item:hover { background: var(--color-bg-subtle); }\n/* Where an icon is still missing: the label keeps the column's text edge. */\n.lintje-share__gap { width: 16px; flex: none; }\n.lintje-share__qr {\n display: flex; flex-direction: column; align-items: center; gap: var(--space-3);\n padding: var(--space-2) var(--lintje-panel-inset) var(--space-3);\n}\n.lintje-share__hint { text-align: center; }\n.lintje-share__code { align-self: stretch; }\n.lintje-share__footer {\n font: var(--text-meta); color: var(--color-text-muted);\n padding: var(--space-2) var(--lintje-panel-inset) 0;\n margin-top: var(--space-2);\n border-top: 1px solid var(--color-border-default);\n}\n\n:where(.lintje-shell.is-phone) .lintje-top-bar { display: none; }\n\n/* Below 768 px \"Weergave\" and \"Delen\" open from below, as the filter sheet does. A phone has its\n own way to a phone, so the QR code is not offered there. */\n:where(.lintje-shell.is-phone) .lintje-share__scrim {\n z-index: 60;\n background: var(--color-overlay-page);\n animation: lintje-fade-in var(--dur-scrim) var(--ease-in-motion);\n}\n:where(.lintje-shell.is-phone) .lintje-view__popover,\n:where(.lintje-shell.is-phone) .lintje-share__popover,\n:where(.lintje-shell.is-phone) .lintje-navbar .lintje-view__popover,\n:where(.lintje-shell.is-phone) .lintje-navbar .lintje-share__popover {\n position: fixed;\n inset: auto 0 0 0;\n z-index: 61;\n width: auto;\n max-height: 88vh;\n overflow-y: auto;\n padding-bottom: var(--space-4);\n border: 0;\n border-top: 1px solid var(--color-border-popover);\n box-shadow: none;\n animation: lintje-sheet-in var(--dur-sheet) var(--ease-in-motion);\n}\n:where(.lintje-shell.is-phone) .lintje-view__popover,\n:where(.lintje-shell.is-phone) .lintje-share__popover { padding-top: 0; --lintje-panel-inset: var(--space-4); }\n:where(.lintje-shell.is-phone) .lintje-view__popover:focus,\n:where(.lintje-shell.is-phone) .lintje-share__popover:focus { outline: none; }\n:where(.lintje-shell.is-phone) .lintje-share__phone { display: none; }\n/* The filter sheet's head; it stays while the sheet scrolls. */\n.lintje-share__header {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex; align-items: center; gap: var(--space-2);\n margin-bottom: var(--space-2);\n padding: var(--space-4);\n background: var(--color-bg-surface);\n border-bottom: 1px solid var(--color-border-popover);\n}\n.lintje-share__title { flex: 1; margin: 0; font: var(--text-h2); }\n\n\n/* On paper the chrome is not part of the page. */\n@media print { .lintje-top-bar { display: none; } }\n\n/* Forced colours: the chosen half is carried by its fill and an inset\n ring, both of which the browser drops. Every half takes a 1 px border inside\n its own box — Canvas at rest, Highlight when chosen — so nothing moves. */\n@media (forced-colors: active) {\n .lintje-toggle-group__option { border: 1px solid Canvas; }\n .lintje-toggle-group__option.is-active { border-color: Highlight; }\n}\n", Y = "lintje-shell-main", X = (e) => "links" in e, Z = (e) => e?.navigation?.flatMap((e) => X(e) ? e.links : [e]).find((e) => e.active);
939
939
  function Q(e) {
940
940
  let t = [], n = null;
941
941
  for (let r of e) X(r) ? (n = null, t.push({
@@ -944,15 +944,15 @@ function Q(e) {
944
944
  })) : (n || t.push(n = { items: [] }), n.items.push(r));
945
945
  return t;
946
946
  }
947
- var $ = class extends v {
948
- constructor(...e) {
949
- super(...e), this.layout = "top", this.openGroup = null, this.barStuck = !1, this.railExpanded = !1, this.railRefocus = !1, this.menuOpen = !1, this.menuLeaving = !1, this.shareOpen = !1, this.sharePhone = !1, this.viewOpen = !1, this.toolsCompact = !1, this.headerCompact = !1, this.hasContent = !0, this.wide = new c(this, ee), this.mobile = new c(this, s), this.submenu = new me(this), this.navScrollbar = new ve(this), this.store = new te(this), this.#e = new b(), this.#t = null, this.#n = null, this.#r = 0, this.#i = !1, this.#a = null, this.#o = [], this.#s = 0, this.#c = null, this.#l = new b(), this.#u = null, this.#d = null, this.#f = (e) => {
950
- if (e.key === "Escape") {
947
+ var $ = class extends a {
948
+ constructor(...n) {
949
+ super(...n), this.layout = "top", this.openGroup = null, this.barStuck = !1, this.railExpanded = !1, this.railRefocus = !1, this.menuOpen = !1, this.menuLeaving = !1, this.shareOpen = !1, this.sharePhone = !1, this.viewOpen = !1, this.toolsCompact = !1, this.headerCompact = !1, this.hasContent = !0, this.toastKind = "ok", this.wide = new o(this, ne), this.mobile = new o(this, t), this.submenu = new me(this), this.navScrollbar = new ve(this), this.store = new c(this), this.#e = new b(), this.#t = null, this.#n = null, this.#r = 0, this.#i = !1, this.#a = null, this.#o = [], this.#s = 0, this.#c = null, this.#l = new b(), this.#u = null, this.#d = null, this.#f = (t) => {
950
+ if (t.key === "Escape") {
951
951
  if (this.#u) {
952
952
  if (!this.#l.isTopmost()) return;
953
953
  this.viewOpen = !1, this.shareOpen = !1;
954
954
  } else if (this.viewOpen || this.shareOpen) {
955
- if (!p(this)) return;
955
+ if (!e(this)) return;
956
956
  this.#y() ? this.closePanel(this.viewOpen ? ".lintje-view__button" : ".lintje-share__button") : (this.viewOpen = !1, this.shareOpen = !1);
957
957
  } else this.menuOpen && this.#e.isTopmost() && (this.menuOpen = !1);
958
958
  }
@@ -964,15 +964,15 @@ var $ = class extends v {
964
964
  }
965
965
  static {
966
966
  this.styles = [
967
- e,
968
- ne,
969
- a(Ae),
970
- a(je),
971
- a(Me),
972
- a(J),
973
- a(ie),
974
- a(ae),
975
- a(Ne)
967
+ te,
968
+ p,
969
+ f(Ae),
970
+ f(je),
971
+ f(Me),
972
+ f(J),
973
+ f(ie),
974
+ f(ae),
975
+ f(Ne)
976
976
  ];
977
977
  }
978
978
  static {
@@ -993,7 +993,8 @@ var $ = class extends v {
993
993
  toolsCompact: { state: !0 },
994
994
  headerCompact: { state: !0 },
995
995
  hasContent: { state: !0 },
996
- toast: { state: !0 }
996
+ toast: { state: !0 },
997
+ toastKind: { state: !0 }
997
998
  };
998
999
  }
999
1000
  get dataSettings() {
@@ -1023,7 +1024,7 @@ var $ = class extends v {
1023
1024
  }
1024
1025
  #m() {
1025
1026
  let e = this.mobile.matches && (this.viewOpen || this.shareOpen) ? this.renderRoot.querySelector(".lintje-mobile-header .lintje-view__popover, .lintje-mobile-header .lintje-share__popover") : null;
1026
- e && !this.#u ? (this.#u = l(), this.#l.activate(e, { focus: e.querySelector(".lintje-share__close") ?? !0 })) : e || this.#h(!0);
1027
+ e && !this.#u ? (this.#u = r(), this.#l.activate(e, { focus: e.querySelector(".lintje-share__close") ?? !0 })) : e || this.#h(!0);
1027
1028
  }
1028
1029
  #h(e) {
1029
1030
  this.#u && (this.#u(), this.#u = null, this.#l.deactivate(e));
@@ -1034,7 +1035,7 @@ var $ = class extends v {
1034
1035
  updated(e) {
1035
1036
  if (super.updated(e), e.has("data") && e.get("data") === void 0 && this.#b(), e.has("menuOpen")) {
1036
1037
  if (this.menuOpen) {
1037
- this.#c ??= l();
1038
+ this.#c ??= r();
1038
1039
  let e = this.renderRoot.querySelector(".lintje-mobile-chrome");
1039
1040
  e && this.#e.activate(e, { focus: !1 });
1040
1041
  } else e.get("menuOpen") === !0 && (this.#p(), this.#e.deactivate(!1), this.renderRoot.querySelector("[aria-controls=\"lintje-mobile-menu-panel\"]")?.focus());
@@ -1043,28 +1044,28 @@ var $ = class extends v {
1043
1044
  }
1044
1045
  #g() {
1045
1046
  if (this.#i) return;
1046
- let e = d() ?? document.documentElement;
1047
+ let e = u() ?? document.documentElement;
1047
1048
  this.#d && this.#d !== e && (this.#d.style.scrollPaddingTop = ""), this.#d = e;
1048
- let n = this.mobile.matches && this.layout === "side" ? t(this, "--h-mobile-header", 72) : t(this, "--h-topbar", 56), r = this.store.state.hasFilters ? t(this, "--h-contextbar", 48) : 0;
1049
- e.style.scrollPaddingTop = `${Math.round(n + r)}px`;
1049
+ let t = this.mobile.matches && this.layout === "side" ? i(this, "--h-mobile-header", 72) : i(this, "--h-topbar", 56), n = this.store.state.hasFilters ? i(this, "--h-contextbar", 48) : 0;
1050
+ e.style.scrollPaddingTop = `${Math.round(t + n)}px`;
1050
1051
  }
1051
1052
  menuLeft() {
1052
1053
  this.#n && clearTimeout(this.#n), this.#n = null, this.menuLeaving = !1;
1053
1054
  }
1054
1055
  measureFit() {
1055
- let e = this.renderRoot.querySelector(".lintje-top-bar"), n = this.renderRoot.querySelector(".lintje-mobile-header");
1056
- this.#_([e, n].filter((e) => e !== null));
1057
- let r = e?.querySelector(".lintje-top-bar__words"), i = e?.querySelector(".lintje-top-bar__actions");
1058
- if (this.layout === "side" && e && r && i && e.clientWidth) {
1059
- this.toolsCompact || (this.#s = i.getBoundingClientRect().width);
1060
- let n = getComputedStyle(e), a = e.clientWidth - parseFloat(n.paddingLeft) - parseFloat(n.paddingRight), o = r.scrollWidth + t(this, "--space-6", 24) + this.#s > a + .5;
1056
+ let e = this.renderRoot.querySelector(".lintje-top-bar"), t = this.renderRoot.querySelector(".lintje-mobile-header");
1057
+ this.#_([e, t].filter((e) => e !== null));
1058
+ let n = e?.querySelector(".lintje-top-bar__words"), r = e?.querySelector(".lintje-top-bar__actions");
1059
+ if (this.layout === "side" && e && n && r && e.clientWidth) {
1060
+ this.toolsCompact || (this.#s = r.getBoundingClientRect().width);
1061
+ let t = getComputedStyle(e), a = e.clientWidth - parseFloat(t.paddingLeft) - parseFloat(t.paddingRight), o = n.scrollWidth + i(this, "--space-6", 24) + this.#s > a + .5;
1061
1062
  o !== this.toolsCompact && (this.toolsCompact = o);
1062
1063
  }
1063
- if (n?.clientWidth) {
1064
- let e = n.classList.contains("is-compact");
1065
- n.classList.remove("is-compact");
1066
- let t = n.scrollWidth > n.clientWidth + .5;
1067
- n.classList.toggle("is-compact", e), t !== this.headerCompact && (this.headerCompact = t);
1064
+ if (t?.clientWidth) {
1065
+ let e = t.classList.contains("is-compact");
1066
+ t.classList.remove("is-compact");
1067
+ let n = t.scrollWidth > t.clientWidth + .5;
1068
+ t.classList.toggle("is-compact", e), n !== this.headerCompact && (this.headerCompact = n);
1068
1069
  }
1069
1070
  }
1070
1071
  #_(e) {
@@ -1092,19 +1093,19 @@ var $ = class extends v {
1092
1093
  this.viewOpen = !1, this.shareOpen = !1, Array.from(this.renderRoot.querySelectorAll(e)).find((e) => e.getClientRects().length > 0)?.focus();
1093
1094
  }
1094
1095
  #y() {
1095
- return Array.from(this.renderRoot.querySelectorAll(".lintje-view__popover, .lintje-share__popover"), (e) => e.parentElement).some((e) => e !== null && f(e));
1096
+ return Array.from(this.renderRoot.querySelectorAll(".lintje-view__popover, .lintje-share__popover"), (e) => e.parentElement).some((e) => e !== null && l(e));
1096
1097
  }
1097
- showToast(e) {
1098
- this.toast = e;
1098
+ showToast(e, t = "ok") {
1099
+ this.toast = e, this.toastKind = t;
1099
1100
  }
1100
1101
  skipToContent(e) {
1101
1102
  e.preventDefault();
1102
- let n = this.renderRoot.querySelector(`#${Y}`);
1103
- if (!n) return;
1104
- n.focus({ preventScroll: !0 });
1105
- let r = this.renderRoot.querySelectorAll(".lintje-top-bar, .lintje-mobile-header"), i = this.layout === "top" ? t(this, "--h-topbar", 56) : Math.max(0, ...Array.from(r, (e) => e.getBoundingClientRect().bottom)), a = n.getBoundingClientRect().top - i;
1103
+ let t = this.renderRoot.querySelector(`#${Y}`);
1104
+ if (!t) return;
1105
+ t.focus({ preventScroll: !0 });
1106
+ let n = this.renderRoot.querySelectorAll(".lintje-top-bar, .lintje-mobile-header"), r = this.layout === "top" ? i(this, "--h-topbar", 56) : Math.max(0, ...Array.from(n, (e) => e.getBoundingClientRect().bottom)), a = t.getBoundingClientRect().top - r;
1106
1107
  if (a === 0) return;
1107
- let o = d();
1108
+ let o = u();
1108
1109
  o && o !== document.scrollingElement ? o.scrollBy({ top: a }) : window.scrollBy({ top: a });
1109
1110
  }
1110
1111
  #b() {
@@ -1112,7 +1113,7 @@ var $ = class extends v {
1112
1113
  this.hasContent = Array.from(e).some((e) => e.assignedNodes({ flatten: !0 }).some((e) => e.nodeType === Node.ELEMENT_NODE || e.textContent?.trim()));
1113
1114
  }
1114
1115
  renderSearch() {
1115
- return this.data?.search ? _`<button
1116
+ return this.data?.search ? h`<button
1116
1117
  type="button"
1117
1118
  class="lintje-shell__tool"
1118
1119
  aria-label="Zoeken"
@@ -1120,27 +1121,27 @@ var $ = class extends v {
1120
1121
  aria-keyshortcuts="/"
1121
1122
  @click=${() => this.askSearch()}
1122
1123
  >
1123
- ${g("functioneel-zoek", { size: 20 })}
1124
- </button>` : r;
1124
+ ${v("functioneel-zoek", { size: 20 })}
1125
+ </button>` : m;
1125
1126
  }
1126
1127
  renderNotifications() {
1127
1128
  let e = this.data?.notifications;
1128
- return e ? _`<lintje-notifications .items=${e}></lintje-notifications>` : r;
1129
+ return e ? h`<lintje-notifications .items=${e}></lintje-notifications>` : m;
1129
1130
  }
1130
1131
  renderUserMenu(e) {
1131
1132
  let t = this.data;
1132
- return t?.user ? _`<lintje-user-menu
1133
+ return t?.user ? h`<lintje-user-menu
1133
1134
  class=${e ? "lintje-shell__sheet-user" : "lintje-shell__user"}
1134
1135
  ?inline=${e}
1135
1136
  .user=${t.user}
1136
1137
  .items=${t.userMenu ?? []}
1137
- version=${t.version ?? r}
1138
- logout-action=${t.logout?.href ?? r}
1139
- csrf=${t.logout?.token ?? r}
1140
- ></lintje-user-menu>` : r;
1138
+ version=${t.version ?? m}
1139
+ logout-action=${t.logout?.href ?? m}
1140
+ csrf=${t.logout?.token ?? m}
1141
+ ></lintje-user-menu>` : m;
1141
1142
  }
1142
1143
  renderSkipLink() {
1143
- return _`<a
1144
+ return h`<a
1144
1145
  class="lintje-shell__skip focus-inset"
1145
1146
  href="#${Y}"
1146
1147
  @click=${(e) => this.skipToContent(e)}
@@ -1160,20 +1161,36 @@ var $ = class extends v {
1160
1161
  } : void 0
1161
1162
  });
1162
1163
  }
1164
+ renderPrintHead(e) {
1165
+ let t = [e.name, e.environment].filter(Boolean).join(" · ");
1166
+ return h`<div class="lintje-shell__print-head" aria-hidden="true">
1167
+ <div class="lintje-shell__print-logo">
1168
+ <lintje-logo
1169
+ full
1170
+ width=${x.desktop}
1171
+ src=${e.logo ?? m}
1172
+ name=${e.emblem?.name ?? m}
1173
+ alt=${e.emblem?.label ?? m}
1174
+ byline=${e.emblem?.byline ?? m}
1175
+ ></lintje-logo>
1176
+ </div>
1177
+ ${t ? h`<p class="lintje-shell__print-name">${t}</p>` : m}
1178
+ </div>`;
1179
+ }
1163
1180
  renderNavEnd(e) {
1164
1181
  let t = e.feedback;
1165
- return _`${this.renderSearch()}${this.renderNotifications()}${H(this)}${t ? _`<a
1182
+ return h`${this.renderSearch()}${this.renderNotifications()}${H(this)}${t ? h`<a
1166
1183
  class="lintje-shell__tool"
1167
1184
  href=${t.href}
1168
1185
  aria-label=${M(t)}
1169
1186
  title=${M(t)}
1170
- >${g("communicatie-tekstballonnen-met-vraagteken", { size: 20 })}</a
1171
- >` : r}${this.renderUserMenu(!1)}`;
1187
+ >${v("communicatie-tekstballonnen-met-vraagteken", { size: 20 })}</a
1188
+ >` : m}${this.renderUserMenu(!1)}`;
1172
1189
  }
1173
1190
  renderTop(e, t) {
1174
- return _`${this.renderLogo(x.desktop)}
1191
+ return h`${this.renderLogo(x.desktop)}
1175
1192
  <div class="lintje-shell__sentinel" aria-hidden="true"></div>
1176
- <div class=${h({
1193
+ <div class=${_({
1177
1194
  "lintje-shell__nav": !0,
1178
1195
  "is-stuck": this.barStuck
1179
1196
  })}>
@@ -1184,16 +1201,16 @@ var $ = class extends v {
1184
1201
  collapsed: this.submenu.collapsed,
1185
1202
  onNavigate: (e, t) => this.follow(e.href, t),
1186
1203
  onOpen: (e) => this.openGroup = e,
1187
- start: e.name ? _`<h1 class="lintje-shell__name" title=${e.name}>${e.name}</h1>` : r,
1204
+ start: e.name ? h`<h1 class="lintje-shell__name" title=${e.name}>${e.name}</h1>` : m,
1188
1205
  end: this.renderNavEnd(e)
1189
1206
  })}
1190
1207
  </div>
1191
1208
  ${he(this.openGroup !== null)}`;
1192
1209
  }
1193
1210
  renderTopPhone(e) {
1194
- return _`${this.renderLogo(x.phone)}
1211
+ return h`${this.renderLogo(x.phone)}
1195
1212
  <div class="lintje-shell__sentinel" aria-hidden="true"></div>
1196
- <div class=${h({
1213
+ <div class=${_({
1197
1214
  "lintje-shell__mobile-bar": !0,
1198
1215
  "is-stuck": this.barStuck
1199
1216
  })}>
@@ -1202,9 +1219,9 @@ var $ = class extends v {
1202
1219
  }
1203
1220
  renderMain() {
1204
1221
  let e = () => this.#b();
1205
- return _`<main
1222
+ return h`<main
1206
1223
  id=${Y}
1207
- class=${h({
1224
+ class=${_({
1208
1225
  "lintje-shell__main": !0,
1209
1226
  "is-bare": !this.hasContent
1210
1227
  })}
@@ -1218,31 +1235,31 @@ var $ = class extends v {
1218
1235
  </main>`;
1219
1236
  }
1220
1237
  renderToast() {
1221
- return this.toast ? _`<lintje-toast
1222
- kind="ok"
1238
+ return this.toast ? h`<lintje-toast
1239
+ kind=${this.toastKind}
1223
1240
  @lintje-close=${(e) => {
1224
1241
  e.stopPropagation(), this.toast = null;
1225
1242
  }}
1226
1243
  >${this.toast}</lintje-toast
1227
- >` : r;
1244
+ >` : m;
1228
1245
  }
1229
1246
  render() {
1230
1247
  let e = this.data;
1231
- if (!e) return r;
1248
+ if (!e) return m;
1232
1249
  let t = Q(e.navigation ?? []);
1233
- return this.layout === "top" ? _`<div
1234
- class=${h({
1250
+ return this.layout === "top" ? h`<div
1251
+ class=${_({
1235
1252
  "lintje-shell": !0,
1236
1253
  "lintje-shell--top": !0,
1237
1254
  "is-nested": this.#i,
1238
1255
  "is-phone": this.mobile.matches
1239
1256
  })}
1240
1257
  >
1241
- ${this.renderSkipLink()}
1258
+ ${this.renderSkipLink()} ${this.renderPrintHead(e)}
1242
1259
  ${this.mobile.matches ? this.renderTopPhone(t) : this.renderTop(e, t)}
1243
1260
  ${this.renderMain()} <slot name="footer"></slot> ${this.renderToast()}
1244
- </div>` : _`<div
1245
- class=${h({
1261
+ </div>` : h`<div
1262
+ class=${_({
1246
1263
  "lintje-shell": !0,
1247
1264
  "lintje-shell--side": !0,
1248
1265
  "is-unpinned": e.menu === "unpinned",
@@ -1252,13 +1269,13 @@ var $ = class extends v {
1252
1269
  >
1253
1270
  ${this.renderSkipLink()} ${F(this, t)}
1254
1271
  <div class="lintje-shell__column">
1255
- ${q(this, t)} ${Ce(this)} ${this.renderMain()}
1272
+ ${this.renderPrintHead(e)} ${q(this, t)} ${Ce(this)} ${this.renderMain()}
1256
1273
  <slot name="footer"></slot>
1257
1274
  </div>
1258
1275
  ${this.renderToast()}
1259
1276
  </div>`;
1260
1277
  }
1261
1278
  };
1262
- n("lintje-shell", $);
1279
+ ee("lintje-shell", $);
1263
1280
  //#endregion
1264
1281
  export { $ as LintjeShell, Q as toGroups };