@blukavantui/charts-community 1.0.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/LICENSE.txt +0 -2
  2. package/README.md +75 -70
  3. package/dist/bar.js +1 -1
  4. package/dist/browser/charts-community.css +1 -1
  5. package/dist/browser/charts-community.js +17 -17
  6. package/dist/build-audit.json +129 -84
  7. package/dist/catalogue-runtime.d.ts +13 -1
  8. package/dist/chunk-2GUWWKHW.js +1 -0
  9. package/dist/chunk-3PITHTEO.js +1 -0
  10. package/dist/chunk-4B5MQ6GZ.js +1 -0
  11. package/dist/chunk-4EQMOBBN.js +1 -0
  12. package/dist/chunk-4WDZUJDS.js +1 -0
  13. package/dist/chunk-5NUOOMHV.js +1 -0
  14. package/dist/chunk-7OCMRHIH.js +1 -0
  15. package/dist/chunk-CF5Q2DDP.js +1 -0
  16. package/dist/chunk-EITBQBN2.js +1 -0
  17. package/dist/chunk-FXNKAHRG.js +1 -0
  18. package/dist/chunk-IDMAFTWV.js +1 -0
  19. package/dist/chunk-ILTENI35.js +1 -0
  20. package/dist/chunk-KRMM7EWI.js +1 -0
  21. package/dist/chunk-LUUPBBD4.js +1 -0
  22. package/dist/chunk-MR5VITXX.js +1 -0
  23. package/dist/chunk-NASBRHIW.js +1 -0
  24. package/dist/chunk-NXDBBMF5.js +1 -0
  25. package/dist/chunk-OQ6MP7PY.js +1 -0
  26. package/dist/{chunk-QETOF22L.js → chunk-RC2TCMJF.js} +1 -1
  27. package/dist/{chunk-MSZ5J5WG.js → chunk-RXOGAN23.js} +1 -1
  28. package/dist/chunk-UGXWOWAG.js +2 -0
  29. package/dist/chunk-UO2KNHTU.js +2 -0
  30. package/dist/chunk-UQMMBG26.js +3 -0
  31. package/dist/chunk-VTJ4XPRV.js +1 -0
  32. package/dist/chunk-WJ3UHH6J.js +1 -0
  33. package/dist/chunk-XLJUSNGV.js +1 -0
  34. package/dist/doughnut.js +1 -1
  35. package/dist/heatmap.js +1 -1
  36. package/dist/index.js +1 -1
  37. package/dist/line.js +1 -1
  38. package/dist/motion/bar.css +1 -0
  39. package/dist/motion/bar.d.ts +8 -0
  40. package/dist/motion/bar.js +1 -0
  41. package/dist/motion/doughnut.css +1 -0
  42. package/dist/motion/doughnut.d.ts +8 -0
  43. package/dist/motion/doughnut.js +1 -0
  44. package/dist/motion/heatmap.css +1 -0
  45. package/dist/motion/heatmap.d.ts +7 -0
  46. package/dist/motion/heatmap.js +1 -0
  47. package/dist/motion/line.css +1 -0
  48. package/dist/motion/line.d.ts +8 -0
  49. package/dist/motion/line.js +1 -0
  50. package/dist/motion/pie.css +1 -0
  51. package/dist/motion/pie.d.ts +8 -0
  52. package/dist/motion/pie.js +1 -0
  53. package/dist/motion/radar.css +1 -0
  54. package/dist/motion/radar.d.ts +8 -0
  55. package/dist/motion/radar.js +1 -0
  56. package/dist/motion/scatter.css +1 -0
  57. package/dist/motion/scatter.d.ts +8 -0
  58. package/dist/motion/scatter.js +1 -0
  59. package/dist/motion/sparkline.d.ts +7 -0
  60. package/dist/motion/sparkline.js +1 -0
  61. package/dist/motion-collection.d.ts +7 -0
  62. package/dist/motion-community.d.ts +40 -0
  63. package/dist/motion-policy.d.ts +14 -0
  64. package/dist/motion.css +1 -0
  65. package/dist/motion.d.ts +40 -0
  66. package/dist/motion.js +1 -0
  67. package/dist/pie.js +1 -1
  68. package/dist/radar.js +1 -1
  69. package/dist/scatter.js +1 -1
  70. package/dist/sparkline.js +1 -1
  71. package/dist/styles.css +8 -0
  72. package/dist/web-api.json +162 -2
  73. package/dist/web-motion-sparkline.d.ts +4 -0
  74. package/edition.json +1 -1
  75. package/package.json +40 -33
  76. package/src/catalogue-runtime.ts +49 -5
  77. package/src/motion/bar.ts +15 -0
  78. package/src/motion/doughnut.ts +14 -0
  79. package/src/motion/heatmap.ts +14 -0
  80. package/src/motion/line.ts +15 -0
  81. package/src/motion/pie.ts +14 -0
  82. package/src/motion/radar.ts +15 -0
  83. package/src/motion/scatter.ts +15 -0
  84. package/src/motion/sparkline.ts +10 -0
  85. package/src/motion-collection.ts +20 -0
  86. package/src/motion-community.ts +22 -0
  87. package/src/motion-policy.ts +36 -0
  88. package/src/web-motion-sparkline.ts +37 -0
  89. package/dist/chunk-5NXLEMCV.js +0 -3
  90. package/dist/chunk-FHHQWCUO.js +0 -1
  91. package/dist/chunk-FZ7J7BEC.js +0 -1
  92. package/dist/chunk-JNSBTZUP.js +0 -2
  93. package/dist/chunk-KCW3WN5P.js +0 -1
  94. package/dist/chunk-QBKO4AG7.js +0 -1
  95. package/dist/chunk-QFXXWRD5.js +0 -1
  96. package/dist/chunk-YJKEV5J7.js +0 -2
  97. package/scripts/build.mjs +0 -31
  98. package/tsconfig.json +0 -16
package/LICENSE.txt CHANGED
@@ -13,8 +13,6 @@ Authorized public distribution sources are:
13
13
  - Blutek Media's official BluKavantUI website at https://blukavantui.blutekmedia.com;
14
14
  - the official @blukavantui/community package published by Blutek Media on the
15
15
  npm public registry at https://www.npmjs.com/package/@blukavantui/community;
16
- - the official @blukavantui/charts-community package published by Blutek Media on
17
- the npm public registry at https://www.npmjs.com/package/@blukavantui/charts-community;
18
16
  - Blutek Media's official Community listing on OutSystems Forge, linked from
19
17
  the official website, when that listing is published.
20
18
 
package/README.md CHANGED
@@ -1,94 +1,99 @@
1
- # BluKavantUI Charts Community
1
+ # BluKavantUI Charts 1.0
2
2
 
3
- Eight browser charts for JavaScript and TypeScript: **Sparkline, Line, Bar, Pie,
4
- Doughnut, Scatter, Radar and Heatmap**. Charts are separate from the UI library.
5
- Per-chart imports let your bundler include the chart you use; Sparkline uses SVG
6
- and does not load ECharts.
3
+ Charts ship separately from the UI library. Importing UI components does not load ECharts.
7
4
 
