apexcharts 7.9.0 → 7.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/dist/apexcharts.common.js +2 -2
  2. package/dist/apexcharts.core.js +58 -37
  3. package/dist/apexcharts.core.min.js +2 -2
  4. package/dist/apexcharts.esm.js +10 -8
  5. package/dist/apexcharts.js +83 -60
  6. package/dist/apexcharts.min.js +2 -2
  7. package/dist/apexcharts.ssr.common.js +2 -2
  8. package/dist/apexcharts.ssr.esm.js +83 -60
  9. package/dist/area.common.js +1 -1
  10. package/dist/area.esm.js +1 -1
  11. package/dist/bar.common.js +1 -1
  12. package/dist/bar.esm.js +1 -1
  13. package/dist/bar.js +1 -1
  14. package/dist/boxPlot.common.js +1 -1
  15. package/dist/boxPlot.esm.js +1 -1
  16. package/dist/bubble.common.js +1 -1
  17. package/dist/bubble.esm.js +1 -1
  18. package/dist/candlestick.common.js +1 -1
  19. package/dist/candlestick.esm.js +1 -1
  20. package/dist/candlestick.js +1 -1
  21. package/dist/column.common.js +1 -1
  22. package/dist/column.esm.js +1 -1
  23. package/dist/core.common.js +2 -2
  24. package/dist/core.esm.js +58 -37
  25. package/dist/donut.common.js +1 -1
  26. package/dist/donut.esm.js +1 -1
  27. package/dist/dumbbell.common.js +1 -1
  28. package/dist/dumbbell.esm.js +1 -1
  29. package/dist/features/all.common.js +2 -2
  30. package/dist/features/all.esm.js +2 -2
  31. package/dist/features/annotations.common.js +1 -1
  32. package/dist/features/annotations.esm.js +1 -1
  33. package/dist/features/annotations.js +1 -1
  34. package/dist/features/context-menu.common.js +1 -1
  35. package/dist/features/context-menu.esm.js +1 -1
  36. package/dist/features/context-menu.js +1 -1
  37. package/dist/features/drilldown.common.js +1 -1
  38. package/dist/features/drilldown.esm.js +1 -1
  39. package/dist/features/drilldown.js +1 -1
  40. package/dist/features/dumbbell.common.js +1 -1
  41. package/dist/features/dumbbell.esm.js +1 -1
  42. package/dist/features/dumbbell.js +1 -1
  43. package/dist/features/exports.common.js +1 -1
  44. package/dist/features/exports.esm.js +1 -1
  45. package/dist/features/exports.js +1 -1
  46. package/dist/features/facet.common.js +1 -1
  47. package/dist/features/facet.esm.js +1 -1
  48. package/dist/features/facet.js +1 -1
  49. package/dist/features/highlight-filter.common.js +1 -1
  50. package/dist/features/highlight-filter.esm.js +1 -1
  51. package/dist/features/highlight-filter.js +1 -1
  52. package/dist/features/history.common.js +1 -1
  53. package/dist/features/history.esm.js +1 -1
  54. package/dist/features/history.js +1 -1
  55. package/dist/features/ink.common.js +1 -1
  56. package/dist/features/ink.esm.js +1 -1
  57. package/dist/features/ink.js +1 -1
  58. package/dist/features/keyboard.common.js +1 -1
  59. package/dist/features/keyboard.esm.js +1 -1
  60. package/dist/features/keyboard.js +1 -1
  61. package/dist/features/legend.common.js +2 -2
  62. package/dist/features/legend.esm.js +2 -2
  63. package/dist/features/legend.js +2 -2
  64. package/dist/features/link.common.js +1 -1
  65. package/dist/features/link.esm.js +1 -1
  66. package/dist/features/link.js +1 -1
  67. package/dist/features/marks.common.js +1 -1
  68. package/dist/features/marks.esm.js +1 -1
  69. package/dist/features/marks.js +1 -1
  70. package/dist/features/measure.common.js +1 -1
  71. package/dist/features/measure.esm.js +1 -1
  72. package/dist/features/measure.js +1 -1
  73. package/dist/features/morph.common.js +1 -1
  74. package/dist/features/morph.esm.js +1 -1
  75. package/dist/features/morph.js +1 -1
  76. package/dist/features/perspectives.common.js +2 -2
  77. package/dist/features/perspectives.esm.js +16 -5
  78. package/dist/features/perspectives.js +2 -2
  79. package/dist/features/raincloud.common.js +1 -1
  80. package/dist/features/raincloud.esm.js +1 -1
  81. package/dist/features/raincloud.js +1 -1
  82. package/dist/features/renderer-canvas.common.js +1 -1
  83. package/dist/features/renderer-canvas.esm.js +1 -1
  84. package/dist/features/renderer-canvas.js +1 -1
  85. package/dist/features/stats.common.js +1 -1
  86. package/dist/features/stats.esm.js +1 -1
  87. package/dist/features/stats.js +1 -1
  88. package/dist/features/storyboard.common.js +2 -2
  89. package/dist/features/storyboard.esm.js +16 -5
  90. package/dist/features/storyboard.js +2 -2
  91. package/dist/features/streamgraph.common.js +1 -1
  92. package/dist/features/streamgraph.esm.js +1 -1
  93. package/dist/features/streamgraph.js +1 -1
  94. package/dist/features/toolbar.common.js +1 -1
  95. package/dist/features/toolbar.esm.js +1 -1
  96. package/dist/features/toolbar.js +1 -1
  97. package/dist/features/trellis.common.js +2 -2
  98. package/dist/features/trellis.esm.js +13 -3
  99. package/dist/features/trellis.js +2 -2
  100. package/dist/features/waterfall.common.js +1 -1
  101. package/dist/features/waterfall.esm.js +1 -1
  102. package/dist/features/waterfall.js +1 -1
  103. package/dist/features/weave.common.js +1 -1
  104. package/dist/features/weave.esm.js +1 -1
  105. package/dist/features/weave.js +1 -1
  106. package/dist/heatmap.common.js +1 -1
  107. package/dist/heatmap.esm.js +1 -1
  108. package/dist/heatmap.js +1 -1
  109. package/dist/histogram.common.js +1 -1
  110. package/dist/histogram.esm.js +1 -1
  111. package/dist/icicle.common.js +1 -1
  112. package/dist/icicle.esm.js +1 -1
  113. package/dist/icicle.js +1 -1
  114. package/dist/line.common.js +1 -1
  115. package/dist/line.esm.js +1 -1
  116. package/dist/line.js +1 -1
  117. package/dist/pictograms.common.js +1 -1
  118. package/dist/pictograms.esm.js +1 -1
  119. package/dist/pictograms.js +1 -1
  120. package/dist/pie.common.js +1 -1
  121. package/dist/pie.esm.js +1 -1
  122. package/dist/pie.js +1 -1
  123. package/dist/polarArea.common.js +1 -1
  124. package/dist/polarArea.esm.js +1 -1
  125. package/dist/radar.common.js +1 -1
  126. package/dist/radar.esm.js +1 -1
  127. package/dist/radar.js +1 -1
  128. package/dist/radialBar.common.js +1 -1
  129. package/dist/radialBar.esm.js +1 -1
  130. package/dist/radialBar.js +1 -1
  131. package/dist/raincloud.common.js +1 -1
  132. package/dist/raincloud.esm.js +1 -1
  133. package/dist/rangeArea.common.js +1 -1
  134. package/dist/rangeArea.esm.js +1 -1
  135. package/dist/rangeBar.common.js +1 -1
  136. package/dist/rangeBar.esm.js +1 -1
  137. package/dist/scatter.common.js +1 -1
  138. package/dist/scatter.esm.js +1 -1
  139. package/dist/streamgraph.common.js +1 -1
  140. package/dist/streamgraph.esm.js +1 -1
  141. package/dist/sunburst.common.js +1 -1
  142. package/dist/sunburst.esm.js +1 -1
  143. package/dist/sunburst.js +1 -1
  144. package/dist/treemap.common.js +1 -1
  145. package/dist/treemap.esm.js +1 -1
  146. package/dist/treemap.js +1 -1
  147. package/dist/unit-shapes.common.js +1 -1
  148. package/dist/unit-shapes.esm.js +1 -1
  149. package/dist/unit-shapes.js +1 -1
  150. package/dist/unit.common.js +1 -1
  151. package/dist/unit.esm.js +1 -1
  152. package/dist/unit.js +1 -1
  153. package/dist/violin.common.js +1 -1
  154. package/dist/violin.esm.js +1 -1
  155. package/dist/violin.js +1 -1
  156. package/dist/waterfall.common.js +1 -1
  157. package/dist/waterfall.esm.js +1 -1
  158. package/package.json +2 -1
  159. package/src/apexcharts.js +13 -23
  160. package/src/entries/full.js +13 -6
  161. package/src/modules/ChartFactory.js +27 -7
  162. package/src/modules/Data.js +2 -7
  163. package/src/modules/RendererController.js +7 -5
  164. package/src/modules/license/LicenseEnforcer.js +29 -7
  165. package/src/utils/MissingFeature.js +35 -0
@@ -54,7 +54,7 @@ var __async = (__this, __arguments, generator) => {
54
54
  });
55
55
  };
56
56
  /*!
57
- * ApexCharts v7.9.0
57
+ * ApexCharts v7.9.1
58
58
  * (c) 2018-2026 ApexCharts
59
59
  */
60
60
 
@@ -7164,10 +7164,15 @@ var __async = (__this, __arguments, generator) => {
7164
7164
  globalThis[REGISTRY_KEY$1]) {
7165
7165
  globalThis[REGISTRY_KEY$1] = {};
7166
7166
  }
7167
+ const MISSING_KEY = "__apexcharts_missing_types__";
7167
7168
  if (!/** @type {any} */
7168
7169
  globalThis[CUSTOM_KEY]) {
7169
7170
  globalThis[CUSTOM_KEY] = /* @__PURE__ */ new Set();
7170
7171
  }
