lintje 0.3.0 → 0.5.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.
- package/README.md +1 -1
- package/dist-elements/actions.js +1 -1
- package/dist-elements/chunks/{base-CbmWxUig.js → base-CVKIPSLx.js} +151 -145
- package/dist-elements/chunks/chart-styles-JK4clSyA.js +108 -0
- package/dist-elements/chunks/{controls-DxmnDSBr.js → controls-_4ac1Lpz.js} +1 -1
- package/dist-elements/chunks/{date-format-mHtZyBys.js → date-format-DxP9yfDp.js} +1 -1
- package/dist-elements/chunks/{dialog-DChINFxD.js → dialog-D4V467iC.js} +2 -2
- package/dist-elements/chunks/{disclosure-DLkXPUpV.js → disclosure-DVex7Lo_.js} +1 -1
- package/dist-elements/chunks/download-D7ZarlMZ.js +103 -0
- package/dist-elements/chunks/{focus-trap-BwOxE5BX.js → focus-trap-rje9Oz19.js} +1 -1
- package/dist-elements/chunks/input-DEHA2Z_0.js +195 -0
- package/dist-elements/chunks/input-lQTmOMOz.js +4 -0
- package/dist-elements/chunks/{player-B8QXJ0Z5.js → player-DDDWUevR.js} +2 -2
- package/dist-elements/chunks/{sentence-B19AyZBS.js → sentence-mY0Iqu5H.js} +1 -1
- package/dist-elements/chunks/{stagger-BHoOgy0g.js → stagger-Dvkth9_C.js} +116 -107
- package/dist-elements/content.js +2 -0
- package/dist-elements/core.js +1 -1
- package/dist-elements/custom-elements.json +7740 -6789
- package/dist-elements/data-types.json +338 -29
- package/dist-elements/feedback.js +1 -1
- package/dist-elements/guides/loading.md +3 -3
- package/dist-elements/inputs.js +2 -1
- package/dist-elements/layout.js +1 -1
- package/dist-elements/lintje.js +7346 -5856
- package/dist-elements/overlays.js +1 -1
- package/dist-elements/tag/activity-log.js +1 -1
- package/dist-elements/tag/ai-label.js +1 -1
- package/dist-elements/tag/announcement.js +2 -2
- package/dist-elements/tag/app-search.js +2 -2
- package/dist-elements/tag/audio-player.js +2 -2
- package/dist-elements/tag/badge.d.ts +1 -1
- package/dist-elements/tag/badge.js +1 -1
- package/dist-elements/tag/breadcrumbs.js +1 -1
- package/dist-elements/tag/button.d.ts +1 -1
- package/dist-elements/tag/button.js +1 -1
- package/dist-elements/tag/card-list.js +1 -1
- package/dist-elements/tag/card.js +1 -1
- package/dist-elements/tag/chart.js +1168 -794
- package/dist-elements/tag/chat-answer.js +2 -2
- package/dist-elements/tag/chat-composer.js +1 -1
- package/dist-elements/tag/chat-message.js +1 -1
- package/dist-elements/tag/chat-strip.js +1 -1
- package/dist-elements/tag/chat-suggestions.js +1 -1
- package/dist-elements/tag/chat.js +1 -1
- package/dist-elements/tag/checkbox-group.js +3 -2
- package/dist-elements/tag/checkbox.js +3 -2
- package/dist-elements/tag/code.js +1 -1
- package/dist-elements/tag/combobox.js +11 -10
- package/dist-elements/tag/conflict-alert.js +1 -1
- package/dist-elements/tag/copy-button.js +1 -1
- package/dist-elements/tag/data-table.js +179 -178
- package/dist-elements/tag/date-input.js +14 -13
- package/dist-elements/tag/date-range.js +5 -4
- package/dist-elements/tag/description-list.js +1 -1
- package/dist-elements/tag/dialog.js +4 -4
- package/dist-elements/tag/document-viewer.js +1 -1
- package/dist-elements/tag/drawer.js +3 -3
- package/dist-elements/tag/empty-state.js +1 -1
- package/dist-elements/tag/error-page.js +1 -1
- package/dist-elements/tag/error-summary.js +2 -2
- package/dist-elements/tag/expander.js +2 -2
- package/dist-elements/tag/explainer.js +2 -2
- package/dist-elements/tag/field.js +1 -1
- package/dist-elements/tag/file-upload.js +4 -3
- package/dist-elements/tag/filter-bar.js +3 -3
- package/dist-elements/tag/filter-sheet.js +3 -3
- package/dist-elements/tag/filter-zone.js +2 -2
- package/dist-elements/tag/find.d.ts +1 -0
- package/dist-elements/tag/find.js +132 -0
- package/dist-elements/tag/footer.js +1 -1
- package/dist-elements/tag/form-actions.js +2 -2
- package/dist-elements/tag/form-section.js +2 -2
- package/dist-elements/tag/form.js +2 -2
- package/dist-elements/tag/gallery.js +1 -1
- package/dist-elements/tag/grid-item.d.ts +1 -1
- package/dist-elements/tag/grid-item.js +1 -1
- package/dist-elements/tag/grid.d.ts +1 -1
- package/dist-elements/tag/grid.js +1 -1
- package/dist-elements/tag/hero.js +1 -1
- package/dist-elements/tag/highlight.js +1 -1
- package/dist-elements/tag/icon-button.d.ts +1 -1
- package/dist-elements/tag/icon-button.js +1 -1
- package/dist-elements/tag/icon.d.ts +1 -1
- package/dist-elements/tag/icon.js +1 -1
- package/dist-elements/tag/job-list.js +1 -1
- package/dist-elements/tag/kpi-row.js +1 -1
- package/dist-elements/tag/kpi.js +73 -71
- package/dist-elements/tag/level-meter.js +1 -1
- package/dist-elements/tag/list.js +2 -2
- package/dist-elements/tag/log-viewer.d.ts +1 -0
- package/dist-elements/tag/log-viewer.js +847 -0
- package/dist-elements/tag/logo.js +1 -1
- package/dist-elements/tag/map.js +151 -144
- package/dist-elements/tag/menu-button.js +14 -9
- package/dist-elements/tag/modal.js +2 -2
- package/dist-elements/tag/multiselect.js +4 -3
- package/dist-elements/tag/note.js +1 -1
- package/dist-elements/tag/notifications.js +2 -2
- package/dist-elements/tag/number-input.js +3 -2
- package/dist-elements/tag/page-header.js +1 -1
- package/dist-elements/tag/pagination.js +25 -25
- package/dist-elements/tag/popover.d.ts +1 -1
- package/dist-elements/tag/popover.js +1 -1
- package/dist-elements/tag/progress-bar.d.ts +1 -1
- package/dist-elements/tag/progress-bar.js +1 -1
- package/dist-elements/tag/prose.js +1 -1
- package/dist-elements/tag/qr-code.js +1 -1
- package/dist-elements/tag/radio-group.js +3 -2
- package/dist-elements/tag/range.js +3 -2
- package/dist-elements/tag/recording-status.js +1 -1
- package/dist-elements/tag/repeater.js +1 -1
- package/dist-elements/tag/segmented.js +3 -2
- package/dist-elements/tag/select.js +3 -2
- package/dist-elements/tag/shell.js +3 -3
- package/dist-elements/tag/skeleton.d.ts +1 -1
- package/dist-elements/tag/skeleton.js +1 -1
- package/dist-elements/tag/slot-picker.js +4 -3
- package/dist-elements/tag/sortable-list.js +1 -1
- package/dist-elements/tag/spinner.d.ts +1 -1
- package/dist-elements/tag/spinner.js +1 -1
- package/dist-elements/tag/split-pane.js +1 -1
- package/dist-elements/tag/status-dot.d.ts +1 -1
- package/dist-elements/tag/status-dot.js +1 -1
- package/dist-elements/tag/stepper.js +1 -1
- package/dist-elements/tag/streaming-text.js +1 -1
- package/dist-elements/tag/sub-nav.js +1 -1
- package/dist-elements/tag/tabs.js +1 -1
- package/dist-elements/tag/tag-input.js +11 -10
- package/dist-elements/tag/text-editor.js +3 -2
- package/dist-elements/tag/text-input.js +3 -2
- package/dist-elements/tag/textarea.js +3 -2
- package/dist-elements/tag/tile.d.ts +1 -1
- package/dist-elements/tag/tile.js +1 -1
- package/dist-elements/tag/time-input.js +7 -6
- package/dist-elements/tag/toast.js +2 -2
- package/dist-elements/tag/toggle.js +3 -2
- package/dist-elements/tag/toggletip.js +2 -2
- package/dist-elements/tag/token-value.d.ts +1 -0
- package/dist-elements/tag/token-value.js +75 -0
- package/dist-elements/tag/tooltip.d.ts +1 -1
- package/dist-elements/tag/tooltip.js +1 -1
- package/dist-elements/tag/transcript.js +1 -1
- package/dist-elements/tag/translator.js +1 -1
- package/dist-elements/tag/tree-view.js +1 -1
- package/dist-elements/tag/user-menu.js +1 -1
- package/dist-elements/tag/video-player.js +2 -2
- package/dist-elements/tokens.css +2 -0
- package/dist-elements/tokens.json +1248 -0
- package/dist-elements/types/bundle/actions.d.ts +3 -3
- package/dist-elements/types/bundle/content.d.ts +2 -0
- package/dist-elements/types/bundle/feedback.d.ts +5 -5
- package/dist-elements/types/bundle/index.d.ts +1 -11
- package/dist-elements/types/bundle/inputs.d.ts +1 -0
- package/dist-elements/types/bundle/layout.d.ts +3 -3
- package/dist-elements/types/bundle/overlays.d.ts +2 -2
- package/dist-elements/types/categories.d.ts +4 -0
- package/dist-elements/types/{primitives → components/actions}/button/button.d.ts +1 -1
- package/dist-elements/types/components/actions/copy-button/copy-button.d.ts +2 -2
- package/dist-elements/types/{icons → components/actions}/icon/icon.d.ts +2 -2
- package/dist-elements/types/{primitives → components/actions}/icon-button/icon-button.d.ts +1 -1
- package/dist-elements/types/components/actions/menu-button/menu-button.d.ts +7 -4
- package/dist-elements/types/components/actions/qr-code/qr-code.d.ts +1 -1
- package/dist-elements/types/components/charts/chart/chart.d.ts +1 -1
- package/dist-elements/types/components/charts/explainer/explainer.d.ts +1 -1
- package/dist-elements/types/components/charts/kpi/kpi.d.ts +3 -3
- package/dist-elements/types/components/charts/kpi-row/kpi-row.d.ts +1 -1
- package/dist-elements/types/components/charts/note/note.d.ts +1 -1
- package/dist-elements/types/components/chat/chat/chat.d.ts +1 -1
- package/dist-elements/types/components/chat/chat-answer/chat-answer.d.ts +3 -3
- package/dist-elements/types/components/chat/chat-composer/chat-composer.d.ts +2 -2
- package/dist-elements/types/components/chat/chat-message/chat-message.d.ts +1 -1
- package/dist-elements/types/components/content/audio-player/audio-player.d.ts +5 -5
- package/dist-elements/types/components/content/code/code.d.ts +1 -1
- package/dist-elements/types/components/content/document-viewer/document-viewer.d.ts +2 -2
- package/dist-elements/types/components/content/highlight/highlight.d.ts +1 -1
- package/dist-elements/types/components/content/log-viewer/lines.d.ts +33 -0
- package/dist-elements/types/components/content/log-viewer/log-viewer.d.ts +117 -0
- package/dist-elements/types/components/content/prose/prose.d.ts +1 -1
- package/dist-elements/types/components/content/token-value/token-value.d.ts +42 -0
- package/dist-elements/types/components/content/transcript/transcript.d.ts +3 -3
- package/dist-elements/types/components/content/translator/translator.d.ts +1 -1
- package/dist-elements/types/components/content/video-player/video-player.d.ts +1 -1
- package/dist-elements/types/components/feedback/announcement/announcement.d.ts +2 -2
- package/dist-elements/types/{primitives → components/feedback}/badge/badge.d.ts +2 -2
- package/dist-elements/types/components/feedback/conflict-alert/conflict-alert.d.ts +1 -1
- package/dist-elements/types/components/feedback/empty-state/empty-state.d.ts +2 -2
- package/dist-elements/types/components/feedback/job-list/job-list.d.ts +1 -1
- package/dist-elements/types/{primitives → components/feedback}/progress-bar/progress-bar.d.ts +2 -2
- package/dist-elements/types/{primitives → components/feedback}/skeleton/skeleton.d.ts +1 -1
- package/dist-elements/types/{primitives → components/feedback}/spinner/spinner.d.ts +1 -1
- package/dist-elements/types/{primitives → components/feedback}/status-dot/status-dot.d.ts +2 -2
- package/dist-elements/types/components/feedback/streaming-text/streaming-text.d.ts +2 -2
- package/dist-elements/types/components/filters/filter-sheet/filter-sheet.d.ts +2 -2
- package/dist-elements/types/components/forms/error-summary/error-summary.d.ts +1 -1
- package/dist-elements/types/components/forms/form-actions/form-actions.d.ts +1 -1
- package/dist-elements/types/components/forms/repeater/repeater.d.ts +2 -2
- package/dist-elements/types/components/forms/stepper/stepper.d.ts +1 -1
- package/dist-elements/types/components/frame/app-search/app-search.d.ts +1 -1
- package/dist-elements/types/components/frame/notifications/notifications.d.ts +2 -2
- package/dist-elements/types/components/frame/page-header/page-header.d.ts +1 -1
- package/dist-elements/types/components/frame/shell/shell.d.ts +1 -1
- package/dist-elements/types/components/frame/user-menu/user-menu.d.ts +2 -2
- package/dist-elements/types/components/index.d.ts +45 -3
- package/dist-elements/types/components/inputs/combobox/combobox.d.ts +2 -2
- package/dist-elements/types/components/inputs/date-input/date-input.d.ts +1 -1
- package/dist-elements/types/components/inputs/date-range/date-range.d.ts +2 -2
- package/dist-elements/types/components/inputs/file-upload/file-upload.d.ts +2 -2
- package/dist-elements/types/components/inputs/find/find.d.ts +52 -0
- package/dist-elements/types/components/inputs/segmented/segmented.d.ts +1 -1
- package/dist-elements/types/components/inputs/shared/input.d.ts +1 -1
- package/dist-elements/types/components/inputs/tag-input/tag-input.d.ts +1 -1
- package/dist-elements/types/components/inputs/text-editor/text-editor.d.ts +2 -2
- package/dist-elements/types/components/inputs/text-input/text-input.d.ts +1 -1
- package/dist-elements/types/components/inputs/time-input/time-input.d.ts +1 -1
- package/dist-elements/types/components/layout/expander/expander.d.ts +1 -1
- package/dist-elements/types/{primitives → components/layout}/grid/grid.d.ts +1 -1
- package/dist-elements/types/{primitives → components/layout}/grid-item/grid-item.d.ts +1 -1
- package/dist-elements/types/components/layout/tabs/tabs.d.ts +1 -1
- package/dist-elements/types/{primitives → components/layout}/tile/tile.d.ts +6 -6
- package/dist-elements/types/components/map/map/map.d.ts +2 -2
- package/dist-elements/types/components/overlays/modal/modal.d.ts +2 -2
- package/dist-elements/types/{primitives → components/overlays}/popover/popover.d.ts +2 -2
- package/dist-elements/types/components/overlays/toggletip/toggletip.d.ts +1 -1
- package/dist-elements/types/{primitives → components/overlays}/tooltip/tooltip.d.ts +2 -2
- package/dist-elements/types/components/shared/charts/index.d.ts +1 -0
- package/dist-elements/types/components/shared/charts/kinds.d.ts +6 -0
- package/dist-elements/types/components/shared/charts/map-chart/map-chart.d.ts +1 -1
- package/dist-elements/types/components/shared/charts/radar-chart/radar-chart.d.ts +31 -0
- package/dist-elements/types/components/shared/charts/shared/axes.d.ts +10 -2
- package/dist-elements/types/components/shared/charts/shared/controller.d.ts +5 -1
- package/dist-elements/types/components/shared/charts/shared/layer-motion.d.ts +21 -0
- package/dist-elements/types/components/shared/charts/shared/types.d.ts +33 -0
- package/dist-elements/types/components/shared/content-tile.d.ts +1 -1
- package/dist-elements/types/components/{forms/form → shared}/controls.d.ts +3 -2
- package/dist-elements/types/components/shared/download.d.ts +2 -0
- package/dist-elements/types/components/shared/overflow.d.ts +1 -1
- package/dist-elements/types/components/tables/activity-log/activity-log.d.ts +1 -1
- package/dist-elements/types/components/tables/card/card.d.ts +4 -4
- package/dist-elements/types/components/tables/data-table/actions.d.ts +1 -1
- package/dist-elements/types/components/tables/data-table/data-table.d.ts +3 -3
- package/dist-elements/types/components/tables/data-table/editing.d.ts +1 -1
- package/dist-elements/types/components/tables/data-table/filters.d.ts +3 -3
- package/dist-elements/types/components/tables/description-list/description-list.d.ts +2 -2
- package/dist-elements/types/components/tables/list/list.d.ts +4 -4
- package/dist-elements/types/components/tables/tree-view/tree-view.d.ts +1 -1
- package/dist-elements/types/core/focus.d.ts +1 -1
- package/dist-elements/types/types.d.ts +51 -7
- package/package.json +1 -1
- package/dist-elements/chunks/download-Ct9q2anY.js +0 -206
- package/dist-elements/chunks/input-CRW_exv_.js +0 -195
- package/dist-elements/types/primitives/index.d.ts +0 -35
- /package/dist-elements/types/components/content/{audio-player → shared}/playback.d.ts +0 -0
- /package/dist-elements/types/components/content/{audio-player → shared}/player.d.ts +0 -0
- /package/dist-elements/types/{primitives → components}/shared/announcement-block.d.ts +0 -0
- /package/dist-elements/types/components/{inputs/date-input → shared}/date-format.d.ts +0 -0
- /package/dist-elements/types/{primitives → components}/shared/empty-state-block.d.ts +0 -0
- /package/dist-elements/types/{primitives → components}/shared/grid-item-element.d.ts +0 -0
- /package/dist-elements/types/{primitives → components}/shared/length.d.ts +0 -0
- /package/dist-elements/types/{primitives → components}/shared/place.d.ts +0 -0
- /package/dist-elements/types/{primitives → components}/shared/tone.d.ts +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/core/version.ts
|
|
2
|
-
var e = "0.
|
|
2
|
+
var e = "0.5.0", t = globalThis, n = t.ShadowRoot && (t.ShadyCSS === void 0 || t.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, r = Symbol(), i = /* @__PURE__ */ new WeakMap(), a = class {
|
|
3
3
|
constructor(e, t, n) {
|
|
4
4
|
if (this._$cssResult$ = !0, n !== r) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");
|
|
5
5
|
this.cssText = e, this.t = t;
|
|
@@ -521,7 +521,7 @@ var Re = Le.litElementPolyfillSupport;
|
|
|
521
521
|
Re?.({ LitElement: k }), (Le.litElementVersions ??= []).push("4.2.2");
|
|
522
522
|
//#endregion
|
|
523
523
|
//#region src/tokens/tokens.css?inline
|
|
524
|
-
var ze = "/* ============================================================================\n Lintje — design tokens\n\n Colour is in three groups: themable UI colour (a theme sets only `--primary` and `--accent`, in\n `themes.css`), fixed data colour (`--data-*`, identical in every\n mode and theme except the two grays) and fixed status colour (`--status-*`).\n\n Three layers, one direction: component -> semantic (`--color-*`) -> primitives. Only the\n primitive blocks may hold a colour literal. To change a colour in one mode, re-point the\n layer-2 name inside `[data-mode='dark']`.\n\n `color-mix(in srgb, …)` and the relative `oklch(from …)` need Chrome/Edge 122+, Firefox 128+\n or Safari 18+;\n `colour-scheme.test.ts` repeats the arithmetic. The `@font-face` rules live in `fonts.css`:\n they cannot work inside a shadow root.\n ========================================================================= */\n\n/* ============================================================================\n Layer 1 — primitives (the only literals)\n ========================================================================= */\n:root {\n /* --- Neutral (light). The one mode-dependent primitive family ----------\n Neutral-5 is the cool-grey step 600, not 500, because it carries muted TEXT:\n #64748B is 4.34:1 on neutral-2, #475569 is 6.92:1. */\n --neutral-0: #FFFFFF;\n --neutral-1: #F8FAFC;\n --neutral-2: #F1F5F9;\n --neutral-3: #E2E8F0;\n --neutral-4: #94A3B8;\n --neutral-5: #475569;\n --neutral-6: #0F172A;\n\n /* --- Fixed ink ---------------------------------------------------------\n The same in both modes because it sits on a fill, not on the page. */\n --ink-white: #FFFFFF;\n --ink-black: #0F172A;\n --alpha-white-82: rgba(255, 255, 255, 0.82);\n --alpha-white-45: rgba(255, 255, 255, 0.45);\n\n /* --- Focus -------------------------------------------------------------\n Its own constant: it must not move with the accent or the attention status. */\n --focus-orange: #E17000;\n\n /* --- The ribbon --------------------------------------------------------\n Lintblauw, and the Rijkshuisstijl's own lighter tint for the ribbon in the logo in dark. */\n --ribbon-blue: #154273;\n --ribbon-blue-dark: #004A8D;\n\n /* --- Data (fixed Rijkshuisstijl, identical in light, dark and every theme)\n The two grays follow the mode: as fixed literals the comparison line landed at 2.69:1\n on the dark surface. Light #475569 / #94A3B8, dark #B0B0B0 / #7A7A7A. The variables\n stand in the order of `tokens/colors.ts`, the one list of their names. */\n --data-sky-blue: #007BC7;\n --data-dark-yellow: #FFB612;\n --data-red: #D52B1E;\n --data-green: #39870C;\n --data-mint-green: #76D2B6;\n --data-violet: #A90061;\n --data-orange: #E17000;\n --data-pink: #F092CD;\n --data-dark-green: #275937;\n --data-purple: #42145F;\n --data-ruby-red: #CA005D;\n --data-yellow: #F9E11E;\n --data-dark-brown: #673328;\n --data-brown: #94710A;\n --data-dark-blue: #01689B;\n --data-light-blue: #8FCAE7;\n --data-moss-green: #777B00;\n /* Sky blue's ladder is written out: the map's areas draw in from the land to these classes,\n and Chromium interpolates a `color-mix()` target wrongly (the land's RGB numbers taken as\n oklab), so the areas flash yellow. The values are its mix with white; the test checks. */\n --data-sky-blue-75: #409CD5;\n --data-sky-blue-60: #66B0DD;\n --data-sky-blue-45: #8CC4E6;\n --data-sky-blue-30: #B2D7EE;\n --data-sky-blue-15: #D9EBF7;\n --data-comparison: var(--neutral-5);\n --data-other: var(--neutral-4);\n /* Yellow as TEXT fails contrast on white: light writes a wait time in this dark gold. */\n --data-dark-yellow-text: #B07A00;\n /* Grid and emphasis follow the surface, like the two grays. */\n --data-grid: var(--neutral-3);\n --data-emphasis: var(--neutral-6);\n\n /* --- Status (fixed) ---------------------------------------------------- */\n --status-success: #39870C;\n --status-warning: #FFB612;\n --status-attention: #E17000;\n --status-error: #D52B1E;\n --status-info: #007BC7;\n\n /* Black at the alphas the shadows and overlays use; the digits are the alpha in percent. */\n --alpha-black-08: rgba(0, 0, 0, 0.08);\n --alpha-black-14: rgba(0, 0, 0, 0.14);\n --alpha-black-16: rgba(0, 0, 0, 0.16);\n --alpha-black-18: rgba(0, 0, 0, 0.18);\n --alpha-black-22: rgba(0, 0, 0, 0.22);\n --alpha-black-40: rgba(0, 0, 0, 0.4);\n --alpha-black-55: rgba(0, 0, 0, 0.55);\n --alpha-black-60: rgba(0, 0, 0, 0.6);\n}\n\n/* ============================================================================\n Layer 1 — derivations\n\n Mixes of the primitives and of the theme's two properties. The tint ladder is 75 / 60 / 45\n / 30 / 15 % of the base over white; every data colour carries the complete ladder.\n ========================================================================= */\n:root {\n /* Darker than the primary in light: a lighter fill under white text lost contrast (2.80:1 on\n orange). The dark block re-declares it lighter. */\n --primary-hover: color-mix(in srgb, var(--primary), black 30%);\n --primary-line: color-mix(in srgb, var(--primary), white 22%);\n /* The dark tints lift only the perceived lightness, so they keep the primary's colour; a mix\n with white greys it. Each lightness is the smallest hundredth that clears its floor in every\n theme: 3:1 on #282828 for a line, 4.5:1 on #333333 (neutral-2), the lightest neutral\n surface a word stands on, for text. A primary that is lighter already keeps its own. */\n --primary-tint: oklch(from var(--primary) max(l, 0.55) c h);\n --primary-tint-text: oklch(from var(--primary) max(l, 0.71) c h);\n /* A wash behind a word or under a band, never a colour that reads by itself. Fixed in\n perceived lightness, so it is equally light in every theme and keeps the primary's hue; an\n sRGB mix with white greys a dark primary. The chroma cap keeps every theme inside sRGB. */\n --primary-wash: oklch(from var(--primary) 0.955 min(c, 0.02) h);\n\n --data-dark-yellow-75: color-mix(in srgb, var(--data-dark-yellow) 75%, white);\n --data-dark-yellow-60: color-mix(in srgb, var(--data-dark-yellow) 60%, white);\n --data-dark-yellow-45: color-mix(in srgb, var(--data-dark-yellow) 45%, white);\n --data-dark-yellow-30: color-mix(in srgb, var(--data-dark-yellow) 30%, white);\n --data-dark-yellow-15: color-mix(in srgb, var(--data-dark-yellow) 15%, white);\n\n --data-red-75: color-mix(in srgb, var(--data-red) 75%, white);\n --data-red-60: color-mix(in srgb, var(--data-red) 60%, white);\n --data-red-45: color-mix(in srgb, var(--data-red) 45%, white);\n --data-red-30: color-mix(in srgb, var(--data-red) 30%, white);\n --data-red-15: color-mix(in srgb, var(--data-red) 15%, white);\n\n --data-green-75: color-mix(in srgb, var(--data-green) 75%, white);\n --data-green-60: color-mix(in srgb, var(--data-green) 60%, white);\n --data-green-45: color-mix(in srgb, var(--data-green) 45%, white);\n --data-green-30: color-mix(in srgb, var(--data-green) 30%, white);\n --data-green-15: color-mix(in srgb, var(--data-green) 15%, white);\n\n --data-mint-green-75: color-mix(in srgb, var(--data-mint-green) 75%, white);\n --data-mint-green-60: color-mix(in srgb, var(--data-mint-green) 60%, white);\n --data-mint-green-45: color-mix(in srgb, var(--data-mint-green) 45%, white);\n --data-mint-green-30: color-mix(in srgb, var(--data-mint-green) 30%, white);\n --data-mint-green-15: color-mix(in srgb, var(--data-mint-green) 15%, white);\n\n --data-violet-75: color-mix(in srgb, var(--data-violet) 75%, white);\n --data-violet-60: color-mix(in srgb, var(--data-violet) 60%, white);\n --data-violet-45: color-mix(in srgb, var(--data-violet) 45%, white);\n --data-violet-30: color-mix(in srgb, var(--data-violet) 30%, white);\n --data-violet-15: color-mix(in srgb, var(--data-violet) 15%, white);\n\n --data-orange-75: color-mix(in srgb, var(--data-orange) 75%, white);\n --data-orange-60: color-mix(in srgb, var(--data-orange) 60%, white);\n --data-orange-45: color-mix(in srgb, var(--data-orange) 45%, white);\n --data-orange-30: color-mix(in srgb, var(--data-orange) 30%, white);\n --data-orange-15: color-mix(in srgb, var(--data-orange) 15%, white);\n\n --data-pink-75: color-mix(in srgb, var(--data-pink) 75%, white);\n --data-pink-60: color-mix(in srgb, var(--data-pink) 60%, white);\n --data-pink-45: color-mix(in srgb, var(--data-pink) 45%, white);\n --data-pink-30: color-mix(in srgb, var(--data-pink) 30%, white);\n --data-pink-15: color-mix(in srgb, var(--data-pink) 15%, white);\n\n --data-dark-green-75: color-mix(in srgb, var(--data-dark-green) 75%, white);\n --data-dark-green-60: color-mix(in srgb, var(--data-dark-green) 60%, white);\n --data-dark-green-45: color-mix(in srgb, var(--data-dark-green) 45%, white);\n --data-dark-green-30: color-mix(in srgb, var(--data-dark-green) 30%, white);\n --data-dark-green-15: color-mix(in srgb, var(--data-dark-green) 15%, white);\n\n --data-purple-75: color-mix(in srgb, var(--data-purple) 75%, white);\n --data-purple-60: color-mix(in srgb, var(--data-purple) 60%, white);\n --data-purple-45: color-mix(in srgb, var(--data-purple) 45%, white);\n --data-purple-30: color-mix(in srgb, var(--data-purple) 30%, white);\n --data-purple-15: color-mix(in srgb, var(--data-purple) 15%, white);\n\n --data-ruby-red-75: color-mix(in srgb, var(--data-ruby-red) 75%, white);\n --data-ruby-red-60: color-mix(in srgb, var(--data-ruby-red) 60%, white);\n --data-ruby-red-45: color-mix(in srgb, var(--data-ruby-red) 45%, white);\n --data-ruby-red-30: color-mix(in srgb, var(--data-ruby-red) 30%, white);\n --data-ruby-red-15: color-mix(in srgb, var(--data-ruby-red) 15%, white);\n\n --data-yellow-75: color-mix(in srgb, var(--data-yellow) 75%, white);\n --data-yellow-60: color-mix(in srgb, var(--data-yellow) 60%, white);\n --data-yellow-45: color-mix(in srgb, var(--data-yellow) 45%, white);\n --data-yellow-30: color-mix(in srgb, var(--data-yellow) 30%, white);\n --data-yellow-15: color-mix(in srgb, var(--data-yellow) 15%, white);\n\n --data-dark-brown-75: color-mix(in srgb, var(--data-dark-brown) 75%, white);\n --data-dark-brown-60: color-mix(in srgb, var(--data-dark-brown) 60%, white);\n --data-dark-brown-45: color-mix(in srgb, var(--data-dark-brown) 45%, white);\n --data-dark-brown-30: color-mix(in srgb, var(--data-dark-brown) 30%, white);\n --data-dark-brown-15: color-mix(in srgb, var(--data-dark-brown) 15%, white);\n\n --data-brown-75: color-mix(in srgb, var(--data-brown) 75%, white);\n --data-brown-60: color-mix(in srgb, var(--data-brown) 60%, white);\n --data-brown-45: color-mix(in srgb, var(--data-brown) 45%, white);\n --data-brown-30: color-mix(in srgb, var(--data-brown) 30%, white);\n --data-brown-15: color-mix(in srgb, var(--data-brown) 15%, white);\n\n --data-dark-blue-75: color-mix(in srgb, var(--data-dark-blue) 75%, white);\n --data-dark-blue-60: color-mix(in srgb, var(--data-dark-blue) 60%, white);\n --data-dark-blue-45: color-mix(in srgb, var(--data-dark-blue) 45%, white);\n --data-dark-blue-30: color-mix(in srgb, var(--data-dark-blue) 30%, white);\n --data-dark-blue-15: color-mix(in srgb, var(--data-dark-blue) 15%, white);\n\n --data-light-blue-75: color-mix(in srgb, var(--data-light-blue) 75%, white);\n --data-light-blue-60: color-mix(in srgb, var(--data-light-blue) 60%, white);\n --data-light-blue-45: color-mix(in srgb, var(--data-light-blue) 45%, white);\n --data-light-blue-30: color-mix(in srgb, var(--data-light-blue) 30%, white);\n --data-light-blue-15: color-mix(in srgb, var(--data-light-blue) 15%, white);\n\n --data-moss-green-75: color-mix(in srgb, var(--data-moss-green) 75%, white);\n --data-moss-green-60: color-mix(in srgb, var(--data-moss-green) 60%, white);\n --data-moss-green-45: color-mix(in srgb, var(--data-moss-green) 45%, white);\n --data-moss-green-30: color-mix(in srgb, var(--data-moss-green) 30%, white);\n --data-moss-green-15: color-mix(in srgb, var(--data-moss-green) 15%, white);\n\n /* 15 % of the status colour over the surface, so one declaration covers both modes. */\n --status-success-bg: color-mix(in srgb, var(--status-success) 15%, var(--neutral-0));\n --status-warning-bg: color-mix(in srgb, var(--status-warning) 15%, var(--neutral-0));\n --status-attention-bg: color-mix(in srgb, var(--status-attention) 15%, var(--neutral-0));\n --status-error-bg: color-mix(in srgb, var(--status-error) 15%, var(--neutral-0));\n --status-info-bg: color-mix(in srgb, var(--status-info) 15%, var(--neutral-0));\n}\n\n/* ============================================================================\n Layers 2 and 3 — semantic and component tokens (light)\n\n No colour literal below this line.\n ========================================================================= */\n:root {\n /* --- Typography -------------------------------------------------------- */\n --font-ui: 'RijksSans', 'Source Sans 3', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n --font-mono: 'Source Code Pro', ui-monospace, SFMono-Regular, Menlo, monospace;\n\n --text-dashboard: 700 1.25rem/1.2 var(--font-ui);\n --text-h1: 700 1.75rem/1.2 var(--font-ui);\n --text-h1-mobile: 700 1.5rem/1.15 var(--font-ui);\n --text-h1-display: 700 2.5rem/1.1 var(--font-ui);\n --text-h2: 700 1.25rem/1.25 var(--font-ui);\n --text-tile-title: 700 1rem/1.3 var(--font-ui);\n --text-tile-sub: 400 0.875rem/1.35 var(--font-ui);\n --text-kpi: 700 2rem/1.1 var(--font-ui);\n --text-kpi-mobile: 700 1.5rem/1.1 var(--font-ui);\n --text-kpi-secondary: 700 1.25rem/1.1 var(--font-ui);\n --text-body: 400 1rem/1.5 var(--font-ui);\n /* The text being translated and its translation: larger than body, read at a glance. */\n --text-translation: 400 1.25rem/1.5 var(--font-ui);\n --text-ui: 400 1rem/1.4 var(--font-ui);\n --text-small: 400 0.875rem/1.45 var(--font-ui);\n --text-meta: 400 0.875rem/1.4 var(--font-ui);\n --text-table: 400 1rem/1.4 var(--font-ui);\n --text-table-head: 700 0.875rem/1.3 var(--font-ui);\n --text-axis: 400 0.75rem/1.2 var(--font-ui);\n\n --label-size: 0.875rem;\n --label-weight: 700;\n --label-tracking: 0.08em;\n --kpi-tracking: -0.02em;\n\n /* --- Spacing (4 px scale) --------------------------------------------- */\n --space-1: 4px;\n --space-2: 8px;\n --space-3: 12px;\n --space-4: 16px;\n --space-5: 20px;\n --space-6: 24px;\n --space-8: 32px;\n --space-10: 40px;\n\n /* --- Component sizes --------------------------------------------------- */\n --h-topbar: 3.5rem;\n --h-contextbar: 3rem;\n --h-mobile-header: 4.5rem;\n --h-control: 3rem;\n --h-button: 3rem;\n --h-button-compact: 2.5rem;\n --h-button-chrome: 2.5rem;\n --h-icon-button: 2.5rem;\n --h-chip: 2rem;\n --h-chip-field: 1.75rem;\n --h-nav-row: 3rem;\n --h-nav-head: 6.5rem;\n --h-table-row: 3rem;\n --h-touch: 3rem;\n /* The smallest pointer target. A box that draws smaller reaches it through a\n transparent hit area (`::after`, negative inset). */\n --h-target: 3rem;\n /* A link in a list of text links: one line of text, the WCAG AA floor, as on rijksoverheid.nl. */\n --h-target-text: 1.5rem;\n /* The two dense exceptions to the target: a date picker day cell and a listbox option row. */\n --h-option: 2.5rem;\n /* The sparkline of a KPI: a line and its area under the figure, with no axes. */\n --h-sparkline: 2rem;\n\n --w-nav: 288px;\n --w-rail: 72px;\n --w-text: 760px;\n --w-message: 560px;\n /* A language choice in the translator's bar. */\n --w-translator-language: 18rem;\n /* The widest the page's content gets. A host sets `--lintje-content-width` to change it. */\n --w-content: 1360px;\n --nav-edge: 4px;\n /* The ribbon is the unit: 48 px, 40 on a phone. Both bars are in rem, so they grow with the\n reader's text size. */\n --w-ribbon: 3rem;\n --h-logobar: calc(2.5 * var(--w-ribbon));\n /* The top bar's height: what pins under the bar measures `--h-topbar`. */\n --h-navbar: var(--h-topbar);\n /* How far what follows the hero stands over its band's lower edge. */\n --hero-overlap: var(--space-10);\n /* The widest the picture beside the hero's text gets: four of the twelve columns at 1440. */\n --w-hero-aside: 400px;\n /* The narrowest a card gets in a card list before the list drops a column. */\n --w-card: 320px;\n /* The same for a horizontal card, whose picture takes a column of its own. */\n --w-card-wide: 480px;\n --w-card-media: 200px;\n --w-card-logo: 3.5rem;\n --w-card-logo-wide: 5rem;\n /* The narrowest thumbnail under a gallery's large picture. */\n --w-gallery-thumb: 120px;\n /* The narrowest column of links in a footer before the columns stand under each other. */\n --w-footer-column: 220px;\n\n --page-pad-y: 32px;\n --page-pad-x: 24px;\n /* What a full-width bar or the content adds to its side padding so what stands in it keeps to\n `--w-content`; the percentage is taken of the box the bar stands in. */\n --page-gutter: max(\n 0px,\n calc((100% - var(--lintje-content-width, var(--w-content)) - 2 * var(--page-pad-x)) / 2)\n );\n --grid-gutter: 24px;\n --tile-pad-y: 20px;\n --tile-pad-x: 24px;\n --chart-h-main: 260px;\n --chart-h-small: 180px;\n --chart-h-expanded: 560px;\n\n /* Sticky context = top bar + summary bar. */\n --h-sticky: calc(var(--h-topbar) + var(--h-contextbar));\n\n --radius: 0px;\n --radius-round: 50%;\n\n --shadow-sticky: 0 2px 6px var(--alpha-black-08);\n --shadow-popover: 0 4px 16px var(--alpha-black-14);\n --shadow-nav: 2px 0 8px var(--alpha-black-08);\n --shadow-chart-hover: 0 1px 4px var(--alpha-black-22);\n --shadow-scroll-start: inset 12px 0 10px -10px var(--alpha-black-18);\n --shadow-scroll-end: inset -12px 0 10px -10px var(--alpha-black-18);\n\n --color-overlay-page: var(--alpha-black-60);\n --color-overlay-nav: var(--alpha-black-16);\n\n --focus-width: 3px;\n --focus-offset: 2px;\n\n /* --- Motion ------------------------------------------------------------ */\n /* `@kind other` marks these for design tooling as neither colors, sizes nor type; the library\n CSS ships unminified so the notes reach it. */\n --ease-in-motion: cubic-bezier(0.2, 0, 0, 1); /* @kind other */\n --ease-out-motion: cubic-bezier(0.4, 0, 1, 1); /* @kind other */\n --dur-base: 200ms; /* @kind other */\n --dur-hover: 120ms; /* @kind other */\n --dur-popover: var(--dur-base); /* @kind other */\n --dur-submenu: 300ms; /* @kind other */\n --dur-toast: var(--dur-base); /* @kind other */\n --dur-scrim: var(--dur-base); /* @kind other */\n --dur-rail: var(--dur-base); /* @kind other */\n --dur-collapse: var(--dur-base); /* @kind other */\n --dur-modal: var(--dur-base); /* @kind other */\n --dur-sheet: var(--dur-base); /* @kind other */\n --dur-kpi: var(--dur-base); /* @kind other */\n --dur-badge: 300ms; /* @kind other */\n --dur-draw: 900ms; /* @kind other */\n --dur-data-label: 300ms; /* @kind other */\n --dur-layer: 400ms; /* @kind other */\n --dur-skeleton: 1200ms; /* @kind other */\n --dur-wave: 600ms; /* @kind other */\n\n /* --- Semantic: surfaces ------------------------------------------------ */\n --color-bg-page: var(--neutral-1);\n --color-bg-surface: var(--neutral-0);\n --color-bg-subtle: var(--neutral-2);\n --color-bg-title: var(--neutral-1);\n /* Between steps 2 and 3: on the cool-grey ramp neutral-2 sits too close to the page to read\n as a band. */\n --color-bg-filter: color-mix(in srgb, var(--neutral-2), var(--neutral-3));\n --color-bg-selected: var(--neutral-2);\n --color-bg-inset: var(--neutral-2);\n\n /* --- Semantic: text ---------------------------------------------------- */\n --color-text-primary: var(--neutral-6);\n --color-text-secondary: var(--neutral-6);\n --color-text-muted: var(--neutral-5);\n --color-text-inverse: var(--neutral-0);\n --color-text-disabled: var(--neutral-4);\n /* A placeholder must stay readable: 4.5:1 on the surface in both modes. */\n --color-text-placeholder: var(--neutral-5);\n --color-text-on-fill: var(--ink-white);\n --color-text-on-light-fill: var(--ink-black);\n --color-qr-bg: var(--ink-white);\n --color-qr-fg: var(--ink-black);\n\n /* --- Semantic: borders ------------------------------------------------- */\n --color-border-default: var(--neutral-3);\n --color-border-strong: var(--neutral-3);\n --color-border-filter: var(--neutral-3);\n --color-border-heavy: var(--neutral-4);\n /* The resting edge of a field box: 3:1 (WCAG 1.4.11) on the surface and the filter band. */\n --color-border-field: var(--neutral-5);\n /* The 2 px edge of a checkbox and a radio: 3:1 on the surface; dark re-points it. */\n --color-border-choice: var(--neutral-5);\n /* In dark a sheet is the same #282828 as the tile under it, so this line separates them. */\n --color-border-popover: var(--neutral-3);\n /* A DASHED outline (a suggestion, an uncertain term): neutral-5, because a dashed line has half\n the ink of a solid one and must still reach 3:1. */\n --color-border-suggestion: var(--neutral-5);\n\n /* --- Semantic: action -------------------------------------------------- */\n --color-action-primary: var(--primary);\n --color-action-primary-hover: var(--primary-hover);\n --color-action-primary-text: var(--ink-white);\n /* A primary fill in dark is a dark box on a dark page (WCAG 1.4.11): it gets a tint border. */\n --color-action-primary-border: var(--primary);\n --color-action-secondary-border: var(--primary);\n /* The destructive fill: the error red, white text on it (5.01:1). Hover is darker in light,\n lighter in dark. In dark the border is a tint, because #D52B1E is 2.94:1 on #282828. */\n --color-action-danger: var(--status-error);\n --color-action-danger-hover: color-mix(in srgb, var(--status-error), black 30%);\n --color-action-danger-border: var(--status-error);\n /* The word of the outlined danger button; dark re-points it (the red is 2.94:1 on #282828). */\n --color-action-danger-text: var(--status-error);\n --color-link: var(--primary);\n --color-link-hover: var(--primary-hover);\n /* A link on a status background: in dark no tint of the primary reaches 4.5:1 there, so it\n reads in the text colour. It is bold and underlined, so colour never carried it alone. */\n --color-link-on-status: var(--primary);\n\n /* The accent splits in three, because a fill, a line and a word have different floors:\n fill (the primary), line (non-text, 3:1: `--primary-tint` in dark) and text (4.5:1:\n `--primary-tint-text` in dark). A word in the line token fails: it is sized for 3:1. */\n --color-accent: var(--primary);\n --color-accent-line: var(--primary);\n --color-accent-text: var(--primary);\n\n --color-focus: var(--focus-orange);\n\n /* --- Semantic: status -------------------------------------------------- */\n --color-attention: var(--status-attention);\n --color-success: var(--status-success);\n --color-warning: var(--status-warning);\n --color-error: var(--status-error);\n --color-info: var(--status-info);\n\n --color-warning-bg: var(--status-warning-bg);\n --color-attention-bg: var(--status-attention-bg);\n --color-error-bg: var(--status-error-bg);\n --color-info-bg: var(--status-info-bg);\n --color-success-bg: var(--status-success-bg);\n\n /* A status mark on its own tint: the status colour, nudged to 3:1 where it falls short. */\n --color-attention-line: color-mix(in srgb, var(--status-attention), black 10%);\n --color-error-line: var(--status-error);\n --color-info-line: var(--status-info);\n --color-success-line: var(--status-success);\n /* A status WORD at 4.5:1 on the surface and on `--color-bg-subtle`: the red itself, the green\n 5 % darker (4.13:1 on neutral-2); dark lifts both. A glyph or an edge keeps the line token. */\n --color-error-text: var(--status-error);\n --color-success-text: color-mix(in srgb, var(--status-success), black 5%);\n\n /* --- Navigation (the theme fill; neutral in dark) ---------------------- */\n --color-nav-bg: var(--primary);\n --color-nav-text: var(--ink-white);\n --color-nav-text-sub: var(--alpha-white-82);\n --color-nav-hover: var(--primary-hover);\n --color-nav-active: var(--primary-hover);\n --color-nav-active-edge: var(--ink-white);\n --color-nav-active-text: var(--ink-white);\n --color-nav-line: var(--primary-line);\n --color-nav-disabled: var(--alpha-white-45);\n --color-nav-badge-bg: var(--status-error);\n --color-nav-badge-text: var(--ink-white);\n /* The avatar is white with black initials wherever it stands, in both modes. */\n --color-nav-avatar-bg: var(--ink-white);\n --color-nav-avatar-text: var(--ink-black);\n /* Orange fails on the theme fill (1.89:1 on #01689B, 1:1 on #E17000); white reaches 3:1 on\n all six primaries. Dark re-points it to the orange. */\n --color-focus-on-theme: var(--ink-white);\n /* The theme's ACCENT, not the attention status: on `defensie` the menu is `#E17000` and the\n status colour made the band disappear. `--accent` is document level only. */\n --color-nav-environment-bg: var(--accent);\n --color-nav-environment-text: var(--color-text-on-fill);\n /* The page's surface in both modes. The navigation bar under it is the menu turned a quarter,\n on `--color-nav-*`. */\n --color-logobar-bg: var(--color-bg-surface);\n --color-logobar-text: var(--color-text-primary);\n /* The ribbon in the emblem; only the logo re-points it in dark, never lintblauw elsewhere. */\n --color-logo-ribbon: var(--ribbon-blue);\n /* What marks an entry in that bar. They name the primitives, never `--color-nav-*`: the bar\n points those at these, and the two would refer to each other. */\n --color-navbar-hover: var(--primary-hover);\n --color-navbar-active: var(--primary-hover);\n --color-navbar-active-edge: var(--ink-white);\n --color-navbar-open-text: var(--color-accent-text);\n /* The start page's band is the primary's wash, so it never reads as the menu. The orange ring\n misses 3:1 on it; the ring takes the text colour. */\n --color-hero-bg: var(--primary-wash);\n --color-hero-text: var(--color-text-primary);\n --color-hero-focus: var(--color-text-primary);\n /* The site's foot stands on the menu's own fill, as on rijksoverheid.nl; in dark it follows the menu. */\n --color-footer-bg: var(--color-nav-bg);\n --color-footer-text: var(--color-nav-text);\n --color-footer-line: var(--color-nav-line);\n --color-footer-focus: var(--color-focus-on-theme);\n\n /* The box behind a recognised term: the primary's wash; dark re-points it. */\n --color-term-bg: var(--primary-wash);\n /* The chosen option of a row of options: the primary's wash; dark re-points it. */\n --color-choice-active-bg: var(--primary-wash);\n /* The 2 px line under a term; dark takes the text tint, as the line tint falls short on it. */\n --color-term-line: var(--color-accent-line);\n\n /* --- Data colors ------------------------------------------------------- */\n /* One colour per variable, named after the Rijkshuisstijl colour. */\n --color-chart-sky-blue: var(--data-sky-blue);\n --color-chart-dark-yellow: var(--data-dark-yellow);\n --color-chart-dark-yellow-text: var(--data-dark-yellow-text);\n --color-chart-red: var(--data-red);\n --color-chart-green: var(--data-green);\n --color-chart-mint-green: var(--data-mint-green);\n --color-chart-violet: var(--data-violet);\n --color-chart-orange: var(--data-orange);\n --color-chart-pink: var(--data-pink);\n --color-chart-dark-green: var(--data-dark-green);\n --color-chart-purple: var(--data-purple);\n --color-chart-ruby-red: var(--data-ruby-red);\n --color-chart-yellow: var(--data-yellow);\n --color-chart-dark-brown: var(--data-dark-brown);\n --color-chart-brown: var(--data-brown);\n --color-chart-dark-blue: var(--data-dark-blue);\n --color-chart-light-blue: var(--data-light-blue);\n --color-chart-moss-green: var(--data-moss-green);\n --color-chart-secondary: var(--data-comparison); /* comparison, context */\n --color-chart-other: var(--data-other); /* \"Overig\" */\n --color-chart-remainder: var(--neutral-3); /* the rest of a whole, e.g. a donut's open part */\n --color-chart-emphasis: var(--data-emphasis); /* trend, threshold, target */\n --color-chart-grid: var(--data-grid);\n --color-chart-axis: var(--neutral-5);\n /* The zero line (darker than the grid) and the hatch of missing data carry meaning, so they\n reach 3:1 on the surface: a fifth of the way from neutral-4 to neutral-5 (3.1:1; 4.0:1 dark). */\n --color-chart-zero: color-mix(in srgb, var(--neutral-5) 20%, var(--neutral-4));\n --color-chart-hatch: color-mix(in srgb, var(--neutral-5) 20%, var(--neutral-4));\n /* A speaker's colour under a whole fragment: this share of it over the surface, so text keeps\n its contrast in light and in dark. */\n --tint-speaker: 12%;\n\n /* These map colours stay deliberately neutral so the data is the only colour on the map. */\n --color-map-water: var(--neutral-0);\n --color-map-land: var(--neutral-2);\n --color-map-border: var(--neutral-4);\n /* An area with a figure: 3:1 against the land and the lightest class, which are 1.1:1 apart. */\n --color-map-border-data: var(--neutral-5);\n\n /* The variable a figure draws when its data names none: the first colour of the list, the\n same decision as `DEFAULT_SERIES_COLOR` in `charts/shared/colors.ts`. */\n --color-chart-default: var(--color-chart-sky-blue);\n\n /* Subdivision of one variable: its colour in its tint ladder, strongest first, on the steps\n 100 / 75 / 60 / 45 / 30. Every colour carries its ladder, so a figure that brings a colour\n brings its tints: a renderer names `--color-chart-<colour>` and\n `--color-chart-<colour>-tint-N`, never a --data-* colour. */\n --color-chart-sky-blue-tint-2: var(--data-sky-blue-75);\n --color-chart-sky-blue-tint-3: var(--data-sky-blue-60);\n --color-chart-sky-blue-tint-4: var(--data-sky-blue-45);\n --color-chart-sky-blue-tint-5: var(--data-sky-blue-30);\n\n --color-chart-dark-yellow-tint-2: var(--data-dark-yellow-75);\n --color-chart-dark-yellow-tint-3: var(--data-dark-yellow-60);\n --color-chart-dark-yellow-tint-4: var(--data-dark-yellow-45);\n --color-chart-dark-yellow-tint-5: var(--data-dark-yellow-30);\n\n --color-chart-red-tint-2: var(--data-red-75);\n --color-chart-red-tint-3: var(--data-red-60);\n --color-chart-red-tint-4: var(--data-red-45);\n --color-chart-red-tint-5: var(--data-red-30);\n\n --color-chart-green-tint-2: var(--data-green-75);\n --color-chart-green-tint-3: var(--data-green-60);\n --color-chart-green-tint-4: var(--data-green-45);\n --color-chart-green-tint-5: var(--data-green-30);\n\n --color-chart-mint-green-tint-2: var(--data-mint-green-75);\n --color-chart-mint-green-tint-3: var(--data-mint-green-60);\n --color-chart-mint-green-tint-4: var(--data-mint-green-45);\n --color-chart-mint-green-tint-5: var(--data-mint-green-30);\n\n --color-chart-violet-tint-2: var(--data-violet-75);\n --color-chart-violet-tint-3: var(--data-violet-60);\n --color-chart-violet-tint-4: var(--data-violet-45);\n --color-chart-violet-tint-5: var(--data-violet-30);\n\n --color-chart-orange-tint-2: var(--data-orange-75);\n --color-chart-orange-tint-3: var(--data-orange-60);\n --color-chart-orange-tint-4: var(--data-orange-45);\n --color-chart-orange-tint-5: var(--data-orange-30);\n\n --color-chart-pink-tint-2: var(--data-pink-75);\n --color-chart-pink-tint-3: var(--data-pink-60);\n --color-chart-pink-tint-4: var(--data-pink-45);\n --color-chart-pink-tint-5: var(--data-pink-30);\n\n --color-chart-dark-green-tint-2: var(--data-dark-green-75);\n --color-chart-dark-green-tint-3: var(--data-dark-green-60);\n --color-chart-dark-green-tint-4: var(--data-dark-green-45);\n --color-chart-dark-green-tint-5: var(--data-dark-green-30);\n\n --color-chart-purple-tint-2: var(--data-purple-75);\n --color-chart-purple-tint-3: var(--data-purple-60);\n --color-chart-purple-tint-4: var(--data-purple-45);\n --color-chart-purple-tint-5: var(--data-purple-30);\n\n --color-chart-ruby-red-tint-2: var(--data-ruby-red-75);\n --color-chart-ruby-red-tint-3: var(--data-ruby-red-60);\n --color-chart-ruby-red-tint-4: var(--data-ruby-red-45);\n --color-chart-ruby-red-tint-5: var(--data-ruby-red-30);\n\n --color-chart-yellow-tint-2: var(--data-yellow-75);\n --color-chart-yellow-tint-3: var(--data-yellow-60);\n --color-chart-yellow-tint-4: var(--data-yellow-45);\n --color-chart-yellow-tint-5: var(--data-yellow-30);\n\n --color-chart-dark-brown-tint-2: var(--data-dark-brown-75);\n --color-chart-dark-brown-tint-3: var(--data-dark-brown-60);\n --color-chart-dark-brown-tint-4: var(--data-dark-brown-45);\n --color-chart-dark-brown-tint-5: var(--data-dark-brown-30);\n\n --color-chart-brown-tint-2: var(--data-brown-75);\n --color-chart-brown-tint-3: var(--data-brown-60);\n --color-chart-brown-tint-4: var(--data-brown-45);\n --color-chart-brown-tint-5: var(--data-brown-30);\n\n --color-chart-dark-blue-tint-2: var(--data-dark-blue-75);\n --color-chart-dark-blue-tint-3: var(--data-dark-blue-60);\n --color-chart-dark-blue-tint-4: var(--data-dark-blue-45);\n --color-chart-dark-blue-tint-5: var(--data-dark-blue-30);\n\n --color-chart-light-blue-tint-2: var(--data-light-blue-75);\n --color-chart-light-blue-tint-3: var(--data-light-blue-60);\n --color-chart-light-blue-tint-4: var(--data-light-blue-45);\n --color-chart-light-blue-tint-5: var(--data-light-blue-30);\n\n --color-chart-moss-green-tint-2: var(--data-moss-green-75);\n --color-chart-moss-green-tint-3: var(--data-moss-green-60);\n --color-chart-moss-green-tint-4: var(--data-moss-green-45);\n --color-chart-moss-green-tint-5: var(--data-moss-green-30);\n\n /* The default ladder, for a figure that names no colour: the sky blue's. */\n --color-chart-tint-1: var(--color-chart-sky-blue);\n --color-chart-tint-2: var(--color-chart-sky-blue-tint-2);\n --color-chart-tint-3: var(--color-chart-sky-blue-tint-3);\n --color-chart-tint-4: var(--color-chart-sky-blue-tint-4);\n --color-chart-tint-5: var(--color-chart-sky-blue-tint-5);\n\n /* Sequential scale for ordinal classes (heatmap, choropleth), lightest first. A component names\n these, never a --data-* colour directly. */\n --color-chart-seq-1: var(--data-sky-blue-15);\n --color-chart-seq-2: var(--data-sky-blue-30);\n --color-chart-seq-3: var(--data-sky-blue-45);\n --color-chart-seq-4: var(--data-sky-blue-75);\n --color-chart-seq-5: var(--data-sky-blue);\n}\n\n/* ============================================================================\n Dark mode — the Logius range, no inversion\n\n Redefines the seven `--neutral-*` primitives, re-declares `--primary-hover` lighter and\n re-points the layer-2/3 names whose meaning changes; everything that merely follows a\n neutral is absent on purpose. Page and tiles are both #282828, the border separates them: the\n step below is the menu's, so it stays a band beside the page and under the logo bar.\n Screen only: paper is always light, whatever the reader chose.\n ========================================================================= */\n@media screen {\n [data-mode='dark'] {\n --neutral-0: #282828;\n --neutral-1: #1D1D1D;\n --neutral-2: #333333;\n --neutral-3: #4A4A4A;\n --neutral-4: #7A7A7A;\n --neutral-5: #B0B0B0;\n --neutral-6: #FFFFFF;\n\n /* The hover goes UP in dark: the light mix would put a near-black fill on the near-black page. */\n --primary-hover: color-mix(in srgb, var(--primary), white 12%);\n\n --color-bg-page: var(--neutral-0);\n --color-bg-title: var(--neutral-0);\n /* The hero's wash sits halfway between the menu (L 0.231) and the page (L 0.277), below the\n page as in light: a panel or tab on it is lighter than its ground. */\n --primary-wash: oklch(from var(--primary) 0.254 min(c, 0.02) h);\n\n /* The filter zone must read as a band, so in dark it steps UP to neutral-2 (neutral-1 turned\n the fields in it into light boxes). `--color-bg-inset` keeps neutral-1: \"sunken\". */\n --color-bg-filter: var(--neutral-2);\n --color-bg-inset: var(--neutral-1);\n\n --color-text-inverse: var(--neutral-1);\n\n /* Colour that must read by itself on #282828 becomes the tint; a FILL keeps the primary. */\n --color-action-primary-border: var(--primary-tint);\n --color-action-secondary-border: var(--primary-tint);\n /* Danger hover: 8 % white is the most that keeps white text at 4.5:1 (4.56:1). The border and\n the word lift the red as the primary's tints do, to 3:1 on #282828 and 4.5:1 on #333333,\n the hover surface; the word's chroma cap keeps it inside sRGB. */\n --color-action-danger-hover: color-mix(in srgb, var(--status-error), white 8%);\n --color-action-danger-border: oklch(from var(--status-error) max(l, 0.58) c h);\n --color-action-danger-text: oklch(from var(--status-error) max(l, 0.71) min(c, 0.18) h);\n /* A status mark at 3:1 on its own tint. */\n --color-attention-line: var(--status-attention);\n --color-error-line: oklch(from var(--status-error) max(l, 0.6) c h);\n --color-info-line: oklch(from var(--status-info) max(l, 0.58) c h);\n --color-success-line: oklch(from var(--status-success) max(l, 0.57) c h);\n /* A status word at 4.5:1 on #333333, lifted as the danger word is. */\n --color-error-text: oklch(from var(--status-error) max(l, 0.71) min(c, 0.18) h);\n --color-success-text: oklch(from var(--status-success) max(l, 0.68) min(c, 0.18) h);\n /* A link is text: the text tint, not the line tint. The hover stays white. */\n --color-link: var(--primary-tint-text);\n --color-link-hover: var(--neutral-6);\n --color-link-on-status: var(--neutral-6);\n --color-accent-line: var(--primary-tint);\n --color-accent-text: var(--primary-tint-text);\n\n /* Lintblauw has too little contrast on the dark surface; the house style lightens it. */\n --color-logo-ribbon: var(--ribbon-blue-dark);\n\n /* The menu is neutral in dark: near-black, in the rail and in the bar alike, so in the top\n layout it stays its own band under the logo bar. Hover and active are one step up, as they\n are one fill in light; the edge is the text tint, as the line tint is 3:1 on neutral-0 only. */\n --color-nav-bg: var(--neutral-1);\n --color-nav-text: var(--neutral-6);\n --color-nav-text-sub: var(--neutral-5);\n --color-nav-hover: var(--neutral-2);\n --color-nav-active: var(--neutral-2);\n --color-nav-active-edge: var(--primary-tint-text);\n --color-navbar-hover: var(--neutral-2);\n --color-navbar-active: var(--neutral-2);\n --color-navbar-active-edge: var(--primary-tint-text);\n /* The open entry's word stands on the panel's surface: full text contrast, not the tint. */\n --color-navbar-open-text: var(--color-text-primary);\n /* The label is 16 px text: the tint is 3.0:1 and needs 4.5:1. The edge keeps the tint. */\n --color-nav-active-text: var(--neutral-6);\n /* The sheet is told from the page by its shadow and this quiet line; 1.66:1 is accepted here. */\n --color-border-popover: var(--neutral-3);\n --color-nav-line: var(--neutral-2);\n --color-nav-disabled: var(--neutral-4);\n /* The menu is neutral here, so its ring is the orange of every other surface. */\n --color-focus-on-theme: var(--color-focus);\n /* The choice edge keeps neutral-4 in dark: it already reaches 3:1 there (3.43:1 on #282828). */\n --color-border-choice: var(--neutral-4);\n\n /* A term's box is the subtle surface: behind a word on #282828 the dark wash would be a hole. */\n --color-term-bg: var(--neutral-2);\n --color-choice-active-bg: var(--neutral-2);\n --color-hero-focus: var(--color-focus);\n --color-term-line: var(--primary-tint-text);\n\n /* Yellow as text works on the dark surface, so the dark gold is not needed. */\n --color-chart-dark-yellow-text: var(--data-dark-yellow);\n --color-map-water: var(--neutral-1);\n\n --shadow-sticky: 0 2px 6px var(--alpha-black-40);\n --shadow-popover: 0 4px 16px var(--alpha-black-55);\n --shadow-nav: 2px 0 8px var(--alpha-black-40);\n --shadow-chart-hover: 0 1px 4px var(--alpha-black-60);\n --shadow-scroll-start: inset 12px 0 10px -10px var(--alpha-black-60);\n --shadow-scroll-end: inset -12px 0 10px -10px var(--alpha-black-60);\n --color-overlay-nav: var(--alpha-black-40);\n }\n}\n\n/* ============================================================================\n Below 768 px the gutter follows the page padding and every pointer target is the touch\n floor. Screen only: a portrait page is narrower than 768 px and keeps the desktop form.\n ========================================================================= */\n@media screen and (max-width: 767px) {\n :root {\n --grid-gutter: 16px;\n --h-target: var(--h-touch);\n --h-option: var(--h-touch);\n --chart-h-expanded: 320px;\n --w-ribbon: 2.5rem;\n }\n}\n\n/* ============================================================================\n Paper — white under the content, since Lintje prints its own fills\n (`print-color-adjust: exact` in base.css): a band in the page's grey would cost ink and\n say nothing.\n ========================================================================= */\n@media print {\n :root {\n /* The paper's margin is the page's edge: bars and content start at it, aligned. */\n --page-pad-x: 0px;\n --color-bg-page: var(--neutral-0);\n --color-bg-title: var(--neutral-0);\n --color-bg-filter: var(--neutral-0);\n }\n}\n\n/* The sheet's own margin, so the content never runs to the paper's edge: room for the browser's\n date, address and page number above and below, and a portrait sheet still wide enough for the\n tablet's form. A custom property does not reach `@page`, so the value stands here. */\n@page { margin: 15mm 12mm; }\n", Be = "/*\n * The reset every shadow root needs, adopted once as one shared `CSSStyleSheet`.\n *\n * `background` and `color` are deliberately not on `:host`: every element has a `:host`, so\n * they would cut the inheritance chain at each boundary (an icon in the navigation would lose\n * its white `currentColor`). Page-level rules (`html, body`) belong to the host page.\n */\n\n:host {\n font: var(--text-ui);\n font-family: var(--font-ui);\n -webkit-font-smoothing: antialiased;\n font-variant-numeric: tabular-nums;\n}\n\n*, *::before, *::after { box-sizing: border-box; }\n\nh1, h2, h3, h4, h5, h6, p, figure { margin: 0; }\nul, ol { margin: 0; padding: 0; list-style: none; }\n\nbutton {\n font: inherit;\n color: inherit;\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n}\n\na { color: var(--color-link); }\n\ninput, select, textarea { font: inherit; color: inherit; }\n\n/* Focus: always orange 3 px, never animated. */\n:focus-visible {\n outline: var(--focus-width) solid var(--color-focus);\n outline-offset: var(--focus-offset);\n}\n/* Where the outside would be clipped (tiles in a grid, table rows) the ring sits inside. */\n.focus-inset:focus-visible { outline-offset: calc(var(--focus-width) * -1); }\n\n[hidden] { display: none !important; }\n\n.visually-hidden {\n position: absolute;\n width: 1px; height: 1px;\n padding: 0; margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n border: 0;\n}\n\n@keyframes lintje-shimmer {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n}\n@keyframes lintje-rise {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: none; }\n}\n@keyframes lintje-sheet-in {\n from { transform: translateY(100%); }\n to { transform: none; }\n}\n@keyframes lintje-menu-in {\n from { transform: translateY(-100%); }\n to { transform: none; }\n}\n@keyframes lintje-menu-out {\n from { transform: none; }\n to { transform: translateY(-100%); }\n}\n@keyframes lintje-fade-in { from { opacity: 0; } to { opacity: 1; } }\n/* A point, on a map or in a scatter plot, grows from its middle. */\n@keyframes lintje-point-grow { from { transform: scale(0); } }\n@keyframes lintje-drop-in { from { transform: translateY(-10px); } to { transform: none; } }\n@keyframes lintje-popover-in {\n from { opacity: 0; transform: translateY(-6px); }\n to { opacity: 1; transform: none; }\n}\n\n/* prefers-reduced-motion: all durations 0 except opacity (80 ms). */\n@media (prefers-reduced-motion: reduce) {\n :host {\n --dur-base: 0ms; --dur-hover: 0ms; --dur-popover: 0ms; --dur-submenu: 0ms; --dur-toast: 0ms; --dur-scrim: 0ms; --dur-rail: 0ms; --dur-collapse: 0ms;\n --dur-modal: 0ms; --dur-sheet: 0ms; --dur-kpi: 0ms; --dur-badge: 0ms; --dur-draw: 0ms;\n }\n *, *::before, *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 80ms !important;\n scroll-behavior: auto !important;\n }\n}\n\n/* Forced colours: the browser replaces every colour and drops shadows; what every root shares\n is the focus ring, in the system's Highlight. */\n@media (forced-colors: active) {\n :focus-visible { outline-color: Highlight; }\n}\n\n/* Paper. A fill carries meaning (a legend swatch, a status cell, the current page), so it prints\n even with the browser's background graphics off; the surfaces under it are white in print.\n A drawing in progress would print half drawn, so every mark stands in its final state. */\n@media print {\n *, *::before, *::after {\n print-color-adjust: exact;\n animation: none !important;\n transition: none !important;\n }\n}\n";
|
|
524
|
+
var ze = "/* ============================================================================\n Lintje — design tokens\n\n Colour is in three groups: themable UI colour (a theme sets only `--primary` and `--accent`, in\n `themes.css`), fixed data colour (`--data-*`, identical in every\n mode and theme except the two grays) and fixed status colour (`--status-*`).\n\n Three layers, one direction: component -> semantic (`--color-*`) -> primitives. Only the\n primitive blocks may hold a colour literal. To change a colour in one mode, re-point the\n layer-2 name inside `[data-mode='dark']`.\n\n `color-mix(in srgb, …)` and the relative `oklch(from …)` need Chrome/Edge 122+, Firefox 128+\n or Safari 18+;\n `colour-scheme.test.ts` repeats the arithmetic. The `@font-face` rules live in `fonts.css`:\n they cannot work inside a shadow root.\n ========================================================================= */\n\n/* ============================================================================\n Layer 1 — primitives (the only literals)\n ========================================================================= */\n:root {\n /* --- Neutral (light). The one mode-dependent primitive family ----------\n Neutral-5 is the cool-grey step 600, not 500, because it carries muted TEXT:\n #64748B is 4.34:1 on neutral-2, #475569 is 6.92:1. */\n --neutral-0: #FFFFFF;\n --neutral-1: #F8FAFC;\n --neutral-2: #F1F5F9;\n --neutral-3: #E2E8F0;\n --neutral-4: #94A3B8;\n --neutral-5: #475569;\n --neutral-6: #0F172A;\n\n /* --- Fixed ink ---------------------------------------------------------\n The same in both modes because it sits on a fill, not on the page. */\n --ink-white: #FFFFFF;\n --ink-black: #0F172A;\n --alpha-white-82: rgba(255, 255, 255, 0.82);\n --alpha-white-45: rgba(255, 255, 255, 0.45);\n\n /* --- Focus -------------------------------------------------------------\n Its own constant: it must not move with the accent or the attention status. */\n --focus-orange: #E17000;\n\n /* --- The ribbon --------------------------------------------------------\n Lintblauw, and the Rijkshuisstijl's own lighter tint for the ribbon in the logo in dark. */\n --ribbon-blue: #154273;\n --ribbon-blue-dark: #004A8D;\n\n /* --- Data (fixed Rijkshuisstijl, identical in light, dark and every theme)\n The two grays follow the mode: as fixed literals the comparison line landed at 2.69:1\n on the dark surface. Light #475569 / #94A3B8, dark #B0B0B0 / #7A7A7A. The variables\n stand in the order of `tokens/colors.ts`, the one list of their names. */\n --data-sky-blue: #007BC7;\n --data-dark-yellow: #FFB612;\n --data-red: #D52B1E;\n --data-green: #39870C;\n --data-mint-green: #76D2B6;\n --data-violet: #A90061;\n --data-orange: #E17000;\n --data-pink: #F092CD;\n --data-dark-green: #275937;\n --data-purple: #42145F;\n --data-ruby-red: #CA005D;\n --data-yellow: #F9E11E;\n --data-dark-brown: #673328;\n --data-brown: #94710A;\n --data-dark-blue: #01689B;\n --data-light-blue: #8FCAE7;\n --data-moss-green: #777B00;\n /* Sky blue's ladder is written out: the map's areas draw in from the land to these classes,\n and Chromium interpolates a `color-mix()` target wrongly (the land's RGB numbers taken as\n oklab), so the areas flash yellow. The values are its mix with white; the test checks. */\n --data-sky-blue-75: #409CD5;\n --data-sky-blue-60: #66B0DD;\n --data-sky-blue-45: #8CC4E6;\n --data-sky-blue-30: #B2D7EE;\n --data-sky-blue-15: #D9EBF7;\n --data-comparison: var(--neutral-5);\n --data-other: var(--neutral-4);\n /* Yellow as TEXT fails contrast on white: light writes a wait time in this dark gold. */\n --data-dark-yellow-text: #B07A00;\n /* Grid and emphasis follow the surface, like the two grays. */\n --data-grid: var(--neutral-3);\n --data-emphasis: var(--neutral-6);\n\n /* --- Status (fixed) ---------------------------------------------------- */\n --status-success: #39870C;\n --status-warning: #FFB612;\n --status-attention: #E17000;\n --status-error: #D52B1E;\n --status-info: #007BC7;\n\n /* Black at the alphas the shadows and overlays use; the digits are the alpha in percent. */\n --alpha-black-08: rgba(0, 0, 0, 0.08);\n --alpha-black-14: rgba(0, 0, 0, 0.14);\n --alpha-black-16: rgba(0, 0, 0, 0.16);\n --alpha-black-18: rgba(0, 0, 0, 0.18);\n --alpha-black-22: rgba(0, 0, 0, 0.22);\n --alpha-black-40: rgba(0, 0, 0, 0.4);\n --alpha-black-55: rgba(0, 0, 0, 0.55);\n --alpha-black-60: rgba(0, 0, 0, 0.6);\n}\n\n/* ============================================================================\n Layer 1 — derivations\n\n Mixes of the primitives and of the theme's two properties. The tint ladder is 75 / 60 / 45\n / 30 / 15 % of the base over white; every data colour carries the complete ladder.\n ========================================================================= */\n:root {\n /* Darker than the primary in light: a lighter fill under white text lost contrast (2.80:1 on\n orange). The dark block re-declares it lighter. */\n --primary-hover: color-mix(in srgb, var(--primary), black 30%);\n --primary-line: color-mix(in srgb, var(--primary), white 22%);\n /* The dark tints lift only the perceived lightness, so they keep the primary's colour; a mix\n with white greys it. Each lightness is the smallest hundredth that clears its floor in every\n theme: 3:1 on #282828 for a line, 4.5:1 on #333333 (neutral-2), the lightest neutral\n surface a word stands on, for text. A primary that is lighter already keeps its own. */\n --primary-tint: oklch(from var(--primary) max(l, 0.55) c h);\n --primary-tint-text: oklch(from var(--primary) max(l, 0.71) c h);\n /* A wash behind a word or under a band, never a colour that reads by itself. Fixed in\n perceived lightness, so it is equally light in every theme and keeps the primary's hue; an\n sRGB mix with white greys a dark primary. The chroma cap keeps every theme inside sRGB. */\n --primary-wash: oklch(from var(--primary) 0.955 min(c, 0.02) h);\n\n --data-dark-yellow-75: color-mix(in srgb, var(--data-dark-yellow) 75%, white);\n --data-dark-yellow-60: color-mix(in srgb, var(--data-dark-yellow) 60%, white);\n --data-dark-yellow-45: color-mix(in srgb, var(--data-dark-yellow) 45%, white);\n --data-dark-yellow-30: color-mix(in srgb, var(--data-dark-yellow) 30%, white);\n --data-dark-yellow-15: color-mix(in srgb, var(--data-dark-yellow) 15%, white);\n\n --data-red-75: color-mix(in srgb, var(--data-red) 75%, white);\n --data-red-60: color-mix(in srgb, var(--data-red) 60%, white);\n --data-red-45: color-mix(in srgb, var(--data-red) 45%, white);\n --data-red-30: color-mix(in srgb, var(--data-red) 30%, white);\n --data-red-15: color-mix(in srgb, var(--data-red) 15%, white);\n\n --data-green-75: color-mix(in srgb, var(--data-green) 75%, white);\n --data-green-60: color-mix(in srgb, var(--data-green) 60%, white);\n --data-green-45: color-mix(in srgb, var(--data-green) 45%, white);\n --data-green-30: color-mix(in srgb, var(--data-green) 30%, white);\n --data-green-15: color-mix(in srgb, var(--data-green) 15%, white);\n\n --data-mint-green-75: color-mix(in srgb, var(--data-mint-green) 75%, white);\n --data-mint-green-60: color-mix(in srgb, var(--data-mint-green) 60%, white);\n --data-mint-green-45: color-mix(in srgb, var(--data-mint-green) 45%, white);\n --data-mint-green-30: color-mix(in srgb, var(--data-mint-green) 30%, white);\n --data-mint-green-15: color-mix(in srgb, var(--data-mint-green) 15%, white);\n\n --data-violet-75: color-mix(in srgb, var(--data-violet) 75%, white);\n --data-violet-60: color-mix(in srgb, var(--data-violet) 60%, white);\n --data-violet-45: color-mix(in srgb, var(--data-violet) 45%, white);\n --data-violet-30: color-mix(in srgb, var(--data-violet) 30%, white);\n --data-violet-15: color-mix(in srgb, var(--data-violet) 15%, white);\n\n --data-orange-75: color-mix(in srgb, var(--data-orange) 75%, white);\n --data-orange-60: color-mix(in srgb, var(--data-orange) 60%, white);\n --data-orange-45: color-mix(in srgb, var(--data-orange) 45%, white);\n --data-orange-30: color-mix(in srgb, var(--data-orange) 30%, white);\n --data-orange-15: color-mix(in srgb, var(--data-orange) 15%, white);\n\n --data-pink-75: color-mix(in srgb, var(--data-pink) 75%, white);\n --data-pink-60: color-mix(in srgb, var(--data-pink) 60%, white);\n --data-pink-45: color-mix(in srgb, var(--data-pink) 45%, white);\n --data-pink-30: color-mix(in srgb, var(--data-pink) 30%, white);\n --data-pink-15: color-mix(in srgb, var(--data-pink) 15%, white);\n\n --data-dark-green-75: color-mix(in srgb, var(--data-dark-green) 75%, white);\n --data-dark-green-60: color-mix(in srgb, var(--data-dark-green) 60%, white);\n --data-dark-green-45: color-mix(in srgb, var(--data-dark-green) 45%, white);\n --data-dark-green-30: color-mix(in srgb, var(--data-dark-green) 30%, white);\n --data-dark-green-15: color-mix(in srgb, var(--data-dark-green) 15%, white);\n\n --data-purple-75: color-mix(in srgb, var(--data-purple) 75%, white);\n --data-purple-60: color-mix(in srgb, var(--data-purple) 60%, white);\n --data-purple-45: color-mix(in srgb, var(--data-purple) 45%, white);\n --data-purple-30: color-mix(in srgb, var(--data-purple) 30%, white);\n --data-purple-15: color-mix(in srgb, var(--data-purple) 15%, white);\n\n --data-ruby-red-75: color-mix(in srgb, var(--data-ruby-red) 75%, white);\n --data-ruby-red-60: color-mix(in srgb, var(--data-ruby-red) 60%, white);\n --data-ruby-red-45: color-mix(in srgb, var(--data-ruby-red) 45%, white);\n --data-ruby-red-30: color-mix(in srgb, var(--data-ruby-red) 30%, white);\n --data-ruby-red-15: color-mix(in srgb, var(--data-ruby-red) 15%, white);\n\n --data-yellow-75: color-mix(in srgb, var(--data-yellow) 75%, white);\n --data-yellow-60: color-mix(in srgb, var(--data-yellow) 60%, white);\n --data-yellow-45: color-mix(in srgb, var(--data-yellow) 45%, white);\n --data-yellow-30: color-mix(in srgb, var(--data-yellow) 30%, white);\n --data-yellow-15: color-mix(in srgb, var(--data-yellow) 15%, white);\n\n --data-dark-brown-75: color-mix(in srgb, var(--data-dark-brown) 75%, white);\n --data-dark-brown-60: color-mix(in srgb, var(--data-dark-brown) 60%, white);\n --data-dark-brown-45: color-mix(in srgb, var(--data-dark-brown) 45%, white);\n --data-dark-brown-30: color-mix(in srgb, var(--data-dark-brown) 30%, white);\n --data-dark-brown-15: color-mix(in srgb, var(--data-dark-brown) 15%, white);\n\n --data-brown-75: color-mix(in srgb, var(--data-brown) 75%, white);\n --data-brown-60: color-mix(in srgb, var(--data-brown) 60%, white);\n --data-brown-45: color-mix(in srgb, var(--data-brown) 45%, white);\n --data-brown-30: color-mix(in srgb, var(--data-brown) 30%, white);\n --data-brown-15: color-mix(in srgb, var(--data-brown) 15%, white);\n\n --data-dark-blue-75: color-mix(in srgb, var(--data-dark-blue) 75%, white);\n --data-dark-blue-60: color-mix(in srgb, var(--data-dark-blue) 60%, white);\n --data-dark-blue-45: color-mix(in srgb, var(--data-dark-blue) 45%, white);\n --data-dark-blue-30: color-mix(in srgb, var(--data-dark-blue) 30%, white);\n --data-dark-blue-15: color-mix(in srgb, var(--data-dark-blue) 15%, white);\n\n --data-light-blue-75: color-mix(in srgb, var(--data-light-blue) 75%, white);\n --data-light-blue-60: color-mix(in srgb, var(--data-light-blue) 60%, white);\n --data-light-blue-45: color-mix(in srgb, var(--data-light-blue) 45%, white);\n --data-light-blue-30: color-mix(in srgb, var(--data-light-blue) 30%, white);\n --data-light-blue-15: color-mix(in srgb, var(--data-light-blue) 15%, white);\n\n --data-moss-green-75: color-mix(in srgb, var(--data-moss-green) 75%, white);\n --data-moss-green-60: color-mix(in srgb, var(--data-moss-green) 60%, white);\n --data-moss-green-45: color-mix(in srgb, var(--data-moss-green) 45%, white);\n --data-moss-green-30: color-mix(in srgb, var(--data-moss-green) 30%, white);\n --data-moss-green-15: color-mix(in srgb, var(--data-moss-green) 15%, white);\n\n /* 15 % of the status colour over the surface, so one declaration covers both modes. */\n --status-success-bg: color-mix(in srgb, var(--status-success) 15%, var(--neutral-0));\n --status-warning-bg: color-mix(in srgb, var(--status-warning) 15%, var(--neutral-0));\n --status-attention-bg: color-mix(in srgb, var(--status-attention) 15%, var(--neutral-0));\n --status-error-bg: color-mix(in srgb, var(--status-error) 15%, var(--neutral-0));\n --status-info-bg: color-mix(in srgb, var(--status-info) 15%, var(--neutral-0));\n}\n\n/* ============================================================================\n Layers 2 and 3 — semantic and component tokens (light)\n\n No colour literal below this line.\n ========================================================================= */\n:root {\n /* --- Typography -------------------------------------------------------- */\n --font-ui: 'RijksSans', 'Source Sans 3', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n --font-mono: 'Source Code Pro', ui-monospace, SFMono-Regular, Menlo, monospace;\n\n --text-dashboard: 700 1.25rem/1.2 var(--font-ui);\n --text-h1: 700 1.75rem/1.2 var(--font-ui);\n --text-h1-mobile: 700 1.5rem/1.15 var(--font-ui);\n --text-h1-display: 700 2.5rem/1.1 var(--font-ui);\n --text-h2: 700 1.25rem/1.25 var(--font-ui);\n --text-tile-title: 700 1rem/1.3 var(--font-ui);\n --text-tile-sub: 400 0.875rem/1.35 var(--font-ui);\n --text-kpi: 700 2rem/1.1 var(--font-ui);\n --text-kpi-mobile: 700 1.5rem/1.1 var(--font-ui);\n --text-kpi-secondary: 700 1.25rem/1.1 var(--font-ui);\n --text-body: 400 1rem/1.5 var(--font-ui);\n /* The text being translated and its translation: larger than body, read at a glance. */\n --text-translation: 400 1.25rem/1.5 var(--font-ui);\n --text-ui: 400 1rem/1.4 var(--font-ui);\n --text-small: 400 0.875rem/1.45 var(--font-ui);\n --text-meta: 400 0.875rem/1.4 var(--font-ui);\n --text-table: 400 1rem/1.4 var(--font-ui);\n --text-table-head: 700 0.875rem/1.3 var(--font-ui);\n --text-axis: 400 0.75rem/1.2 var(--font-ui);\n\n --label-size: 0.875rem;\n --label-weight: 700;\n --label-tracking: 0.08em;\n --kpi-tracking: -0.02em;\n\n /* --- Spacing (4 px scale) --------------------------------------------- */\n --space-1: 4px;\n --space-2: 8px;\n --space-3: 12px;\n --space-4: 16px;\n --space-5: 20px;\n --space-6: 24px;\n --space-8: 32px;\n --space-10: 40px;\n\n /* --- Component sizes --------------------------------------------------- */\n --h-topbar: 3.5rem;\n --h-contextbar: 3rem;\n --h-mobile-header: 4.5rem;\n --h-control: 3rem;\n --h-button: 3rem;\n --h-button-compact: 2.5rem;\n --h-button-chrome: 2.5rem;\n --h-icon-button: 2.5rem;\n --h-chip: 2rem;\n --h-chip-field: 1.75rem;\n --h-nav-row: 3rem;\n --h-nav-head: 6.5rem;\n --h-table-row: 3rem;\n --h-touch: 3rem;\n /* The smallest pointer target. A box that draws smaller reaches it through a\n transparent hit area (`::after`, negative inset). */\n --h-target: 3rem;\n /* A link in a list of text links: one line of text, the WCAG AA floor, as on rijksoverheid.nl. */\n --h-target-text: 1.5rem;\n /* The two dense exceptions to the target: a date picker day cell and a listbox option row. */\n --h-option: 2.5rem;\n /* The sparkline of a KPI: a line and its area under the figure, with no axes. */\n --h-sparkline: 2rem;\n\n --w-nav: 288px;\n --w-rail: 72px;\n --w-text: 760px;\n --w-message: 560px;\n /* A language choice in the translator's bar. */\n --w-translator-language: 18rem;\n /* The widest the page's content gets. A host sets `--lintje-content-width` to change it. */\n --w-content: 1360px;\n --nav-edge: 4px;\n /* The ribbon is the unit: 48 px, 40 on a phone. Both bars are in rem, so they grow with the\n reader's text size. */\n --w-ribbon: 3rem;\n --h-logobar: calc(2.5 * var(--w-ribbon));\n /* The top bar's height: what pins under the bar measures `--h-topbar`. */\n --h-navbar: var(--h-topbar);\n /* How far what follows the hero stands over its band's lower edge. */\n --hero-overlap: var(--space-10);\n /* The widest the picture beside the hero's text gets: four of the twelve columns at 1440. */\n --w-hero-aside: 400px;\n /* The narrowest a card gets in a card list before the list drops a column. */\n --w-card: 320px;\n /* The same for a horizontal card, whose picture takes a column of its own. */\n --w-card-wide: 480px;\n --w-card-media: 200px;\n --w-card-logo: 3.5rem;\n --w-card-logo-wide: 5rem;\n /* The narrowest thumbnail under a gallery's large picture. */\n --w-gallery-thumb: 120px;\n /* The narrowest column of links in a footer before the columns stand under each other. */\n --w-footer-column: 220px;\n\n --page-pad-y: 32px;\n --page-pad-x: 24px;\n /* What a full-width bar or the content adds to its side padding so what stands in it keeps to\n `--w-content`; the percentage is taken of the box the bar stands in. */\n --page-gutter: max(\n 0px,\n calc((100% - var(--lintje-content-width, var(--w-content)) - 2 * var(--page-pad-x)) / 2)\n );\n --grid-gutter: 24px;\n --tile-pad-y: 20px;\n --tile-pad-x: 24px;\n --chart-h-main: 260px;\n --chart-h-small: 180px;\n --chart-h-expanded: 560px;\n\n /* Sticky context = top bar + summary bar. */\n --h-sticky: calc(var(--h-topbar) + var(--h-contextbar));\n\n --radius: 0px;\n --radius-round: 50%;\n\n --shadow-sticky: 0 2px 6px var(--alpha-black-08);\n --shadow-popover: 0 4px 16px var(--alpha-black-14);\n --shadow-nav: 2px 0 8px var(--alpha-black-08);\n --shadow-chart-hover: 0 1px 4px var(--alpha-black-22);\n --shadow-scroll-start: inset 12px 0 10px -10px var(--alpha-black-18);\n --shadow-scroll-end: inset -12px 0 10px -10px var(--alpha-black-18);\n\n --color-overlay-page: var(--alpha-black-60);\n --color-overlay-nav: var(--alpha-black-16);\n\n --focus-width: 3px;\n --focus-offset: 2px;\n\n /* --- Motion ------------------------------------------------------------ */\n /* `@kind other` marks these for design tooling as neither colors, sizes nor type; the library\n CSS ships unminified so the notes reach it. */\n --ease-in-motion: cubic-bezier(0.2, 0, 0, 1); /* @kind other */\n --ease-out-motion: cubic-bezier(0.4, 0, 1, 1); /* @kind other */\n /* A fade that runs both ways: straight, so out is in played backwards; a curve leaves a ghost. */\n --ease-fade: linear; /* @kind other */\n --dur-base: 200ms; /* @kind other */\n --dur-hover: 120ms; /* @kind other */\n --dur-popover: var(--dur-base); /* @kind other */\n --dur-submenu: 300ms; /* @kind other */\n --dur-toast: var(--dur-base); /* @kind other */\n --dur-scrim: var(--dur-base); /* @kind other */\n --dur-rail: var(--dur-base); /* @kind other */\n --dur-collapse: var(--dur-base); /* @kind other */\n --dur-modal: var(--dur-base); /* @kind other */\n --dur-sheet: var(--dur-base); /* @kind other */\n --dur-kpi: var(--dur-base); /* @kind other */\n --dur-badge: 300ms; /* @kind other */\n --dur-draw: 900ms; /* @kind other */\n --dur-data-label: 300ms; /* @kind other */\n --dur-layer: 400ms; /* @kind other */\n --dur-skeleton: 1200ms; /* @kind other */\n --dur-wave: 600ms; /* @kind other */\n\n /* --- Semantic: surfaces ------------------------------------------------ */\n --color-bg-page: var(--neutral-1);\n --color-bg-surface: var(--neutral-0);\n --color-bg-subtle: var(--neutral-2);\n --color-bg-title: var(--neutral-1);\n /* Between steps 2 and 3: on the cool-grey ramp neutral-2 sits too close to the page to read\n as a band. */\n --color-bg-filter: color-mix(in srgb, var(--neutral-2), var(--neutral-3));\n --color-bg-selected: var(--neutral-2);\n --color-bg-inset: var(--neutral-2);\n\n /* --- Semantic: text ---------------------------------------------------- */\n --color-text-primary: var(--neutral-6);\n --color-text-secondary: var(--neutral-6);\n --color-text-muted: var(--neutral-5);\n --color-text-inverse: var(--neutral-0);\n --color-text-disabled: var(--neutral-4);\n /* A placeholder must stay readable: 4.5:1 on the surface in both modes. */\n --color-text-placeholder: var(--neutral-5);\n --color-text-on-fill: var(--ink-white);\n --color-text-on-light-fill: var(--ink-black);\n --color-qr-bg: var(--ink-white);\n --color-qr-fg: var(--ink-black);\n\n /* --- Semantic: borders ------------------------------------------------- */\n --color-border-default: var(--neutral-3);\n --color-border-strong: var(--neutral-3);\n --color-border-filter: var(--neutral-3);\n --color-border-heavy: var(--neutral-4);\n /* The resting edge of a field box: 3:1 (WCAG 1.4.11) on the surface and the filter band. */\n --color-border-field: var(--neutral-5);\n /* The 2 px edge of a checkbox and a radio: 3:1 on the surface; dark re-points it. */\n --color-border-choice: var(--neutral-5);\n /* In dark a sheet is the same #282828 as the tile under it, so this line separates them. */\n --color-border-popover: var(--neutral-3);\n /* A DASHED outline (a suggestion, an uncertain term): neutral-5, because a dashed line has half\n the ink of a solid one and must still reach 3:1. */\n --color-border-suggestion: var(--neutral-5);\n\n /* --- Semantic: action -------------------------------------------------- */\n --color-action-primary: var(--primary);\n --color-action-primary-hover: var(--primary-hover);\n --color-action-primary-text: var(--ink-white);\n /* A primary fill in dark is a dark box on a dark page (WCAG 1.4.11): it gets a tint border. */\n --color-action-primary-border: var(--primary);\n --color-action-secondary-border: var(--primary);\n /* The destructive fill: the error red, white text on it (5.01:1). Hover is darker in light,\n lighter in dark. In dark the border is a tint, because #D52B1E is 2.94:1 on #282828. */\n --color-action-danger: var(--status-error);\n --color-action-danger-hover: color-mix(in srgb, var(--status-error), black 30%);\n --color-action-danger-border: var(--status-error);\n /* The word of the outlined danger button; dark re-points it (the red is 2.94:1 on #282828). */\n --color-action-danger-text: var(--status-error);\n --color-link: var(--primary);\n --color-link-hover: var(--primary-hover);\n /* A link on a status background: in dark no tint of the primary reaches 4.5:1 there, so it\n reads in the text colour. It is bold and underlined, so colour never carried it alone. */\n --color-link-on-status: var(--primary);\n\n /* The accent splits in three, because a fill, a line and a word have different floors:\n fill (the primary), line (non-text, 3:1: `--primary-tint` in dark) and text (4.5:1:\n `--primary-tint-text` in dark). A word in the line token fails: it is sized for 3:1. */\n --color-accent: var(--primary);\n --color-accent-line: var(--primary);\n --color-accent-text: var(--primary);\n\n --color-focus: var(--focus-orange);\n\n /* --- Semantic: status -------------------------------------------------- */\n --color-attention: var(--status-attention);\n --color-success: var(--status-success);\n --color-warning: var(--status-warning);\n --color-error: var(--status-error);\n --color-info: var(--status-info);\n\n --color-warning-bg: var(--status-warning-bg);\n --color-attention-bg: var(--status-attention-bg);\n --color-error-bg: var(--status-error-bg);\n --color-info-bg: var(--status-info-bg);\n --color-success-bg: var(--status-success-bg);\n\n /* A status mark on its own tint: the status colour, nudged to 3:1 where it falls short. */\n --color-attention-line: color-mix(in srgb, var(--status-attention), black 10%);\n --color-error-line: var(--status-error);\n --color-info-line: var(--status-info);\n --color-success-line: var(--status-success);\n /* A status WORD at 4.5:1 on the surface and on `--color-bg-subtle`: the red itself, the green\n 5 % darker (4.13:1 on neutral-2); dark lifts both. A glyph or an edge keeps the line token. */\n --color-error-text: var(--status-error);\n --color-success-text: color-mix(in srgb, var(--status-success), black 5%);\n\n /* --- Navigation (the theme fill; neutral in dark) ---------------------- */\n --color-nav-bg: var(--primary);\n --color-nav-text: var(--ink-white);\n --color-nav-text-sub: var(--alpha-white-82);\n --color-nav-hover: var(--primary-hover);\n --color-nav-active: var(--primary-hover);\n --color-nav-active-edge: var(--ink-white);\n --color-nav-active-text: var(--ink-white);\n --color-nav-line: var(--primary-line);\n --color-nav-disabled: var(--alpha-white-45);\n --color-nav-badge-bg: var(--status-error);\n --color-nav-badge-text: var(--ink-white);\n /* The avatar is white with black initials wherever it stands, in both modes. */\n --color-nav-avatar-bg: var(--ink-white);\n --color-nav-avatar-text: var(--ink-black);\n /* Orange fails on the theme fill (1.89:1 on #01689B, 1:1 on #E17000); white reaches 3:1 on\n all six primaries. Dark re-points it to the orange. */\n --color-focus-on-theme: var(--ink-white);\n /* The theme's ACCENT, not the attention status: on `defensie` the menu is `#E17000` and the\n status colour made the band disappear. `--accent` is document level only. */\n --color-nav-environment-bg: var(--accent);\n --color-nav-environment-text: var(--color-text-on-fill);\n /* The page's surface in both modes. The navigation bar under it is the menu turned a quarter,\n on `--color-nav-*`. */\n --color-logobar-bg: var(--color-bg-surface);\n --color-logobar-text: var(--color-text-primary);\n /* The ribbon in the emblem; only the logo re-points it in dark, never lintblauw elsewhere. */\n --color-logo-ribbon: var(--ribbon-blue);\n /* What marks an entry in that bar. They name the primitives, never `--color-nav-*`: the bar\n points those at these, and the two would refer to each other. */\n --color-navbar-hover: var(--primary-hover);\n --color-navbar-active: var(--primary-hover);\n --color-navbar-active-edge: var(--ink-white);\n --color-navbar-open-text: var(--color-accent-text);\n /* The start page's band is the primary's wash, so it never reads as the menu. The orange ring\n misses 3:1 on it; the ring takes the text colour. */\n --color-hero-bg: var(--primary-wash);\n --color-hero-text: var(--color-text-primary);\n --color-hero-focus: var(--color-text-primary);\n /* The site's foot stands on the menu's own fill, as on rijksoverheid.nl; in dark it follows the menu. */\n --color-footer-bg: var(--color-nav-bg);\n --color-footer-text: var(--color-nav-text);\n --color-footer-line: var(--color-nav-line);\n --color-footer-focus: var(--color-focus-on-theme);\n\n /* The box behind a recognised term: the primary's wash; dark re-points it. */\n --color-term-bg: var(--primary-wash);\n /* The chosen option of a row of options: the primary's wash; dark re-points it. */\n --color-choice-active-bg: var(--primary-wash);\n /* The 2 px line under a term; dark takes the text tint, as the line tint falls short on it. */\n --color-term-line: var(--color-accent-line);\n\n /* --- Data colors ------------------------------------------------------- */\n /* One colour per variable, named after the Rijkshuisstijl colour. */\n --color-chart-sky-blue: var(--data-sky-blue);\n --color-chart-dark-yellow: var(--data-dark-yellow);\n --color-chart-dark-yellow-text: var(--data-dark-yellow-text);\n --color-chart-red: var(--data-red);\n --color-chart-green: var(--data-green);\n --color-chart-mint-green: var(--data-mint-green);\n --color-chart-violet: var(--data-violet);\n --color-chart-orange: var(--data-orange);\n --color-chart-pink: var(--data-pink);\n --color-chart-dark-green: var(--data-dark-green);\n --color-chart-purple: var(--data-purple);\n --color-chart-ruby-red: var(--data-ruby-red);\n --color-chart-yellow: var(--data-yellow);\n --color-chart-dark-brown: var(--data-dark-brown);\n --color-chart-brown: var(--data-brown);\n --color-chart-dark-blue: var(--data-dark-blue);\n --color-chart-light-blue: var(--data-light-blue);\n --color-chart-moss-green: var(--data-moss-green);\n --color-chart-secondary: var(--data-comparison); /* comparison, context */\n --color-chart-other: var(--data-other); /* \"Overig\" */\n --color-chart-remainder: var(--neutral-3); /* the rest of a whole, e.g. a donut's open part */\n --color-chart-emphasis: var(--data-emphasis); /* trend, threshold, target */\n --color-chart-grid: var(--data-grid);\n --color-chart-axis: var(--neutral-5);\n /* The zero line (darker than the grid) and the hatch of missing data carry meaning, so they\n reach 3:1 on the surface: a fifth of the way from neutral-4 to neutral-5 (3.1:1; 4.0:1 dark). */\n --color-chart-zero: color-mix(in srgb, var(--neutral-5) 20%, var(--neutral-4));\n --color-chart-hatch: color-mix(in srgb, var(--neutral-5) 20%, var(--neutral-4));\n /* A speaker's colour under a whole fragment: this share of it over the surface, so text keeps\n its contrast in light and in dark. */\n --tint-speaker: 12%;\n\n /* These map colours stay deliberately neutral so the data is the only colour on the map. */\n --color-map-water: var(--neutral-0);\n --color-map-land: var(--neutral-2);\n --color-map-border: var(--neutral-4);\n /* An area with a figure: 3:1 against the land and the lightest class, which are 1.1:1 apart. */\n --color-map-border-data: var(--neutral-5);\n\n /* The variable a figure draws when its data names none: the first colour of the list, the\n same decision as `DEFAULT_SERIES_COLOR` in `charts/shared/colors.ts`. */\n --color-chart-default: var(--color-chart-sky-blue);\n\n /* Subdivision of one variable: its colour in its tint ladder, strongest first, on the steps\n 100 / 75 / 60 / 45 / 30. Every colour carries its ladder, so a figure that brings a colour\n brings its tints: a renderer names `--color-chart-<colour>` and\n `--color-chart-<colour>-tint-N`, never a --data-* colour. */\n --color-chart-sky-blue-tint-2: var(--data-sky-blue-75);\n --color-chart-sky-blue-tint-3: var(--data-sky-blue-60);\n --color-chart-sky-blue-tint-4: var(--data-sky-blue-45);\n --color-chart-sky-blue-tint-5: var(--data-sky-blue-30);\n\n --color-chart-dark-yellow-tint-2: var(--data-dark-yellow-75);\n --color-chart-dark-yellow-tint-3: var(--data-dark-yellow-60);\n --color-chart-dark-yellow-tint-4: var(--data-dark-yellow-45);\n --color-chart-dark-yellow-tint-5: var(--data-dark-yellow-30);\n\n --color-chart-red-tint-2: var(--data-red-75);\n --color-chart-red-tint-3: var(--data-red-60);\n --color-chart-red-tint-4: var(--data-red-45);\n --color-chart-red-tint-5: var(--data-red-30);\n\n --color-chart-green-tint-2: var(--data-green-75);\n --color-chart-green-tint-3: var(--data-green-60);\n --color-chart-green-tint-4: var(--data-green-45);\n --color-chart-green-tint-5: var(--data-green-30);\n\n --color-chart-mint-green-tint-2: var(--data-mint-green-75);\n --color-chart-mint-green-tint-3: var(--data-mint-green-60);\n --color-chart-mint-green-tint-4: var(--data-mint-green-45);\n --color-chart-mint-green-tint-5: var(--data-mint-green-30);\n\n --color-chart-violet-tint-2: var(--data-violet-75);\n --color-chart-violet-tint-3: var(--data-violet-60);\n --color-chart-violet-tint-4: var(--data-violet-45);\n --color-chart-violet-tint-5: var(--data-violet-30);\n\n --color-chart-orange-tint-2: var(--data-orange-75);\n --color-chart-orange-tint-3: var(--data-orange-60);\n --color-chart-orange-tint-4: var(--data-orange-45);\n --color-chart-orange-tint-5: var(--data-orange-30);\n\n --color-chart-pink-tint-2: var(--data-pink-75);\n --color-chart-pink-tint-3: var(--data-pink-60);\n --color-chart-pink-tint-4: var(--data-pink-45);\n --color-chart-pink-tint-5: var(--data-pink-30);\n\n --color-chart-dark-green-tint-2: var(--data-dark-green-75);\n --color-chart-dark-green-tint-3: var(--data-dark-green-60);\n --color-chart-dark-green-tint-4: var(--data-dark-green-45);\n --color-chart-dark-green-tint-5: var(--data-dark-green-30);\n\n --color-chart-purple-tint-2: var(--data-purple-75);\n --color-chart-purple-tint-3: var(--data-purple-60);\n --color-chart-purple-tint-4: var(--data-purple-45);\n --color-chart-purple-tint-5: var(--data-purple-30);\n\n --color-chart-ruby-red-tint-2: var(--data-ruby-red-75);\n --color-chart-ruby-red-tint-3: var(--data-ruby-red-60);\n --color-chart-ruby-red-tint-4: var(--data-ruby-red-45);\n --color-chart-ruby-red-tint-5: var(--data-ruby-red-30);\n\n --color-chart-yellow-tint-2: var(--data-yellow-75);\n --color-chart-yellow-tint-3: var(--data-yellow-60);\n --color-chart-yellow-tint-4: var(--data-yellow-45);\n --color-chart-yellow-tint-5: var(--data-yellow-30);\n\n --color-chart-dark-brown-tint-2: var(--data-dark-brown-75);\n --color-chart-dark-brown-tint-3: var(--data-dark-brown-60);\n --color-chart-dark-brown-tint-4: var(--data-dark-brown-45);\n --color-chart-dark-brown-tint-5: var(--data-dark-brown-30);\n\n --color-chart-brown-tint-2: var(--data-brown-75);\n --color-chart-brown-tint-3: var(--data-brown-60);\n --color-chart-brown-tint-4: var(--data-brown-45);\n --color-chart-brown-tint-5: var(--data-brown-30);\n\n --color-chart-dark-blue-tint-2: var(--data-dark-blue-75);\n --color-chart-dark-blue-tint-3: var(--data-dark-blue-60);\n --color-chart-dark-blue-tint-4: var(--data-dark-blue-45);\n --color-chart-dark-blue-tint-5: var(--data-dark-blue-30);\n\n --color-chart-light-blue-tint-2: var(--data-light-blue-75);\n --color-chart-light-blue-tint-3: var(--data-light-blue-60);\n --color-chart-light-blue-tint-4: var(--data-light-blue-45);\n --color-chart-light-blue-tint-5: var(--data-light-blue-30);\n\n --color-chart-moss-green-tint-2: var(--data-moss-green-75);\n --color-chart-moss-green-tint-3: var(--data-moss-green-60);\n --color-chart-moss-green-tint-4: var(--data-moss-green-45);\n --color-chart-moss-green-tint-5: var(--data-moss-green-30);\n\n /* The default ladder, for a figure that names no colour: the sky blue's. */\n --color-chart-tint-1: var(--color-chart-sky-blue);\n --color-chart-tint-2: var(--color-chart-sky-blue-tint-2);\n --color-chart-tint-3: var(--color-chart-sky-blue-tint-3);\n --color-chart-tint-4: var(--color-chart-sky-blue-tint-4);\n --color-chart-tint-5: var(--color-chart-sky-blue-tint-5);\n\n /* Sequential scale for ordinal classes (heatmap, choropleth), lightest first. A component names\n these, never a --data-* colour directly. */\n --color-chart-seq-1: var(--data-sky-blue-15);\n --color-chart-seq-2: var(--data-sky-blue-30);\n --color-chart-seq-3: var(--data-sky-blue-45);\n --color-chart-seq-4: var(--data-sky-blue-75);\n --color-chart-seq-5: var(--data-sky-blue);\n}\n\n/* ============================================================================\n Dark mode — the Logius range, no inversion\n\n Redefines the seven `--neutral-*` primitives, re-declares `--primary-hover` lighter and\n re-points the layer-2/3 names whose meaning changes; everything that merely follows a\n neutral is absent on purpose. Page and tiles are both #282828, the border separates them: the\n step below is the menu's, so it stays a band beside the page and under the logo bar.\n Screen only: paper is always light, whatever the reader chose.\n ========================================================================= */\n@media screen {\n [data-mode='dark'] {\n --neutral-0: #282828;\n --neutral-1: #1D1D1D;\n --neutral-2: #333333;\n --neutral-3: #4A4A4A;\n --neutral-4: #7A7A7A;\n --neutral-5: #B0B0B0;\n --neutral-6: #FFFFFF;\n\n /* The hover goes UP in dark: the light mix would put a near-black fill on the near-black page. */\n --primary-hover: color-mix(in srgb, var(--primary), white 12%);\n\n --color-bg-page: var(--neutral-0);\n --color-bg-title: var(--neutral-0);\n /* The hero's wash sits halfway between the menu (L 0.231) and the page (L 0.277), below the\n page as in light: a panel or tab on it is lighter than its ground. */\n --primary-wash: oklch(from var(--primary) 0.254 min(c, 0.02) h);\n\n /* The filter zone must read as a band, so in dark it steps UP to neutral-2 (neutral-1 turned\n the fields in it into light boxes). `--color-bg-inset` keeps neutral-1: \"sunken\". */\n --color-bg-filter: var(--neutral-2);\n --color-bg-inset: var(--neutral-1);\n\n --color-text-inverse: var(--neutral-1);\n\n /* Colour that must read by itself on #282828 becomes the tint; a FILL keeps the primary. */\n --color-action-primary-border: var(--primary-tint);\n --color-action-secondary-border: var(--primary-tint);\n /* Danger hover: 8 % white is the most that keeps white text at 4.5:1 (4.56:1). The border and\n the word lift the red as the primary's tints do, to 3:1 on #282828 and 4.5:1 on #333333,\n the hover surface; the word's chroma cap keeps it inside sRGB. */\n --color-action-danger-hover: color-mix(in srgb, var(--status-error), white 8%);\n --color-action-danger-border: oklch(from var(--status-error) max(l, 0.58) c h);\n --color-action-danger-text: oklch(from var(--status-error) max(l, 0.71) min(c, 0.18) h);\n /* A status mark at 3:1 on its own tint. */\n --color-attention-line: var(--status-attention);\n --color-error-line: oklch(from var(--status-error) max(l, 0.6) c h);\n --color-info-line: oklch(from var(--status-info) max(l, 0.58) c h);\n --color-success-line: oklch(from var(--status-success) max(l, 0.57) c h);\n /* A status word at 4.5:1 on #333333, lifted as the danger word is. */\n --color-error-text: oklch(from var(--status-error) max(l, 0.71) min(c, 0.18) h);\n --color-success-text: oklch(from var(--status-success) max(l, 0.68) min(c, 0.18) h);\n /* A link is text: the text tint, not the line tint. The hover stays white. */\n --color-link: var(--primary-tint-text);\n --color-link-hover: var(--neutral-6);\n --color-link-on-status: var(--neutral-6);\n --color-accent-line: var(--primary-tint);\n --color-accent-text: var(--primary-tint-text);\n\n /* Lintblauw has too little contrast on the dark surface; the house style lightens it. */\n --color-logo-ribbon: var(--ribbon-blue-dark);\n\n /* The menu is neutral in dark: near-black, in the rail and in the bar alike, so in the top\n layout it stays its own band under the logo bar. Hover and active are one step up, as they\n are one fill in light; the edge is the text tint, as the line tint is 3:1 on neutral-0 only. */\n --color-nav-bg: var(--neutral-1);\n --color-nav-text: var(--neutral-6);\n --color-nav-text-sub: var(--neutral-5);\n --color-nav-hover: var(--neutral-2);\n --color-nav-active: var(--neutral-2);\n --color-nav-active-edge: var(--primary-tint-text);\n --color-navbar-hover: var(--neutral-2);\n --color-navbar-active: var(--neutral-2);\n --color-navbar-active-edge: var(--primary-tint-text);\n /* The open entry's word stands on the panel's surface: full text contrast, not the tint. */\n --color-navbar-open-text: var(--color-text-primary);\n /* The label is 16 px text: the tint is 3.0:1 and needs 4.5:1. The edge keeps the tint. */\n --color-nav-active-text: var(--neutral-6);\n /* The sheet is told from the page by its shadow and this quiet line; 1.66:1 is accepted here. */\n --color-border-popover: var(--neutral-3);\n --color-nav-line: var(--neutral-2);\n --color-nav-disabled: var(--neutral-4);\n /* The menu is neutral here, so its ring is the orange of every other surface. */\n --color-focus-on-theme: var(--color-focus);\n /* The choice edge keeps neutral-4 in dark: it already reaches 3:1 there (3.43:1 on #282828). */\n --color-border-choice: var(--neutral-4);\n\n /* A term's box is the subtle surface: behind a word on #282828 the dark wash would be a hole. */\n --color-term-bg: var(--neutral-2);\n --color-choice-active-bg: var(--neutral-2);\n --color-hero-focus: var(--color-focus);\n --color-term-line: var(--primary-tint-text);\n\n /* Yellow as text works on the dark surface, so the dark gold is not needed. */\n --color-chart-dark-yellow-text: var(--data-dark-yellow);\n --color-map-water: var(--neutral-1);\n\n --shadow-sticky: 0 2px 6px var(--alpha-black-40);\n --shadow-popover: 0 4px 16px var(--alpha-black-55);\n --shadow-nav: 2px 0 8px var(--alpha-black-40);\n --shadow-chart-hover: 0 1px 4px var(--alpha-black-60);\n --shadow-scroll-start: inset 12px 0 10px -10px var(--alpha-black-60);\n --shadow-scroll-end: inset -12px 0 10px -10px var(--alpha-black-60);\n --color-overlay-nav: var(--alpha-black-40);\n }\n}\n\n/* ============================================================================\n Below 768 px the gutter follows the page padding and every pointer target is the touch\n floor. Screen only: a portrait page is narrower than 768 px and keeps the desktop form.\n ========================================================================= */\n@media screen and (max-width: 767px) {\n :root {\n --grid-gutter: 16px;\n --h-target: var(--h-touch);\n --h-option: var(--h-touch);\n --chart-h-expanded: 320px;\n --w-ribbon: 2.5rem;\n }\n}\n\n/* ============================================================================\n Paper — white under the content, since Lintje prints its own fills\n (`print-color-adjust: exact` in base.css): a band in the page's grey would cost ink and\n say nothing.\n ========================================================================= */\n@media print {\n :root {\n /* The paper's margin is the page's edge: bars and content start at it, aligned. */\n --page-pad-x: 0px;\n --color-bg-page: var(--neutral-0);\n --color-bg-title: var(--neutral-0);\n --color-bg-filter: var(--neutral-0);\n }\n}\n\n/* The sheet's own margin, so the content never runs to the paper's edge: room for the browser's\n date, address and page number above and below, and a portrait sheet still wide enough for the\n tablet's form. A custom property does not reach `@page`, so the value stands here. */\n@page { margin: 15mm 12mm; }\n", Be = "/*\n * The reset every shadow root needs, adopted once as one shared `CSSStyleSheet`.\n *\n * `background` and `color` are deliberately not on `:host`: every element has a `:host`, so\n * they would cut the inheritance chain at each boundary (an icon in the navigation would lose\n * its white `currentColor`). Page-level rules (`html, body`) belong to the host page.\n */\n\n:host {\n font: var(--text-ui);\n font-family: var(--font-ui);\n -webkit-font-smoothing: antialiased;\n font-variant-numeric: tabular-nums;\n}\n\n*, *::before, *::after { box-sizing: border-box; }\n\nh1, h2, h3, h4, h5, h6, p, figure { margin: 0; }\nul, ol { margin: 0; padding: 0; list-style: none; }\n\nbutton {\n font: inherit;\n color: inherit;\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n}\n\na { color: var(--color-link); }\n\ninput, select, textarea { font: inherit; color: inherit; }\n\n/* Focus: always orange 3 px, never animated. */\n:focus-visible {\n outline: var(--focus-width) solid var(--color-focus);\n outline-offset: var(--focus-offset);\n}\n/* Where the outside would be clipped (tiles in a grid, table rows) the ring sits inside. */\n.focus-inset:focus-visible { outline-offset: calc(var(--focus-width) * -1); }\n\n[hidden] { display: none !important; }\n\n.visually-hidden {\n position: absolute;\n width: 1px; height: 1px;\n padding: 0; margin: -1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n border: 0;\n}\n\n@keyframes lintje-shimmer {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n}\n@keyframes lintje-rise {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: none; }\n}\n@keyframes lintje-sheet-in {\n from { transform: translateY(100%); }\n to { transform: none; }\n}\n@keyframes lintje-menu-in {\n from { transform: translateY(-100%); }\n to { transform: none; }\n}\n@keyframes lintje-menu-out {\n from { transform: none; }\n to { transform: translateY(-100%); }\n}\n@keyframes lintje-fade-in { from { opacity: 0; } to { opacity: 1; } }\n/* A point, on a map or in a scatter plot, grows from its middle. */\n@keyframes lintje-point-grow { from { transform: scale(0); } }\n@keyframes lintje-drop-in { from { transform: translateY(-10px); } to { transform: none; } }\n@keyframes lintje-popover-in {\n from { opacity: 0; transform: translateY(-6px); }\n to { opacity: 1; transform: none; }\n}\n\n/* prefers-reduced-motion: all durations 0 except opacity (80 ms). */\n@media (prefers-reduced-motion: reduce) {\n :host {\n --dur-base: 0ms; --dur-hover: 0ms; --dur-popover: 0ms; --dur-submenu: 0ms; --dur-toast: 0ms; --dur-scrim: 0ms; --dur-rail: 0ms; --dur-collapse: 0ms;\n --dur-modal: 0ms; --dur-sheet: 0ms; --dur-kpi: 0ms; --dur-badge: 0ms; --dur-draw: 0ms;\n }\n *, *::before, *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 80ms !important;\n scroll-behavior: auto !important;\n }\n}\n\n/* Forced colours: the browser replaces every colour and drops shadows; what every root shares\n is the focus ring, in the system's Highlight. */\n@media (forced-colors: active) {\n :focus-visible { outline-color: Highlight; }\n}\n\n/* Paper. A fill carries meaning (a legend swatch, a status cell, the current page), so it prints\n even with the browser's background graphics off; the surfaces under it are white in print.\n A drawing in progress would print half drawn, so every mark stands in its final state. */\n@media print {\n *, *::before, *::after {\n print-color-adjust: exact;\n animation: none !important;\n transition: none !important;\n }\n}\n";
|
|
525
525
|
//#endregion
|
|
526
526
|
//#region src/core/styles.ts
|
|
527
527
|
function Ve(e) {
|
|
@@ -1486,7 +1486,7 @@ var yn = class extends j {
|
|
|
1486
1486
|
};
|
|
1487
1487
|
M("lintje-badge", yn);
|
|
1488
1488
|
//#endregion
|
|
1489
|
-
//#region src/
|
|
1489
|
+
//#region src/components/actions/button/button.css?inline
|
|
1490
1490
|
var bn = "/*\n * Above the divider: what the element itself needs (`lintje-button` is the box the page lays\n * out). Below it: the block's own BEM CSS, in the shadow root.\n */\n:host {\n display: inline-flex;\n vertical-align: middle;\n}\n:host([hidden]) { display: none; }\n:host(.lintje-button--block),\n:host([block]) { display: flex; }\n:host([block]) .lintje-button { width: 100%; }\n:host([span]) .lintje-button { width: 100%; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-button {\n /* Never wider than its place: in a narrow cell the label is cut with an ellipsis. */\n max-width: 100%;\n min-width: 0;\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-2);\n height: var(--h-button);\n padding: 0 var(--space-4);\n border: 1px solid transparent;\n font-family: var(--font-ui);\n font-size: 1rem;\n font-weight: 700;\n text-decoration: none;\n cursor: pointer;\n border-radius: var(--radius);\n transition: background var(--dur-hover) var(--ease-in-motion),\n color var(--dur-hover) var(--ease-in-motion),\n border-color var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-button__label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.lintje-button--compact { height: var(--h-button-compact); padding: 0 var(--space-3); }\n.lintje-button--chrome { height: var(--h-button-chrome); padding: 0 14px; }\n/* The compact and chrome button reach the 48 px target through a transparent hit area, 4 px out\n on each side. A row of them keeps 8 px between the boxes, so hit areas never overlap. */\n.lintje-button--compact::after,\n.lintje-button--chrome::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n\n/* The 1 px border is transparent, so the primary fill fills it in light; in dark it draws the\n tint, the only thing that separates a #0E3B6E box from a #282828 page (1.31:1). */\n.lintje-button--primary {\n background: var(--color-action-primary);\n color: var(--color-action-primary-text);\n border-color: var(--color-action-primary-border);\n}\n.lintje-button--primary:not(.is-disabled, .is-busy, :disabled, [aria-disabled='true']):hover { background: var(--color-action-primary-hover); }\n\n.lintje-button--secondary {\n background: var(--color-bg-surface);\n color: var(--color-accent-text);\n border-color: var(--color-action-secondary-border);\n}\n.lintje-button--secondary:not(.is-disabled, .is-busy, :disabled, [aria-disabled='true']):hover { background: var(--color-bg-selected); }\n\n.lintje-button--tertiary {\n background: transparent;\n color: var(--color-text-primary);\n border-color: var(--color-border-strong);\n}\n.lintje-button--tertiary:not(.is-disabled, .is-busy, :disabled, [aria-disabled='true']):hover { background: var(--color-bg-subtle); }\n\n/* The destructive weight; in dark the border is the red's tint, the only thing reaching 3:1. */\n.lintje-button--danger {\n background: var(--color-action-danger);\n color: var(--color-text-on-fill);\n border-color: var(--color-action-danger-border);\n}\n.lintje-button--danger:not(.is-disabled, .is-busy, :disabled, [aria-disabled='true']):hover { background: var(--color-action-danger-hover); }\n\n/* `danger-secondary`: the quieter destructive form, for a row where the fill would shout. The\n colour is `--color-action-danger-text`. The hover is the tertiary's `--color-bg-subtle`:\n the red word on `--color-error-bg` was 3.96:1 in light. */\n.lintje-button--danger-secondary {\n background: var(--color-bg-surface);\n color: var(--color-action-danger-text);\n border-color: var(--color-action-danger-text);\n}\n.lintje-button--danger-secondary:not(.is-disabled, .is-busy, :disabled, [aria-disabled='true']):hover { background: var(--color-bg-subtle); }\n\n.lintje-button--link {\n height: auto;\n padding: 0;\n color: var(--color-link);\n text-decoration: underline;\n background: none;\n}\n.lintje-button--link:not(.is-disabled, .is-busy, :disabled, [aria-disabled='true']):hover { color: var(--color-link-hover); }\n/* The link reaches the text target (24 px) through a transparent hit area. */\n.lintje-button--link::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target-text)) / 2)) 0;\n}\n\n/* Disabled is `aria-disabled`: the button keeps its tab order and focus ring. A busy button is\n not `is-disabled`: it keeps its variant's colours. Native `<button>`s with these classes get\n the look from `:disabled` or `aria-disabled`, without the class. */\n.lintje-button.is-disabled,\n.lintje-button:disabled,\n.lintje-button[aria-disabled='true']:not(.is-busy) {\n opacity: 1;\n cursor: not-allowed;\n background: var(--color-bg-subtle);\n color: var(--color-text-disabled);\n border-color: var(--color-border-default);\n}\n.lintje-button--link.is-disabled,\n.lintje-button--link:disabled,\n.lintje-button--link[aria-disabled='true']:not(.is-busy) {\n background: none;\n border-color: transparent;\n text-decoration: none;\n}\n\n/* --- Busy --------------------------------------------------------------- */\n/*\n * An action that round-trips. The button keeps its width: label and icons only lose their ink,\n * and the ring is drawn over the middle, so nothing re-flows. The label is transparent, not\n * `visibility: hidden`, so the focused button keeps its name.\n */\n.lintje-button.is-busy { cursor: progress; }\n.lintje-button.is-busy .lintje-button__label { opacity: 0; }\n.lintje-button.is-busy .lintje-button__icon { visibility: hidden; }\n.lintje-button__busy {\n position: absolute;\n top: 50%; left: 50%;\n width: 16px; height: 16px;\n margin: -8px 0 0 -8px;\n border: 2px solid currentColor;\n border-top-color: transparent;\n border-radius: var(--radius-round);\n opacity: 0.85;\n animation: lintje-spin var(--dur-skeleton) linear infinite;\n}\n/* A keyframe only works in the root that uses it. */\n@keyframes lintje-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n/* Reduced motion: the ring stands still; `aria-busy` carries the state. */\n@media (prefers-reduced-motion: reduce) {\n .lintje-button__busy { animation: none; }\n}\n\n/* Forced colours: `aria-disabled` is not grayed out by the browser. */\n@media (forced-colors: active) {\n .lintje-button.is-disabled,\n .lintje-button:disabled,\n .lintje-button[aria-disabled='true']:not(.is-busy) { color: GrayText; border-color: GrayText; }\n}\n", xn = "/*\n * Adopted by a control that has nothing to say on paper: a button, a question box, a bar of\n * actions. What the reader chose stays in the elements that show it; what to press does not.\n * `!important`, so a page's own `display` on the tag does not bring it back.\n */\n@media print {\n :host { display: none !important; }\n}\n", Sn = "lintje-button-reason", Cn = class extends j {
|
|
1491
1491
|
static {
|
|
1492
1492
|
this.styles = [
|
|
@@ -1658,7 +1658,7 @@ function kn(e) {
|
|
|
1658
1658
|
return t !== null && On(t, e);
|
|
1659
1659
|
}
|
|
1660
1660
|
//#endregion
|
|
1661
|
-
//#region src/
|
|
1661
|
+
//#region src/components/shared/tone.ts
|
|
1662
1662
|
var An = {
|
|
1663
1663
|
success: "functioneel-cirkel-vinkje",
|
|
1664
1664
|
warning: "functioneel-waarschuwing",
|
|
@@ -1752,10 +1752,10 @@ function qn() {
|
|
|
1752
1752
|
};
|
|
1753
1753
|
}
|
|
1754
1754
|
//#endregion
|
|
1755
|
-
//#region src/
|
|
1755
|
+
//#region src/components/overlays/popover/popover.css?inline
|
|
1756
1756
|
var Jn = ":host { display: contents; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n/* Fixed, not absolute: an `overflow` ancestor would cut it off. z-index 85: above the scrim (80),\n below the tooltip (90). */\n.lintje-popover {\n position: fixed;\n z-index: 85;\n max-width: calc(100vw - var(--space-4));\n max-height: var(--lintje-popover-space, none);\n overflow: auto;\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 font: var(--text-ui);\n animation: lintje-popover-in var(--dur-popover) var(--ease-in-motion);\n}\n";
|
|
1757
1757
|
//#endregion
|
|
1758
|
-
//#region src/
|
|
1758
|
+
//#region src/components/overlays/popover/popover.ts
|
|
1759
1759
|
function Yn(e, t) {
|
|
1760
1760
|
return e ? {
|
|
1761
1761
|
top: e.top === null ? null : `${e.top}px`,
|
|
@@ -1851,7 +1851,7 @@ function Zn(e) {
|
|
|
1851
1851
|
return e.button === 0 && !e.metaKey && !e.ctrlKey && !e.shiftKey && !e.altKey;
|
|
1852
1852
|
}
|
|
1853
1853
|
//#endregion
|
|
1854
|
-
//#region src/
|
|
1854
|
+
//#region src/components/feedback/spinner/spinner.css?inline
|
|
1855
1855
|
var Qn = ":host { display: inline-flex; vertical-align: middle; }\n:host([stacked]) { display: flex; justify-content: center; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-spinner {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n font: var(--text-ui);\n color: var(--color-text-primary);\n}\n.lintje-spinner--stacked { flex-direction: column; gap: var(--space-3); }\n\n/* A line on a surface (3:1): the accent line, not the fill. */\n.lintje-spinner__ring {\n flex: none;\n width: 1rem; height: 1rem;\n border: 2px solid var(--color-accent-line);\n border-top-color: transparent;\n border-radius: var(--radius-round);\n animation: lintje-spin var(--dur-skeleton) linear infinite;\n}\n/* 16, 24 and 40 px: 1, 1.5 and 2.5rem, so the ring grows with the text beside it. */\n.lintje-spinner--24 .lintje-spinner__ring { width: 1.5rem; height: 1.5rem; }\n.lintje-spinner--40 .lintje-spinner__ring { width: 2.5rem; height: 2.5rem; border-width: 3px; }\n.lintje-spinner--current .lintje-spinner__ring {\n border-color: currentColor;\n border-top-color: transparent;\n}\n\n/* A keyframe only works in the root that uses it. */\n@keyframes lintje-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n@media (prefers-reduced-motion: reduce) {\n .lintje-spinner__ring { animation: none; }\n}\n\n/* Forced colours: the ring draws in CanvasText with its open quarter in Canvas, so it still turns. */\n@media (forced-colors: active) {\n .lintje-spinner__ring,\n .lintje-spinner--current .lintje-spinner__ring {\n border-color: CanvasText;\n border-top-color: Canvas;\n }\n}\n", $n = class extends j {
|
|
1856
1856
|
constructor(...e) {
|
|
1857
1857
|
super(...e), this.size = 16, this.stacked = !1, this.current = !1, this.filled = null, this.#e = 0;
|
|
@@ -1908,7 +1908,7 @@ var Qn = ":host { display: inline-flex; vertical-align: middle; }\n:host([stacke
|
|
|
1908
1908
|
};
|
|
1909
1909
|
M("lintje-spinner", $n);
|
|
1910
1910
|
//#endregion
|
|
1911
|
-
//#region src/
|
|
1911
|
+
//#region src/components/overlays/tooltip/tooltip.css?inline
|
|
1912
1912
|
var er = "/* A box of its own for the pointer and focus to enter; inline, so flow is unchanged. */\n:host { display: inline-flex; vertical-align: middle; min-width: 0; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n/* The pointer can rest on it, to read it at a larger zoom; Escape takes it away. */\n.lintje-tooltip {\n position: fixed;\n z-index: 90;\n max-width: 15rem;\n padding: var(--space-2) var(--space-3);\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 font: var(--text-small);\n animation: lintje-fade-in var(--dur-hover) var(--ease-in-motion);\n}\n", tr = 300, nr = 150;
|
|
1913
1913
|
function rr(e) {
|
|
1914
1914
|
return e ? {
|
|
@@ -2000,7 +2000,7 @@ var ir = class extends j {
|
|
|
2000
2000
|
};
|
|
2001
2001
|
M("lintje-tooltip", ir);
|
|
2002
2002
|
//#endregion
|
|
2003
|
-
//#region src/
|
|
2003
|
+
//#region src/components/actions/icon-button/icon-button.css?inline
|
|
2004
2004
|
var ar = "/* Above the divider: what the element itself needs. Below it: the block's own BEM CSS. */\n:host {\n display: inline-flex;\n vertical-align: middle;\n}\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-icon-button {\n position: relative;\n width: var(--h-icon-button);\n height: var(--h-icon-button);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n border-radius: var(--radius);\n transition: opacity var(--dur-hover) var(--ease-in-motion),\n background var(--dur-hover) var(--ease-in-motion);\n}\n/* The target reaches `--h-target` through a transparent hit area; 100 % is the box's own size,\n so the label variant's wider box only grows it upwards and downwards. */\n.lintje-icon-button::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2));\n}\n/* Without a file for its icon the label becomes the text; the square grows as wide as the word. */\n.lintje-icon-button--text { width: auto; min-width: var(--h-icon-button); padding: 0 var(--space-3); }\n.lintje-icon-button__label { font-size: 0.875rem; font-weight: 700; white-space: nowrap; }\n\n/* The box is a line (3:1), the glyph stands in for a word (4.5:1): different tokens. */\n.lintje-icon-button--outlined {\n border: 1px solid var(--color-accent-line);\n background: var(--color-bg-surface);\n color: var(--color-accent-text);\n}\n.lintje-icon-button--outlined:not(.is-disabled):hover { background: var(--color-bg-selected); }\n\n.lintje-icon-button--flat { background: transparent; color: var(--color-text-primary); }\n.lintje-icon-button--flat:not(.is-disabled):hover { background: var(--color-bg-subtle); }\n\n/* Tile actions stand back in the muted text colour, never below 3:1; hover and focus darken them. */\n.lintje-icon-button--tile { background: transparent; color: var(--color-text-muted); }\n.lintje-icon-button--tile:not(.is-disabled):hover, .lintje-icon-button--tile:focus-visible { color: var(--color-text-primary); }\n\n/* The active button takes the primary-fill border, so the square keeps an edge in dark. */\n.lintje-icon-button.is-active {\n background: var(--color-action-primary);\n color: var(--color-action-primary-text);\n border-color: var(--color-action-primary-border);\n}\n\n/* Live: it listens or speaks now. The primary fill with its border, and bars that move beside\n the icon, so the state is never colour alone; the box grows to hold them. */\n.lintje-icon-button.is-live {\n width: auto;\n gap: var(--space-2);\n padding: 0 var(--space-3);\n border: 1px solid var(--color-action-primary-border);\n background: var(--color-action-primary);\n color: var(--color-action-primary-text);\n}\n.lintje-icon-button.is-live:not(.is-disabled):hover { background: var(--color-action-primary-hover); }\n.lintje-icon-button__waves { display: inline-flex; align-items: center; gap: 2px; height: 16px; }\n.lintje-icon-button__wave {\n width: 2px;\n height: 100%;\n background: currentColor;\n animation: lintje-icon-button-wave var(--dur-wave) var(--ease-in-motion) infinite alternate;\n}\n.lintje-icon-button__wave:nth-child(2) { animation-delay: calc(var(--dur-wave) * -0.5); }\n.lintje-icon-button__wave:nth-child(3) { animation-delay: calc(var(--dur-wave) * -0.25); }\n.lintje-icon-button__wave:nth-child(4) { animation-delay: calc(var(--dur-wave) * -0.75); }\n@keyframes lintje-icon-button-wave {\n from { transform: scaleY(0.25); }\n to { transform: scaleY(1); }\n}\n/* Without motion the bars stand still at different heights: still a wave, never a pulse. */\n@media (prefers-reduced-motion: reduce) {\n .lintje-icon-button__wave { animation: none; transform: scaleY(0.5); }\n .lintje-icon-button__wave:nth-child(2) { transform: scaleY(1); }\n .lintje-icon-button__wave:nth-child(4) { transform: scaleY(0.75); }\n}\n\n/* Disabled is `aria-disabled`: tab order and focus ring stay. After is-active, so it loses the fill. */\n.lintje-icon-button.is-disabled { cursor: not-allowed; color: var(--color-text-disabled); }\n.lintje-icon-button--outlined.is-disabled { background: var(--color-bg-surface); border-color: var(--color-border-default); }\n\n/* Forced colours: the active fill is dropped, so its border turns Highlight. */\n@media (forced-colors: active) {\n .lintje-icon-button.is-active,\n .lintje-icon-button.is-live { border-color: Highlight; }\n .lintje-icon-button.is-disabled { color: GrayText; border-color: GrayText; }\n}\n";
|
|
2005
2005
|
//#endregion
|
|
2006
2006
|
//#region src/core/length.ts
|
|
@@ -2013,7 +2013,7 @@ function sr() {
|
|
|
2013
2013
|
return Number.isFinite(e) && e > 0 ? e : 16;
|
|
2014
2014
|
}
|
|
2015
2015
|
//#endregion
|
|
2016
|
-
//#region src/
|
|
2016
|
+
//#region src/components/shared/grid-item-element.ts
|
|
2017
2017
|
var cr = A("/* `min-width: auto` is the default; tiles hold long words and wide tables that would overflow. */\n:host {\n min-width: 0;\n}\n:host(lintje-grid-item) {\n display: block;\n}\n:host([span]) {\n grid-column: span var(--lintje-span, 1);\n}\n@media (min-width: 768px) and (max-width: 1023px), print and (max-width: 1023px) {\n :host([span='4']) { grid-column: span 6; }\n :host([span='8']) { grid-column: span 12; }\n}\n@media screen and (max-width: 767px) {\n :host([span]) { grid-column: span 1; }\n}\n"), lr = class extends j {
|
|
2018
2018
|
static {
|
|
2019
2019
|
this.properties = { span: {
|
|
@@ -2024,7 +2024,7 @@ var cr = A("/* `min-width: auto` is the default; tiles hold long words and wide
|
|
|
2024
2024
|
willUpdate(e) {
|
|
2025
2025
|
super.willUpdate(e), this.span ? this.style.setProperty("--lintje-span", String(this.span)) : this.style.removeProperty("--lintje-span");
|
|
2026
2026
|
}
|
|
2027
|
-
}, ur = "/* The block is the container, so the inner row can take its margin from the block's own width. */\n.lintje-announcement {\n container-type: inline-size;\n border-radius: var(--radius);\n}\n.lintje-announcement__inner {\n display: flex;\n align-items: flex-start;\n gap: var(--space-2);\n padding: var(--space-3);\n}\n\n.lintje-announcement__icon {\n width: 20px; height: 20px;\n flex: none;\n display: flex; align-items: center; justify-content: center;\n color: var(--color-text-primary);\n margin-top: 1px;\n}\n.lintje-announcement__body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--space-1); }\n.lintje-announcement__content { min-width: 0; display: flex; flex-direction: column; gap: var(--space-1); }\n.lintje-announcement__title { font: var(--text-tile-title); color: var(--color-text-primary); }\n.lintje-announcement__text { font: var(--text-ui); line-height: 1.45; color: var(--color-text-primary); }\n.lintje-announcement__meta { font: var(--text-meta); color: var(--color-text-muted); }\n.lintje-announcement__link { color: var(--color-link-on-status); font-weight: 700; }\n/* The `action` slot keeps its own width: under the text, or beside it where the announcement is wide. */\n.lintje-announcement__action::slotted(*) { align-self: flex-start; }\n.lintje-announcement__media::slotted(*) { flex: none; max-width: 40%; height: auto; }\n/* Wide enough for the action beside the text, wide enough for the full margin. */\n@container (min-width: 560px) {\n .lintje-announcement__inner { padding: var(--space-4); }\n .lintje-announcement__body { flex-direction: row; align-items: center; gap: var(--space-4); }\n .lintje-
|
|
2027
|
+
}, ur = "/* The block is the container, so the inner row can take its margin from the block's own width. */\n.lintje-announcement {\n container-type: inline-size;\n border-radius: var(--radius);\n}\n.lintje-announcement__inner {\n display: flex;\n align-items: flex-start;\n gap: var(--space-2);\n padding: var(--space-3);\n}\n\n.lintje-announcement__icon {\n width: 20px; height: 20px;\n flex: none;\n display: flex; align-items: center; justify-content: center;\n color: var(--color-text-primary);\n margin-top: 1px;\n}\n.lintje-announcement__body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--space-1); }\n.lintje-announcement__lead { min-width: 0; display: flex; align-items: flex-start; gap: var(--space-2); }\n.lintje-announcement__content { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--space-1); }\n.lintje-announcement__title { font: var(--text-tile-title); color: var(--color-text-primary); }\n.lintje-announcement__text { font: var(--text-ui); line-height: 1.45; color: var(--color-text-primary); }\n.lintje-announcement__meta { font: var(--text-meta); color: var(--color-text-muted); }\n.lintje-announcement__link { color: var(--color-link-on-status); font-weight: 700; }\n/* The `action` slot keeps its own width: under the text, or beside it where the announcement is wide. */\n.lintje-announcement__action::slotted(*) { align-self: flex-start; margin-left: calc(var(--space-5) + var(--space-2)); }\n.lintje-announcement__media::slotted(*) { flex: none; max-width: 40%; height: auto; }\n/* Wide enough for the action beside the text, wide enough for the full margin. */\n@container (min-width: 560px) {\n .lintje-announcement__inner { padding: var(--space-4); }\n .lintje-announcement__body { flex-direction: row; align-items: center; gap: var(--space-4); }\n .lintje-announcement__lead { flex: 1; }\n .lintje-announcement__action::slotted(*) { align-self: center; flex: none; margin-left: 0; }\n}\n\n/* The margin pulls the button's middle in line with the icon box; the hit area reaches the target. */\n.lintje-announcement__close {\n position: relative;\n width: var(--h-icon-button); height: var(--h-icon-button); flex: none;\n display: flex; align-items: center; justify-content: center;\n --lintje-close-pull: calc((var(--space-5) - var(--h-icon-button)) / 2);\n margin: var(--lintje-close-pull) var(--lintje-close-pull) var(--lintje-close-pull) 0;\n border: 0;\n background: transparent;\n color: var(--color-text-primary);\n cursor: pointer;\n}\n.lintje-announcement__close:hover { background: var(--color-bg-subtle); }\n.lintje-announcement__close::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2));\n}\n\n.lintje-announcement--warning { background: var(--color-attention-bg); }\n.lintje-announcement--warning .lintje-announcement__icon { color: var(--color-attention-line); }\n.lintje-announcement--error { background: var(--color-error-bg); }\n.lintje-announcement--error .lintje-announcement__icon { color: var(--color-error-line); }\n.lintje-announcement--outage { background: var(--color-error-bg); }\n.lintje-announcement--outage .lintje-announcement__icon { color: var(--color-error-line); }\n.lintje-announcement--info { background: var(--color-info-bg); }\n.lintje-announcement--info .lintje-announcement__icon { color: var(--color-info-line); }\n.lintje-announcement--ok { background: var(--color-success-bg); }\n.lintje-announcement--ok .lintje-announcement__icon { color: var(--color-success-line); }\n\n@media screen and (max-width: 767px) {\n .lintje-announcement__inner { padding: var(--space-3); }\n .lintje-announcement__text { font: var(--text-small); }\n}\n\n/* Forced colours drop the fill, so the announcement takes an outline. */\n@media (forced-colors: active) {\n .lintje-announcement { outline: 1px solid CanvasText; outline-offset: -1px; }\n}\n\n@media print {\n .lintje-announcement { break-inside: avoid; }\n}\n", dr = {
|
|
2028
2028
|
warning: "attention",
|
|
2029
2029
|
outage: "error",
|
|
2030
2030
|
error: "error",
|
|
@@ -2053,7 +2053,7 @@ function hr(e) {
|
|
|
2053
2053
|
role=${n ? fr[t] : T}
|
|
2054
2054
|
>
|
|
2055
2055
|
<div class="lintje-announcement__inner">
|
|
2056
|
-
${gr(t)}
|
|
2056
|
+
${r ? C`<div class="lintje-announcement__body"><div class="lintje-announcement__lead">${gr(t)}</div></div>` : _r(t, e)}
|
|
2057
2057
|
</div>
|
|
2058
2058
|
</div>`;
|
|
2059
2059
|
}
|
|
@@ -2066,6 +2066,8 @@ function gr(e) {
|
|
|
2066
2066
|
function _r(e, t) {
|
|
2067
2067
|
let { title: n, text: r, meta: i, link: a } = t, o = C`<span class="visually-hidden">${pr[e]}: </span>`;
|
|
2068
2068
|
return C`<div class="lintje-announcement__body">
|
|
2069
|
+
<div class="lintje-announcement__lead">
|
|
2070
|
+
${gr(e)}
|
|
2069
2071
|
<div class="lintje-announcement__content">
|
|
2070
2072
|
${n ? C`<p class="lintje-announcement__title">${o}${n}</p>` : T}
|
|
2071
2073
|
${r ? C`<p class="lintje-announcement__text">${n ? T : o}${r}</p>` : T}
|
|
@@ -2073,6 +2075,7 @@ function _r(e, t) {
|
|
|
2073
2075
|
${i ?? T}${i && a ? " · " : T}${a ? C`<a class="lintje-announcement__link" href=${a.href}>${a.label}</a>` : T}
|
|
2074
2076
|
</p>` : T}
|
|
2075
2077
|
</div>
|
|
2078
|
+
</div>
|
|
2076
2079
|
${t.action ?? T}
|
|
2077
2080
|
</div>
|
|
2078
2081
|
${t.media ?? T}
|
|
@@ -2086,13 +2089,13 @@ function _r(e, t) {
|
|
|
2086
2089
|
</button>` : T}`;
|
|
2087
2090
|
}
|
|
2088
2091
|
//#endregion
|
|
2089
|
-
//#region src/
|
|
2092
|
+
//#region src/components/shared/length.ts
|
|
2090
2093
|
var vr = /^-?\d+(?:\.\d+)?$/;
|
|
2091
2094
|
function yr(e) {
|
|
2092
2095
|
if (e !== void 0) return typeof e == "number" || vr.test(e) ? `${e}px` : e;
|
|
2093
2096
|
}
|
|
2094
2097
|
//#endregion
|
|
2095
|
-
//#region src/
|
|
2098
|
+
//#region src/components/actions/icon-button/icon-button.ts
|
|
2096
2099
|
var br = class extends j {
|
|
2097
2100
|
static {
|
|
2098
2101
|
this.styles = [
|
|
@@ -2165,7 +2168,7 @@ var br = class extends j {
|
|
|
2165
2168
|
};
|
|
2166
2169
|
M("lintje-icon-button", br);
|
|
2167
2170
|
//#endregion
|
|
2168
|
-
//#region src/
|
|
2171
|
+
//#region src/components/feedback/status-dot/status-dot.css?inline
|
|
2169
2172
|
var xr = ":host { display: inline-flex; vertical-align: middle; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-status { display: inline-flex; align-items: center; gap: var(--space-2); font: var(--text-small); }\n.lintje-status__dot { border-radius: var(--radius-round); flex: none; display: block; }\n.lintje-status__dot--success { background: var(--color-success); }\n.lintje-status__dot--warning { background: var(--color-warning); }\n.lintje-status__dot--attention { background: var(--color-attention); }\n.lintje-status__dot--error { background: var(--color-error); }\n.lintje-status__dot--info { background: var(--color-info); }\n.lintje-status__dot--busy { background: var(--color-action-primary); }\n.lintje-status__dot--neutral { background: var(--color-text-muted); }\n.lintje-status__dot--subtle { background: var(--color-text-muted); }\n.lintje-status__dot--live { background: var(--color-error); }\n\n/* Forced colours: the dot's fill is dropped, so it keeps its drawing as one CanvasText dot. */\n@media (forced-colors: active) {\n .lintje-status__dot { forced-color-adjust: none; background: CanvasText; }\n}\n", Sr = {
|
|
2170
2173
|
complete: "success",
|
|
2171
2174
|
delayed: "warning",
|
|
@@ -2209,7 +2212,7 @@ var xr = ":host { display: inline-flex; vertical-align: middle; }\n:host([hidden
|
|
|
2209
2212
|
};
|
|
2210
2213
|
M("lintje-status-dot", wr);
|
|
2211
2214
|
//#endregion
|
|
2212
|
-
//#region src/
|
|
2215
|
+
//#region src/components/feedback/skeleton/skeleton.css?inline
|
|
2213
2216
|
var Tr = "/* The size is on the host so a percentage has a box to resolve against. */\n:host { display: block; }\n:host(lintje-skeleton) .lintje-skeleton { width: 100%; height: 100%; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-skeleton {\n display: block;\n background: linear-gradient(90deg,\n var(--color-bg-subtle) 25%,\n var(--color-border-default) 37%,\n var(--color-bg-subtle) 63%);\n background-size: 200% 100%;\n animation: lintje-shimmer var(--dur-skeleton) linear infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .lintje-skeleton { animation: none; background: var(--color-bg-subtle); }\n}\n\n/* Forced colours: the gradient is dropped, so the placeholder keeps a 1 px GrayText line. */\n@media (forced-colors: active) {\n .lintje-skeleton { outline: 1px solid GrayText; outline-offset: -1px; }\n}\n", Er = class extends j {
|
|
2214
2217
|
constructor(...e) {
|
|
2215
2218
|
super(...e), this.width = "100%", this.height = 12;
|
|
@@ -2232,7 +2235,7 @@ var Tr = "/* The size is on the host so a percentage has a box to resolve agains
|
|
|
2232
2235
|
};
|
|
2233
2236
|
M("lintje-skeleton", Er);
|
|
2234
2237
|
//#endregion
|
|
2235
|
-
//#region src/
|
|
2238
|
+
//#region src/components/shared/empty-state-block.ts
|
|
2236
2239
|
var Dr = A(".lintje-empty-state {\n display: flex; flex-direction: column; align-items: center;\n gap: var(--space-2);\n padding: var(--space-8) var(--space-4);\n text-align: center;\n font: var(--text-ui);\n color: var(--color-text-primary);\n}\n.lintje-empty-state__icon { color: var(--color-text-muted); }\n.lintje-empty-state__heading {\n margin: var(--space-1) 0 0;\n font: var(--text-tile-title);\n color: var(--color-text-primary);\n}\n.lintje-empty-state__text {\n max-width: 280px;\n margin: 0;\n color: var(--color-text-muted);\n}\n.lintje-empty-state__action { margin-top: var(--space-2); }\n\n.lintje-empty-state--compact {\n display: block;\n padding: var(--space-4);\n text-align: left;\n color: var(--color-text-muted);\n}\n\n/* Phone: the action runs the full width. */\n@media screen and (max-width: 767px) {\n .lintje-empty-state:not(.lintje-empty-state--compact) .lintje-empty-state__action {\n align-self: stretch;\n }\n}\n");
|
|
2237
2240
|
function Or(e, t) {
|
|
2238
2241
|
switch (t) {
|
|
@@ -2263,7 +2266,7 @@ function Ar(e) {
|
|
|
2263
2266
|
</div>`}`;
|
|
2264
2267
|
}
|
|
2265
2268
|
//#endregion
|
|
2266
|
-
//#region src/
|
|
2269
|
+
//#region src/components/layout/tile/tile.css?inline
|
|
2267
2270
|
var jr = "/*\n * Above the divider: the host, the grid item the tile fills by its height or, when the host has\n * only a floor, by `min-height: inherit`. Below it: the block's BEM CSS.\n */\n:host {\n display: block;\n min-width: 0;\n}\n:host([hidden]) { display: none; }\n.lintje-tile {\n height: 100%;\n min-height: inherit;\n}\n/* On paper a tile stays on one sheet where it fits, unless it is `breakable`. */\n@media print { :host(:not([breakable])) { break-inside: avoid; } }\n.lintje-chart-state {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n justify-content: center;\n align-items: center;\n min-width: 0;\n}\n.lintje-chart-state--empty { text-align: center; gap: var(--space-3); }\n.lintje-chart-state--empty .lintje-empty-state--compact { text-align: center; font: var(--text-small); }\n/* An announcement measures as a container, so it has no width of its own to centre by. */\n.lintje-chart-state--error { justify-content: flex-start; align-items: stretch; gap: var(--space-4); }\n.lintje-chart-state__last-known { font: var(--text-small); color: var(--color-text-muted); text-align: center; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-tile {\n display: flex;\n flex-direction: column;\n gap: 14px;\n min-width: 0;\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-default);\n border-radius: var(--radius);\n padding: var(--tile-pad-y) var(--tile-pad-x);\n}\n\n.lintje-tile__head {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: var(--space-4);\n}\n.lintje-tile__heading { min-width: 0; }\n/* With an icon the heading becomes two columns, which centres the icon on the title's line and\n keeps the subtitle under the title text. */\n.lintje-tile__heading--icon {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr);\n}\n/* Only the placement is the tile's; the alignment is `.lintje-leading-icon`. */\n.lintje-tile__icon { grid-row: 1; }\n.lintje-tile__heading--icon .lintje-tile__title,\n.lintje-tile__heading--icon .lintje-tile__sub { grid-column: 2; }\n.lintje-tile__title { font: var(--text-tile-title); color: var(--color-text-primary); }\n.lintje-tile__sub { font: var(--text-tile-sub); color: var(--color-text-muted); margin-top: 2px; }\n/* The actions are 40 px icon buttons beside a title of one line: they stand out above and below\n it, so the head is the title's height and a tile without a subtitle keeps no empty band. */\n.lintje-tile__actions {\n display: flex; gap: var(--space-2); flex: none;\n margin-block: calc(var(--space-2) * -1);\n}\n/* Expand and download appear only while the tile is hovered or holds keyboard focus; without\n hover they stay visible. The tile only hides the action; how the visible action looks is the\n icon button's own. */\n.lintje-tile:not(:hover):not(:focus-within) lintje-icon-button[variant='tile'] { opacity: 0; }\n@media (hover: none) {\n .lintje-tile:not(:hover):not(:focus-within) lintje-icon-button[variant='tile'] { opacity: 1; }\n}\n\n.lintje-tile__intro { font: var(--text-small); color: var(--color-text-secondary); }\n\n/* Body and content are flex columns, so slotted content can place itself in a taller tile. */\n.lintje-tile__body { flex: 1; min-height: 0; min-width: 0; display: flex; flex-direction: column; }\n.lintje-tile__content { flex: 1; min-height: 0; display: flex; flex-direction: column; }\n/* A tile with a height of its own scrolls what does not fit (`content-scroll`). */\n:host([content-scroll]) .lintje-tile__content { overflow: auto; }\n.lintje-tile__body--aside { flex-direction: row; gap: var(--space-5); align-items: stretch; }\n.lintje-tile__body--aside .lintje-tile__content { flex: 1; min-width: 0; }\n.lintje-tile__aside { flex: none; display: flex; flex-direction: column; justify-content: center; }\n/* On a phone the content keeps its full width and the key figure leads above it. */\n@media screen and (max-width: 767px) {\n .lintje-tile__body--aside { flex-direction: column; }\n}\n\n.lintje-tile__footnote {\n font: var(--text-meta);\n color: var(--color-text-muted);\n border-top: 1px solid var(--color-border-default);\n padding-top: var(--space-2);\n margin-top: auto;\n}\n\n/* Flush: the rows' lines reach the frame, and what they draw keeps the heading's indent through\n --lintje-inset, as does a pager under them. The last row's line is the footnote's rule. */\n.lintje-tile--flush .lintje-tile__body {\n margin-inline: calc(var(--tile-pad-x) * -1);\n --lintje-inset: var(--tile-pad-x);\n}\n.lintje-tile--flush .lintje-tile__footnote { border-top: 0; padding-top: 0; }\n/* Without a footnote the last row's line is the frame's: no empty strip under it. A pager under\n the rows gives the strip back through --lintje-inset-end. */\n.lintje-tile--flush:has(> .lintje-tile__footnote[hidden]) > .lintje-tile__body {\n margin-bottom: calc(var(--tile-pad-y) * -1 - 1px);\n --lintje-inset-end: calc(var(--tile-pad-y) + 1px);\n}\n\n/* Enlarging and downloading are for the screen. A tile split over two sheets is a block:\n Chromium sizes a flex column that breaks too short, and what follows overlaps its rows. */\n@media print {\n .lintje-tile__actions { display: none; }\n :host([breakable]) .lintje-tile { display: block; }\n :host([breakable]) .lintje-tile > :not(:first-child) { margin-top: 14px; }\n}\n", Mr = "Gegevens laden…", Nr = class e extends lr {
|
|
2268
2271
|
constructor(...e) {
|
|
2269
2272
|
super(...e), this.footnoteSlotted = !1, this.asideSlotted = !1, this.legendBelow = !1, this.expandable = !1, this.download = !1, this.state = "ready", this.contentHeight = "var(--chart-h-main)", this.contentScroll = !1, this.flush = !1, this.breakable = !1, this.filled = null, this.#e = 0;
|
|
@@ -2437,7 +2440,7 @@ var jr = "/*\n * Above the divider: the host, the grid item the tile fills by it
|
|
|
2437
2440
|
};
|
|
2438
2441
|
M("lintje-tile", Nr);
|
|
2439
2442
|
//#endregion
|
|
2440
|
-
//#region src/
|
|
2443
|
+
//#region src/components/layout/grid/grid.css?inline
|
|
2441
2444
|
var Pr = "/*\n * Written with `:host(…)` and `::slotted()`: a selector from outside cannot reach into an item's\n * own root. An item's width comes from `--lintje-span`, so a media rule can override `grid-column`.\n */\n\n/* --- The grid ------------------------------------------------------------ */\n:host {\n display: grid;\n grid-template-columns: repeat(var(--lintje-grid-columns, 12), minmax(0, 1fr));\n gap: var(--grid-gutter);\n align-items: stretch;\n}\n:host([hidden]) { display: none; }\n\n@media (min-width: 768px) and (max-width: 1023px), print and (max-width: 1023px) {\n :host([variant='kpi-row']) { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n}\n@media screen and (max-width: 767px) {\n :host { grid-template-columns: minmax(0, 1fr); }\n :host([variant='kpi-row']) { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n}\n\n/* --- Every item its column ------------------------------------------------ */\n\n::slotted([span]) {\n min-width: 0;\n grid-column: span var(--lintje-span, 1);\n}\n\n@media (min-width: 768px) and (max-width: 1023px), print and (max-width: 1023px) {\n ::slotted([span='4']) { grid-column: span 6; }\n ::slotted([span='8']) { grid-column: span 12; }\n}\n@media screen and (max-width: 767px) {\n ::slotted([span]) { grid-column: span 1; }\n}\n", Fr = class extends j {
|
|
2442
2445
|
constructor(...e) {
|
|
2443
2446
|
super(...e), this.columns = 12;
|
|
@@ -2463,7 +2466,7 @@ var Pr = "/*\n * Written with `:host(…)` and `::slotted()`: a selector from ou
|
|
|
2463
2466
|
};
|
|
2464
2467
|
M("lintje-grid", Fr);
|
|
2465
2468
|
//#endregion
|
|
2466
|
-
//#region src/
|
|
2469
|
+
//#region src/components/layout/grid-item/grid-item.ts
|
|
2467
2470
|
var Ir = class extends lr {
|
|
2468
2471
|
static {
|
|
2469
2472
|
this.styles = cr;
|
|
@@ -2493,7 +2496,7 @@ function Hr(e) {
|
|
|
2493
2496
|
Rr.delete(e), X?.unobserve(e);
|
|
2494
2497
|
}
|
|
2495
2498
|
//#endregion
|
|
2496
|
-
//#region src/
|
|
2499
|
+
//#region src/components/actions/icon/icon.css?inline
|
|
2497
2500
|
var Ur = "/* `<lintje-icon>`'s own box: the host is the flex child; the glyph inside is a plain block. */\n:host {\n display: inline-flex;\n flex: none;\n}\n:host([hidden]) { display: none; }\n.lintje-icon {\n display: block;\n}\n", Wr = Object.keys(Ft), Gr = class extends j {
|
|
2498
2501
|
constructor(...e) {
|
|
2499
2502
|
super(...e), this.size = 16, this.lazy = !1, this.#e = null, this.#t = !1;
|
|
@@ -2556,13 +2559,103 @@ function Jr() {
|
|
|
2556
2559
|
return typeof matchMedia < "u" && matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
2557
2560
|
}
|
|
2558
2561
|
//#endregion
|
|
2559
|
-
//#region
|
|
2560
|
-
var Yr =
|
|
2562
|
+
//#region node_modules/lit-html/directives/repeat.js
|
|
2563
|
+
var Yr = (e, t, n) => {
|
|
2564
|
+
let r = /* @__PURE__ */ new Map();
|
|
2565
|
+
for (let i = t; i <= n; i++) r.set(e[i], i);
|
|
2566
|
+
return r;
|
|
2567
|
+
}, Xr = R(class extends z {
|
|
2568
|
+
constructor(e) {
|
|
2569
|
+
if (super(e), e.type !== L.CHILD) throw Error("repeat() can only be used in text expressions");
|
|
2570
|
+
}
|
|
2571
|
+
dt(e, t, n) {
|
|
2572
|
+
let r;
|
|
2573
|
+
n === void 0 ? n = t : t !== void 0 && (r = t);
|
|
2574
|
+
let i = [], a = [], o = 0;
|
|
2575
|
+
for (let t of e) i[o] = r ? r(t, o) : o, a[o] = n(t, o), o++;
|
|
2576
|
+
return {
|
|
2577
|
+
values: a,
|
|
2578
|
+
keys: i
|
|
2579
|
+
};
|
|
2580
|
+
}
|
|
2581
|
+
render(e, t, n) {
|
|
2582
|
+
return this.dt(e, t, n).values;
|
|
2583
|
+
}
|
|
2584
|
+
update(e, [t, n, r]) {
|
|
2585
|
+
let i = Bn(e), { values: a, keys: o } = this.dt(t, n, r);
|
|
2586
|
+
if (!Array.isArray(i)) return this.ut = o, a;
|
|
2587
|
+
let s = this.ut ??= [], c = [], l, u, d = 0, f = i.length - 1, p = 0, m = a.length - 1;
|
|
2588
|
+
for (; d <= f && p <= m;) if (i[d] === null) d++;
|
|
2589
|
+
else if (i[f] === null) f--;
|
|
2590
|
+
else if (s[d] === o[p]) c[p] = Y(i[d], a[p]), d++, p++;
|
|
2591
|
+
else if (s[f] === o[m]) c[m] = Y(i[f], a[m]), f--, m--;
|
|
2592
|
+
else if (s[d] === o[m]) c[m] = Y(i[d], a[m]), J(e, c[m + 1], i[d]), d++, m--;
|
|
2593
|
+
else if (s[f] === o[p]) c[p] = Y(i[f], a[p]), J(e, i[d], i[f]), f--, p++;
|
|
2594
|
+
else if (l === void 0 && (l = Yr(o, p, m), u = Yr(s, d, f)), l.has(s[d])) {
|
|
2595
|
+
if (l.has(s[f])) {
|
|
2596
|
+
let t = u.get(o[p]), n = t === void 0 ? null : i[t];
|
|
2597
|
+
if (n === null) {
|
|
2598
|
+
let t = J(e, i[d]);
|
|
2599
|
+
Y(t, a[p]), c[p] = t;
|
|
2600
|
+
} else c[p] = Y(n, a[p]), J(e, i[d], n), i[t] = null;
|
|
2601
|
+
p++;
|
|
2602
|
+
} else Vn(i[f]), f--;
|
|
2603
|
+
} else Vn(i[d]), d++;
|
|
2604
|
+
for (; p <= m;) {
|
|
2605
|
+
let t = J(e, c[m + 1]);
|
|
2606
|
+
Y(t, a[p]), c[p++] = t;
|
|
2607
|
+
}
|
|
2608
|
+
for (; d <= f;) {
|
|
2609
|
+
let e = i[d++];
|
|
2610
|
+
e !== null && Vn(e);
|
|
2611
|
+
}
|
|
2612
|
+
return this.ut = o, zn(e, c), w;
|
|
2613
|
+
}
|
|
2614
|
+
});
|
|
2615
|
+
//#endregion
|
|
2616
|
+
//#region src/core/format.ts
|
|
2617
|
+
function Z(e, t = 0) {
|
|
2618
|
+
return e.toLocaleString("nl-NL", {
|
|
2619
|
+
minimumFractionDigits: t,
|
|
2620
|
+
maximumFractionDigits: t
|
|
2621
|
+
});
|
|
2622
|
+
}
|
|
2623
|
+
function Zr(e) {
|
|
2624
|
+
return Math.abs(e) >= 1e6 ? `${Z(e / 1e6, 1)} mln` : Math.abs(e) >= 1e4 ? `${Math.round(e / 1e3)}k` : Z(e);
|
|
2625
|
+
}
|
|
2626
|
+
function Qr(e, t) {
|
|
2627
|
+
let n = Z(e);
|
|
2628
|
+
return ei(n, t) ? n : Zr(e);
|
|
2629
|
+
}
|
|
2630
|
+
var $r = 6.5;
|
|
2631
|
+
function ei(e, t) {
|
|
2632
|
+
return e.length * $r <= t;
|
|
2633
|
+
}
|
|
2634
|
+
var ti = "'RijksSans', 'Source Sans 3', sans-serif", Q;
|
|
2635
|
+
function ni(e, t, n = "") {
|
|
2636
|
+
if (ri(e, n) <= t) return e;
|
|
2637
|
+
let r = e.length;
|
|
2638
|
+
for (; r > 1;) {
|
|
2639
|
+
--r;
|
|
2640
|
+
let i = `${e.slice(0, r).trimEnd()}…`;
|
|
2641
|
+
if (ri(i, n) <= t) return i;
|
|
2642
|
+
}
|
|
2643
|
+
return "…";
|
|
2644
|
+
}
|
|
2645
|
+
function ri(e, t = "", n = 400) {
|
|
2646
|
+
return Q === void 0 && (Q = typeof document > "u" ? null : document.createElement("canvas").getContext("2d") ?? null), Q ? (Q.font = `${n} 12px ${t.trim() || ti}`, Q.measureText(e).width) : e.length * $r;
|
|
2647
|
+
}
|
|
2648
|
+
function ii(e, t = 0) {
|
|
2649
|
+
return `${Z(e, t)}%`;
|
|
2650
|
+
}
|
|
2651
|
+
//#endregion
|
|
2652
|
+
//#region src/components/feedback/progress-bar/progress-bar.css?inline
|
|
2653
|
+
var ai = ":host { display: block; min-width: 0; }\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-progress { display: flex; flex-direction: column; gap: var(--space-2); min-width: 0; }\n.lintje-progress__head {\n display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between;\n gap: var(--space-1) var(--space-4);\n font: var(--text-small);\n}\n.lintje-progress__label { font-weight: 700; color: var(--color-text-primary); }\n.lintje-progress__detail { color: var(--color-text-muted); }\n.lintje-progress__mark { margin-right: var(--space-1); vertical-align: -0.125em; }\n.lintje-progress--done .lintje-progress__mark { color: var(--color-success-line); }\n.lintje-progress--error .lintje-progress__mark { color: var(--color-error-line); }\n.lintje-progress--paused .lintje-progress__mark { color: var(--color-text-muted); }\n\n/* The accent LINE, not the fill colour, keeps 3:1 on the dark surface. */\n.lintje-progress__track { height: 6px; background: var(--color-border-default); overflow: hidden; }\n.lintje-progress__fill {\n height: 100%;\n background: var(--color-accent-line);\n transition: width var(--dur-base) var(--ease-in-motion);\n}\n\n.lintje-progress--done .lintje-progress__fill { background: var(--color-success); }\n.lintje-progress--error .lintje-progress__fill { background: var(--color-error); }\n.lintje-progress--error .lintje-progress__label { color: var(--color-error-text); }\n.lintje-progress--paused .lintje-progress__fill { background: var(--color-text-muted); }\n\n.lintje-progress__track.is-indeterminate .lintje-progress__fill {\n width: 30%;\n animation: lintje-progress-slide var(--dur-skeleton) linear infinite alternate;\n}\n@keyframes lintje-progress-slide {\n from { margin-left: 0; }\n to { margin-left: 70%; }\n}\n@media (prefers-reduced-motion: reduce) {\n .lintje-progress__fill { transition: none; }\n .lintje-progress__track.is-indeterminate .lintje-progress__fill { animation: none; margin-left: 35%; }\n}\n\n/* Forced colours: the browser drops fills, so the track keeps a CanvasText edge and the fill\n draws as Highlight. */\n@media (forced-colors: active) {\n .lintje-progress__track { outline: 1px solid CanvasText; outline-offset: -1px; }\n .lintje-progress__fill { forced-color-adjust: none; background: Highlight; }\n}\n", oi = class extends j {
|
|
2561
2654
|
constructor(...e) {
|
|
2562
2655
|
super(...e), this.label = "", this.hideLabel = !1, this.state = "busy";
|
|
2563
2656
|
}
|
|
2564
2657
|
static {
|
|
2565
|
-
this.styles = [G, A(
|
|
2658
|
+
this.styles = [G, A(ai)];
|
|
2566
2659
|
}
|
|
2567
2660
|
static {
|
|
2568
2661
|
this.properties = {
|
|
@@ -2629,61 +2722,10 @@ var Yr = ":host { display: block; min-width: 0; }\n:host([hidden]) { display: no
|
|
|
2629
2722
|
</div>`;
|
|
2630
2723
|
}
|
|
2631
2724
|
};
|
|
2632
|
-
M("lintje-progress-bar",
|
|
2725
|
+
M("lintje-progress-bar", oi);
|
|
2633
2726
|
//#endregion
|
|
2634
|
-
//#region node_modules/lit-html/directives/
|
|
2635
|
-
var
|
|
2636
|
-
let r = /* @__PURE__ */ new Map();
|
|
2637
|
-
for (let i = t; i <= n; i++) r.set(e[i], i);
|
|
2638
|
-
return r;
|
|
2639
|
-
}, Qr = R(class extends z {
|
|
2640
|
-
constructor(e) {
|
|
2641
|
-
if (super(e), e.type !== L.CHILD) throw Error("repeat() can only be used in text expressions");
|
|
2642
|
-
}
|
|
2643
|
-
dt(e, t, n) {
|
|
2644
|
-
let r;
|
|
2645
|
-
n === void 0 ? n = t : t !== void 0 && (r = t);
|
|
2646
|
-
let i = [], a = [], o = 0;
|
|
2647
|
-
for (let t of e) i[o] = r ? r(t, o) : o, a[o] = n(t, o), o++;
|
|
2648
|
-
return {
|
|
2649
|
-
values: a,
|
|
2650
|
-
keys: i
|
|
2651
|
-
};
|
|
2652
|
-
}
|
|
2653
|
-
render(e, t, n) {
|
|
2654
|
-
return this.dt(e, t, n).values;
|
|
2655
|
-
}
|
|
2656
|
-
update(e, [t, n, r]) {
|
|
2657
|
-
let i = Bn(e), { values: a, keys: o } = this.dt(t, n, r);
|
|
2658
|
-
if (!Array.isArray(i)) return this.ut = o, a;
|
|
2659
|
-
let s = this.ut ??= [], c = [], l, u, d = 0, f = i.length - 1, p = 0, m = a.length - 1;
|
|
2660
|
-
for (; d <= f && p <= m;) if (i[d] === null) d++;
|
|
2661
|
-
else if (i[f] === null) f--;
|
|
2662
|
-
else if (s[d] === o[p]) c[p] = Y(i[d], a[p]), d++, p++;
|
|
2663
|
-
else if (s[f] === o[m]) c[m] = Y(i[f], a[m]), f--, m--;
|
|
2664
|
-
else if (s[d] === o[m]) c[m] = Y(i[d], a[m]), J(e, c[m + 1], i[d]), d++, m--;
|
|
2665
|
-
else if (s[f] === o[p]) c[p] = Y(i[f], a[p]), J(e, i[d], i[f]), f--, p++;
|
|
2666
|
-
else if (l === void 0 && (l = Zr(o, p, m), u = Zr(s, d, f)), l.has(s[d])) {
|
|
2667
|
-
if (l.has(s[f])) {
|
|
2668
|
-
let t = u.get(o[p]), n = t === void 0 ? null : i[t];
|
|
2669
|
-
if (n === null) {
|
|
2670
|
-
let t = J(e, i[d]);
|
|
2671
|
-
Y(t, a[p]), c[p] = t;
|
|
2672
|
-
} else c[p] = Y(n, a[p]), J(e, i[d], n), i[t] = null;
|
|
2673
|
-
p++;
|
|
2674
|
-
} else Vn(i[f]), f--;
|
|
2675
|
-
} else Vn(i[d]), d++;
|
|
2676
|
-
for (; p <= m;) {
|
|
2677
|
-
let t = J(e, c[m + 1]);
|
|
2678
|
-
Y(t, a[p]), c[p++] = t;
|
|
2679
|
-
}
|
|
2680
|
-
for (; d <= f;) {
|
|
2681
|
-
let e = i[d++];
|
|
2682
|
-
e !== null && Vn(e);
|
|
2683
|
-
}
|
|
2684
|
-
return this.ut = o, zn(e, c), w;
|
|
2685
|
-
}
|
|
2686
|
-
}), $r = R(class extends z {
|
|
2727
|
+
//#region node_modules/lit-html/directives/live.js
|
|
2728
|
+
var si = R(class extends z {
|
|
2687
2729
|
constructor(e) {
|
|
2688
2730
|
if (super(e), e.type !== L.PROPERTY && e.type !== L.ATTRIBUTE && e.type !== L.BOOLEAN_ATTRIBUTE) throw Error("The `live` directive is not allowed on child or event bindings");
|
|
2689
2731
|
if (!In(e)) throw Error("`live` bindings can only contain a single expression");
|
|
@@ -2701,48 +2743,48 @@ var Zr = (e, t, n) => {
|
|
|
2701
2743
|
} else if (e.type === L.ATTRIBUTE && n.getAttribute(r) === t + "") return w;
|
|
2702
2744
|
return zn(e), t;
|
|
2703
2745
|
}
|
|
2704
|
-
}),
|
|
2746
|
+
}), $ = (e, t) => {
|
|
2705
2747
|
let n = e._$AN;
|
|
2706
2748
|
if (n === void 0) return !1;
|
|
2707
|
-
for (let e of n) e._$AO?.(t, !1),
|
|
2749
|
+
for (let e of n) e._$AO?.(t, !1), $(e, t);
|
|
2708
2750
|
return !0;
|
|
2709
|
-
},
|
|
2751
|
+
}, ci = (e) => {
|
|
2710
2752
|
let t, n;
|
|
2711
2753
|
do {
|
|
2712
2754
|
if ((t = e._$AM) === void 0) break;
|
|
2713
2755
|
n = t._$AN, n.delete(e), e = t;
|
|
2714
2756
|
} while (n?.size === 0);
|
|
2715
|
-
},
|
|
2757
|
+
}, li = (e) => {
|
|
2716
2758
|
for (let t; t = e._$AM; e = t) {
|
|
2717
2759
|
let n = t._$AN;
|
|
2718
2760
|
if (n === void 0) t._$AN = n = /* @__PURE__ */ new Set();
|
|
2719
2761
|
else if (n.has(e)) break;
|
|
2720
|
-
n.add(e),
|
|
2762
|
+
n.add(e), fi(t);
|
|
2721
2763
|
}
|
|
2722
2764
|
};
|
|
2723
|
-
function
|
|
2724
|
-
this._$AN === void 0 ? this._$AM = e : (
|
|
2765
|
+
function ui(e) {
|
|
2766
|
+
this._$AN === void 0 ? this._$AM = e : (ci(this), this._$AM = e, li(this));
|
|
2725
2767
|
}
|
|
2726
|
-
function
|
|
2768
|
+
function di(e, t = !1, n = 0) {
|
|
2727
2769
|
let r = this._$AH, i = this._$AN;
|
|
2728
2770
|
if (i !== void 0 && i.size !== 0) {
|
|
2729
2771
|
if (t) {
|
|
2730
|
-
if (Array.isArray(r)) for (let e = n; e < r.length; e++)
|
|
2731
|
-
else r != null && (
|
|
2732
|
-
} else
|
|
2772
|
+
if (Array.isArray(r)) for (let e = n; e < r.length; e++) $(r[e], !1), ci(r[e]);
|
|
2773
|
+
else r != null && ($(r, !1), ci(r));
|
|
2774
|
+
} else $(this, e);
|
|
2733
2775
|
}
|
|
2734
2776
|
}
|
|
2735
|
-
var
|
|
2736
|
-
e.type == L.CHILD && (e._$AP ??=
|
|
2737
|
-
},
|
|
2777
|
+
var fi = (e) => {
|
|
2778
|
+
e.type == L.CHILD && (e._$AP ??= di, e._$AQ ??= ui);
|
|
2779
|
+
}, pi = class extends z {
|
|
2738
2780
|
constructor() {
|
|
2739
2781
|
super(...arguments), this._$AN = void 0;
|
|
2740
2782
|
}
|
|
2741
2783
|
_$AT(e, t, n) {
|
|
2742
|
-
super._$AT(e, t, n),
|
|
2784
|
+
super._$AT(e, t, n), li(this), this.isConnected = e._$AU;
|
|
2743
2785
|
}
|
|
2744
2786
|
_$AO(e, t = !0) {
|
|
2745
|
-
e !== this.isConnected && (this.isConnected = e, e ? this.reconnected?.() : this.disconnected?.()), t && (
|
|
2787
|
+
e !== this.isConnected && (this.isConnected = e, e ? this.reconnected?.() : this.disconnected?.()), t && ($(this, e), ci(this));
|
|
2746
2788
|
}
|
|
2747
2789
|
setValue(e) {
|
|
2748
2790
|
if (In(this._$Ct)) this._$Ct._$AI(e, this);
|
|
@@ -2753,7 +2795,7 @@ var ii = (e) => {
|
|
|
2753
2795
|
}
|
|
2754
2796
|
disconnected() {}
|
|
2755
2797
|
reconnected() {}
|
|
2756
|
-
},
|
|
2798
|
+
}, mi = /* @__PURE__ */ new WeakMap(), hi = R(class extends pi {
|
|
2757
2799
|
render(e) {
|
|
2758
2800
|
return T;
|
|
2759
2801
|
}
|
|
@@ -2764,13 +2806,13 @@ var ii = (e) => {
|
|
|
2764
2806
|
rt(e) {
|
|
2765
2807
|
if (this.G !== void 0) {
|
|
2766
2808
|
if (this.isConnected || (e = void 0), typeof this.G == "function") {
|
|
2767
|
-
let t = this.ht ?? globalThis, n =
|
|
2768
|
-
n === void 0 && (n = /* @__PURE__ */ new WeakMap(),
|
|
2809
|
+
let t = this.ht ?? globalThis, n = mi.get(t);
|
|
2810
|
+
n === void 0 && (n = /* @__PURE__ */ new WeakMap(), mi.set(t, n)), n.get(this.G) !== void 0 && this.G.call(this.ht, void 0), n.set(this.G, e), e !== void 0 && this.G.call(this.ht, e);
|
|
2769
2811
|
} else this.G.value = e;
|
|
2770
2812
|
}
|
|
2771
2813
|
}
|
|
2772
2814
|
get lt() {
|
|
2773
|
-
return typeof this.G == "function" ?
|
|
2815
|
+
return typeof this.G == "function" ? mi.get(this.ht ?? globalThis)?.get(this.G) : this.G?.value;
|
|
2774
2816
|
}
|
|
2775
2817
|
disconnected() {
|
|
2776
2818
|
this.lt === this.ct && this.rt(void 0);
|
|
@@ -2778,55 +2820,19 @@ var ii = (e) => {
|
|
|
2778
2820
|
reconnected() {
|
|
2779
2821
|
this.rt(this.ct);
|
|
2780
2822
|
}
|
|
2781
|
-
}),
|
|
2782
|
-
function
|
|
2783
|
-
for (let e of
|
|
2784
|
-
}
|
|
2785
|
-
function di(e) {
|
|
2786
|
-
return !li && typeof window < "u" && (window.addEventListener("beforeprint", ui), li = !0), ci.add(e), () => ci.delete(e);
|
|
2787
|
-
}
|
|
2788
|
-
var fi = /* @__PURE__ */ new Set(), pi = null;
|
|
2789
|
-
function mi(e) {
|
|
2790
|
-
for (let t of fi) t(e.matches);
|
|
2823
|
+
}), gi = /* @__PURE__ */ new Set(), _i = !1;
|
|
2824
|
+
function vi() {
|
|
2825
|
+
for (let e of gi) e();
|
|
2791
2826
|
}
|
|
2792
|
-
function
|
|
2793
|
-
return !
|
|
2794
|
-
}
|
|
2795
|
-
//#endregion
|
|
2796
|
-
//#region src/core/format.ts
|
|
2797
|
-
function Q(e, t = 0) {
|
|
2798
|
-
return e.toLocaleString("nl-NL", {
|
|
2799
|
-
minimumFractionDigits: t,
|
|
2800
|
-
maximumFractionDigits: t
|
|
2801
|
-
});
|
|
2802
|
-
}
|
|
2803
|
-
function gi(e) {
|
|
2804
|
-
return Math.abs(e) >= 1e6 ? `${Q(e / 1e6, 1)} mln` : Math.abs(e) >= 1e4 ? `${Math.round(e / 1e3)}k` : Q(e);
|
|
2805
|
-
}
|
|
2806
|
-
function _i(e, t) {
|
|
2807
|
-
let n = Q(e);
|
|
2808
|
-
return yi(n, t) ? n : gi(e);
|
|
2809
|
-
}
|
|
2810
|
-
var vi = 6.5;
|
|
2811
|
-
function yi(e, t) {
|
|
2812
|
-
return e.length * vi <= t;
|
|
2813
|
-
}
|
|
2814
|
-
var bi = "'RijksSans', 'Source Sans 3', sans-serif", $;
|
|
2815
|
-
function xi(e, t, n = "") {
|
|
2816
|
-
if (Si(e, n) <= t) return e;
|
|
2817
|
-
let r = e.length;
|
|
2818
|
-
for (; r > 1;) {
|
|
2819
|
-
--r;
|
|
2820
|
-
let i = `${e.slice(0, r).trimEnd()}…`;
|
|
2821
|
-
if (Si(i, n) <= t) return i;
|
|
2822
|
-
}
|
|
2823
|
-
return "…";
|
|
2827
|
+
function yi(e) {
|
|
2828
|
+
return !_i && typeof window < "u" && (window.addEventListener("beforeprint", vi), _i = !0), gi.add(e), () => gi.delete(e);
|
|
2824
2829
|
}
|
|
2825
|
-
|
|
2826
|
-
|
|
2830
|
+
var bi = /* @__PURE__ */ new Set(), xi = null;
|
|
2831
|
+
function Si(e) {
|
|
2832
|
+
for (let t of bi) t(e.matches);
|
|
2827
2833
|
}
|
|
2828
|
-
function Ci(e
|
|
2829
|
-
return
|
|
2834
|
+
function Ci(e) {
|
|
2835
|
+
return !xi && typeof matchMedia < "u" && (xi = matchMedia("print"), xi.addEventListener("change", Si)), bi.add(e), () => bi.delete(e);
|
|
2830
2836
|
}
|
|
2831
2837
|
//#endregion
|
|
2832
2838
|
//#region src/tokens/colors.ts
|
|
@@ -2856,4 +2862,4 @@ function Ei(e) {
|
|
|
2856
2862
|
return `var(--color-chart-${e})`;
|
|
2857
2863
|
}
|
|
2858
2864
|
//#endregion
|
|
2859
|
-
export { Dn as $, Ue as $t, Cr as A, Nt as At, nr as B, ht as Bt, Fr as C, R as Ct, Er as D, Pt as Dt, kr as E, Ft as Et, cr as F, _t as Ft, qn as G, et as Gt, Zn as H, lt as Ht, or as I, dt as It, An as J, j as Jt, Un as K, it as Kt, ar as L, ft as Lt, mr as M, Ct as Mt, hr as N, Mt as Nt, Tr as O, St as Ot, lr as P, gt as Pt, kn as Q, Ve as Qt, ir as R, mt as Rt, Ir as S, Lt as St, Dr as T, L as Tt, Xn as U, st as Ut, $n as V, ct as Vt, Gn as W, ot as Wt, Mn as X, We as Xt, Nn as Y, M as Yt, wn as Z, A as Zt, Kr as _, an as _t,
|
|
2865
|
+
export { Dn as $, Ue as $t, Cr as A, Nt as At, nr as B, ht as Bt, Fr as C, R as Ct, Er as D, Pt as Dt, kr as E, Ft as Et, cr as F, _t as Ft, qn as G, et as Gt, Zn as H, lt as Ht, or as I, dt as It, An as J, j as Jt, Un as K, it as Kt, ar as L, ft as Lt, mr as M, Ct as Mt, hr as N, Mt as Nt, Tr as O, St as Ot, lr as P, gt as Pt, kn as Q, Ve as Qt, ir as R, mt as Rt, Ir as S, Lt as St, Dr as T, L as Tt, Xn as U, st as Ut, $n as V, ct as Vt, Gn as W, ot as Wt, Mn as X, We as Xt, Nn as Y, M as Yt, wn as Z, A as Zt, Kr as _, an as _t, Ci as a, e as an, _n as at, Wr as b, B as bt, oi as c, pn as ct, Qr as d, mn as dt, T as en, On as et, Z as f, nn as ft, Xr as g, rn as gt, ni as h, tn as ht, yi as i, o as in, yn as it, br as j, jt, wr as k, kt, ei as l, G as lt, ri as m, cn as mt, Ei as n, C as nn, xn as nt, hi as o, vn as ot, ii as p, en as pt, Hn as q, tt as qt, Ti as r, Ce as rn, bn as rt, si as s, q as st, wi as t, Ie as tn, Cn as tt, Zr as u, K as ut, qr as v, sn as vt, Nr as w, z as wt, Gr as x, zt as xt, Jr as y, $t as yt, tr as z, pt as zt };
|