8
- [Documentation and demos](https://blukavantui.blutekmedia.com/charts)
9
- · [Community and Pro](https://blukavantui.blutekmedia.com/compare-editions)
10
- · [Contact](https://blutekmedia.com/contact)
5
+ - `@blukavantui/charts-community`: Sparkline, Line, Bar, Pie, Doughnut, Scatter, Radar, Heatmap.
6
+ - `@blukavantui/charts-pro`: Mixed, Nightingale, Polar, Treemap, Sankey, Funnel, GeoMap, CalendarHeatmap.
11
7
 
12
- ## Install
8
+ Charts Pro is included in the existing BluKavantUI Pro developer license, with the same key, application scope, update coverage and activation policy. It is a separate download, with no additional chart charge. It does not depend on the full UI Pro package. Shared Chip and Skeleton UI comes from Community.
13
9
 
14
- ```sh
15
- npm install @blukavantui/community@1.0.1 @blukavantui/charts-community@1.0.1
10
+ Use a per-chart import in a bundler:
11
+
12
+ ```ts
13
+ import {createLineChart} from '@blukavantui/charts-community/line';
14
+ import '@blukavantui/charts-community/theme.css'; // Once, if your app does not already load the shared theme.
15
+ import '@blukavantui/charts-community/styles.css';
16
+ const chart = createLineChart(document.querySelector<HTMLElement>('#chart')!, {
17
+ Title: 'Monthly revenue',
18
+ Categories: [{Key:'jan',Label:'Jan'},{Key:'feb',Label:'Feb'}],
19
+ Series: [{Key:'revenue',Label:'Revenue',Values:[42,58]}],
20
+ LegendStyle: 'Compact', LegendPosition: 'Bottom',
21
+ });
22
+ // chart.update(...); chart.download('png'); chart.destroy();
16
23
  ```
17
24
 
18
- The Charts package depends on Community for shared UI and on ECharts for its
19
- full-sized charts. npm installs those dependencies. TypeScript declarations are
20
- included; no separate `@types` package is required. Use a browser application
21
- with an ESM-capable bundler such as Vite. In an SSR application, import and mount
22
- the charts on the client after their host element exists.
25
+ The ESM packages share the `echarts` dependency and register only the renderers required by the chart factory you import. Bundlers can remove unused entry points. The browser files in `dist/browser` contain the entire selected edition and ECharts for script-tag use. Include `dist/styles.css` and one shared `dist/theme.css`; preserve the `fonts/` directory. GeoMap browser users also keep the adjacent `browser/maps/` folder. Built-in map JSON is fetched only when a map chart needs it; custom maps are supplied in the `GeoJSON` option.
23
26
 
24
- For an offline installation, install the official Community and Charts Community
25
- archives together. Release availability and archive links are on the website.
27
+ ```ts
28
+ import {setLicenseKey} from '@blukavantui/charts-pro/license';
29
+ await setLicenseKey(yourLicenseKey, {applicationId: 'your-licensed-application'});
30
+ ```
31
+
32
+ The shared licensing state also recognizes keys configured through `@blukavantui/pro/license`. Public web-demo license configuration belongs to the website, never these packages or downloaded examples.
26
33
 
27
- ## A line chart
34
+ The 15 ECharts-based charts retain the POC's editable data contracts, optional patterns, accessible data table and keyboard selection, theme colors, loading Skeleton, four shared legend styles and positions, and PNG/SVG export. `Height` controls the plot; external legends add space around it. Chart exports include their legend.
28
35
 
29
- Add a host to your page:
36
+ ## Build and verify
30
37
 
31
- ```html
32
- <div id="revenue-chart" style="height: 400px"></div>
38
+ ```sh
39
+ npm ci
40
+ npm run check
41
+ npm test
42
+ npm run build
43
+ npm run pack:releases
33
44
  ```
34
45
 
35
- Then use a client entry point:
46
+ `packages/community` and `packages/pro` are the independently installable npm packages. Release archives go to `releases/`. These are new Web artifacts; the original POC remains available for comparison. Web archives do not install into Service Studio. Native Community and Pro packages are separate account downloads with customer-managed IPP instructions. The native 1.0 update is prepared in `src/native` and `native-preparation`; see [Native preparation](docs/NATIVE_PREPARATION.md). Publication and deployment are separate release steps; a successful local pack does not mean the package is published on npm.
36
47
 
37
- ```ts
38
- import { createLineChart } from '@blukavantui/charts-community/line'
39
- import '@blukavantui/charts-community/theme.css'
40
- import '@blukavantui/charts-community/styles.css'
48
+ ## Web integration and release candidate
41
49
 
42
- const chart = createLineChart(document.querySelector<HTMLElement>('#revenue-chart')!, {
43
- Title: 'Monthly revenue',
44
- Categories: [{ Key: 'jan', Label: 'Jan' }, { Key: 'feb', Label: 'Feb' }],
45
- Series: [{ Key: 'revenue', Label: 'Revenue', Values: [42, 58] }],
46
- LegendStyle: 'Compact',
47
- LegendPosition: 'Bottom',
48
- })
49
-
50
- // Before removing the host element:
51
- // chart.destroy()
52
- ```
50
+ The main site consumes the built per-chart package exports, not the POC. Its
51
+ `build:charts` task prepares the marketing page, 16 documentation playgrounds and
52
+ four screen previews. Build the chart workspace before the site. UI-only consumers
53
+ retain their existing imports and do not gain an ECharts dependency.
53
54
 
54
- Load the shared theme once. Each chart has a dedicated import such as `/line`,
55
- `/bar` or `/heatmap`. `/sparkline` has its own `/sparkline.css`; the other charts
56
- use `/styles.css`. The root export includes all eight Community factories.
57
- The package also includes `dist/browser/charts-community.js` for script-tag use,
58
- under the `BluKavantChartsCommunity` global, plus theme/style/font assets.
55
+ The website owns the sample data and screen compositions in
56
+ `../bluui-site/resources/js/charts`. Run `npm run build:chart-starters` there after
57
+ packing a release to create Community and Pro screen starter ZIPs. The public
58
+ Community starter contains the student and commerce experiences. The protected
59
+ Pro starter adds revenue analytics and software development, with matching local
60
+ package archives. None includes the website's first-party license key.
59
61
 
60
- Your application supplies the data and backend. Call the documented instance
61
- methods to update or destroy charts. See the documentation for each chart's
62
- typed options, events, data limits and accessibility coverage.
62
+ `npm run verify:packages` checks the actual packed exports and consumer bundles.
63
+ Bundle size depends on the imported chart and consumer bundler. CSS, fonts and
64
+ maps are separate. UI-only imports do not load ECharts. The 1.0 Web artifacts
65
+ are release candidates; the previously published 0.1.0 archives remain immutable.
66
+ Publishing to npm has not been performed.
63
67
 
64
- ## Editable source
68
+ For deployment, copy the three exact Pro filenames from the release manifest to
69
+ the server's existing `PRO_RELEASES_DIRECTORY` (outside the public web root).
70
+ The account routes enforce ownership, billing mode, revocation and release-date
71
+ coverage. Community files are copied to the site's public downloads directory.
72
+ Keep the immutable `releasedAt` value aligned between this package's licensing
73
+ manifest and `bluui-site/app/services/chart_releases.ts`. Never overwrite a
74
+ published version; assign a new version for subsequent changes. Build the site
75
+ locally with its sibling workspaces and deploy its resulting `build/` output.
76
+ The native 1.0 update requires its own Service Studio integration and export checks.
65
77
 
66
- The `src/` directory contains the Community implementation used for this release.
67
- The package includes a standalone build script and TypeScript configuration.
68
- To rebuild a private working copy, use Node.js 24 with npm:
78
+ ## OutSystems installation
69
79
 
70
- ```sh
71
- npm install --include=dev
72
- npm run check
73
- npm run build
74
- ```
80
+ Native Charts Community and Pro packages are available separately from account
81
+ downloads. They contain real Service Studio producers; these Web archives do not.
82
+ See https://blukavantui.blutekmedia.com/integration#charts-modules for dependencies,
83
+ typed data bindings and events. Customers process IPP for their own destination.
84
+ Community downloads are free; Pro requires a valid covered license.
75
85
 
76
- The build emits ES modules, declarations, CSS, fonts and the standalone browser
77
- bundle. It does not require the BluKavantUI monorepo or any Pro package. Keep the
78
- lockfile generated in your private working copy when maintaining your changes.
86
+ The current published native exports retain their existing version. The 1.0
87
+ native update is pending fresh editor integration, publish, behavior checks and
88
+ export. Do not relabel an older native package as having the new runtime.
79
89
 
80
- ## Community, Pro and licensing
90
+ ## Sparkline
81
91
 
82
- Charts Community is free for personal and commercial end-user applications
83
- under the included [Community license](./LICENSE.txt), with private source
84
- modification allowed. This is a **custom source-available license**, not MIT or
85
- BSD; redistribution of the reusable library is restricted. Third-party software
86
- and fonts retain their own licenses; see [third-party notices](./THIRD_PARTY_NOTICES.txt).
92
+ Sparkline is now part of Charts Community. Import `createSparkline` and its types from `@blukavantui/charts-community/sparkline`, and load `@blukavantui/charts-community/sparkline.css`. `LineStyle` selects `Smooth` (the default) or `Straight`. The smooth curve passes through each observation without overshooting between values, and the area fill and animated point follow the same curve. A glow and point travel along the line once by default; `Animation` accepts `Off`, `Once` and `Continuous`, with `AnimationDuration` controlling seconds per pass. `AreaOpacity` sets the fill strength and `AreaFade` fades it to transparent at the bottom. Reduced-motion preferences disable the animation. Its compact SVG renderer preserves the existing Points, Color, Height, area, end-marker, summary and data-table options without loading ECharts. It does not use the large-chart legend or export toolbar. Existing UI package Sparkline exports remain available for compatibility; native OutSystems packaging has not changed.
87
93
 
88
- Charts Pro is a separate licensed download. It is not included here, installed
89
- by this package, or part of this npm release. Native OutSystems distributions
90
- are also separate from these browser packages.
94
+ ## Release verification
91
95
 
92
- Version 1.0.1 uses the same Community runtime as the existing 1.0.1 website
93
- download. The npm packaging removes redundant sync copies, adds this guide and
94
- standalone build instructions, and identifies the official Charts npm source.
96
+ The Web target is **1.0.0**. `npm run verify:local` checks built package directories;
97
+ `npm run verify:packages` checks the actual archives. Native build preparation is
98
+ not proof of a published producer. The repository's release guide records the
99
+ remaining native gates and preserved source history.
package/dist/bar.js CHANGED
@@ -1 +1 @@
1
- import{a}from"./chunk-FHHQWCUO.js";import"./chunk-QFXXWRD5.js";import"./chunk-QETOF22L.js";export{a as createBarChart};
1
+ import{a}from"./chunk-IDMAFTWV.js";import"./chunk-EITBQBN2.js";import"./chunk-MR5VITXX.js";import"./chunk-RC2TCMJF.js";export{a as createBarChart};
@@ -1 +1 @@
1
- .blu-skeleton{box-sizing:border-box;min-width:0;font-family:var(--bluui-font, Inter, ui-sans-serif, system-ui, sans-serif)}.blu-skeleton{display:block;position:relative;overflow:hidden;max-width:100%;-servicestudio-height:16px;-servicestudio-min-width:120px;-servicestudio-background-color:var(--bluui-skeleton-base, #e2e8f0);-servicestudio-border-radius:4px;background:var(--bluui-skeleton-base, #e2e8f0)}.blu-skeleton--text{border-radius:4px}.blu-skeleton--rectangle{border-radius:10px}.blu-skeleton--circle{border-radius:50%}.blu-skeleton--animated:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,var(--bluui-skeleton-shine, rgb(255 255 255 / 65%)),transparent);transform:translate(-100%);animation:blu-skeleton-wave 1.6s ease-in-out 3}@keyframes blu-skeleton-wave{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.blu-skeleton--animated:after{animation:none;display:none}}.blu-skeleton{-servicestudio-width:180px;-servicestudio-height:20px}.blu-chip{box-sizing:border-box;min-width:0;font-family:var(--bluui-font, Inter, ui-sans-serif, system-ui, sans-serif)}.blu-chip{--chip-bg: var(--bluui-secondary-soft, #f1f5f9);--chip-fg: var(--bluui-secondary-text, #334155);--chip-border: var(--bluui-border, #cbd5e1);display:inline-flex;align-items:stretch;width:auto;max-width:100%;border:1px solid var(--chip-border);border-radius:999px;background:var(--chip-bg);color:var(--chip-fg);vertical-align:middle}.blu-chip.blu-chip--default{--chip-bg: var(--bluui-color-default-solid);--chip-fg: var(--bluui-color-default-contrast);--chip-border: var(--bluui-color-default-solid)}.blu-chip.blu-chip--primary{--chip-bg: var(--bluui-color-primary-solid);--chip-fg: var(--bluui-color-primary-contrast);--chip-border: var(--bluui-color-primary-solid)}.blu-chip.blu-chip--secondary{--chip-bg: var(--bluui-color-secondary-soft);--chip-fg: var(--bluui-color-secondary-text);--chip-border: var(--bluui-color-secondary-soft)}.blu-chip.blu-chip--success{--chip-bg: var(--bluui-color-success-solid);--chip-fg: var(--bluui-color-success-contrast);--chip-border: var(--bluui-color-success-solid)}.blu-chip.blu-chip--processing{--chip-bg: var(--bluui-color-processing-solid);--chip-fg: var(--bluui-color-processing-contrast);--chip-border: var(--bluui-color-processing-solid)}.blu-chip.blu-chip--warning{--chip-bg: var(--bluui-color-warning-solid);--chip-fg: var(--bluui-color-warning-contrast);--chip-border: var(--bluui-color-warning-solid)}.blu-chip.blu-chip--error{--chip-bg: var(--bluui-color-error-solid);--chip-fg: var(--bluui-color-error-contrast);--chip-border: var(--bluui-color-error-solid)}.blu-chip.blu-chip--danger{--chip-bg: var(--bluui-color-danger-solid);--chip-fg: var(--bluui-color-danger-contrast);--chip-border: var(--bluui-color-danger-solid)}.blu-chip.blu-chip--magenta{--chip-bg: var(--bluui-color-magenta-soft);--chip-fg: var(--bluui-color-magenta-text);--chip-border: var(--bluui-color-magenta-soft)}.blu-chip.blu-chip--red{--chip-bg: var(--bluui-color-red-soft);--chip-fg: var(--bluui-color-red-text);--chip-border: var(--bluui-color-red-soft)}.blu-chip.blu-chip--volcano{--chip-bg: var(--bluui-color-volcano-soft);--chip-fg: var(--bluui-color-volcano-text);--chip-border: var(--bluui-color-volcano-soft)}.blu-chip.blu-chip--orange{--chip-bg: var(--bluui-color-orange-soft);--chip-fg: var(--bluui-color-orange-text);--chip-border: var(--bluui-color-orange-soft)}.blu-chip.blu-chip--gold{--chip-bg: var(--bluui-color-gold-soft);--chip-fg: var(--bluui-color-gold-text);--chip-border: var(--bluui-color-gold-soft)}.blu-chip.blu-chip--lime{--chip-bg: var(--bluui-color-lime-soft);--chip-fg: var(--bluui-color-lime-text);--chip-border: var(--bluui-color-lime-soft)}.blu-chip.blu-chip--green{--chip-bg: var(--bluui-color-green-soft);--chip-fg: var(--bluui-color-green-text);--chip-border: var(--bluui-color-green-soft)}.blu-chip.blu-chip--cyan{--chip-bg: var(--bluui-color-cyan-soft);--chip-fg: var(--bluui-color-cyan-text);--chip-border: var(--bluui-color-cyan-soft)}.blu-chip.blu-chip--blue{--chip-bg: var(--bluui-color-blue-soft);--chip-fg: var(--bluui-color-blue-text);--chip-border: var(--bluui-color-blue-soft)}.blu-chip.blu-chip--geekblue{--chip-bg: var(--bluui-color-geekblue-soft);--chip-fg: var(--bluui-color-geekblue-text);--chip-border: var(--bluui-color-geekblue-soft)}.blu-chip.blu-chip--purple{--chip-bg: var(--bluui-color-purple-soft);--chip-fg: var(--bluui-color-purple-text);--chip-border: var(--bluui-color-purple-soft)}.blu-chip--selected{box-shadow:0 0 0 2px var(--bluui-primary, #4f46e5)}.blu-chip--disabled{opacity:.55}.blu-chip.blu-chip :is(.blu-chip__select,.blu-chip__remove){appearance:none;display:inline-flex;align-items:center;justify-content:center;width:auto;min-height:36px;height:auto;margin:0;border:0;border-radius:999px;padding:7px 12px;background:transparent;color:inherit;font:inherit;font-size:13px;line-height:1.4;box-shadow:none;cursor:pointer;white-space:normal;overflow-wrap:anywhere}.blu-chip.blu-chip .blu-chip__remove{min-width:36px;padding:6px 10px}.blu-chip .blu-chip__label{display:inline-flex;align-items:center;padding:7px 12px;font-size:13px;overflow-wrap:anywhere}.blu-chip.blu-chip :is(.blu-chip__select,.blu-chip__remove):disabled{cursor:default}.blu-chip.blu-chip :is(.blu-chip__select,.blu-chip__remove):focus-visible{outline:2px solid var(--bluui-primary, #4f46e5);outline-offset:3px}.blu-chip.blu-chip :is(.blu-chip__select,.blu-chip__remove):hover:not(:disabled){background:color-mix(in srgb,currentColor 8%,transparent)}.blu-chart__body{display:grid;grid-template-columns:minmax(0,1fr);gap:12px;min-width:0}.blu-chart__body[data-legend-position=Top] .blu-chart__legend{grid-row:1}.blu-chart__body[data-legend-position=Bottom] .blu-chart__legend{grid-row:2}.blu-chart__body[data-legend-position=Left]{grid-template-columns:190px minmax(0,1fr);align-items:center}.blu-chart__body[data-legend-position=Right]{grid-template-columns:minmax(0,1fr) 190px;align-items:center}.blu-chart__body[data-legend-position=Left] .blu-chart__legend{grid-column:1;grid-row:1}.blu-chart__body[data-legend-position=Left] .blu-chart__stage,.blu-chart__body[data-legend-position=Right] .blu-chart__legend{grid-column:2;grid-row:1}.blu-chart__body[data-legend-position=Right] .blu-chart__stage{grid-column:1;grid-row:1}.blu-chart__body.blu-chart__body--no-legend{grid-template-columns:minmax(0,1fr);gap:0}.blu-chart__body--no-legend .blu-chart__stage{grid-column:1!important;grid-row:1!important}.blu-chart__legend{--legend-selected:color-mix(in srgb,var(--bluui-primary) 9%,var(--bluui-surface));min-width:0;padding:8px 20px 16px;font:12px/1.45 var(--bluui-font,Inter,system-ui,sans-serif);color:var(--bluui-text)}.blu-chart__legend-items{display:flex;flex-wrap:wrap;gap:8px}.blu-chart__legend-entry{min-width:0;max-width:100%;display:flex;align-items:center;gap:10px;border:1px solid transparent;background:transparent;color:inherit;font:inherit;text-align:left;padding:7px 8px;border-radius:8px;cursor:pointer;min-height:36px}.blu-chart__legend-entry:hover{background:var(--bluui-surface-muted)}.blu-chart__legend-entry[aria-pressed=true]{text-decoration:none;background:var(--legend-selected)}.blu-chart__legend-heading{display:flex;align-items:center;gap:7px;min-width:0}.blu-chart__legend-marker{display:flex;flex-shrink:0}.blu-chart__legend-text{overflow-wrap:anywhere}.blu-chart__legend-label{font-weight:500}.blu-chart__legend-detail,.blu-chart__legend-percent,.blu-chart__legend-note{font-size:11px;color:var(--bluui-text-muted)}.blu-chart__legend-numbers{display:flex;align-items:baseline;gap:10px;min-width:0;font-variant-numeric:tabular-nums}.blu-chart__legend-value{font-weight:600;letter-spacing:-.25px}.blu-chart__legend-check{visibility:hidden;margin-left:auto;color:var(--bluui-primary);font-weight:700;font-size:12px}[aria-pressed=true] .blu-chart__legend-check{visibility:visible}.blu-chart__legend[data-style=Standard] .blu-chart__legend-detail,.blu-chart__legend[data-style=Standard] .blu-chart__legend-check{display:none}.blu-chart__legend[data-style=Standard] .blu-chart__legend-value{font-size:11px;color:var(--bluui-text-muted)}.blu-chart__legend-track{display:none;height:3px;background:var(--bluui-border);border-radius:2px;overflow:hidden}.blu-chart__legend-track>span{display:block;height:100%}.blu-chart__legend-chip-host{min-width:0;max-width:100%}.blu-chart__legend .blu-chip.blu-chart__legend-chip{--chip-bg:transparent;--chip-fg:var(--bluui-text);--chip-border:var(--bluui-border);max-width:100%;box-shadow:none}.blu-chart__legend .blu-chart__legend-chip.blu-chip--selected{--chip-bg:var(--legend-selected);--chip-border:var(--bluui-primary);box-shadow:none}.blu-chart__legend .blu-chart__legend-chip .blu-chip__select{min-height:38px;padding:9px 12px;gap:10px;font:inherit;font-size:11px;text-align:left;justify-content:flex-start}.blu-chart__legend-chip .blu-chart__legend-label{font-weight:500}.blu-chart__legend-chip .blu-chart__legend-detail,.blu-chart__legend-chip .blu-chart__legend-check{display:none}.blu-chart__legend-chip [aria-pressed=true]{text-decoration:none}.blu-chart__legend-chip [aria-pressed=true] .blu-chart__legend-label{text-decoration:underline;text-underline-offset:3px}.blu-chart__legend-chip .blu-chart__legend-numbers{gap:7px;flex-wrap:wrap}.blu-chart__legend[data-style=ValueList] .blu-chart__legend-items,.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-items{display:grid;grid-template-columns:repeat(var(--legend-columns,1),minmax(0,1fr));gap:10px}.blu-chart__legend[data-style=ValueList] .blu-chart__legend-entry{display:flex;flex-direction:column;align-items:stretch;gap:5px;padding:10px 11px;border:0}.blu-chart__legend[data-style=ValueList] .blu-chart__legend-numbers{margin-left:23px;justify-content:space-between}.blu-chart__legend[data-style=ValueList] .blu-chart__legend-value{font-size:19px;letter-spacing:-.4px;line-height:1.3}.blu-chart__legend[data-style=ValueList] .blu-chart__legend-detail{margin-left:23px}.blu-chart__legend[data-style=ValueList] .blu-chart__legend-track{display:block;margin:3px 0 0 23px}.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-entry{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:0;padding:12px;min-height:36px;align-self:start;border-color:var(--bluui-border);border-radius:12px}.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-entry[aria-pressed=true]{border-color:var(--bluui-primary)}.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-heading{font-size:11px}.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-numbers{flex-direction:column;align-items:stretch;gap:6px;margin-top:10px}.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-value{font-size:24px;letter-spacing:-.6px;line-height:1.2}.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-detail{margin-top:6px}.blu-chart__body:is([data-legend-position=Left],[data-legend-position=Right]) .blu-chart__legend{padding:8px 12px 16px}.blu-chart__body:is([data-legend-position=Left],[data-legend-position=Right]) .blu-chart__legend-items{display:flex;flex-direction:column}.blu-chart__body:is([data-legend-position=Left],[data-legend-position=Right]) .blu-chart__legend-entry{width:100%}.blu-chart__body:is([data-legend-position=Left],[data-legend-position=Right]) .blu-chart__legend[data-style=Standard] .blu-chart__legend-entry{flex-wrap:wrap;gap:4px 10px}.blu-chart__legend-scale{max-width:360px;min-width:0;margin:0 0 8px}.blu-chart__legend-scale-title{display:block;font-size:11px;font-weight:500;margin-bottom:10px;color:var(--bluui-text-muted)}.blu-chart__legend-gradient{height:8px;border-radius:4px}.blu-chart__legend-range{display:flex;justify-content:space-between;gap:12px;margin-top:8px;font-variant-numeric:tabular-nums}.blu-chart__legend[data-style=Compact] .blu-chart__legend-scale{padding:12px 16px;border:1px solid var(--bluui-border);border-radius:18px}.blu-chart__legend[data-style=ValueList] .blu-chart__legend-scale{padding:10px 11px}.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-scale{padding:16px;border:1px solid var(--bluui-border);border-radius:12px}.blu-chart__legend-note{display:block;margin-top:10px}@media(forced-colors:active){.blu-chart__legend-entry{border:1px solid ButtonText!important}.blu-chart__legend-entry[aria-pressed=true],.blu-chart__legend .blu-chart__legend-chip.blu-chip--selected{outline:1px solid Highlight}.blu-chart__legend-marker svg{forced-color-adjust:none}.blu-chart__legend-gradient{background:Canvas!important;border:1px solid CanvasText}}.blu-chart{width:100%;min-width:0;color:var(--bluui-text,#182230);background:var(--bluui-surface,#fff);font:13px/1.5 var(--blu-font-family,Inter,system-ui,sans-serif)}.blu-chart [hidden]{display:none!important}.blu-chart__heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:18px 16px 12px}.blu-chart__heading>div:first-child{min-width:0}.blu-chart__heading h3{margin:0;color:inherit;font-size:16px;font-weight:650;letter-spacing:-.3px;overflow-wrap:anywhere}.blu-chart__heading p{margin:5px 0 0;font-size:11px;color:var(--bluui-text-muted,#667085);line-height:1.6;overflow-wrap:anywhere}.blu-chart__export{display:flex;gap:5px;flex-shrink:0;margin-left:auto}.blu-chart__export :is(select,button){font:inherit;font-size:11px;border:1px solid var(--bluui-border,#ddd);color:inherit;border-radius:6px;background:var(--bluui-surface,#fff);min-height:34px;padding:6px 8px;cursor:pointer}.blu-chart__export button:disabled{opacity:.5;cursor:default}.blu-chart__stage{position:relative;min-width:0}.blu-chart__plot{width:100%;min-width:0}.blu-chart__state{position:absolute;inset:0;display:grid;place-items:center;background:var(--bluui-surface-muted,#f8f8fa);color:var(--bluui-text-muted,#667085);padding:20px;text-align:center}.blu-chart__state--loading{grid-template-rows:minmax(0,1fr) auto;gap:14px;place-items:stretch;background:var(--bluui-surface,#fff);padding:16px}.blu-chart__skeleton{display:flex;flex-direction:column;gap:24px;min-width:0;min-height:0}.blu-chart__skeleton-key{display:flex;gap:16px;align-items:center;flex-wrap:wrap}.blu-chart__skeleton-plot{flex:1;min-height:0}.blu-chart__skeleton-plot>div{height:100%}.blu-chart__state-message{font-size:12px}.blu-chart__data{margin:12px 16px 0;border-top:1px solid var(--bluui-border,#ddd);font-size:11px}.blu-chart__data summary{cursor:pointer;padding:12px 0;color:var(--bluui-text-muted,#667085)}.blu-chart__data--compact{margin-top:0;border-top:0}.blu-chart__data--compact summary{padding:6px 0}.blu-chart__table{overflow:auto;max-height:320px}.blu-chart__table table{width:100%;border-collapse:collapse;white-space:nowrap;font-size:11px;font-variant-numeric:tabular-nums}.blu-chart__table caption{text-align:left;color:var(--bluui-text-muted,#667085);padding:8px}.blu-chart__table th,.blu-chart__table td{padding:8px;border-bottom:1px solid var(--bluui-border,#ddd);text-align:right}.blu-chart__table th:first-child{text-align:left}.blu-chart__table button{font:inherit;color:var(--bluui-primary,#6557e8);background:transparent;border:0;border-radius:3px;padding:5px;cursor:pointer}.blu-chart__table button[aria-pressed=true]{background:var(--bluui-selected,#eeeaff);text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px;font-weight:700}.blu-chart :is(button,select,summary,[tabindex]):focus-visible{outline:2px solid var(--bluui-primary,#6557e8);outline-offset:2px}.blu-chart__status{font-size:11px;color:var(--bluui-text-muted,#667085);margin:0 16px}.blu-chart__status:not(:empty){padding:8px 0}@media(max-width:640px){.blu-chart__heading{flex-wrap:wrap;padding-inline:12px}.blu-chart__export{margin-left:0}.blu-chart__data{margin-inline:12px}}.blu-chart__navigation{display:flex;flex-wrap:wrap;gap:6px;padding:8px 16px}.blu-chart__navigation button{min-width:32px;min-height:32px;padding:5px 9px;font:inherit;font-size:12px;color:var(--bluui-text);background:var(--bluui-surface);border:1px solid var(--bluui-control-border);border-radius:5px;cursor:pointer}.blu-chart__stage[tabindex]:focus-visible{outline-offset:-3px}.blu-chart__state-announcement{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.blu-chart__patterns{display:flex;align-items:center;gap:8px;font-size:12px;padding:6px 0 12px;cursor:pointer}.blu-chart__patterns input{width:24px;height:24px;margin:0;accent-color:var(--bluui-color-primary-solid)}.blu-chart__missing-note{margin:8px 12px;color:var(--bluui-text-muted);font-size:12px;line-height:1.5}.blu-chart .blu-chart__patterns input[type=checkbox]{-webkit-appearance:none;appearance:none;box-sizing:border-box;position:relative;display:inline-block;flex:0 0 22px;width:22px;height:22px;min-width:22px;min-height:22px;margin:0;padding:0;border:1.5px solid var(--bluui-control-border,#7b8799);border-radius:6px;background-color:var(--bluui-surface,#fff);background-image:none;box-shadow:0 1px 2px #0f172a0f;vertical-align:middle;cursor:pointer;opacity:1;filter:none;transition:background-color .12s ease,border-color .12s ease,box-shadow .12s ease}.blu-chart .blu-chart__patterns input[type=checkbox]:after{content:none}.blu-chart .blu-chart__patterns input[type=checkbox]:checked,.blu-chart .blu-chart__patterns input[type=checkbox]:indeterminate{border-color:var(--bluui-color-primary-solid,#4f46e5);background-color:var(--bluui-color-primary-solid,#4f46e5)}.blu-chart .blu-chart__patterns input[type=checkbox]:checked:after,.blu-chart .blu-chart__patterns input[type=checkbox]:indeterminate:after{content:"";box-sizing:content-box;position:absolute;width:10px;height:6px;inset:5px auto auto 4px;border:solid var(--bluui-color-primary-contrast,#fff);border-width:0 0 2px 2px;border-radius:0;background:none;-webkit-mask:none;mask:none;transform:rotate(-45deg);pointer-events:none}.blu-chart .blu-chart__patterns input[type=checkbox]:indeterminate:after{height:0;top:8px;border-width:0 0 2px;transform:none}.blu-chart .blu-chart__patterns input[type=checkbox]:hover:not(:disabled){border-color:var(--bluui-color-primary-solid,#4f46e5);box-shadow:0 0 0 3px var(--bluui-color-primary-soft,#eef2ff)}.blu-chart .blu-chart__patterns input[type=checkbox]:focus-visible{outline:2px solid var(--bluui-color-primary-solid,#4f46e5);outline-offset:3px}.blu-chart .blu-chart__patterns input[type=checkbox]:disabled{border-color:var(--bluui-border-strong,#b8c4d4);background-color:var(--bluui-surface-muted,#f7f8fb);box-shadow:none;cursor:not-allowed}.blu-chart .blu-chart__patterns input[type=checkbox]:disabled:checked,.blu-chart .blu-chart__patterns input[type=checkbox]:disabled:indeterminate{border-color:var(--bluui-text-muted,#5c6b80);background-color:var(--bluui-text-muted,#5c6b80)}@media(prefers-reduced-motion:reduce){.blu-chart .blu-chart__patterns input[type=checkbox]{transition:none}}.blu-chart .blu-chart__patterns input[type=checkbox]:before{content:none}@media(forced-colors:active){.blu-chart .blu-chart__patterns input[type=checkbox],.blu-chart .blu-chart__patterns input[type=checkbox]:checked,.blu-chart .blu-chart__patterns input[type=checkbox]:indeterminate,.blu-chart .blu-chart__patterns input[type=checkbox]:disabled,.blu-chart .blu-chart__patterns input[type=checkbox]:disabled:checked,.blu-chart .blu-chart__patterns input[type=checkbox]:disabled:indeterminate{-webkit-appearance:checkbox;appearance:auto;background:revert;border:revert;box-shadow:none;forced-color-adjust:auto}.blu-chart .blu-chart__patterns input[type=checkbox]:checked:after,.blu-chart .blu-chart__patterns input[type=checkbox]:indeterminate:after{content:none}}
1
+ .blu-skeleton{box-sizing:border-box;min-width:0;font-family:var(--bluui-font, Inter, ui-sans-serif, system-ui, sans-serif)}.blu-skeleton{display:block;position:relative;overflow:hidden;max-width:100%;-servicestudio-height:16px;-servicestudio-min-width:120px;-servicestudio-background-color:var(--bluui-skeleton-base, #e2e8f0);-servicestudio-border-radius:4px;background:var(--bluui-skeleton-base, #e2e8f0)}.blu-skeleton--text{border-radius:4px}.blu-skeleton--rectangle{border-radius:10px}.blu-skeleton--circle{border-radius:50%}.blu-skeleton--animated:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,var(--bluui-skeleton-shine, rgb(255 255 255 / 65%)),transparent);transform:translate(-100%);animation:blu-skeleton-wave 1.6s ease-in-out 3}@keyframes blu-skeleton-wave{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.blu-skeleton--animated:after{animation:none;display:none}}.blu-skeleton{-servicestudio-width:180px;-servicestudio-height:20px}.blu-skeleton[data-blu-native-motion=loading-skeleton]:after{animation:none!important;display:none!important}.blu-chip{box-sizing:border-box;min-width:0;font-family:var(--bluui-font, Inter, ui-sans-serif, system-ui, sans-serif)}.blu-chip{--chip-bg: var(--bluui-secondary-soft, #f1f5f9);--chip-fg: var(--bluui-secondary-text, #334155);--chip-border: var(--bluui-border, #cbd5e1);display:inline-flex;align-items:stretch;width:auto;max-width:100%;border:1px solid var(--chip-border);border-radius:999px;background:var(--chip-bg);color:var(--chip-fg);vertical-align:middle}.blu-chip.blu-chip--default{--chip-bg: var(--bluui-color-default-solid);--chip-fg: var(--bluui-color-default-contrast);--chip-border: var(--bluui-color-default-solid)}.blu-chip.blu-chip--primary{--chip-bg: var(--bluui-color-primary-solid);--chip-fg: var(--bluui-color-primary-contrast);--chip-border: var(--bluui-color-primary-solid)}.blu-chip.blu-chip--secondary{--chip-bg: var(--bluui-color-secondary-soft);--chip-fg: var(--bluui-color-secondary-text);--chip-border: var(--bluui-color-secondary-soft)}.blu-chip.blu-chip--success{--chip-bg: var(--bluui-color-success-solid);--chip-fg: var(--bluui-color-success-contrast);--chip-border: var(--bluui-color-success-solid)}.blu-chip.blu-chip--processing{--chip-bg: var(--bluui-color-processing-solid);--chip-fg: var(--bluui-color-processing-contrast);--chip-border: var(--bluui-color-processing-solid)}.blu-chip.blu-chip--warning{--chip-bg: var(--bluui-color-warning-solid);--chip-fg: var(--bluui-color-warning-contrast);--chip-border: var(--bluui-color-warning-solid)}.blu-chip.blu-chip--error{--chip-bg: var(--bluui-color-error-solid);--chip-fg: var(--bluui-color-error-contrast);--chip-border: var(--bluui-color-error-solid)}.blu-chip.blu-chip--danger{--chip-bg: var(--bluui-color-danger-solid);--chip-fg: var(--bluui-color-danger-contrast);--chip-border: var(--bluui-color-danger-solid)}.blu-chip.blu-chip--magenta{--chip-bg: var(--bluui-color-magenta-soft);--chip-fg: var(--bluui-color-magenta-text);--chip-border: var(--bluui-color-magenta-soft)}.blu-chip.blu-chip--red{--chip-bg: var(--bluui-color-red-soft);--chip-fg: var(--bluui-color-red-text);--chip-border: var(--bluui-color-red-soft)}.blu-chip.blu-chip--volcano{--chip-bg: var(--bluui-color-volcano-soft);--chip-fg: var(--bluui-color-volcano-text);--chip-border: var(--bluui-color-volcano-soft)}.blu-chip.blu-chip--orange{--chip-bg: var(--bluui-color-orange-soft);--chip-fg: var(--bluui-color-orange-text);--chip-border: var(--bluui-color-orange-soft)}.blu-chip.blu-chip--gold{--chip-bg: var(--bluui-color-gold-soft);--chip-fg: var(--bluui-color-gold-text);--chip-border: var(--bluui-color-gold-soft)}.blu-chip.blu-chip--lime{--chip-bg: var(--bluui-color-lime-soft);--chip-fg: var(--bluui-color-lime-text);--chip-border: var(--bluui-color-lime-soft)}.blu-chip.blu-chip--green{--chip-bg: var(--bluui-color-green-soft);--chip-fg: var(--bluui-color-green-text);--chip-border: var(--bluui-color-green-soft)}.blu-chip.blu-chip--cyan{--chip-bg: var(--bluui-color-cyan-soft);--chip-fg: var(--bluui-color-cyan-text);--chip-border: var(--bluui-color-cyan-soft)}.blu-chip.blu-chip--blue{--chip-bg: var(--bluui-color-blue-soft);--chip-fg: var(--bluui-color-blue-text);--chip-border: var(--bluui-color-blue-soft)}.blu-chip.blu-chip--geekblue{--chip-bg: var(--bluui-color-geekblue-soft);--chip-fg: var(--bluui-color-geekblue-text);--chip-border: var(--bluui-color-geekblue-soft)}.blu-chip.blu-chip--purple{--chip-bg: var(--bluui-color-purple-soft);--chip-fg: var(--bluui-color-purple-text);--chip-border: var(--bluui-color-purple-soft)}.blu-chip--selected{box-shadow:0 0 0 2px var(--bluui-primary, #4f46e5)}.blu-chip--disabled{opacity:.55}.blu-chip.blu-chip :is(.blu-chip__select,.blu-chip__remove){appearance:none;display:inline-flex;align-items:center;justify-content:center;width:auto;min-height:36px;height:auto;margin:0;border:0;border-radius:999px;padding:7px 12px;background:transparent;color:inherit;font:inherit;font-size:13px;line-height:1.4;box-shadow:none;cursor:pointer;white-space:normal;overflow-wrap:anywhere}.blu-chip.blu-chip .blu-chip__remove{min-width:36px;padding:6px 10px}.blu-chip .blu-chip__label{display:inline-flex;align-items:center;padding:7px 12px;font-size:13px;overflow-wrap:anywhere}.blu-chip.blu-chip :is(.blu-chip__select,.blu-chip__remove):disabled{cursor:default}.blu-chip.blu-chip :is(.blu-chip__select,.blu-chip__remove):focus-visible{outline:2px solid var(--bluui-primary, #4f46e5);outline-offset:3px}.blu-chip.blu-chip :is(.blu-chip__select,.blu-chip__remove):hover:not(:disabled){background:color-mix(in srgb,currentColor 8%,transparent)}.blu-chart__body{display:grid;grid-template-columns:minmax(0,1fr);gap:12px;min-width:0}.blu-chart__body[data-legend-position=Top] .blu-chart__legend{grid-row:1}.blu-chart__body[data-legend-position=Bottom] .blu-chart__legend{grid-row:2}.blu-chart__body[data-legend-position=Left]{grid-template-columns:190px minmax(0,1fr);align-items:center}.blu-chart__body[data-legend-position=Right]{grid-template-columns:minmax(0,1fr) 190px;align-items:center}.blu-chart__body[data-legend-position=Left] .blu-chart__legend{grid-column:1;grid-row:1}.blu-chart__body[data-legend-position=Left] .blu-chart__stage,.blu-chart__body[data-legend-position=Right] .blu-chart__legend{grid-column:2;grid-row:1}.blu-chart__body[data-legend-position=Right] .blu-chart__stage{grid-column:1;grid-row:1}.blu-chart__body.blu-chart__body--no-legend{grid-template-columns:minmax(0,1fr);gap:0}.blu-chart__body--no-legend .blu-chart__stage{grid-column:1!important;grid-row:1!important}.blu-chart__legend{--legend-selected:color-mix(in srgb,var(--bluui-primary) 9%,var(--bluui-surface));min-width:0;padding:8px 20px 16px;font:12px/1.45 var(--bluui-font,Inter,system-ui,sans-serif);color:var(--bluui-text)}.blu-chart__legend-items{display:flex;flex-wrap:wrap;gap:8px}.blu-chart__legend-entry{min-width:0;max-width:100%;display:flex;align-items:center;gap:10px;border:1px solid transparent;background:transparent;color:inherit;font:inherit;text-align:left;padding:7px 8px;border-radius:8px;cursor:pointer;min-height:36px}.blu-chart__legend-entry:hover{background:var(--bluui-surface-muted)}.blu-chart__legend-entry[aria-pressed=true]{text-decoration:none;background:var(--legend-selected)}.blu-chart__legend-heading{display:flex;align-items:center;gap:7px;min-width:0}.blu-chart__legend-marker{display:flex;flex-shrink:0}.blu-chart__legend-text{overflow-wrap:anywhere}.blu-chart__legend-label{font-weight:500}.blu-chart__legend-detail,.blu-chart__legend-percent,.blu-chart__legend-note{font-size:11px;color:var(--bluui-text-muted)}.blu-chart__legend-numbers{display:flex;align-items:baseline;gap:10px;min-width:0;font-variant-numeric:tabular-nums}.blu-chart__legend-value{font-weight:600;letter-spacing:-.25px}.blu-chart__legend-check{visibility:hidden;margin-left:auto;color:var(--bluui-primary);font-weight:700;font-size:12px}[aria-pressed=true] .blu-chart__legend-check{visibility:visible}.blu-chart__legend[data-style=Standard] .blu-chart__legend-detail,.blu-chart__legend[data-style=Standard] .blu-chart__legend-check{display:none}.blu-chart__legend[data-style=Standard] .blu-chart__legend-value{font-size:11px;color:var(--bluui-text-muted)}.blu-chart__legend-track{display:none;height:3px;background:var(--bluui-border);border-radius:2px;overflow:hidden}.blu-chart__legend-track>span{display:block;height:100%}.blu-chart__legend-chip-host{min-width:0;max-width:100%}.blu-chart__legend .blu-chip.blu-chart__legend-chip{--chip-bg:transparent;--chip-fg:var(--bluui-text);--chip-border:var(--bluui-border);max-width:100%;box-shadow:none}.blu-chart__legend .blu-chart__legend-chip.blu-chip--selected{--chip-bg:var(--legend-selected);--chip-border:var(--bluui-primary);box-shadow:none}.blu-chart__legend .blu-chart__legend-chip .blu-chip__select{min-height:38px;padding:9px 12px;gap:10px;font:inherit;font-size:11px;text-align:left;justify-content:flex-start}.blu-chart__legend-chip .blu-chart__legend-label{font-weight:500}.blu-chart__legend-chip .blu-chart__legend-detail,.blu-chart__legend-chip .blu-chart__legend-check{display:none}.blu-chart__legend-chip [aria-pressed=true]{text-decoration:none}.blu-chart__legend-chip [aria-pressed=true] .blu-chart__legend-label{text-decoration:underline;text-underline-offset:3px}.blu-chart__legend-chip .blu-chart__legend-numbers{gap:7px;flex-wrap:wrap}.blu-chart__legend[data-style=ValueList] .blu-chart__legend-items,.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-items{display:grid;grid-template-columns:repeat(var(--legend-columns,1),minmax(0,1fr));gap:10px}.blu-chart__legend[data-style=ValueList] .blu-chart__legend-entry{display:flex;flex-direction:column;align-items:stretch;gap:5px;padding:10px 11px;border:0}.blu-chart__legend[data-style=ValueList] .blu-chart__legend-numbers{margin-left:23px;justify-content:space-between}.blu-chart__legend[data-style=ValueList] .blu-chart__legend-value{font-size:19px;letter-spacing:-.4px;line-height:1.3}.blu-chart__legend[data-style=ValueList] .blu-chart__legend-detail{margin-left:23px}.blu-chart__legend[data-style=ValueList] .blu-chart__legend-track{display:block;margin:3px 0 0 23px}.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-entry{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:0;padding:12px;min-height:36px;align-self:start;border-color:var(--bluui-border);border-radius:12px}.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-entry[aria-pressed=true]{border-color:var(--bluui-primary)}.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-heading{font-size:11px}.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-numbers{flex-direction:column;align-items:stretch;gap:6px;margin-top:10px}.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-value{font-size:24px;letter-spacing:-.6px;line-height:1.2}.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-detail{margin-top:6px}.blu-chart__body:is([data-legend-position=Left],[data-legend-position=Right]) .blu-chart__legend{padding:8px 12px 16px}.blu-chart__body:is([data-legend-position=Left],[data-legend-position=Right]) .blu-chart__legend-items{display:flex;flex-direction:column}.blu-chart__body:is([data-legend-position=Left],[data-legend-position=Right]) .blu-chart__legend-entry{width:100%}.blu-chart__body:is([data-legend-position=Left],[data-legend-position=Right]) .blu-chart__legend[data-style=Standard] .blu-chart__legend-entry{flex-wrap:wrap;gap:4px 10px}.blu-chart__legend-scale{max-width:360px;min-width:0;margin:0 0 8px}.blu-chart__legend-scale-title{display:block;font-size:11px;font-weight:500;margin-bottom:10px;color:var(--bluui-text-muted)}.blu-chart__legend-gradient{height:8px;border-radius:4px}.blu-chart__legend-range{display:flex;justify-content:space-between;gap:12px;margin-top:8px;font-variant-numeric:tabular-nums}.blu-chart__legend[data-style=Compact] .blu-chart__legend-scale{padding:12px 16px;border:1px solid var(--bluui-border);border-radius:18px}.blu-chart__legend[data-style=ValueList] .blu-chart__legend-scale{padding:10px 11px}.blu-chart__legend[data-style=SummaryCards] .blu-chart__legend-scale{padding:16px;border:1px solid var(--bluui-border);border-radius:12px}.blu-chart__legend-note{display:block;margin-top:10px}@media(forced-colors:active){.blu-chart__legend-entry{border:1px solid ButtonText!important}.blu-chart__legend-entry[aria-pressed=true],.blu-chart__legend .blu-chart__legend-chip.blu-chip--selected{outline:1px solid Highlight}.blu-chart__legend-marker svg{forced-color-adjust:none}.blu-chart__legend-gradient{background:Canvas!important;border:1px solid CanvasText}}.blu-chart{width:100%;min-width:0;color:var(--bluui-text,#182230);background:var(--bluui-surface,#fff);font:13px/1.5 var(--blu-font-family,Inter,system-ui,sans-serif)}.blu-chart [hidden]{display:none!important}.blu-chart__heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:18px 16px 12px}.blu-chart__heading>div:first-child{min-width:0}.blu-chart__heading h3{margin:0;color:inherit;font-size:16px;font-weight:650;letter-spacing:-.3px;overflow-wrap:anywhere}.blu-chart__heading p{margin:5px 0 0;font-size:11px;color:var(--bluui-text-muted,#667085);line-height:1.6;overflow-wrap:anywhere}.blu-chart__export{display:flex;gap:5px;flex-shrink:0;margin-left:auto}.blu-chart__export :is(select,button){font:inherit;font-size:11px;border:1px solid var(--bluui-border,#ddd);color:inherit;border-radius:6px;background:var(--bluui-surface,#fff);min-height:34px;padding:6px 8px;cursor:pointer}.blu-chart__export button:disabled{opacity:.5;cursor:default}.blu-chart__stage{position:relative;min-width:0}.blu-chart__plot{width:100%;min-width:0}.blu-chart__state{position:absolute;inset:0;display:grid;place-items:center;background:var(--bluui-surface-muted,#f8f8fa);color:var(--bluui-text-muted,#667085);padding:20px;text-align:center}.blu-chart__state--loading{grid-template-rows:minmax(0,1fr) auto;gap:14px;place-items:stretch;background:var(--bluui-surface,#fff);padding:16px}.blu-chart__skeleton{display:flex;flex-direction:column;gap:24px;min-width:0;min-height:0}.blu-chart__skeleton-key{display:flex;gap:16px;align-items:center;flex-wrap:wrap}.blu-chart__skeleton-plot{flex:1;min-height:0}.blu-chart__skeleton-plot>div{height:100%}.blu-chart__state-message{font-size:12px}.blu-chart__data{margin:12px 16px 0;border-top:1px solid var(--bluui-border,#ddd);font-size:11px}.blu-chart__data summary{cursor:pointer;padding:12px 0;color:var(--bluui-text-muted,#667085)}.blu-chart__data--compact{margin-top:0;border-top:0}.blu-chart__data--compact summary{padding:6px 0}.blu-chart__table{overflow:auto;max-height:320px}.blu-chart__table table{width:100%;border-collapse:collapse;white-space:nowrap;font-size:11px;font-variant-numeric:tabular-nums}.blu-chart__table caption{text-align:left;color:var(--bluui-text-muted,#667085);padding:8px}.blu-chart__table th,.blu-chart__table td{padding:8px;border-bottom:1px solid var(--bluui-border,#ddd);text-align:right}.blu-chart__table th:first-child{text-align:left}.blu-chart__table button{font:inherit;color:var(--bluui-primary,#6557e8);background:transparent;border:0;border-radius:3px;padding:5px;cursor:pointer}.blu-chart__table button[aria-pressed=true]{background:var(--bluui-selected,#eeeaff);text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px;font-weight:700}.blu-chart :is(button,select,summary,[tabindex]):focus-visible{outline:2px solid var(--bluui-primary,#6557e8);outline-offset:2px}.blu-chart__status{font-size:11px;color:var(--bluui-text-muted,#667085);margin:0 16px}.blu-chart__status:not(:empty){padding:8px 0}@media(max-width:640px){.blu-chart__heading{flex-wrap:wrap;padding-inline:12px}.blu-chart__export{margin-left:0}.blu-chart__data{margin-inline:12px}}.blu-chart__navigation{display:flex;flex-wrap:wrap;gap:6px;padding:8px 16px}.blu-chart__navigation button{min-width:32px;min-height:32px;padding:5px 9px;font:inherit;font-size:12px;color:var(--bluui-text);background:var(--bluui-surface);border:1px solid var(--bluui-control-border);border-radius:5px;cursor:pointer}.blu-chart__stage[tabindex]:focus-visible{outline-offset:-3px}.blu-chart__state-announcement{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.blu-chart__patterns{display:flex;align-items:center;gap:8px;font-size:12px;padding:6px 0 12px;cursor:pointer}.blu-chart__patterns input{width:24px;height:24px;margin:0;accent-color:var(--bluui-color-primary-solid)}.blu-chart__missing-note{margin:8px 12px;color:var(--bluui-text-muted);font-size:12px;line-height:1.5}.blu-chart .blu-chart__patterns input[type=checkbox]{-webkit-appearance:none;appearance:none;box-sizing:border-box;position:relative;display:inline-block;flex:0 0 22px;width:22px;height:22px;min-width:22px;min-height:22px;margin:0;padding:0;border:1.5px solid var(--bluui-control-border,#7b8799);border-radius:6px;background-color:var(--bluui-surface,#fff);background-image:none;box-shadow:0 1px 2px #0f172a0f;vertical-align:middle;cursor:pointer;opacity:1;filter:none;transition:background-color .12s ease,border-color .12s ease,box-shadow .12s ease}.blu-chart .blu-chart__patterns input[type=checkbox]:after{content:none}.blu-chart .blu-chart__patterns input[type=checkbox]:checked,.blu-chart .blu-chart__patterns input[type=checkbox]:indeterminate{border-color:var(--bluui-color-primary-solid,#4f46e5);background-color:var(--bluui-color-primary-solid,#4f46e5)}.blu-chart .blu-chart__patterns input[type=checkbox]:checked:after,.blu-chart .blu-chart__patterns input[type=checkbox]:indeterminate:after{content:"";box-sizing:content-box;position:absolute;width:10px;height:6px;inset:5px auto auto 4px;border:solid var(--bluui-color-primary-contrast,#fff);border-width:0 0 2px 2px;border-radius:0;background:none;-webkit-mask:none;mask:none;transform:rotate(-45deg);pointer-events:none}.blu-chart .blu-chart__patterns input[type=checkbox]:indeterminate:after{height:0;top:8px;border-width:0 0 2px;transform:none}.blu-chart .blu-chart__patterns input[type=checkbox]:hover:not(:disabled){border-color:var(--bluui-color-primary-solid,#4f46e5);box-shadow:0 0 0 3px var(--bluui-color-primary-soft,#eef2ff)}.blu-chart .blu-chart__patterns input[type=checkbox]:focus-visible{outline:2px solid var(--bluui-color-primary-solid,#4f46e5);outline-offset:3px}.blu-chart .blu-chart__patterns input[type=checkbox]:disabled{border-color:var(--bluui-border-strong,#b8c4d4);background-color:var(--bluui-surface-muted,#f7f8fb);box-shadow:none;cursor:not-allowed}.blu-chart .blu-chart__patterns input[type=checkbox]:disabled:checked,.blu-chart .blu-chart__patterns input[type=checkbox]:disabled:indeterminate{border-color:var(--bluui-text-muted,#5c6b80);background-color:var(--bluui-text-muted,#5c6b80)}@media(prefers-reduced-motion:reduce){.blu-chart .blu-chart__patterns input[type=checkbox]{transition:none}}.blu-chart .blu-chart__patterns input[type=checkbox]:before{content:none}@media(forced-colors:active){.blu-chart .blu-chart__patterns input[type=checkbox],.blu-chart .blu-chart__patterns input[type=checkbox]:checked,.blu-chart .blu-chart__patterns input[type=checkbox]:indeterminate,.blu-chart .blu-chart__patterns input[type=checkbox]:disabled,.blu-chart .blu-chart__patterns input[type=checkbox]:disabled:checked,.blu-chart .blu-chart__patterns input[type=checkbox]:disabled:indeterminate{-webkit-appearance:checkbox;appearance:auto;background:revert;border:revert;box-shadow:none;forced-color-adjust:auto}.blu-chart .blu-chart__patterns input[type=checkbox]:checked:after,.blu-chart .blu-chart__patterns input[type=checkbox]:indeterminate:after{content:none}}