7172
+ if (!/** @type {any} */
7173
+ globalThis[MISSING_KEY]) {
7174
+ globalThis[MISSING_KEY] = /* @__PURE__ */ new Set();
7175
+ }
7171
7176
  function getRegistry$1() {
7172
7177
  return (
7173
7178
  /** @type {any} */
@@ -7200,9 +7205,17 @@ var __async = (__this, __arguments, generator) => {
7200
7205
  const Cls = getRegistry$1()[type];
7201
7206
  if (!Cls) {
7202
7207
  const optIn = RESERVED_TYPES.includes(type);
7203
- throw new Error(
7204
- `ApexCharts: chart type "${type}" is not registered. Bundler: import 'apexcharts/${type}'. Script tag: add <script src=".../dist/${type}.js"> after the ApexCharts script` + (optIn ? `. This type is opt-in and is NOT in the full apexcharts.js, so loading that bundle instead will not register it.` : `, or load the full apexcharts.js instead.`)
7208
+ const message = `ApexCharts: chart type "${type}" is not registered. Bundler: import 'apexcharts/${type}'. Script tag: add <script src=".../dist/${type}.js"> after the ApexCharts script` + (optIn ? `. This type is opt-in and is NOT in the full apexcharts.js, so loading that bundle instead will not register it.` : `, or load the full apexcharts.js instead.`);
7209
+ const missing = (
7210
+ /** @type {Set<string>} */
7211
+ /** @type {any} */
7212
+ globalThis[MISSING_KEY]
7205
7213
  );
7214
+ if (!missing.has(type)) {
7215
+ missing.add(type);
7216
+ globalThis.console.error(message);
7217
+ }
7218
+ throw new Error(message);
7206
7219
  }
7207
7220
  return Cls;
7208
7221
  }
@@ -23074,6 +23087,12 @@ var __async = (__this, __arguments, generator) => {
23074
23087
  if (!name2) return null;
23075
23088
  return getTransforms()[name2] || null;
23076
23089
  }
23090
+ function warnMissingFeature(subject, feature, opts = {}) {
23091
+ const { entry, tail } = opts;
23092
+ globalThis.console.warn(
23093
+ `ApexCharts: ${subject} requires the ${feature} feature, which is not in this bundle. Bundler: import 'apexcharts/features/${feature}'` + (entry ? ` (or from 'apexcharts/${entry}')` : "") + `. Script tag: add <script src='.../dist/features/${feature}.js'> after apexcharts.js.` + (tail ? ` ${tail}` : "")
23094
+ );
23095
+ }
23077
23096
  function drilldownById(w, id) {
23078
23097
  const dd = w.config.drilldown;
23079
23098
  const list = dd && Array.isArray(dd.series) ? dd.series : [];
@@ -24509,9 +24528,7 @@ var __async = (__this, __arguments, generator) => {
24509
24528
  if (!Array.isArray(ser) || !feature) return ser;
24510
24529
  if (!this._warnedMissingTransform) {
24511
24530
  this._warnedMissingTransform = true;
24512
- console.warn(
24513
- `ApexCharts: chart.type '${name2}' requires the ${feature} feature, which is not in this bundle. Bundler: import 'apexcharts/features/${feature}' (or from 'apexcharts/${name2}'). Script tag: add <script src='.../dist/features/${feature}.js'> after apexcharts.js.`
24514
- );
24531
+ warnMissingFeature(`chart.type '${name2}'`, feature, { entry: name2 });
24515
24532
  }
24516
24533
  return ser.map((s2) => __spreadProps(__spreadValues({}, s2), { data: [] }));
24517
24534
  }
@@ -26190,7 +26207,7 @@ var __async = (__this, __arguments, generator) => {
26190
26207
  /**
26191
26208
  * @param {string} state
26192
26209
  */
26193
- toggleAllTooltipSeriesGroups(state) {
26210
+ toggleAllTooltipSeriesGroups(state2) {
26194
26211
  const w = this.w;
26195
26212
  const ttCtx = this.ttCtx;
26196
26213
  if (ttCtx.allTooltipSeriesGroups.length === 0) {
@@ -26200,7 +26217,7 @@ var __async = (__this, __arguments, generator) => {
26200
26217
  }
26201
26218
  const allTooltipSeriesGroups = ttCtx.allTooltipSeriesGroups;
26202
26219
  for (let i2 = 0; i2 < allTooltipSeriesGroups.length; i2++) {
26203
- if (state === "enable") {
26220
+ if (state2 === "enable") {
26204
26221
  allTooltipSeriesGroups[i2].classList.add("apexcharts-active");
26205
26222
  allTooltipSeriesGroups[i2].style.display = w.config.tooltip.items.display;
26206
26223
  } else {
@@ -31053,8 +31070,12 @@ var __async = (__this, __arguments, generator) => {
31053
31070
  return this._activeKind;
31054
31071
  }
31055
31072
  if (mode === desired) {
31056
- console.warn(
31057
- `[apexcharts] renderer:"${desired}" requested but that renderer is not in the default bundle. Bundler: import 'apexcharts/features/renderer-${desired}'. Script tag: add <script src=".../dist/features/renderer-${desired}.js"> after apexcharts.js. Falling back to SVG.`
31073
+ warnMissingFeature(
31074
+ `\`chart.renderer: '${desired}'\``,
31075
+ `renderer-${desired}`,
31076
+ {
31077
+ tail: "Falling back to SVG."
31078
+ }
31058
31079
  );
31059
31080
  }
31060
31081
  } else if (mode === "canvas" && hasCanvasUnsupportedFeature(this.w)) {
@@ -32592,7 +32613,7 @@ var __async = (__this, __arguments, generator) => {
32592
32613
  ros.delete(fn);
32593
32614
  }
32594
32615
  }
32595
- const apexCSS = "@keyframes opaque {\n 0% {\n opacity: 0\n }\n\n to {\n opacity: 1\n }\n}\n\n.apexcharts-canvas {\n position: relative;\n direction: ltr !important;\n user-select: none;\n /* Focus indicator colour. Themes override below. */\n --apexcharts-focus-color: #008FFB;\n}\n\n/* Dark theme & high-contrast: brighter focus colour for sufficient contrast. */\n.apexcharts-canvas .apexcharts-theme-dark,\n.apexcharts-theme-dark.apexcharts-canvas {\n --apexcharts-focus-color: #FFD500;\n}\n.apexcharts-canvas.apexcharts-high-contrast,\n.apexcharts-high-contrast.apexcharts-canvas {\n --apexcharts-focus-color: #FFFF00;\n}\n\n/* Visually-hidden aria-live status region (WCAG 4.1.3 Status Messages). */\n.apexcharts-sr-status {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n/* Respect OS-level reduced-motion preference (WCAG 2.3.3).\n *\n * Scoped with :not() so chart.animations.respectReducedMotion:false opts a\n * chart out of the CSS policy as well as the JS one (Core.setupElements puts\n * the class on the canvas). Without the scope the flag only half worked: it\n * turned the JS tweens back on but could not reach a stylesheet, so everything\n * CSS-driven, the pie slice-offset slide, the drilldown spinner, the tooltip\n * and crosshair fades, stayed frozen with no way out short of out-specifying\n * an !important rule from the page. */\n@media (prefers-reduced-motion: reduce) {\n .apexcharts-canvas:not(.apexcharts-ignore-reduced-motion) *,\n .apexcharts-canvas:not(.apexcharts-ignore-reduced-motion) *::before,\n .apexcharts-canvas:not(.apexcharts-ignore-reduced-motion) *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n}\n\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px\n}\n\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0, 0, 0, .5);\n box-shadow: 0 0 1px rgba(255, 255, 255, .5);\n -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5)\n}\n\n.apexcharts-inner {\n position: relative\n}\n\n.apexcharts-text tspan {\n font-family: inherit\n}\n\nrect.legend-mouseover-inactive,\n.legend-mouseover-inactive rect,\n.legend-mouseover-inactive path,\n.legend-mouseover-inactive circle,\n.legend-mouseover-inactive line,\n.legend-mouseover-inactive text.apexcharts-yaxis-title-text,\n.legend-mouseover-inactive text.apexcharts-yaxis-label {\n transition: .15s ease all;\n opacity: .2\n}\n\n/* Linked Views (#4): per-mark crossfilter dim. Applied to individual data\n marks (not whole series) whose x is outside the brushed range. Opacity is\n overridable per chart via the --apx-cf-dim custom property. */\n.apexcharts-crossfilter-dimmed {\n transition: opacity .25s ease;\n opacity: var(--apx-cf-dim, .2)\n}\n\n/* Linked Views (#4): default styling for the built-in crossfilter data table\n (cf.dataTable). Deliberately light so host styles can override. */\n.apexcharts-cf-table {\n border-collapse: collapse;\n width: 100%;\n font-size: 13px;\n}\n.apexcharts-cf-table caption {\n caption-side: bottom;\n text-align: right;\n padding: 6px 2px;\n font-size: 12px;\n opacity: .7\n}\n.apexcharts-cf-table th,\n.apexcharts-cf-table td {\n padding: 6px 10px;\n text-align: left;\n border-bottom: 1px solid rgba(0, 0, 0, .08)\n}\n.apexcharts-cf-table th {\n font-weight: 600;\n border-bottom-width: 2px\n}\n.apexcharts-cf-table tbody tr:hover {\n background: rgba(99, 102, 241, .06)\n}\n\n/* Measure ruler (#18): measure / delta ruler.\n Theme via these classes or the --apx-measure-* custom properties below\n (config `chart.measure.colors` overrides both). The ruler group also carries\n a direction class: apexcharts-measure-up | -down | -flat.\n Element classes:\n .apexcharts-measure-band shaded span band\n .apexcharts-measure-vline vertical guide lines\n .apexcharts-measure-line free-mode diagonal line\n .apexcharts-measure-label-bg readout box .apexcharts-measure-label text\n Colors are applied as SVG presentation attributes, so any rule you write on\n these classes overrides them. */\n.apexcharts-canvas {\n --apx-measure-up: #16a34a;\n --apx-measure-down: #dc2626;\n --apx-measure-neutral: #64748b;\n --apx-measure-guide: #94a3b8;\n}\n.apexcharts-measure-capture {\n cursor: crosshair;\n}\n\n/* Radial Actions (#chrome): right-click context menu. Theme via these classes\n or the --apx-menu-* custom properties. */\n.apexcharts-canvas {\n --apx-menu-bg: #ffffff;\n --apx-menu-fg: #1e293b;\n --apx-menu-border: #e2e8f0;\n --apx-menu-hover: #f1f5f9;\n --apx-menu-shadow: rgba(15, 23, 42, 0.18);\n}\n.apexcharts-context-menu {\n min-width: 168px;\n padding: 4px;\n border-radius: 8px;\n background: var(--apx-menu-bg);\n border: 1px solid var(--apx-menu-border);\n box-shadow: 0 6px 22px var(--apx-menu-shadow);\n font-family: Helvetica, Arial, sans-serif;\n font-size: 13px;\n z-index: 20;\n user-select: none;\n}\n.apexcharts-context-menu-item {\n display: block;\n width: 100%;\n box-sizing: border-box;\n text-align: left;\n padding: 7px 12px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: var(--apx-menu-fg);\n font: inherit;\n cursor: pointer;\n}\n.apexcharts-context-menu-item:hover,\n.apexcharts-context-menu-item--active {\n background: var(--apx-menu-hover);\n}\n.apexcharts-context-menu-item:focus {\n outline: none;\n}\n\n/* Ink Layer (#7): the floating note editor card, opened by clicking an\n ink-managed annotation. Theme via these classes or the --apx-ink-* vars. */\n.apexcharts-canvas {\n --apx-ink-card-bg: #ffffff;\n --apx-ink-card-fg: #1e293b;\n --apx-ink-card-border: #e2e8f0;\n --apx-ink-card-hover: #f1f5f9;\n --apx-ink-card-accent: #6366f1;\n --apx-ink-card-shadow: rgba(15, 23, 42, 0.18);\n}\n.apexcharts-ink-card {\n position: absolute;\n z-index: 25;\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 8px;\n border-radius: 8px;\n background: var(--apx-ink-card-bg);\n border: 1px solid var(--apx-ink-card-border);\n box-shadow: 0 6px 22px var(--apx-ink-card-shadow);\n font-family: Helvetica, Arial, sans-serif;\n font-size: 12px;\n color: var(--apx-ink-card-fg);\n user-select: none;\n}\n.apexcharts-ink-card-row {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.apexcharts-ink-card input.apexcharts-ink-editor {\n flex: 1 1 auto;\n width: 150px;\n min-width: 0;\n box-sizing: border-box;\n padding: 4px 6px;\n font: inherit;\n color: inherit;\n background: transparent;\n border: 1px solid var(--apx-ink-card-border);\n border-radius: 5px;\n}\n.apexcharts-ink-card input.apexcharts-ink-editor:focus {\n outline: none;\n border-color: var(--apx-ink-card-accent);\n}\n.apexcharts-ink-btn {\n flex: 0 0 auto;\n width: 24px;\n height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: 12px;\n line-height: 1;\n cursor: pointer;\n}\n.apexcharts-ink-btn:hover,\n.apexcharts-ink-btn--active {\n background: var(--apx-ink-card-hover);\n}\n.apexcharts-ink-btn:focus-visible,\n.apexcharts-ink-swatch:focus-visible {\n outline: 2px solid var(--apx-ink-card-accent);\n outline-offset: 1px;\n}\n.apexcharts-ink-btn--bold {\n font-weight: 700;\n}\n.apexcharts-ink-btn--delete:hover {\n color: #dc2626;\n}\n.apexcharts-ink-swatch {\n flex: 0 0 auto;\n width: 16px;\n height: 16px;\n padding: 0;\n border: 1px solid rgba(100, 116, 139, 0.45);\n border-radius: 50%;\n cursor: pointer;\n}\n.apexcharts-ink-swatch--active {\n box-shadow:\n 0 0 0 2px var(--apx-ink-card-bg),\n 0 0 0 4px var(--apx-ink-card-accent);\n}\n.apexcharts-ink-sep {\n flex: 0 0 auto;\n width: 1px;\n height: 16px;\n margin: 0 2px;\n background: var(--apx-ink-card-border);\n}\n.apexcharts-ink-cardlabel {\n flex: 0 0 auto;\n font-size: 10px;\n letter-spacing: 0.4px;\n text-transform: uppercase;\n opacity: 0.65;\n margin-right: 2px;\n}\n.apexcharts-ink-marker-size {\n flex: 0 0 auto;\n min-width: 16px;\n text-align: center;\n font-variant-numeric: tabular-nums;\n}\n\n.apexcharts-legend-text {\n padding-left: 15px;\n margin-left: -15px;\n}\n\n.apexcharts-legend-series[role=\"button\"]:focus {\n outline: 2px solid var(--apexcharts-focus-color, #008FFB);\n outline-offset: 2px;\n}\n\n.apexcharts-legend-series[role=\"button\"]:focus:not(:focus-visible) {\n outline: none;\n}\n\n.apexcharts-legend-series[role=\"button\"]:focus-visible {\n outline: 2px solid var(--apexcharts-focus-color, #008FFB);\n outline-offset: 2px;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0\n}\n\n/* A series still playing its exit tween stays painted so it can visibly shrink\n away, hiding it on the first frame leaves a hole in a stacked chart for the\n length of the animation. Dropped once the tween lands. */\n.apexcharts-series-collapsed.apexcharts-series-collapsing {\n opacity: 1\n}\n\n/* Its labels ride the shrinking marks, but a mark runs out of room for its text\n well before it reaches zero, so fade them across the exit instead of holding\n them crisp over a sliver. Duration is set inline from dynamicAnimation.speed. */\n.apexcharts-datalabels.apexcharts-series-collapsing {\n animation: apexcharts-datalabels-exit var(--apexcharts-dl-exit, 400ms) ease-in\n forwards;\n}\n\n@keyframes apexcharts-datalabels-exit {\n from {\n opacity: 1\n }\n to {\n opacity: 0\n }\n}\n\n.apexcharts-canvas svg:focus:not(:focus-visible) {\n outline: none;\n}\n\n/* Keyboard navigation focus indicator on SVG data elements.\n SVG elements don't support CSS outline, so we use stroke. */\n.apexcharts-bar-area.apexcharts-keyboard-focused,\n.apexcharts-candlestick-area.apexcharts-keyboard-focused,\n.apexcharts-boxPlot-area.apexcharts-keyboard-focused,\n.apexcharts-violin-area.apexcharts-keyboard-focused,\n.apexcharts-rangebar-area.apexcharts-keyboard-focused,\n.apexcharts-pie-area.apexcharts-keyboard-focused,\n.apexcharts-heatmap-rect.apexcharts-keyboard-focused,\n.apexcharts-treemap-rect.apexcharts-keyboard-focused,\n.apexcharts-keyboard-focus-ring {\n stroke: var(--apexcharts-focus-color, #008FFB);\n stroke-width: 2;\n stroke-opacity: 1;\n}\n\n/* A heatmap or a bar-like painted to canvas has no node per cell or mark, so\n keyboard focus draws this outline over the focused one instead. */\n.apexcharts-keyboard-focus-ring {\n fill: none;\n pointer-events: none;\n}\n\n.apexcharts-tooltip {\n --apx-tt-bg: #ffffff;\n /* Shared by the body and the arrow's two outward facets, so the\n * hairline reads as one continuous outline around the whole shape.\n * Keep it strong enough to survive on its own: the shadow below is\n * elevation, not edge definition. */\n --apx-tt-border: rgba(15, 23, 42, 0.12);\n /* Elevation, in three layers: a tight contact shadow that anchors the\n * bottom edge, a directional key shadow for the lift, and a wide\n * ambient one that grounds the whole box. Each is weaker and more\n * diffuse than the last.\n *\n * A tooltip is unusual in that it floats over *data*, so reach costs\n * more than it does on a page: every pixel the shadow travels tints a\n * bar or a line the reader is trying to compare. These numbers are\n * tuned to keep the near-edge contrast that reads as elevation while\n * dropping the long low haze that only muddies the plot.\n *\n * Note there is deliberately no `0 0 0 1px` ring layer. That used to\n * stand in for edge definition back when --apx-tt-border was barely\n * visible; now that the border is a real hairline (and the arrow\n * shares it) a ring only double-draws the outline, and being spread\n * rather than offset it leaked ink upward too, flattening the lift.\n *\n * `--apx-tt-shadow-dir` flips the whole stack's Y in one place — see\n * the `[data-placement=\"bottom\"]` rule further down. */\n --apx-tt-shadow-dir: 1;\n --apx-tt-shadow: 0 calc(var(--apx-tt-shadow-dir) * 1px) 2px rgba(15, 23, 42, 0.06), 0 calc(var(--apx-tt-shadow-dir) * 4px) 8px -2px rgba(15, 23, 42, 0.10), 0 calc(var(--apx-tt-shadow-dir) * 12px) 20px -8px rgba(15, 23, 42, 0.14);\n --apx-tt-arrow-bg: var(--apx-tt-bg);\n --apx-tt-color: #0f172a;\n --apx-tt-color-muted: rgba(15, 23, 42, 0.55);\n border-radius: 8px;\n background: var(--apx-tt-bg);\n border: 1px solid var(--apx-tt-border);\n box-shadow: var(--apx-tt-shadow);\n color: var(--apx-tt-color);\n cursor: default;\n font-size: 13px;\n left: 0;\n top: 0;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n display: flex;\n flex-direction: column;\n padding: 2px 0;\n white-space: nowrap;\n z-index: 12;\n transition: opacity .12s ease\n}\n\n/* While the tooltip is visible, smoothly animate position changes\n * between data points. Kept short (160 ms) and ease-out so it stays\n * responsive — too long would feel laggy when sweeping across many\n * points fast. The position transition is only attached after the\n * first paint (Position.applyTooltipPosition flips `data-positioned`\n * once the tooltip has been placed) so the *first* show doesn't slide\n * the tooltip in from the previously-stale (0,0) coordinates. */\n.apexcharts-tooltip.apexcharts-active {\n opacity: 1;\n transition: opacity .12s ease\n}\n/* Only while shown: a hidden box keeps its last position, which on a short\n * chart is outside the chart, over whatever the page has there. */\n.apexcharts-tooltip.apexcharts-tooltip-interactive.apexcharts-active {\n pointer-events: auto;\n}\n.apexcharts-tooltip.apexcharts-active[data-positioned=\"true\"] {\n transition: opacity .12s ease, left .16s ease-out, top .16s ease-out\n}\n\n.apexcharts-tooltip.apexcharts-theme-light {\n /* defaults already set above; class kept for backward-compat selectors */\n}\n\n.apexcharts-tooltip.apexcharts-theme-dark {\n --apx-tt-bg: #1c1c1f;\n --apx-tt-border: rgba(255, 255, 255, 0.16);\n /* Dark needs more alpha than light to register at all, but not as much\n * as it used to: the light rim above now carries the edge, so the\n * shadow is free to be pure elevation instead of doubling as an\n * outline. Same geometry as light, heavier ink. */\n --apx-tt-shadow: 0 calc(var(--apx-tt-shadow-dir) * 1px) 2px rgba(0, 0, 0, 0.24), 0 calc(var(--apx-tt-shadow-dir) * 4px) 8px -2px rgba(0, 0, 0, 0.30), 0 calc(var(--apx-tt-shadow-dir) * 12px) 20px -8px rgba(0, 0, 0, 0.38);\n --apx-tt-color: #f3f4f6;\n --apx-tt-color-muted: rgba(243, 244, 246, 0.55);\n}\n\n.apexcharts-tooltip * {\n font-family: inherit\n}\n\n/* Point-annotation hover tooltip (apexcharts/apexcharts.js#2424). Reuses the\n * glass body/border/shadow from `.apexcharts-tooltip` but holds free-form\n * content, so it needs its own padding, wrapping and a sane max width. */\n.apexcharts-tooltip.apexcharts-annotation-tooltip {\n padding: 6px 10px;\n max-width: 240px;\n white-space: normal;\n line-height: 1.4;\n pointer-events: none;\n z-index: 13\n}\n\n.apexcharts-tooltip-title {\n padding: 8px 12px 4px;\n font-size: 12px;\n font-weight: 600;\n letter-spacing: 0.01em;\n color: var(--apx-tt-color-muted);\n background: transparent;\n border-bottom: none;\n margin-bottom: 0\n}\n\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title,\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\n background: transparent;\n border-bottom: none\n}\n\n/* `fillSeriesColor`: each series-group already paints itself with the\n * series colour. Drop the glass body entirely (transparent bg, no\n * border, no backdrop-filter, no padding) and clip the coloured\n * series-group(s) to the tooltip's rounded corners so they fill the\n * shell edge-to-edge. Text inside the coloured group is forced to\n * white for contrast. */\n.apexcharts-tooltip.apexcharts-tooltip-fill-series {\n background: transparent;\n -webkit-backdrop-filter: none;\n backdrop-filter: none;\n border: none;\n padding: 0;\n overflow: hidden;\n color: #fff\n}\n\n.apexcharts-tooltip.apexcharts-tooltip-fill-series .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.22);\n color: #fff;\n opacity: 1;\n padding: 6px 12px\n}\n\n.apexcharts-tooltip.apexcharts-tooltip-fill-series .apexcharts-tooltip-series-group {\n color: #fff\n}\n\n/* Arrow connector — a 45°-rotated square straddling the body's edge, so\n * the body's 1px border runs continuously out across the arrow and back.\n * The two facets that face away from the tooltip carry the border; the\n * two that face into it carry none, and the square's opaque fill covers\n * the segment of the body's own border it sits on, hiding the seam.\n *\n * This is why it's a rotated square and not a triangle: `clip-path`\n * erases `border` and `box-shadow` along with everything outside the\n * polygon, which left `filter: drop-shadow` as the only way to suggest\n * an edge — and a drop-shadow can only ever blur one, never draw a\n * hairline. Nothing here needs a filter.\n *\n * Geometry: a square of side S rotated 45° reaches S/√2 from its centre\n * to each corner, so S = 10px gives the ~7px tip overhang that\n * ARROW_TIP_OVERHANG assumes (tooltip/constants.js) over a ~14px base.\n * The offsets park the square's *centre* 1px outside the padding box\n * (-6px = -1px border - 10px/2), i.e. exactly on the body's border line,\n * so the two borders meet end to end instead of overlapping or gapping.\n * `box-sizing` must be border-box or the bordered sides would grow the\n * square asymmetrically and knock its centre off that line.\n *\n * Along the edge, `--apx-tt-arrow-y` / `--apx-tt-arrow-x` are measured from\n * the body's outer edge, as every position the script works out is, while\n * `top` / `left` count from inside its 1px border: hence 6px back, not 5px,\n * or the arrow stands a pixel past the mark it points at. The 50% default\n * centres on the padding box, which is the body's centre either way. */\n.apexcharts-tooltip-arrow {\n position: absolute;\n box-sizing: border-box;\n width: 10px;\n height: 10px;\n background: var(--apx-tt-arrow-bg);\n transform: rotate(45deg);\n pointer-events: none;\n top: calc(var(--apx-tt-arrow-y, calc(50% + 1px)) - 6px)\n}\n\n/* Which two sides face outward depends on the placement. Under\n * `rotate(45deg)` the square's bottom-left corner swings to the left,\n * top-right to the right, top-left to the top and bottom-right to the\n * bottom — so the pair of borders below is always the two sharing the\n * corner that ends up as the tip. */\n.apexcharts-tooltip[data-placement=\"right\"] .apexcharts-tooltip-arrow {\n left: -6px;\n border-left: 1px solid var(--apx-tt-border);\n border-bottom: 1px solid var(--apx-tt-border)\n}\n\n.apexcharts-tooltip[data-placement=\"left\"] .apexcharts-tooltip-arrow {\n right: -6px;\n border-top: 1px solid var(--apx-tt-border);\n border-right: 1px solid var(--apx-tt-border)\n}\n\n/* Vertical arrow variants: tooltip is above/below the data point and the\n * arrow points down/up. The base rule above uses `--apx-tt-arrow-y` for\n * left/right placement; for top/bottom we centre on `--apx-tt-arrow-x`\n * instead (set by applyTooltipPosition). */\n.apexcharts-tooltip[data-placement=\"top\"] .apexcharts-tooltip-arrow,\n.apexcharts-tooltip[data-placement=\"bottom\"] .apexcharts-tooltip-arrow {\n top: auto;\n left: calc(var(--apx-tt-arrow-x, calc(50% + 1px)) - 6px)\n}\n\n.apexcharts-tooltip[data-placement=\"top\"] .apexcharts-tooltip-arrow {\n bottom: -6px;\n border-right: 1px solid var(--apx-tt-border);\n border-bottom: 1px solid var(--apx-tt-border)\n}\n\n.apexcharts-tooltip[data-placement=\"bottom\"] .apexcharts-tooltip-arrow {\n top: -6px;\n border-top: 1px solid var(--apx-tt-border);\n border-left: 1px solid var(--apx-tt-border)\n}\n\n/* When the tooltip is flipped below the data point, the default\n * downward-biased shadow leaves its top edge undefined. Negating the\n * direction casts the whole elevation upward instead, so the shadow\n * falls between the tooltip and the mark above it. One multiplier flips\n * all three layers together; the arrow needs no counterpart, since its\n * border doesn't depend on light direction. */\n.apexcharts-tooltip[data-placement=\"bottom\"] {\n --apx-tt-shadow-dir: -1\n}\n\n.apexcharts-tooltip-text-goals-value,\n.apexcharts-tooltip-text-y-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n margin-left: 5px;\n font-weight: 600\n}\n\n.apexcharts-tooltip-text-goals-label:empty,\n.apexcharts-tooltip-text-goals-value:empty,\n.apexcharts-tooltip-text-y-label:empty,\n.apexcharts-tooltip-text-y-value:empty,\n.apexcharts-tooltip-text-z-value:empty,\n.apexcharts-tooltip-title:empty {\n display: none\n}\n\n.apexcharts-tooltip-text-goals-label,\n.apexcharts-tooltip-text-goals-value {\n padding: 6px 0 5px\n}\n\n.apexcharts-tooltip-goals-group,\n.apexcharts-tooltip-text-goals-label,\n.apexcharts-tooltip-text-goals-value {\n display: flex\n}\n\n.apexcharts-tooltip-text-goals-label:not(:empty),\n.apexcharts-tooltip-text-goals-value:not(:empty) {\n margin-top: -6px\n}\n\n.apexcharts-tooltip-marker {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n width: 12px;\n height: 12px;\n margin-right: 6px;\n vertical-align: middle;\n color: inherit;\n}\n\n.apexcharts-tooltip-marker svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 4px 12px;\n display: none;\n gap: 8px;\n text-align: left;\n justify-content: left;\n align-items: center\n}\n\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\n opacity: 1\n}\n\n.apexcharts-tooltip-series-group.apexcharts-active:last-child,\n.apexcharts-tooltip-series-group:last-child {\n padding-bottom: 8px\n}\n\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px\n}\n\n/* `tooltip.compact`: a tight box instead of a card, for panels a normal card\n would cover (small multiples, sparklines, tiles). Only the box shrinks, so\n the arrow and every anchor rule still apply. Rows stay stacked when there\n are several series (the names are what tells them apart); a one-series\n chart collapses to a single line, see `-value-only` below. */\n.apexcharts-tooltip.apexcharts-tooltip-compact {\n padding: 3px 8px;\n font-size: 11px;\n line-height: 1.35\n}\n\n.apexcharts-tooltip-compact .apexcharts-tooltip-title {\n padding: 0;\n font-size: 11px;\n white-space: nowrap\n}\n\n.apexcharts-tooltip-compact .apexcharts-tooltip-series-group,\n.apexcharts-tooltip-compact .apexcharts-tooltip-series-group.apexcharts-active:last-child,\n.apexcharts-tooltip-compact .apexcharts-tooltip-series-group:last-child {\n padding: 0;\n gap: 5px\n}\n\n.apexcharts-tooltip-compact .apexcharts-tooltip-y-group {\n padding: 0\n}\n\n.apexcharts-tooltip-compact .apexcharts-tooltip-marker {\n width: 8px;\n height: 8px\n}\n\n/* A one-series panel: the series name repeats what the panel header already\n says, so the value stands alone and the x label becomes its prefix on one\n line (\"Aug 2024 6.59\"). */\n.apexcharts-tooltip.apexcharts-tooltip-compact.apexcharts-tooltip-value-only {\n /* The tooltip body is a flex COLUMN by default (title row, then series\n rows); one series needs no column, so the same box turns into one line. */\n flex-direction: row;\n align-items: baseline;\n gap: 6px\n}\n\n.apexcharts-tooltip-value-only .apexcharts-tooltip-marker {\n display: none\n}\n\n.apexcharts-tooltip-value-only .apexcharts-tooltip-text-y-label {\n display: none\n}\n\n.apexcharts-custom-tooltip,\n.apexcharts-tooltip-box {\n padding: 4px 8px\n}\n\n.apexcharts-tooltip-boxPlot {\n display: flex;\n flex-direction: column-reverse\n}\n\n.apexcharts-tooltip-box>div {\n margin: 4px 0\n}\n\n.apexcharts-tooltip-box span.value {\n font-weight: 700\n}\n\n.apexcharts-tooltip-rangebar {\n padding: 5px 8px\n}\n\n.apexcharts-tooltip-rangebar .category {\n font-weight: 600;\n color: #777\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n font-weight: 700;\n display: block;\n margin-bottom: 5px\n}\n\n/* Streamgraph: every band read out at one column, top-down in stacking order.\n * A row per band rather than the shared tooltip's list, because a streamgraph's\n * `[lo, hi]` are stacking offsets and the values the reader gave live on\n * w.streamgraphData. */\n.apexcharts-tooltip-stream {\n padding: 5px 8px\n}\n\n.apexcharts-tooltip-stream .apexcharts-tooltip-title {\n background: transparent;\n border: 0;\n padding: 0 0 4px;\n margin: 0;\n font-weight: 700\n}\n\n.apexcharts-tooltip-stream-band {\n display: flex;\n align-items: center;\n gap: 5px;\n line-height: 1.6;\n opacity: .72\n}\n\n.apexcharts-tooltip-stream-band.apexcharts-active {\n opacity: 1;\n font-weight: 700\n}\n\n.apexcharts-tooltip-stream-band .series-name {\n flex: 1 1 auto;\n margin-right: 8px\n}\n\n.apexcharts-tooltip-stream-band .value {\n font-weight: 700;\n margin-left: auto\n}\n\n.apexcharts-tooltip-stream-total {\n display: flex;\n align-items: center;\n margin-top: 4px;\n padding-top: 4px;\n border-top: 1px solid var(--apx-tt-border, rgba(15, 23, 42, .12))\n}\n\n.apexcharts-tooltip-stream-total .series-name {\n flex: 1 1 auto;\n font-weight: 600\n}\n\n.apexcharts-tooltip-stream-total .value {\n font-weight: 700;\n margin-left: auto\n}\n\n/* The band labels themselves. Pointer events off so a name never blocks a\n * hover on the band it sits on. */\n.apexcharts-streamgraph-label {\n pointer-events: none\n}\n\n/* X/Y axis tooltips — small popovers that label the crosshair on the\n * axes. Restyled to match the modern data-tooltip palette: solid white\n * body with a subtle border + soft drop-shadow, smaller font, rounded\n * corners. The arrows still use the CSS border-triangle technique\n * (cheap, crisp at small sizes); their colours flow from CSS variables\n * so light/dark themes only need one override per axis. */\n.apexcharts-xaxistooltip,\n.apexcharts-yaxistooltip {\n --apx-axt-bg: #ffffff;\n --apx-axt-border: rgba(15, 23, 42, 0.08);\n --apx-axt-color: #0f172a;\n --apx-axt-shadow: 0 4px 12px -4px rgba(15, 23, 42, 0.18), 0 1px 3px -1px rgba(15, 23, 42, 0.12);\n opacity: 0;\n pointer-events: none;\n color: var(--apx-axt-color);\n font-size: 12px;\n font-weight: 500;\n text-align: center;\n border-radius: 6px;\n position: absolute;\n z-index: 10;\n background: var(--apx-axt-bg);\n border: 1px solid var(--apx-axt-border);\n box-shadow: var(--apx-axt-shadow)\n}\n\n.apexcharts-xaxistooltip.apexcharts-theme-dark,\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\n --apx-axt-bg: #1c1c1f;\n --apx-axt-border: rgba(255, 255, 255, 0.1);\n --apx-axt-color: #f3f4f6;\n --apx-axt-shadow: 0 4px 12px -4px rgba(0, 0, 0, 0.55), 0 1px 3px -1px rgba(0, 0, 0, 0.45)\n}\n\n.apexcharts-xaxistooltip {\n padding: 4px 8px;\n transition: .15s ease all\n}\n\n.apexcharts-xaxistooltip:after,\n.apexcharts-xaxistooltip:before {\n left: 50%;\n border: solid transparent;\n content: \" \";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none\n}\n\n/* :before paints the 1px border outline of the triangle (slightly larger\n * than :after); :after sits inside and paints the fill — leaves a 1px\n * ring of :before visible at the edges. */\n.apexcharts-xaxistooltip:after {\n border-color: transparent;\n border-width: 5px;\n margin-left: -5px\n}\n\n.apexcharts-xaxistooltip:before {\n border-color: transparent;\n border-width: 6px;\n margin-left: -6px\n}\n\n.apexcharts-xaxistooltip-bottom:after,\n.apexcharts-xaxistooltip-bottom:before {\n bottom: 100%\n}\n\n.apexcharts-xaxistooltip-top:after,\n.apexcharts-xaxistooltip-top:before {\n top: 100%\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: var(--apx-axt-bg)\n}\n\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: var(--apx-axt-border)\n}\n\n.apexcharts-xaxistooltip-top:after {\n border-top-color: var(--apx-axt-bg)\n}\n\n.apexcharts-xaxistooltip-top:before {\n border-top-color: var(--apx-axt-border)\n}\n\n.apexcharts-xaxistooltip.apexcharts-active {\n opacity: 1;\n transition: .15s ease all\n}\n\n.apexcharts-yaxistooltip {\n padding: 3px 8px\n}\n\n.apexcharts-yaxistooltip:after,\n.apexcharts-yaxistooltip:before {\n top: 50%;\n border: solid transparent;\n content: \" \";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none\n}\n\n.apexcharts-yaxistooltip:after {\n border-color: transparent;\n border-width: 5px;\n margin-top: -5px\n}\n\n.apexcharts-yaxistooltip:before {\n border-color: transparent;\n border-width: 6px;\n margin-top: -6px\n}\n\n.apexcharts-yaxistooltip-left:after,\n.apexcharts-yaxistooltip-left:before {\n left: 100%\n}\n\n.apexcharts-yaxistooltip-right:after,\n.apexcharts-yaxistooltip-right:before {\n right: 100%\n}\n\n.apexcharts-yaxistooltip-left:after {\n border-left-color: var(--apx-axt-bg)\n}\n\n.apexcharts-yaxistooltip-left:before {\n border-left-color: var(--apx-axt-border)\n}\n\n.apexcharts-yaxistooltip-right:after {\n border-right-color: var(--apx-axt-bg)\n}\n\n.apexcharts-yaxistooltip-right:before {\n border-right-color: var(--apx-axt-border)\n}\n\n.apexcharts-yaxistooltip.apexcharts-active {\n opacity: 1\n}\n\n.apexcharts-yaxistooltip-hidden {\n display: none\n}\n\n.apexcharts-xcrosshairs,\n.apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: .15s ease all\n}\n\n.apexcharts-xcrosshairs.apexcharts-active,\n.apexcharts-ycrosshairs.apexcharts-active {\n opacity: 1;\n transition: .15s ease all\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0\n}\n\n.apexcharts-selection-rect {\n cursor: move\n}\n\n.svg_select_shape {\n stroke-width: 1;\n stroke-dasharray: 10 10;\n stroke: black;\n stroke-opacity: 0.1;\n pointer-events: none;\n fill: none;\n}\n\n.svg_select_handle {\n stroke-width: 3;\n stroke: black;\n fill: none;\n}\n\n.svg_select_handle_r {\n cursor: e-resize;\n}\n\n.svg_select_handle_l {\n cursor: w-resize;\n}\n\n.apexcharts-svg.apexcharts-zoomable.hovering-zoom {\n cursor: crosshair\n}\n\n.apexcharts-svg.apexcharts-zoomable.hovering-pan {\n cursor: move\n}\n\n.apexcharts-menu-icon,\n.apexcharts-measure-icon,\n.apexcharts-pan-icon,\n.apexcharts-reset-icon,\n.apexcharts-selection-icon,\n.apexcharts-toolbar-custom-icon,\n.apexcharts-zoom-icon,\n.apexcharts-zoomin-icon,\n.apexcharts-zoomout-icon {\n cursor: pointer;\n /* WCAG 2.5.8 Target Size (Minimum): 24×24 CSS px hit target. */\n width: 26px;\n height: 24px;\n line-height: 24px;\n color: #6e8192;\n text-align: center;\n /* Reset native <button> chrome — these are styled via SVG icons. */\n padding: 0;\n margin: 0;\n background: transparent;\n border: 0;\n border-radius: 5px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: background-color .12s ease, color .12s ease;\n}\n\n.apexcharts-menu-icon svg,\n.apexcharts-measure-icon svg,\n.apexcharts-pan-icon svg,\n.apexcharts-reset-icon svg,\n.apexcharts-selection-icon svg,\n.apexcharts-zoom-icon svg,\n.apexcharts-zoomin-icon svg,\n.apexcharts-zoomout-icon svg {\n width: 18px;\n height: 18px;\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round\n}\n\n.apexcharts-theme-dark .apexcharts-menu-icon,\n.apexcharts-theme-dark .apexcharts-measure-icon,\n.apexcharts-theme-dark .apexcharts-pan-icon,\n.apexcharts-theme-dark .apexcharts-reset-icon,\n.apexcharts-theme-dark .apexcharts-selection-icon,\n.apexcharts-theme-dark .apexcharts-toolbar-custom-icon,\n.apexcharts-theme-dark .apexcharts-zoom-icon,\n.apexcharts-theme-dark .apexcharts-zoomin-icon,\n.apexcharts-theme-dark .apexcharts-zoomout-icon {\n color: #d4d6dc\n}\n\n.apexcharts-canvas .apexcharts-measure-icon.apexcharts-selected,\n.apexcharts-canvas .apexcharts-pan-icon.apexcharts-selected,\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected,\n.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected,\n.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected {\n background: rgba(0, 143, 251, 0.12);\n color: #008ffb\n}\n\n.apexcharts-theme-light .apexcharts-menu-icon:hover,\n.apexcharts-theme-light .apexcharts-measure-icon:not(.apexcharts-selected):hover,\n.apexcharts-theme-light .apexcharts-pan-icon:not(.apexcharts-selected):hover,\n.apexcharts-theme-light .apexcharts-reset-icon:hover,\n.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover,\n.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover,\n.apexcharts-theme-light .apexcharts-zoomin-icon:hover,\n.apexcharts-theme-light .apexcharts-zoomout-icon:hover {\n background: rgba(15, 23, 42, 0.06);\n color: #1f2937\n}\n\n.apexcharts-theme-dark .apexcharts-menu-icon:hover,\n.apexcharts-theme-dark .apexcharts-measure-icon:not(.apexcharts-selected):hover,\n.apexcharts-theme-dark .apexcharts-pan-icon:not(.apexcharts-selected):hover,\n.apexcharts-theme-dark .apexcharts-reset-icon:hover,\n.apexcharts-theme-dark .apexcharts-selection-icon:not(.apexcharts-selected):hover,\n.apexcharts-theme-dark .apexcharts-zoom-icon:not(.apexcharts-selected):hover,\n.apexcharts-theme-dark .apexcharts-zoomin-icon:hover,\n.apexcharts-theme-dark .apexcharts-zoomout-icon:hover {\n background: rgba(255, 255, 255, 0.08);\n color: #fff\n}\n\n.apexcharts-menu-icon,\n.apexcharts-selection-icon {\n position: relative\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n display: inline-flex;\n align-items: center;\n gap: 1px;\n padding: 3px;\n border-radius: 8px;\n background: rgba(255, 255, 255, 0.85);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n}\n\n.apexcharts-theme-dark .apexcharts-toolbar {\n background: rgba(28, 28, 31, 0.82);\n}\n\n.apexcharts-menu {\n background: rgba(255, 255, 255, 0.95);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n position: absolute;\n top: calc(100% + 4px);\n border: 1px solid rgba(15, 23, 42, 0.08);\n border-radius: 8px;\n padding: 4px;\n right: 0;\n opacity: 0;\n min-width: 120px;\n transition: opacity .15s ease, transform .15s ease;\n transform: translateY(-2px);\n pointer-events: none;\n box-shadow: 0 4px 16px -4px rgba(15, 23, 42, 0.12), 0 2px 4px -1px rgba(15, 23, 42, 0.06)\n}\n\n.apexcharts-menu.apexcharts-menu-open {\n opacity: 1;\n transform: translateY(0);\n pointer-events: all\n}\n\n.apexcharts-menu-item {\n padding: 6px 9px;\n font-size: 12px;\n border-radius: 5px;\n cursor: pointer\n}\n\n.apexcharts-theme-light .apexcharts-menu-item:hover {\n background: rgba(15, 23, 42, 0.06)\n}\n\n.apexcharts-theme-dark .apexcharts-menu {\n background: rgba(28, 28, 31, 0.92);\n border-color: rgba(255, 255, 255, 0.08);\n color: #f3f4f6;\n box-shadow: 0 4px 16px -4px rgba(0, 0, 0, 0.5), 0 2px 4px -1px rgba(0, 0, 0, 0.4)\n}\n\n.apexcharts-theme-dark .apexcharts-menu-item:hover {\n background: rgba(255, 255, 255, 0.08)\n}\n\n@media screen and (min-width:768px) {\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1\n }\n}\n\n/* Toolbar keyboard accessibility: show toolbar when any button inside it is focused */\n.apexcharts-toolbar:focus-within {\n opacity: 1\n}\n\n/* Focus indicator for toolbar icon buttons */\n.apexcharts-menu-icon:focus-visible,\n.apexcharts-measure-icon:focus-visible,\n.apexcharts-pan-icon:focus-visible,\n.apexcharts-reset-icon:focus-visible,\n.apexcharts-selection-icon:focus-visible,\n.apexcharts-toolbar-custom-icon:focus-visible,\n.apexcharts-zoom-icon:focus-visible,\n.apexcharts-zoomin-icon:focus-visible,\n.apexcharts-zoomout-icon:focus-visible {\n outline: 2px solid var(--apexcharts-focus-color, #008FFB);\n outline-offset: 1px;\n border-radius: 5px\n}\n\n/* Focus indicator for hamburger menu items */\n.apexcharts-menu-item:focus-visible {\n outline: 2px solid var(--apexcharts-focus-color, #008FFB);\n outline-offset: -2px;\n background: #eee\n}\n\n.apexcharts-canvas .apexcharts-element-hidden,\n.apexcharts-datalabel.apexcharts-element-hidden,\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-hidden-element-shown {\n opacity: 1;\n transition: 0.25s ease all;\n}\n\n.apexcharts-datalabel,\n.apexcharts-datalabel-label,\n.apexcharts-datalabel-value,\n.apexcharts-datalabels,\n.apexcharts-pie-label,\n.apexcharts-pie-name-label,\n.apexcharts-pie-name-label-group,\n.apexcharts-pie-label-connector,\n.apexcharts-unit-outer-label,\n.apexcharts-unit-outer-label-group,\n.apexcharts-unit-label-connector {\n cursor: default;\n pointer-events: none\n}\n\n.apexcharts-pie-label-connector,\n.apexcharts-unit-label-connector {\n fill: none\n}\n\n.apexcharts-pie-label-delay,\n.apexcharts-unit-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: .3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease\n}\n\n/* Slower than the pie's, on purpose: these come in while the dots are still\n easing into place, so a longer fade reads as arriving WITH the crowd. */\n.apexcharts-unit-label-delay {\n animation-duration: .5s\n}\n\n.apexcharts-radialbar-label {\n cursor: pointer;\n}\n\n.apexcharts-annotation-rect,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-gridline,\n.apexcharts-line,\n.apexcharts-point-annotation-label,\n.apexcharts-radar-series path:not(.apexcharts-marker),\n.apexcharts-radar-series polygon,\n.apexcharts-toolbar svg,\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-xaxis-annotation-label,\n.apexcharts-yaxis-annotation-label,\n.apexcharts-zoom-rect,\n.no-pointer-events {\n pointer-events: none\n}\n\n.apexcharts-tooltip-active .apexcharts-marker {\n transition: .15s ease all\n}\n\n.apexcharts-radar-series .apexcharts-yaxis {\n pointer-events: none;\n}\n\n.apexcharts-bar-goals-markers {\n pointer-events: none\n}\n\n.apexcharts-bar-shadows {\n pointer-events: none\n}\n\n.apexcharts-rangebar-goals-markers {\n pointer-events: none\n}\n\n.apexcharts-drilldown-target {\n cursor: pointer\n}\n\n.apexcharts-breadcrumb {\n position: absolute;\n z-index: 11;\n display: inline-flex;\n align-items: center;\n gap: 2px;\n font-size: 12px;\n font-family: inherit;\n padding: 2px 4px\n}\n\n.apexcharts-breadcrumb-item {\n background: transparent;\n border: none;\n padding: 2px 6px;\n border-radius: 3px;\n font: inherit;\n color: inherit;\n cursor: pointer;\n line-height: 1.2\n}\n\n.apexcharts-breadcrumb-item:hover:not(.apexcharts-breadcrumb-current) {\n background: rgba(0, 0, 0, 0.08)\n}\n\n.apexcharts-breadcrumb-arrow {\n margin-right: 4px;\n font-weight: 600;\n user-select: none\n}\n\n.apexcharts-breadcrumb-current {\n cursor: default;\n font-weight: 600;\n opacity: 0.85\n}\n\n.apexcharts-breadcrumb-separator {\n opacity: 0.5;\n user-select: none\n}\n\n.apexcharts-theme-dark .apexcharts-breadcrumb-item:hover:not(.apexcharts-breadcrumb-current) {\n background: rgba(255, 255, 255, 0.12)\n}\n\n.apexcharts-drilldown-loading {\n position: absolute;\n inset: 0;\n z-index: 12;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n font-size: 13px;\n font-family: inherit;\n color: inherit;\n background: rgba(255, 255, 255, 0.62);\n /* The chart underneath stays interactive-looking but must not take clicks\n while a level is resolving, or a second drill can start mid-fetch. */\n cursor: progress\n}\n\n.apexcharts-drilldown-loading-spinner {\n width: 26px;\n height: 26px;\n border-radius: 50%;\n border: 2.5px solid rgba(0, 0, 0, 0.16);\n border-top-color: rgba(0, 0, 0, 0.55);\n animation: apexcharts-drilldown-spin 0.7s linear infinite\n}\n\n.apexcharts-drilldown-loading-text {\n opacity: 0.8\n}\n\n.apexcharts-theme-dark .apexcharts-drilldown-loading {\n background: rgba(30, 30, 30, 0.62)\n}\n\n.apexcharts-theme-dark .apexcharts-drilldown-loading-spinner {\n border-color: rgba(255, 255, 255, 0.22);\n border-top-color: rgba(255, 255, 255, 0.7)\n}\n\n@keyframes apexcharts-drilldown-spin {\n to {\n transform: rotate(360deg)\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n /* Swap the spin for a pulse: opacity only, nothing moves, which is what\n * 2.3.3 asks for while still showing the drill is working.\n *\n * Scoped and !important because the blanket rule at the top of this file\n * would otherwise flatten this fallback too (0.01ms, one iteration), leaving\n * a drill with no loading indication at all: the rule was written but never\n * actually ran. It has to beat that rule on both specificity and origin. */\n .apexcharts-canvas:not(.apexcharts-ignore-reduced-motion)\n .apexcharts-drilldown-loading-spinner {\n animation: apexcharts-drilldown-pulse 1.4s ease-in-out infinite !important\n }\n\n @keyframes apexcharts-drilldown-pulse {\n 0%, 100% {\n opacity: 0.35\n }\n\n 50% {\n opacity: 1\n }\n }\n}\n\n.apexcharts-disable-transitions * {\n transition: none !important;\n}\n/* ── Trellis (#22): small multiples ─────────────────────────────────────── */\n.apexcharts-trellis {\n position: relative;\n}\n.apexcharts-trellis-grid {\n display: grid;\n}\n.apexcharts-trellis-cell {\n min-width: 0;\n position: relative;\n}\n.apexcharts-trellis-header {\n font-size: 12px;\n font-weight: 600;\n line-height: 22px;\n height: 22px;\n text-align: center;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--apx-fore, var(--apx-trellis-fore, #373d3f));\n}\n.apexcharts-trellis-title {\n font-size: 14px;\n font-weight: 700;\n padding: 2px 0 6px;\n color: var(--apx-fore, var(--apx-trellis-fore, #373d3f));\n}\n/* Edge-label policy: a muted cell hides its axis-label INK, never the label\n SPACE — every panel keeps the identical plot rectangle, and flipping the\n policy on a resize is a class toggle, not a re-render. */\n.apexcharts-trellis-mute-y .apexcharts-yaxis {\n opacity: 0;\n}\n.apexcharts-trellis-mute-x .apexcharts-xaxis {\n opacity: 0;\n}\n/* The shared toolbar floats at the top-right, so a grid that has one starts\n below it: from four columns on, the last cell's header (or a 2-D column\n strip label) would otherwise run under the buttons. One band for the whole\n grid, not per panel. */\n.apexcharts-trellis-has-toolbar {\n padding-top: 24px;\n}\n/* 2-D faceting (P4): column labels once across the top, row labels once\n down the left. The row strip column is auto-sized; panel columns stay\n equal fractions, so panel alignment is independent of the strip width. */\n.apexcharts-trellis-strip {\n font-size: 12px;\n font-weight: 600;\n color: var(--apx-fore, var(--apx-trellis-fore, #373d3f));\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.apexcharts-trellis-strip-column {\n text-align: center;\n line-height: 22px;\n height: 22px;\n align-self: end;\n}\n.apexcharts-trellis-strip-row {\n align-self: center;\n max-width: 140px;\n padding-right: 6px;\n}\n/* Empty (row, column) combinations. 'placeholder' keeps a REAL panel with a\n quiet label; 'skip' shows the tinted skeleton; 'hide' shows nothing while\n keeping the grid slot. */\n.apexcharts-trellis-cell-empty {\n position: relative;\n}\n.apexcharts-trellis-empty-label {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: var(--apx-fore, var(--apx-trellis-fore, #373d3f));\n opacity: 0.45;\n pointer-events: none;\n}\n.apexcharts-trellis-cell-hidden > * {\n visibility: hidden;\n}\n/* P5: one shared gradient strip is a heatmap grid's legend. The slot is\n content-sized inline (the strip svg's own box); centering is its own. */\n.apexcharts-trellis-gradient-legend {\n margin: 10px auto 0;\n}\n/* Virtualization (P2): an unmounted panel's mount div reserves the exact\n panel height (inline min-height) so page height and scroll position never\n shift; the skeleton itself is a quiet tinted block. Deliberately not\n animated: a shimmering grid of 200 placeholders is noise. */\n.apexcharts-trellis-panel.apexcharts-trellis-skeleton {\n background: var(--apx-fore, var(--apx-trellis-fore, #373d3f));\n opacity: 0.05;\n border-radius: 4px;\n}\n/* tooltip: 'panel' — the group still syncs every panel's crosshair, but only\n the hovered cell shows its tooltip cards. */\n.apexcharts-trellis[data-tooltip-mode='panel'] .apexcharts-trellis-cell:not(:hover) .apexcharts-tooltip,\n.apexcharts-trellis[data-tooltip-mode='panel'] .apexcharts-trellis-cell:not(:hover) .apexcharts-xaxistooltip,\n.apexcharts-trellis[data-tooltip-mode='panel'] .apexcharts-trellis-cell:not(:hover) .apexcharts-yaxistooltip {\n opacity: 0 !important;\n}\n/* tooltip: 'grid' (P3) — ALL per-panel tooltip ink is hidden (the group\n still computes it; the trellis card reads it) and one trellis-owned card\n follows the cursor with one row per panel. */\n.apexcharts-trellis[data-tooltip-mode='grid'] .apexcharts-trellis-cell .apexcharts-tooltip,\n.apexcharts-trellis[data-tooltip-mode='grid'] .apexcharts-trellis-cell .apexcharts-xaxistooltip,\n.apexcharts-trellis[data-tooltip-mode='grid'] .apexcharts-trellis-cell .apexcharts-yaxistooltip {\n opacity: 0 !important;\n}\n.apexcharts-trellis-tooltip {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 14;\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.1s ease;\n background: var(--apx-bg, #fff);\n color: var(--apx-fore, var(--apx-trellis-fore, #373d3f));\n border: 1px solid rgba(120, 120, 120, 0.25);\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px rgba(0, 0, 0, 0.4);\n font-size: 12px;\n min-width: 140px;\n max-width: 320px;\n}\n.apexcharts-trellis-tooltip-active {\n opacity: 1;\n}\n.apexcharts-trellis-tooltip .apexcharts-tooltip-title {\n padding: 5px 10px;\n font-weight: 600;\n background: rgba(120, 120, 120, 0.08);\n border-bottom: 1px solid rgba(120, 120, 120, 0.18);\n margin-bottom: 2px;\n}\n.apexcharts-trellis-tooltip-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 14px;\n padding: 2px 10px;\n line-height: 1.6;\n}\n.apexcharts-trellis-tooltip-row-active {\n background: rgba(120, 120, 120, 0.1);\n font-weight: 600;\n}\n.apexcharts-trellis-tooltip-key {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.apexcharts-trellis-tooltip-vals {\n display: flex;\n gap: 10px;\n white-space: nowrap;\n}\n.apexcharts-trellis-tooltip-val {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n.apexcharts-trellis-tooltip-marker {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n display: inline-block;\n flex: none;\n}\n/* Panel promotion (P3): the promoted cell spans the grid; the rest park.\n The promoted panel is the only visible one, so both its axes unmute. */\n.apexcharts-trellis-cell-promoted {\n grid-column: 1 / -1;\n}\n.apexcharts-trellis-cell-parked {\n display: none;\n}\n.apexcharts-trellis-cell-promoted.apexcharts-trellis-mute-y .apexcharts-yaxis,\n.apexcharts-trellis-cell-promoted.apexcharts-trellis-mute-x .apexcharts-xaxis {\n opacity: 1;\n}\n.apexcharts-trellis-header-clickable {\n cursor: pointer;\n}\n.apexcharts-trellis-header-clickable:hover {\n text-decoration: underline;\n text-underline-offset: 3px;\n}\n.apexcharts-trellis-breadcrumb {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n padding: 2px 0 6px;\n color: var(--apx-fore, var(--apx-trellis-fore, #373d3f));\n}\n.apexcharts-trellis-breadcrumb-back {\n border: none;\n background: none;\n padding: 0;\n font-size: 12px;\n cursor: pointer;\n color: var(--apx-accent, #008ffb);\n}\n.apexcharts-trellis-breadcrumb-back:hover {\n text-decoration: underline;\n}\n.apexcharts-trellis-breadcrumb-sep {\n opacity: 0.5;\n}\n.apexcharts-trellis-breadcrumb-current {\n font-weight: 600;\n}\n/* The toolbar download menu (P3). */\n.apexcharts-trellis-menu {\n position: absolute;\n top: 26px;\n right: 0;\n display: none;\n flex-direction: column;\n min-width: 132px;\n background: var(--apx-bg, #fff);\n border: 1px solid rgba(120, 120, 120, 0.25);\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px rgba(0, 0, 0, 0.4);\n padding: 4px;\n z-index: 15;\n}\n.apexcharts-trellis-menu-open {\n display: flex;\n}\n.apexcharts-trellis-menu-item {\n border: none;\n background: none;\n text-align: left;\n font-size: 12px;\n padding: 5px 8px;\n border-radius: 3px;\n cursor: pointer;\n color: var(--apx-fore, var(--apx-trellis-fore, #373d3f));\n}\n.apexcharts-trellis-menu-item:hover {\n background: rgba(120, 120, 120, 0.12);\n}\n.apexcharts-trellis-toolbar {\n position: absolute;\n top: 0;\n right: 0;\n display: flex;\n gap: 2px;\n z-index: 12;\n}\n.apexcharts-trellis-tool {\n border: 0;\n background: transparent;\n padding: 2px;\n cursor: pointer;\n border-radius: 3px;\n color: #6e8192;\n line-height: 0;\n}\n.apexcharts-trellis-tool:hover {\n color: var(--apx-fore, var(--apx-trellis-fore, #373d3f));\n}\n.apexcharts-trellis-tool.apexcharts-selected {\n color: var(--apx-accent, #008ffb);\n}\n.apexcharts-trellis-legend {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: 4px 14px;\n padding: 8px 10px 2px;\n}\n.apexcharts-trellis-legend-item {\n display: flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n line-height: 1;\n}\n.apexcharts-trellis-legend-item .apexcharts-legend-marker {\n width: 12px;\n height: 12px;\n border-radius: 50%;\n display: inline-block;\n}\n.apexcharts-trellis-legend-item .apexcharts-legend-text {\n font-size: 12px;\n color: var(--apx-fore, var(--apx-trellis-fore, #373d3f));\n}\n.apexcharts-trellis-legend-item.apexcharts-inactive-legend {\n opacity: 0.45;\n}\n\n/* Printing (#3352). The sheet is narrower than the screen and nothing reports\n its width to the page, so a chart laid out for the screen would be cropped at\n the edge of the paper. The chart lays itself out again for print (see\n chart.print in the options); this caps whatever is left over so it shrinks to\n fit rather than being cut. Shrink only: a chart narrower than the page keeps\n the size it was drawn at. */\n@media print {\n /* Scoped to the class the chart adds while it is laid out for the sheet: this\n pair of rules is only safe once an identity viewBox is in place, since\n without one a capped width crops the drawing instead of scaling it. A chart\n with chart.print.enabled:false gets neither, and prints as it always did. */\n .apexcharts-canvas.apexcharts-printing,\n .apexcharts-canvas.apexcharts-printing svg {\n max-width: 100% !important;\n }\n\n .apexcharts-canvas.apexcharts-printing svg {\n height: auto !important;\n }\n\n /* A scaled-down SVG is shorter than the box drawn for it, and the wrapper\n carries the pre-scale height inline, so without this a chart shrunk to fit a\n narrow column prints above a white gap the size of what it gave up. The\n host element's own inline min-height is cleared by _beforePrint. */\n .apexcharts-canvas.apexcharts-printing {\n height: auto !important;\n }\n\n .apexcharts-toolbar {\n display: none !important;\n }\n}\n";
32616
+ const apexCSS = '@keyframes opaque{0%{opacity:0}to{opacity:1}}.apexcharts-canvas{position:relative;direction:ltr!important;user-select:none;--apexcharts-focus-color: #008FFB}.apexcharts-canvas .apexcharts-theme-dark,.apexcharts-theme-dark.apexcharts-canvas{--apexcharts-focus-color: #FFD500}.apexcharts-canvas.apexcharts-high-contrast,.apexcharts-high-contrast.apexcharts-canvas{--apexcharts-focus-color: #FFFF00}.apexcharts-sr-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.apexcharts-canvas:not(.apexcharts-ignore-reduced-motion) *,.apexcharts-canvas:not(.apexcharts-ignore-reduced-motion) *:before,.apexcharts-canvas:not(.apexcharts-ignore-reduced-motion) *:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.apexcharts-canvas ::-webkit-scrollbar{-webkit-appearance:none;width:6px}.apexcharts-canvas ::-webkit-scrollbar-thumb{border-radius:4px;background-color:#00000080;box-shadow:0 0 1px #ffffff80;-webkit-box-shadow:0 0 1px rgba(255,255,255,.5)}.apexcharts-inner{position:relative}.apexcharts-text tspan{font-family:inherit}rect.legend-mouseover-inactive,.legend-mouseover-inactive rect,.legend-mouseover-inactive path,.legend-mouseover-inactive circle,.legend-mouseover-inactive line,.legend-mouseover-inactive text.apexcharts-yaxis-title-text,.legend-mouseover-inactive text.apexcharts-yaxis-label{transition:.15s ease all;opacity:.2}.apexcharts-crossfilter-dimmed{transition:opacity .25s ease;opacity:var(--apx-cf-dim, .2)}.apexcharts-cf-table{border-collapse:collapse;width:100%;font-size:13px}.apexcharts-cf-table caption{caption-side:bottom;text-align:right;padding:6px 2px;font-size:12px;opacity:.7}.apexcharts-cf-table th,.apexcharts-cf-table td{padding:6px 10px;text-align:left;border-bottom:1px solid rgba(0,0,0,.08)}.apexcharts-cf-table th{font-weight:600;border-bottom-width:2px}.apexcharts-cf-table tbody tr:hover{background:#6366f10f}.apexcharts-canvas{--apx-measure-up: #16a34a;--apx-measure-down: #dc2626;--apx-measure-neutral: #64748b;--apx-measure-guide: #94a3b8}.apexcharts-measure-capture{cursor:crosshair}.apexcharts-canvas{--apx-menu-bg: #ffffff;--apx-menu-fg: #1e293b;--apx-menu-border: #e2e8f0;--apx-menu-hover: #f1f5f9;--apx-menu-shadow: rgba(15, 23, 42, .18)}.apexcharts-context-menu{min-width:168px;padding:4px;border-radius:8px;background:var(--apx-menu-bg);border:1px solid var(--apx-menu-border);box-shadow:0 6px 22px var(--apx-menu-shadow);font-family:Helvetica,Arial,sans-serif;font-size:13px;z-index:20;user-select:none}.apexcharts-context-menu-item{display:block;width:100%;box-sizing:border-box;text-align:left;padding:7px 12px;border:0;border-radius:5px;background:transparent;color:var(--apx-menu-fg);font:inherit;cursor:pointer}.apexcharts-context-menu-item:hover,.apexcharts-context-menu-item--active{background:var(--apx-menu-hover)}.apexcharts-context-menu-item:focus{outline:none}.apexcharts-canvas{--apx-ink-card-bg: #ffffff;--apx-ink-card-fg: #1e293b;--apx-ink-card-border: #e2e8f0;--apx-ink-card-hover: #f1f5f9;--apx-ink-card-accent: #6366f1;--apx-ink-card-shadow: rgba(15, 23, 42, .18)}.apexcharts-ink-card{position:absolute;z-index:25;display:flex;flex-direction:column;gap:6px;padding:8px;border-radius:8px;background:var(--apx-ink-card-bg);border:1px solid var(--apx-ink-card-border);box-shadow:0 6px 22px var(--apx-ink-card-shadow);font-family:Helvetica,Arial,sans-serif;font-size:12px;color:var(--apx-ink-card-fg);user-select:none}.apexcharts-ink-card-row{display:flex;align-items:center;gap:4px}.apexcharts-ink-card input.apexcharts-ink-editor{flex:1 1 auto;width:150px;min-width:0;box-sizing:border-box;padding:4px 6px;font:inherit;color:inherit;background:transparent;border:1px solid var(--apx-ink-card-border);border-radius:5px}.apexcharts-ink-card input.apexcharts-ink-editor:focus{outline:none;border-color:var(--apx-ink-card-accent)}.apexcharts-ink-btn{flex:0 0 auto;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:5px;background:transparent;color:inherit;font:inherit;font-size:12px;line-height:1;cursor:pointer}.apexcharts-ink-btn:hover,.apexcharts-ink-btn--active{background:var(--apx-ink-card-hover)}.apexcharts-ink-btn:focus-visible,.apexcharts-ink-swatch:focus-visible{outline:2px solid var(--apx-ink-card-accent);outline-offset:1px}.apexcharts-ink-btn--bold{font-weight:700}.apexcharts-ink-btn--delete:hover{color:#dc2626}.apexcharts-ink-swatch{flex:0 0 auto;width:16px;height:16px;padding:0;border:1px solid rgba(100,116,139,.45);border-radius:50%;cursor:pointer}.apexcharts-ink-swatch--active{box-shadow:0 0 0 2px var(--apx-ink-card-bg),0 0 0 4px var(--apx-ink-card-accent)}.apexcharts-ink-sep{flex:0 0 auto;width:1px;height:16px;margin:0 2px;background:var(--apx-ink-card-border)}.apexcharts-ink-cardlabel{flex:0 0 auto;font-size:10px;letter-spacing:.4px;text-transform:uppercase;opacity:.65;margin-right:2px}.apexcharts-ink-marker-size{flex:0 0 auto;min-width:16px;text-align:center;font-variant-numeric:tabular-nums}.apexcharts-legend-text{padding-left:15px;margin-left:-15px}.apexcharts-legend-series[role=button]:focus{outline:2px solid var(--apexcharts-focus-color, #008FFB);outline-offset:2px}.apexcharts-legend-series[role=button]:focus:not(:focus-visible){outline:none}.apexcharts-legend-series[role=button]:focus-visible{outline:2px solid var(--apexcharts-focus-color, #008FFB);outline-offset:2px}.apexcharts-series-collapsed{opacity:0}.apexcharts-series-collapsed.apexcharts-series-collapsing{opacity:1}.apexcharts-datalabels.apexcharts-series-collapsing{animation:apexcharts-datalabels-exit var(--apexcharts-dl-exit, .4s) ease-in forwards}@keyframes apexcharts-datalabels-exit{0%{opacity:1}to{opacity:0}}.apexcharts-canvas svg:focus:not(:focus-visible){outline:none}.apexcharts-bar-area.apexcharts-keyboard-focused,.apexcharts-candlestick-area.apexcharts-keyboard-focused,.apexcharts-boxPlot-area.apexcharts-keyboard-focused,.apexcharts-violin-area.apexcharts-keyboard-focused,.apexcharts-rangebar-area.apexcharts-keyboard-focused,.apexcharts-pie-area.apexcharts-keyboard-focused,.apexcharts-heatmap-rect.apexcharts-keyboard-focused,.apexcharts-treemap-rect.apexcharts-keyboard-focused,.apexcharts-keyboard-focus-ring{stroke:var(--apexcharts-focus-color, #008FFB);stroke-width:2;stroke-opacity:1}.apexcharts-keyboard-focus-ring{fill:none;pointer-events:none}.apexcharts-tooltip{--apx-tt-bg: #ffffff;--apx-tt-border: rgba(15, 23, 42, .12);--apx-tt-shadow-dir: 1;--apx-tt-shadow: 0 calc(var(--apx-tt-shadow-dir) * 1px) 2px rgba(15, 23, 42, .06), 0 calc(var(--apx-tt-shadow-dir) * 4px) 8px -2px rgba(15, 23, 42, .1), 0 calc(var(--apx-tt-shadow-dir) * 12px) 20px -8px rgba(15, 23, 42, .14);--apx-tt-arrow-bg: var(--apx-tt-bg);--apx-tt-color: #0f172a;--apx-tt-color-muted: rgba(15, 23, 42, .55);border-radius:8px;background:var(--apx-tt-bg);border:1px solid var(--apx-tt-border);box-shadow:var(--apx-tt-shadow);color:var(--apx-tt-color);cursor:default;font-size:13px;left:0;top:0;opacity:0;pointer-events:none;position:absolute;display:flex;flex-direction:column;padding:2px 0;white-space:nowrap;z-index:12;transition:opacity .12s ease}.apexcharts-tooltip.apexcharts-active{opacity:1;transition:opacity .12s ease}.apexcharts-tooltip.apexcharts-tooltip-interactive.apexcharts-active{pointer-events:auto}.apexcharts-tooltip.apexcharts-active[data-positioned=true]{transition:opacity .12s ease,left .16s ease-out,top .16s ease-out}.apexcharts-tooltip.apexcharts-theme-dark{--apx-tt-bg: #1c1c1f;--apx-tt-border: rgba(255, 255, 255, .16);--apx-tt-shadow: 0 calc(var(--apx-tt-shadow-dir) * 1px) 2px rgba(0, 0, 0, .24), 0 calc(var(--apx-tt-shadow-dir) * 4px) 8px -2px rgba(0, 0, 0, .3), 0 calc(var(--apx-tt-shadow-dir) * 12px) 20px -8px rgba(0, 0, 0, .38);--apx-tt-color: #f3f4f6;--apx-tt-color-muted: rgba(243, 244, 246, .55)}.apexcharts-tooltip *{font-family:inherit}.apexcharts-tooltip.apexcharts-annotation-tooltip{padding:6px 10px;max-width:240px;white-space:normal;line-height:1.4;pointer-events:none;z-index:13}.apexcharts-tooltip-title{padding:8px 12px 4px;font-size:12px;font-weight:600;letter-spacing:.01em;color:var(--apx-tt-color-muted);background:transparent;border-bottom:none;margin-bottom:0}.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title,.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title{background:transparent;border-bottom:none}.apexcharts-tooltip.apexcharts-tooltip-fill-series{background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;border:none;padding:0;overflow:hidden;color:#fff}.apexcharts-tooltip.apexcharts-tooltip-fill-series .apexcharts-tooltip-title{background:#00000038;color:#fff;opacity:1;padding:6px 12px}.apexcharts-tooltip.apexcharts-tooltip-fill-series .apexcharts-tooltip-series-group{color:#fff}.apexcharts-tooltip-arrow{position:absolute;box-sizing:border-box;width:10px;height:10px;background:var(--apx-tt-arrow-bg);transform:rotate(45deg);pointer-events:none;top:calc(var(--apx-tt-arrow-y, calc(50% + 1px) ) - 6px)}.apexcharts-tooltip[data-placement=right] .apexcharts-tooltip-arrow{left:-6px;border-left:1px solid var(--apx-tt-border);border-bottom:1px solid var(--apx-tt-border)}.apexcharts-tooltip[data-placement=left] .apexcharts-tooltip-arrow{right:-6px;border-top:1px solid var(--apx-tt-border);border-right:1px solid var(--apx-tt-border)}.apexcharts-tooltip[data-placement=top] .apexcharts-tooltip-arrow,.apexcharts-tooltip[data-placement=bottom] .apexcharts-tooltip-arrow{top:auto;left:calc(var(--apx-tt-arrow-x, calc(50% + 1px) ) - 6px)}.apexcharts-tooltip[data-placement=top] .apexcharts-tooltip-arrow{bottom:-6px;border-right:1px solid var(--apx-tt-border);border-bottom:1px solid var(--apx-tt-border)}.apexcharts-tooltip[data-placement=bottom] .apexcharts-tooltip-arrow{top:-6px;border-top:1px solid var(--apx-tt-border);border-left:1px solid var(--apx-tt-border)}.apexcharts-tooltip[data-placement=bottom]{--apx-tt-shadow-dir: -1 }.apexcharts-tooltip-text-goals-value,.apexcharts-tooltip-text-y-value,.apexcharts-tooltip-text-z-value{display:inline-block;margin-left:5px;font-weight:600}.apexcharts-tooltip-text-goals-label:empty,.apexcharts-tooltip-text-goals-value:empty,.apexcharts-tooltip-text-y-label:empty,.apexcharts-tooltip-text-y-value:empty,.apexcharts-tooltip-text-z-value:empty,.apexcharts-tooltip-title:empty{display:none}.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value{padding:6px 0 5px}.apexcharts-tooltip-goals-group,.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value{display:flex}.apexcharts-tooltip-text-goals-label:not(:empty),.apexcharts-tooltip-text-goals-value:not(:empty){margin-top:-6px}.apexcharts-tooltip-marker{display:inline-flex;align-items:center;justify-content:center;position:relative;width:12px;height:12px;margin-right:6px;vertical-align:middle;color:inherit}.apexcharts-tooltip-marker svg{width:100%;height:100%;display:block}.apexcharts-tooltip-series-group{padding:4px 12px;display:none;gap:8px;text-align:left;justify-content:left;align-items:center}.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker{opacity:1}.apexcharts-tooltip-series-group.apexcharts-active:last-child,.apexcharts-tooltip-series-group:last-child{padding-bottom:8px}.apexcharts-tooltip-y-group{padding:6px 0 5px}.apexcharts-tooltip.apexcharts-tooltip-compact{padding:3px 8px;font-size:11px;line-height:1.35}.apexcharts-tooltip-compact .apexcharts-tooltip-title{padding:0;font-size:11px;white-space:nowrap}.apexcharts-tooltip-compact .apexcharts-tooltip-series-group,.apexcharts-tooltip-compact .apexcharts-tooltip-series-group.apexcharts-active:last-child,.apexcharts-tooltip-compact .apexcharts-tooltip-series-group:last-child{padding:0;gap:5px}.apexcharts-tooltip-compact .apexcharts-tooltip-y-group{padding:0}.apexcharts-tooltip-compact .apexcharts-tooltip-marker{width:8px;height:8px}.apexcharts-tooltip.apexcharts-tooltip-compact.apexcharts-tooltip-value-only{flex-direction:row;align-items:baseline;gap:6px}.apexcharts-tooltip-value-only .apexcharts-tooltip-marker,.apexcharts-tooltip-value-only .apexcharts-tooltip-text-y-label{display:none}.apexcharts-custom-tooltip,.apexcharts-tooltip-box{padding:4px 8px}.apexcharts-tooltip-boxPlot{display:flex;flex-direction:column-reverse}.apexcharts-tooltip-box>div{margin:4px 0}.apexcharts-tooltip-box span.value{font-weight:700}.apexcharts-tooltip-rangebar{padding:5px 8px}.apexcharts-tooltip-rangebar .category{font-weight:600;color:#777}.apexcharts-tooltip-rangebar .series-name{font-weight:700;display:block;margin-bottom:5px}.apexcharts-tooltip-stream{padding:5px 8px}.apexcharts-tooltip-stream .apexcharts-tooltip-title{background:transparent;border:0;padding:0 0 4px;margin:0;font-weight:700}.apexcharts-tooltip-stream-band{display:flex;align-items:center;gap:5px;line-height:1.6;opacity:.72}.apexcharts-tooltip-stream-band.apexcharts-active{opacity:1;font-weight:700}.apexcharts-tooltip-stream-band .series-name{flex:1 1 auto;margin-right:8px}.apexcharts-tooltip-stream-band .value{font-weight:700;margin-left:auto}.apexcharts-tooltip-stream-total{display:flex;align-items:center;margin-top:4px;padding-top:4px;border-top:1px solid var(--apx-tt-border, rgba(15, 23, 42, .12))}.apexcharts-tooltip-stream-total .series-name{flex:1 1 auto;font-weight:600}.apexcharts-tooltip-stream-total .value{font-weight:700;margin-left:auto}.apexcharts-streamgraph-label{pointer-events:none}.apexcharts-xaxistooltip,.apexcharts-yaxistooltip{--apx-axt-bg: #ffffff;--apx-axt-border: rgba(15, 23, 42, .08);--apx-axt-color: #0f172a;--apx-axt-shadow: 0 4px 12px -4px rgba(15, 23, 42, .18), 0 1px 3px -1px rgba(15, 23, 42, .12);opacity:0;pointer-events:none;color:var(--apx-axt-color);font-size:12px;font-weight:500;text-align:center;border-radius:6px;position:absolute;z-index:10;background:var(--apx-axt-bg);border:1px solid var(--apx-axt-border);box-shadow:var(--apx-axt-shadow)}.apexcharts-xaxistooltip.apexcharts-theme-dark,.apexcharts-yaxistooltip.apexcharts-theme-dark{--apx-axt-bg: #1c1c1f;--apx-axt-border: rgba(255, 255, 255, .1);--apx-axt-color: #f3f4f6;--apx-axt-shadow: 0 4px 12px -4px rgba(0, 0, 0, .55), 0 1px 3px -1px rgba(0, 0, 0, .45) }.apexcharts-xaxistooltip{padding:4px 8px;transition:.15s ease all}.apexcharts-xaxistooltip:after,.apexcharts-xaxistooltip:before{left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.apexcharts-xaxistooltip:after{border-color:transparent;border-width:5px;margin-left:-5px}.apexcharts-xaxistooltip:before{border-color:transparent;border-width:6px;margin-left:-6px}.apexcharts-xaxistooltip-bottom:after,.apexcharts-xaxistooltip-bottom:before{bottom:100%}.apexcharts-xaxistooltip-top:after,.apexcharts-xaxistooltip-top:before{top:100%}.apexcharts-xaxistooltip-bottom:after{border-bottom-color:var(--apx-axt-bg)}.apexcharts-xaxistooltip-bottom:before{border-bottom-color:var(--apx-axt-border)}.apexcharts-xaxistooltip-top:after{border-top-color:var(--apx-axt-bg)}.apexcharts-xaxistooltip-top:before{border-top-color:var(--apx-axt-border)}.apexcharts-xaxistooltip.apexcharts-active{opacity:1;transition:.15s ease all}.apexcharts-yaxistooltip{padding:3px 8px}.apexcharts-yaxistooltip:after,.apexcharts-yaxistooltip:before{top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.apexcharts-yaxistooltip:after{border-color:transparent;border-width:5px;margin-top:-5px}.apexcharts-yaxistooltip:before{border-color:transparent;border-width:6px;margin-top:-6px}.apexcharts-yaxistooltip-left:after,.apexcharts-yaxistooltip-left:before{left:100%}.apexcharts-yaxistooltip-right:after,.apexcharts-yaxistooltip-right:before{right:100%}.apexcharts-yaxistooltip-left:after{border-left-color:var(--apx-axt-bg)}.apexcharts-yaxistooltip-left:before{border-left-color:var(--apx-axt-border)}.apexcharts-yaxistooltip-right:after{border-right-color:var(--apx-axt-bg)}.apexcharts-yaxistooltip-right:before{border-right-color:var(--apx-axt-border)}.apexcharts-yaxistooltip.apexcharts-active{opacity:1}.apexcharts-yaxistooltip-hidden{display:none}.apexcharts-xcrosshairs,.apexcharts-ycrosshairs{pointer-events:none;opacity:0;transition:.15s ease all}.apexcharts-xcrosshairs.apexcharts-active,.apexcharts-ycrosshairs.apexcharts-active{opacity:1;transition:.15s ease all}.apexcharts-ycrosshairs-hidden{opacity:0}.apexcharts-selection-rect{cursor:move}.svg_select_shape{stroke-width:1;stroke-dasharray:10 10;stroke:#000;stroke-opacity:.1;pointer-events:none;fill:none}.svg_select_handle{stroke-width:3;stroke:#000;fill:none}.svg_select_handle_r{cursor:e-resize}.svg_select_handle_l{cursor:w-resize}.apexcharts-svg.apexcharts-zoomable.hovering-zoom{cursor:crosshair}.apexcharts-svg.apexcharts-zoomable.hovering-pan{cursor:move}.apexcharts-menu-icon,.apexcharts-measure-icon,.apexcharts-pan-icon,.apexcharts-reset-icon,.apexcharts-selection-icon,.apexcharts-toolbar-custom-icon,.apexcharts-zoom-icon,.apexcharts-zoomin-icon,.apexcharts-zoomout-icon{cursor:pointer;width:26px;height:24px;line-height:24px;color:#6e8192;text-align:center;padding:0;margin:0;background:transparent;border:0;border-radius:5px;display:inline-flex;align-items:center;justify-content:center;transition:background-color .12s ease,color .12s ease}.apexcharts-menu-icon svg,.apexcharts-measure-icon svg,.apexcharts-pan-icon svg,.apexcharts-reset-icon svg,.apexcharts-selection-icon svg,.apexcharts-zoom-icon svg,.apexcharts-zoomin-icon svg,.apexcharts-zoomout-icon svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.apexcharts-theme-dark .apexcharts-menu-icon,.apexcharts-theme-dark .apexcharts-measure-icon,.apexcharts-theme-dark .apexcharts-pan-icon,.apexcharts-theme-dark .apexcharts-reset-icon,.apexcharts-theme-dark .apexcharts-selection-icon,.apexcharts-theme-dark .apexcharts-toolbar-custom-icon,.apexcharts-theme-dark .apexcharts-zoom-icon,.apexcharts-theme-dark .apexcharts-zoomin-icon,.apexcharts-theme-dark .apexcharts-zoomout-icon{color:#d4d6dc}.apexcharts-canvas .apexcharts-measure-icon.apexcharts-selected,.apexcharts-canvas .apexcharts-pan-icon.apexcharts-selected,.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected,.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected,.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected{background:#008ffb1f;color:#008ffb}.apexcharts-theme-light .apexcharts-menu-icon:hover,.apexcharts-theme-light .apexcharts-measure-icon:not(.apexcharts-selected):hover,.apexcharts-theme-light .apexcharts-pan-icon:not(.apexcharts-selected):hover,.apexcharts-theme-light .apexcharts-reset-icon:hover,.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover,.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover,.apexcharts-theme-light .apexcharts-zoomin-icon:hover,.apexcharts-theme-light .apexcharts-zoomout-icon:hover{background:#0f172a0f;color:#1f2937}.apexcharts-theme-dark .apexcharts-menu-icon:hover,.apexcharts-theme-dark .apexcharts-measure-icon:not(.apexcharts-selected):hover,.apexcharts-theme-dark .apexcharts-pan-icon:not(.apexcharts-selected):hover,.apexcharts-theme-dark .apexcharts-reset-icon:hover,.apexcharts-theme-dark .apexcharts-selection-icon:not(.apexcharts-selected):hover,.apexcharts-theme-dark .apexcharts-zoom-icon:not(.apexcharts-selected):hover,.apexcharts-theme-dark .apexcharts-zoomin-icon:hover,.apexcharts-theme-dark .apexcharts-zoomout-icon:hover{background:#ffffff14;color:#fff}.apexcharts-menu-icon,.apexcharts-selection-icon{position:relative}.apexcharts-toolbar{position:absolute;z-index:11;display:inline-flex;align-items:center;gap:1px;padding:3px;border-radius:8px;background:#ffffffd9;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.apexcharts-theme-dark .apexcharts-toolbar{background:#1c1c1fd1}.apexcharts-menu{background:#fffffff2;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);position:absolute;top:calc(100% + 4px);border:1px solid rgba(15,23,42,.08);border-radius:8px;padding:4px;right:0;opacity:0;min-width:120px;transition:opacity .15s ease,transform .15s ease;transform:translateY(-2px);pointer-events:none;box-shadow:0 4px 16px -4px #0f172a1f,0 2px 4px -1px #0f172a0f}.apexcharts-menu.apexcharts-menu-open{opacity:1;transform:translateY(0);pointer-events:all}.apexcharts-menu-item{padding:6px 9px;font-size:12px;border-radius:5px;cursor:pointer}.apexcharts-theme-light .apexcharts-menu-item:hover{background:#0f172a0f}.apexcharts-theme-dark .apexcharts-menu{background:#1c1c1feb;border-color:#ffffff14;color:#f3f4f6;box-shadow:0 4px 16px -4px #00000080,0 2px 4px -1px #0006}.apexcharts-theme-dark .apexcharts-menu-item:hover{background:#ffffff14}@media screen and (min-width:768px){.apexcharts-canvas:hover .apexcharts-toolbar{opacity:1}}.apexcharts-toolbar:focus-within{opacity:1}.apexcharts-menu-icon:focus-visible,.apexcharts-measure-icon:focus-visible,.apexcharts-pan-icon:focus-visible,.apexcharts-reset-icon:focus-visible,.apexcharts-selection-icon:focus-visible,.apexcharts-toolbar-custom-icon:focus-visible,.apexcharts-zoom-icon:focus-visible,.apexcharts-zoomin-icon:focus-visible,.apexcharts-zoomout-icon:focus-visible{outline:2px solid var(--apexcharts-focus-color, #008FFB);outline-offset:1px;border-radius:5px}.apexcharts-menu-item:focus-visible{outline:2px solid var(--apexcharts-focus-color, #008FFB);outline-offset:-2px;background:#eee}.apexcharts-canvas .apexcharts-element-hidden,.apexcharts-datalabel.apexcharts-element-hidden,.apexcharts-hide .apexcharts-series-points{opacity:0}.apexcharts-hidden-element-shown{opacity:1;transition:.25s ease all}.apexcharts-datalabel,.apexcharts-datalabel-label,.apexcharts-datalabel-value,.apexcharts-datalabels,.apexcharts-pie-label,.apexcharts-pie-name-label,.apexcharts-pie-name-label-group,.apexcharts-pie-label-connector,.apexcharts-unit-outer-label,.apexcharts-unit-outer-label-group,.apexcharts-unit-label-connector{cursor:default;pointer-events:none}.apexcharts-pie-label-connector,.apexcharts-unit-label-connector{fill:none}.apexcharts-pie-label-delay,.apexcharts-unit-label-delay{opacity:0;animation-name:opaque;animation-duration:.3s;animation-fill-mode:forwards;animation-timing-function:ease}.apexcharts-unit-label-delay{animation-duration:.5s}.apexcharts-radialbar-label{cursor:pointer}.apexcharts-annotation-rect,.apexcharts-area-series .apexcharts-area,.apexcharts-gridline,.apexcharts-line,.apexcharts-point-annotation-label,.apexcharts-radar-series path:not(.apexcharts-marker),.apexcharts-radar-series polygon,.apexcharts-toolbar svg,.apexcharts-tooltip .apexcharts-marker,.apexcharts-xaxis-annotation-label,.apexcharts-yaxis-annotation-label,.apexcharts-zoom-rect,.no-pointer-events{pointer-events:none}.apexcharts-tooltip-active .apexcharts-marker{transition:.15s ease all}.apexcharts-radar-series .apexcharts-yaxis,.apexcharts-bar-goals-markers,.apexcharts-bar-shadows,.apexcharts-rangebar-goals-markers{pointer-events:none}.apexcharts-drilldown-target{cursor:pointer}.apexcharts-breadcrumb{position:absolute;z-index:11;display:inline-flex;align-items:center;gap:2px;font-size:12px;font-family:inherit;padding:2px 4px}.apexcharts-breadcrumb-item{background:transparent;border:none;padding:2px 6px;border-radius:3px;font:inherit;color:inherit;cursor:pointer;line-height:1.2}.apexcharts-breadcrumb-item:hover:not(.apexcharts-breadcrumb-current){background:#00000014}.apexcharts-breadcrumb-arrow{margin-right:4px;font-weight:600;user-select:none}.apexcharts-breadcrumb-current{cursor:default;font-weight:600;opacity:.85}.apexcharts-breadcrumb-separator{opacity:.5;user-select:none}.apexcharts-theme-dark .apexcharts-breadcrumb-item:hover:not(.apexcharts-breadcrumb-current){background:#ffffff1f}.apexcharts-drilldown-loading{position:absolute;inset:0;z-index:12;display:flex;align-items:center;justify-content:center;gap:10px;font-size:13px;font-family:inherit;color:inherit;background:#ffffff9e;cursor:progress}.apexcharts-drilldown-loading-spinner{width:26px;height:26px;border-radius:50%;border:2.5px solid rgba(0,0,0,.16);border-top-color:#0000008c;animation:apexcharts-drilldown-spin .7s linear infinite}.apexcharts-drilldown-loading-text{opacity:.8}.apexcharts-theme-dark .apexcharts-drilldown-loading{background:#1e1e1e9e}.apexcharts-theme-dark .apexcharts-drilldown-loading-spinner{border-color:#ffffff38;border-top-color:#ffffffb3}@keyframes apexcharts-drilldown-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.apexcharts-canvas:not(.apexcharts-ignore-reduced-motion) .apexcharts-drilldown-loading-spinner{animation:apexcharts-drilldown-pulse 1.4s ease-in-out infinite!important}@keyframes apexcharts-drilldown-pulse{0%,to{opacity:.35}50%{opacity:1}}}.apexcharts-disable-transitions *{transition:none!important}.apexcharts-trellis{position:relative}.apexcharts-trellis-grid{display:grid}.apexcharts-trellis-cell{min-width:0;position:relative}.apexcharts-trellis-header{font-size:12px;font-weight:600;line-height:22px;height:22px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--apx-fore, var(--apx-trellis-fore, #373d3f))}.apexcharts-trellis-title{font-size:14px;font-weight:700;padding:2px 0 6px;color:var(--apx-fore, var(--apx-trellis-fore, #373d3f))}.apexcharts-trellis-mute-y .apexcharts-yaxis,.apexcharts-trellis-mute-x .apexcharts-xaxis{opacity:0}.apexcharts-trellis-has-toolbar{padding-top:24px}.apexcharts-trellis-strip{font-size:12px;font-weight:600;color:var(--apx-fore, var(--apx-trellis-fore, #373d3f));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.apexcharts-trellis-strip-column{text-align:center;line-height:22px;height:22px;align-self:end}.apexcharts-trellis-strip-row{align-self:center;max-width:140px;padding-right:6px}.apexcharts-trellis-cell-empty{position:relative}.apexcharts-trellis-empty-label{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:12px;color:var(--apx-fore, var(--apx-trellis-fore, #373d3f));opacity:.45;pointer-events:none}.apexcharts-trellis-cell-hidden>*{visibility:hidden}.apexcharts-trellis-gradient-legend{margin:10px auto 0}.apexcharts-trellis-panel.apexcharts-trellis-skeleton{background:var(--apx-fore, var(--apx-trellis-fore, #373d3f));opacity:.05;border-radius:4px}.apexcharts-trellis[data-tooltip-mode=panel] .apexcharts-trellis-cell:not(:hover) .apexcharts-tooltip,.apexcharts-trellis[data-tooltip-mode=panel] .apexcharts-trellis-cell:not(:hover) .apexcharts-xaxistooltip,.apexcharts-trellis[data-tooltip-mode=panel] .apexcharts-trellis-cell:not(:hover) .apexcharts-yaxistooltip{opacity:0!important}.apexcharts-trellis[data-tooltip-mode=grid] .apexcharts-trellis-cell .apexcharts-tooltip,.apexcharts-trellis[data-tooltip-mode=grid] .apexcharts-trellis-cell .apexcharts-xaxistooltip,.apexcharts-trellis[data-tooltip-mode=grid] .apexcharts-trellis-cell .apexcharts-yaxistooltip{opacity:0!important}.apexcharts-trellis-tooltip{position:absolute;top:0;left:0;z-index:14;pointer-events:none;opacity:0;transition:opacity .1s ease;background:var(--apx-bg, #fff);color:var(--apx-fore, var(--apx-trellis-fore, #373d3f));border:1px solid rgba(120,120,120,.25);border-radius:5px;box-shadow:2px 2px 6px -4px #0006;font-size:12px;min-width:140px;max-width:320px}.apexcharts-trellis-tooltip-active{opacity:1}.apexcharts-trellis-tooltip .apexcharts-tooltip-title{padding:5px 10px;font-weight:600;background:#78787814;border-bottom:1px solid rgba(120,120,120,.18);margin-bottom:2px}.apexcharts-trellis-tooltip-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:2px 10px;line-height:1.6}.apexcharts-trellis-tooltip-row-active{background:#7878781a;font-weight:600}.apexcharts-trellis-tooltip-key{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.apexcharts-trellis-tooltip-vals{display:flex;gap:10px;white-space:nowrap}.apexcharts-trellis-tooltip-val{display:inline-flex;align-items:center;gap:5px}.apexcharts-trellis-tooltip-marker{width:8px;height:8px;border-radius:50%;display:inline-block;flex:none}.apexcharts-trellis-cell-promoted{grid-column:1 / -1}.apexcharts-trellis-cell-parked{display:none}.apexcharts-trellis-cell-promoted.apexcharts-trellis-mute-y .apexcharts-yaxis,.apexcharts-trellis-cell-promoted.apexcharts-trellis-mute-x .apexcharts-xaxis{opacity:1}.apexcharts-trellis-header-clickable{cursor:pointer}.apexcharts-trellis-header-clickable:hover{text-decoration:underline;text-underline-offset:3px}.apexcharts-trellis-breadcrumb{display:flex;align-items:center;gap:6px;font-size:12px;padding:2px 0 6px;color:var(--apx-fore, var(--apx-trellis-fore, #373d3f))}.apexcharts-trellis-breadcrumb-back{border:none;background:none;padding:0;font-size:12px;cursor:pointer;color:var(--apx-accent, #008ffb)}.apexcharts-trellis-breadcrumb-back:hover{text-decoration:underline}.apexcharts-trellis-breadcrumb-sep{opacity:.5}.apexcharts-trellis-breadcrumb-current{font-weight:600}.apexcharts-trellis-menu{position:absolute;top:26px;right:0;display:none;flex-direction:column;min-width:132px;background:var(--apx-bg, #fff);border:1px solid rgba(120,120,120,.25);border-radius:5px;box-shadow:2px 2px 6px -4px #0006;padding:4px;z-index:15}.apexcharts-trellis-menu-open{display:flex}.apexcharts-trellis-menu-item{border:none;background:none;text-align:left;font-size:12px;padding:5px 8px;border-radius:3px;cursor:pointer;color:var(--apx-fore, var(--apx-trellis-fore, #373d3f))}.apexcharts-trellis-menu-item:hover{background:#7878781f}.apexcharts-trellis-toolbar{position:absolute;top:0;right:0;display:flex;gap:2px;z-index:12}.apexcharts-trellis-tool{border:0;background:transparent;padding:2px;cursor:pointer;border-radius:3px;color:#6e8192;line-height:0}.apexcharts-trellis-tool:hover{color:var(--apx-fore, var(--apx-trellis-fore, #373d3f))}.apexcharts-trellis-tool.apexcharts-selected{color:var(--apx-accent, #008ffb)}.apexcharts-trellis-legend{display:flex;flex-wrap:wrap;justify-content:center;gap:4px 14px;padding:8px 10px 2px}.apexcharts-trellis-legend-item{display:flex;align-items:center;gap:6px;cursor:pointer;line-height:1}.apexcharts-trellis-legend-item .apexcharts-legend-marker{width:12px;height:12px;border-radius:50%;display:inline-block}.apexcharts-trellis-legend-item .apexcharts-legend-text{font-size:12px;color:var(--apx-fore, var(--apx-trellis-fore, #373d3f))}.apexcharts-trellis-legend-item.apexcharts-inactive-legend{opacity:.45}@media print{.apexcharts-canvas.apexcharts-printing,.apexcharts-canvas.apexcharts-printing svg{max-width:100%!important}.apexcharts-canvas.apexcharts-printing svg{height:auto!important}.apexcharts-canvas.apexcharts-printing{height:auto!important}.apexcharts-toolbar{display:none!important}}';
32596
32617
  const e = globalThis.console;
32597
32618
  function t(t2, ...s2) {
32598
32619
  e.error(t2, ...s2);
@@ -32790,8 +32811,19 @@ var __async = (__this, __arguments, generator) => {
32790
32811
  j.WATERMARK_ATTR = "data-apexcharts-watermark", j.WATERMARK_TEXT = "APEXCHARTS", j.ATTR = "data-apexcharts-watermark", j.CRITICAL_STYLES = { bottom: "0", display: "block", left: "0", msUserSelect: "none", opacity: "1", pointerEvents: "none", position: "absolute", right: "0", top: "0", userSelect: "none", visibility: "visible", webkitUserSelect: "none", zIndex: "10000" }, j.managed = /* @__PURE__ */ new Set(), j.subscribed = false;
32791
32812
  let C = j;
32792
32813
  const PRICING_URL = "https://apexcharts.com/pricing";
32793
- let _perspectivesTokenDecoded = false;
32794
- const enforced = /* @__PURE__ */ new Set();
32814
+ const STATE_KEY = "__apexcharts_license_enforcer_v1__";
32815
+ if (!/** @type {any} */
32816
+ globalThis[STATE_KEY]) {
32817
+ globalThis[STATE_KEY] = {
32818
+ perspectivesTokenDecoded: false,
32819
+ enforced: /* @__PURE__ */ new Set()
32820
+ };
32821
+ }
32822
+ const state = (
32823
+ /** @type {any} */
32824
+ globalThis[STATE_KEY]
32825
+ );
32826
+ const enforced = state.enforced;
32795
32827
  function untrackChart(ctx) {
32796
32828
  enforced.delete(ctx);
32797
32829
  }
@@ -32816,7 +32848,7 @@ var __async = (__this, __arguments, generator) => {
32816
32848
  if (ctx.contextMenu && chart.contextMenu && chart.contextMenu.enabled === true) {
32817
32849
  used.push("context-menu");
32818
32850
  }
32819
- if (ctx.perspectives && (ctx.perspectives._used || _perspectivesTokenDecoded)) {
32851
+ if (ctx.perspectives && (ctx.perspectives._used || state.perspectivesTokenDecoded)) {
32820
32852
  used.push("perspectives");
32821
32853
  }
32822
32854
  if (ctx.history && chart.history && chart.history.enabled === true) {
@@ -33130,19 +33162,15 @@ var __async = (__this, __arguments, generator) => {
33130
33162
  const wantsTrellis = !!(trellisCfg && (trellisCfg.by || trellisCfg.row || trellisCfg.column));
33131
33163
  const isTrellisHost = !!(wantsTrellis && this.trellis && this.trellis.isActive());
33132
33164
  if (wantsTrellis && !this.trellis) {
33133
- console.warn(
33134
- "ApexCharts: `trellis` requires the trellis feature, which is not in the default bundle. Bundler: import 'apexcharts/features/trellis'. Script tag: add <script src='.../dist/features/trellis.js'> after apexcharts.js. Rendering as a single chart."
33135
- );
33165
+ warnMissingFeature("`trellis`", "trellis", {
33166
+ tail: "Rendering as a single chart."
33167
+ });
33136
33168
  }
33137
33169
  if (((_b2 = (_a2 = this.w.config.chart) == null ? void 0 : _a2.measure) == null ? void 0 : _b2.enabled) && !this.measure) {
33138
- console.warn(
33139
- "ApexCharts: `chart.measure` requires the measure feature, which is not in the default bundle. Bundler: import 'apexcharts/features/measure'. Script tag: add <script src='.../dist/features/measure.js'> after apexcharts.js."
33140
- );
33170
+ warnMissingFeature("`chart.measure`", "measure");
33141
33171
  }
33142
33172
  if (((_d = (_c = this.w.config.chart) == null ? void 0 : _c.link) == null ? void 0 : _d.enabled) && !this.linkedViews) {
33143
- console.warn(
33144
- "ApexCharts: `chart.link` requires the link feature, which is not in the default bundle. Bundler: import 'apexcharts/features/link'. Script tag: add <script src='.../dist/features/link.js'> after apexcharts.js."
33145
- );
33173
+ warnMissingFeature("`chart.link`", "link");
33146
33174
  }
33147
33175
  if (!this.ink) {
33148
33176
  const inkOn = (_f = (_e = this.w.config.chart) == null ? void 0 : _e.ink) == null ? void 0 : _f.enabled;
@@ -33150,20 +33178,17 @@ var __async = (__this, __arguments, generator) => {
33150
33178
  (p) => p && p.draggable
33151
33179
  );
33152
33180
  if (inkOn || anyDraggable) {
33153
- console.warn(
33154
- "ApexCharts: `chart.ink` / `annotations.points[].draggable` requires the ink feature, which is not in the default bundle. Bundler: import 'apexcharts/features/ink'. Script tag: add <script src='.../dist/features/ink.js'> after apexcharts.js."
33181
+ warnMissingFeature(
33182
+ "`chart.ink` / `annotations.points[].draggable`",
33183
+ "ink"
33155
33184
  );
33156
33185
  }
33157
33186
  }
33158
33187
  if (((_j = (_i = this.w.config.chart) == null ? void 0 : _i.contextMenu) == null ? void 0 : _j.enabled) && !this.contextMenu) {
33159
- console.warn(
33160
- "ApexCharts: `chart.contextMenu` requires the context-menu feature, which is not in the default bundle. Bundler: import 'apexcharts/features/context-menu'. Script tag: add <script src='.../dist/features/context-menu.js'> after apexcharts.js."
33161
- );
33188
+ warnMissingFeature("`chart.contextMenu`", "context-menu");
33162
33189
  }
33163
33190
  if (((_l = (_k = this.w.config.chart) == null ? void 0 : _k.history) == null ? void 0 : _l.enabled) && !this.history) {
33164
- console.warn(
33165
- "ApexCharts: `chart.history` requires the history feature, which is not in the default bundle. Bundler: import 'apexcharts/features/history'. Script tag: add <script src='.../dist/features/history.js'> after apexcharts.js."
33166
- );
33191
+ warnMissingFeature("`chart.history`", "history");
33167
33192
  }
33168
33193
  if (Environment.isBrowser()) {
33169
33194
  if (!isTrellisHost) {
@@ -34146,9 +34171,7 @@ var __async = (__this, __arguments, generator) => {
34146
34171
  */
34147
34172
  static trellis(el, options2) {
34148
34173
  if (!InitCtxVariables._featureRegistry.get("trellis")) {
34149
- console.warn(
34150
- "ApexCharts.trellis requires the trellis feature, which is not in the default bundle. Bundler: import 'apexcharts/features/trellis'. Script tag: add <script src='.../dist/features/trellis.js'> after apexcharts.js."
34151
- );
34174
+ warnMissingFeature("ApexCharts.trellis()", "trellis");
34152
34175
  return null;
34153
34176
  }
34154
34177
  const chart = new _ApexCharts(el, options2);
@@ -34526,9 +34549,7 @@ var __async = (__this, __arguments, generator) => {
34526
34549
  _ApexCharts._crossfilterFactory
34527
34550
  );
34528
34551
  if (!factory) {
34529
- console.warn(
34530
- `[apexcharts] ApexCharts.crossfilter(...) requires the link feature, which is not in the default bundle. Bundler: import 'apexcharts/features/link'. Script tag: add <script src='.../dist/features/link.js'> after apexcharts.js.`
34531
- );
34552
+ warnMissingFeature("ApexCharts.crossfilter()", "link");
34532
34553
  return null;
34533
34554
  }
34534
34555
  const coordinator = factory(opts);