@actionexec/dashboards 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/internals.js CHANGED
@@ -1,65 +1,79 @@
1
- import { A as e, C as T, a as E, b as _, c as L, d as t, e as A, D as S, f as R, g as O, h as o, i as I, j as r, k as P, l as D, E as g, F, m as C, n as G, G as M, o as N, L as l, M as m, p as n, q as U, r as p, s as c, N as h, P as W, S as i, t as H, u as Y, v as u, T as k, V as B, W as d, w as X, x as V, y as f, z as b, B as x, H as j, I as q, J as v, K as w, O as y, Q as z, R as J, U as K, X as Q, Y as Z, Z as $, _ as aa, $ as sa, a0 as ea, a1 as Ta, a2 as Ea, a3 as _a, a4 as La, a5 as ta, a6 as Aa } from "./ColorPaletteSelector-4eS1vsrU.js";
1
+ import { T, y as L } from "./ColorPaletteSelector-Ddcuobr5.js";
2
+ import { z as I, B as R, w as r, E as n, F as P, H as D, s as m, I as F, C as M, J as N, K as g, L as C, N as G, O as c, P as i, Q as U, D as l, R as p, U as u, V as W, W as h, X as B, v as Y, G as H, Y as d, Z as k, x as X, _ as b, k as f, M as V, $, a0 as w, a1 as x, a2 as y, a3 as j, S as q, a4 as v, a5 as z, a6 as J, c as K, b as Q, t as Z, d as aa, u as sa, a7 as ea, a8 as Ea, e as _a, g as Ta, o as La, a9 as ta, n as Sa, l as Aa, r as Oa, q as oa, aa as Ia, ab as Ra, h as ra, i as na, ac as Pa, j as Da, m as ma, ad as Fa, p as Ma, ae as Na } from "./ColorPaletteSelector-Ddcuobr5.js";
3
+ const t = "−";
4
+ function A(a) {
5
+ const s = a.amount ?? 0;
6
+ if (s === 0) return "";
7
+ const e = Math.abs(s), [E, _] = a.mode === "window" ? T : L[a.unit ?? "month"];
8
+ return `${s < 0 ? t : "+"}${e} ${e === 1 ? E : _}`;
9
+ }
2
10
  export {
3
- e as AGGREGATION_LABELS,
4
- T as CELL_ASPECT,
5
- E as CHART_TYPE_LABELS,
6
- _ as COMPARISON_LABELS,
7
- L as CONTROL_WIDGET_SET,
8
- t as CONTROL_WIDGET_TYPES,
9
- A as ColorPaletteSelector,
10
- S as DATA_WIDGET_TYPES,
11
- R as DEFAULT_CONFIG,
12
- O as DEFAULT_GRID,
13
- o as DEFAULT_GRID_COLUMNS,
14
- I as DEFAULT_GRID_ROWS,
15
- r as DEFAULT_PALETTE,
16
- P as DEFAULT_PALETTE_COLORS,
17
- D as DashboardDatePicker,
18
- g as EMPTY_LAYOUT,
19
- F as FILTER_OPERATOR_LABELS,
20
- C as FILTER_TYPE_LABELS,
21
- G as FORMAT_LABELS,
22
- M as GRID_GAP_PX,
23
- N as GRID_PADDING_PX,
24
- l as LIST_FILTER_OPERATORS,
25
- m as MAX_CELL_HEIGHT_PX,
26
- n as MIN_CELL_HEIGHT_PX,
27
- U as MONTH_NAMES_FULL,
28
- p as MONTH_NAMES_SHORT,
29
- c as MULTI_VALUE_SEPARATOR,
30
- h as NUMERIC_FORMAT_OPTIONS,
31
- W as PALETTES,
32
- i as SERIES_COUNT,
33
- H as SLOT_INDEX,
34
- Y as SLOT_LABELS,
35
- u as SearchableSelect,
36
- k as TOTAL_SLOTS,
37
- B as VALUELESS_FILTER_OPERATORS,
38
- d as WIDGET_TYPE_LABELS,
39
- X as computeCellHeight,
40
- V as computeCellWidth,
41
- f as computeGridHeight,
42
- b as computeStackThreshold,
43
- x as computeWidgetAspect,
44
- j as dateToIso,
45
- q as ensurePaletteShape,
46
- v as formatCompact,
47
- w as formatValue,
48
- y as getFullYearRange,
49
- z as getISOWeek,
50
- J as getMonthRange,
51
- K as getMonthWeeks,
52
- Q as getPaletteCssVars,
53
- Z as getSeries,
54
- $ as getWeekRange,
55
- aa as getWeeksInMonth,
56
- sa as getYearRange,
57
- ea as isNumericFormat,
58
- Ta as isoToDate,
59
- Ea as parseMonthFromRange,
60
- _a as parseMonthWeekFromRange,
61
- La as parseWeekFromRange,
62
- ta as parseYearFromRange,
63
- Aa as setApiUrl
11
+ I as AGGREGATION_LABELS,
12
+ R as BRIDGE_DIRECTION_LABELS,
13
+ r as CELL_ASPECT,
14
+ n as CHART_TYPE_LABELS,
15
+ P as COMPARISON_DISPLAY_LABELS,
16
+ D as COMPOSITION_DISPLAY_LABELS,
17
+ m as CONTROL_WIDGET_SET,
18
+ F as CONTROL_WIDGET_TYPES,
19
+ M as ColorPaletteSelector,
20
+ N as DATA_WIDGET_TYPES,
21
+ g as DEFAULT_CONFIG,
22
+ C as DEFAULT_GRID,
23
+ G as DEFAULT_GRID_COLUMNS,
24
+ c as DEFAULT_GRID_ROWS,
25
+ i as DEFAULT_PALETTE,
26
+ U as DEFAULT_PALETTE_COLORS,
27
+ l as DashboardDatePicker,
28
+ p as EMPTY_LAYOUT,
29
+ u as FILTER_OPERATOR_LABELS,
30
+ W as FILTER_TYPE_LABELS,
31
+ h as FORMAT_LABELS,
32
+ B as GOOD_WHEN_LABELS,
33
+ Y as GRID_GAP_PX,
34
+ H as GRID_PADDING_PX,
35
+ d as LIST_FILTER_OPERATORS,
36
+ k as MAX_CELL_HEIGHT_PX,
37
+ X as MIN_CELL_HEIGHT_PX,
38
+ b as MONTH_NAMES_FULL,
39
+ f as MONTH_NAMES_SHORT,
40
+ V as MULTI_VALUE_SEPARATOR,
41
+ $ as NUMERIC_FORMAT_OPTIONS,
42
+ w as PALETTES,
43
+ x as SERIES_COUNT,
44
+ y as SLOT_INDEX,
45
+ j as SLOT_LABELS,
46
+ q as SearchableSelect,
47
+ L as TIME_OFFSET_UNIT_LABELS,
48
+ T as TIME_OFFSET_WINDOW_LABEL,
49
+ v as TOTAL_SLOTS,
50
+ z as VALUELESS_FILTER_OPERATORS,
51
+ J as WIDGET_TYPE_LABELS,
52
+ K as computeCellHeight,
53
+ Q as computeCellWidth,
54
+ Z as computeGridHeight,
55
+ aa as computeStackThreshold,
56
+ sa as computeWidgetAspect,
57
+ ea as dateToIso,
58
+ Ea as ensurePaletteShape,
59
+ _a as formatCompact,
60
+ A as formatTimeOffset,
61
+ Ta as formatValue,
62
+ La as getFullYearRange,
63
+ ta as getISOWeek,
64
+ Sa as getMonthRange,
65
+ Aa as getMonthWeeks,
66
+ Oa as getPaletteCssVars,
67
+ oa as getSeries,
68
+ Ia as getWeekRange,
69
+ Ra as getWeeksInMonth,
70
+ ra as getYearRange,
71
+ na as isNumericFormat,
72
+ Pa as isoToDate,
73
+ Da as parseMonthFromRange,
74
+ ma as parseMonthWeekFromRange,
75
+ Fa as parseWeekFromRange,
76
+ Ma as parseYearFromRange,
77
+ Na as setApiUrl
64
78
  };
65
79
  //# sourceMappingURL=internals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"internals.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"internals.js","sources":["../src/utils/offset.ts"],"sourcesContent":["// Purpose: Leitura de um desvio temporal como texto.\n// Scope: O desvio aparece em dois lugares do builder — a caixa da fórmula e o\n// controle que o edita — e os dois precisam dizer exatamente a mesma\n// coisa. Duas formatações seriam duas verdades sobre o mesmo campo.\n// Public API: formatTimeOffset\n\nimport type { TimeOffset } from '../types';\nimport { TIME_OFFSET_UNIT_LABELS, TIME_OFFSET_WINDOW_LABEL } from '../types';\n\n/** Sinal tipográfico: menos de verdade, não hífen. */\nconst MINUS = '−';\n\n/**\n * Descreve o desvio: `−1 mês`, `+2 semanas`, `−1 janela`.\n *\n * Desvio zero não é deslocamento nenhum e devolve string vazia — quem chama\n * decide se omite o rótulo ou o campo inteiro.\n */\nexport function formatTimeOffset(offset: TimeOffset): string {\n const amount = offset.amount ?? 0;\n if (amount === 0) return '';\n\n const magnitude = Math.abs(amount);\n const [one, many] = offset.mode === 'window'\n ? TIME_OFFSET_WINDOW_LABEL\n : TIME_OFFSET_UNIT_LABELS[offset.unit ?? 'month'];\n\n return `${amount < 0 ? MINUS : '+'}${magnitude} ${magnitude === 1 ? one : many}`;\n}\n"],"names":["MINUS","formatTimeOffset","offset","amount","magnitude","one","many","TIME_OFFSET_WINDOW_LABEL","TIME_OFFSET_UNIT_LABELS"],"mappings":";;AAUA,MAAMA,IAAQ;AAQP,SAASC,EAAiBC,GAA4B;AAC3D,QAAMC,IAASD,EAAO,UAAU;AAChC,MAAIC,MAAW,EAAG,QAAO;AAEzB,QAAMC,IAAY,KAAK,IAAID,CAAM,GAC3B,CAACE,GAAKC,CAAI,IAAIJ,EAAO,SAAS,WAChCK,IACAC,EAAwBN,EAAO,QAAQ,OAAO;AAElD,SAAO,GAAGC,IAAS,IAAIH,IAAQ,GAAG,GAAGI,CAAS,IAAIA,MAAc,IAAIC,IAAMC,CAAI;AAChF;"}
package/dist/styles.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";.react-datepicker__navigation-icon:before,.react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow{border-color:#ccc;border-style:solid;border-width:3px 3px 0 0;content:"";display:block;height:9px;position:absolute;top:6px;width:9px}.react-datepicker__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.react-datepicker-wrapper{display:inline-block;padding:0;border:0}.react-datepicker{font-family:Helvetica Neue,helvetica,arial,sans-serif;font-size:.8rem;background-color:#fff;color:#000;border:1px solid #aeaeae;border-radius:.3rem;display:inline-block;position:relative;line-height:initial}.react-datepicker--time-only .react-datepicker__time-container{border-left:0}.react-datepicker--time-only .react-datepicker__time,.react-datepicker--time-only .react-datepicker__time-box{border-bottom-left-radius:.375em;border-bottom-right-radius:.375em}.react-datepicker-popper{z-index:1;line-height:0}.react-datepicker-popper .react-datepicker__triangle{stroke:#aeaeae}.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle{fill:#f0f0f0;color:#f0f0f0}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle,.react-datepicker-popper--header-middle[data-placement^=bottom] .react-datepicker__triangle,.react-datepicker-popper--header-bottom[data-placement^=bottom] .react-datepicker__triangle{fill:#fff;color:#fff}.react-datepicker-popper--header-bottom[data-placement^=top] .react-datepicker__triangle{fill:#f0f0f0;color:#f0f0f0}.react-datepicker__header{text-align:center;background-color:#f0f0f0;border-bottom:1px solid #aeaeae;border-top-left-radius:.3rem;padding:8px 0;position:relative}.react-datepicker__header--time{padding-bottom:8px;padding-left:5px;padding-right:5px}.react-datepicker__header--time:not(.react-datepicker__header--time--only){border-top-left-radius:0}.react-datepicker__header:not(.react-datepicker__header--has-time-select,.react-datepicker__header--middle,.react-datepicker__header--bottom){border-top-right-radius:.3rem}.react-datepicker__header--middle{border-top:1px solid #aeaeae;border-radius:0;margin-top:4px}.react-datepicker__header--bottom{border-bottom:none;border-top:1px solid #aeaeae;border-radius:0 0 .3rem .3rem}.react-datepicker__header-wrapper{position:relative}.react-datepicker__header-wrapper .react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button){right:2px}.react-datepicker__year-dropdown-container--select,.react-datepicker__month-dropdown-container--select,.react-datepicker__month-year-dropdown-container--select,.react-datepicker__year-dropdown-container--scroll,.react-datepicker__month-dropdown-container--scroll,.react-datepicker__month-year-dropdown-container--scroll{display:inline-block;margin:0 15px}.react-datepicker__month-select,.react-datepicker__year-select,.react-datepicker__month-year-select{background-color:transparent;border:1px solid #aeaeae;border-radius:.3rem;color:inherit;cursor:pointer;font-family:inherit;font-size:inherit;margin-top:5px;padding:2px 5px}.react-datepicker__month-select:focus-visible,.react-datepicker__year-select:focus-visible,.react-datepicker__month-year-select:focus-visible{outline:auto 1px}.react-datepicker__current-month,.react-datepicker-time__header,.react-datepicker-year-header{margin-top:0;color:#000;font-weight:700;font-size:.944rem}h2.react-datepicker__current-month{padding:0;margin:0}.react-datepicker-time__header{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.react-datepicker__navigation{align-items:center;background:none;display:flex;justify-content:center;text-align:center;cursor:pointer;position:absolute;top:2px;padding:0;border:none;z-index:1;height:32px;width:32px;text-indent:-999em;overflow:hidden}.react-datepicker__navigation--previous{left:2px}.react-datepicker__navigation--next{right:2px}.react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button){right:85px}.react-datepicker__navigation--years{position:relative;top:0;display:block;margin-left:auto;margin-right:auto}.react-datepicker__navigation--years-previous{top:4px}.react-datepicker__navigation--years-upcoming{top:-4px}.react-datepicker__navigation:hover *:before{border-color:#a6a6a6}.react-datepicker__navigation-icon{position:relative;top:-1px;font-size:20px;width:0}.react-datepicker__navigation-icon--next{left:-2px}.react-datepicker__navigation-icon--next:before{transform:rotate(45deg);left:-7px}.react-datepicker__navigation-icon--previous{right:-2px}.react-datepicker__navigation-icon--previous:before{transform:rotate(225deg);right:-7px}.react-datepicker__month-container{float:left}.react-datepicker__year{margin:.5em;text-align:center}.react-datepicker__year-wrapper{display:flex;flex-wrap:wrap;max-width:180px}.react-datepicker__year .react-datepicker__year-text{display:inline-block;width:5em;margin:2px}.react-datepicker__month{margin:.5em;text-align:center}.react-datepicker__month .react-datepicker__month-text,.react-datepicker__month .react-datepicker__quarter-text{display:inline-block;width:5em;margin:2px}.react-datepicker__input-time-container{clear:both;width:100%;float:left;margin:5px 0 10px 15px;text-align:left}.react-datepicker__input-time-container .react-datepicker-time__caption,.react-datepicker__input-time-container .react-datepicker-time__input-container{display:inline-block}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input{display:inline-block;margin-left:10px}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input{width:auto}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-inner-spin-button,.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]{-moz-appearance:textfield}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__delimiter{margin-left:5px;display:inline-block}.react-datepicker__time-container{float:right;border-left:1px solid #aeaeae;width:85px}.react-datepicker__time-container--with-today-button{display:inline;border:1px solid #aeaeae;border-radius:.375em;position:absolute;right:-87px;top:0}.react-datepicker__time-container .react-datepicker__time{position:relative;background:#fff;border-bottom-right-radius:.375em}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box{width:85px;overflow-x:hidden;margin:0 auto;text-align:center;border-bottom-right-radius:.375em}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list{list-style:none;margin:0;height:calc(195px + 1.0625em);overflow-y:scroll;padding-right:0;padding-left:0;width:100%;box-sizing:content-box}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item{height:30px;padding:5px 10px;white-space:nowrap}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover{cursor:pointer;background-color:#f0f0f0}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected{background-color:#216ba5;color:#fff;font-weight:700}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected:hover{background-color:#216ba5}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled{color:#ccc}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled:hover{cursor:default;background-color:transparent}.react-datepicker__week-number{color:#ccc;display:inline-block;width:2.125em;line-height:2.125em;text-align:center;margin:.208em}.react-datepicker__week-number.react-datepicker__week-number--clickable{cursor:pointer}.react-datepicker__week-number.react-datepicker__week-number--clickable:not(.react-datepicker__week-number--selected):hover{border-radius:.3rem;background-color:#f0f0f0}.react-datepicker__week-number--selected{border-radius:.3rem;background-color:#216ba5;color:#fff}.react-datepicker__week-number--selected:hover{background-color:#1d5d90}.react-datepicker__day-names{text-align:center;white-space:nowrap;margin-bottom:-8px}.react-datepicker__week{white-space:nowrap}.react-datepicker__day-name,.react-datepicker__day,.react-datepicker__time-name{color:#000;display:inline-block;width:2.125em;line-height:2.125em;text-align:center;margin:.208em}.react-datepicker__day-name--disabled,.react-datepicker__day--disabled,.react-datepicker__time-name--disabled{cursor:default;color:#ccc}.react-datepicker__day,.react-datepicker__month-text,.react-datepicker__quarter-text,.react-datepicker__year-text{cursor:pointer}.react-datepicker__day:not([aria-disabled=true]):hover,.react-datepicker__month-text:not([aria-disabled=true]):hover,.react-datepicker__quarter-text:not([aria-disabled=true]):hover,.react-datepicker__year-text:not([aria-disabled=true]):hover{border-radius:.3rem;background-color:#f0f0f0}.react-datepicker__day--today,.react-datepicker__month-text--today,.react-datepicker__quarter-text--today,.react-datepicker__year-text--today{font-weight:700}.react-datepicker__day--highlighted,.react-datepicker__month-text--highlighted,.react-datepicker__quarter-text--highlighted,.react-datepicker__year-text--highlighted{border-radius:.3rem;background-color:#3dcc4a;color:#fff}.react-datepicker__day--highlighted:not([aria-disabled=true]):hover,.react-datepicker__month-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__year-text--highlighted:not([aria-disabled=true]):hover{background-color:#32be3f}.react-datepicker__day--highlighted-custom-1,.react-datepicker__month-text--highlighted-custom-1,.react-datepicker__quarter-text--highlighted-custom-1,.react-datepicker__year-text--highlighted-custom-1{color:#f0f}.react-datepicker__day--highlighted-custom-2,.react-datepicker__month-text--highlighted-custom-2,.react-datepicker__quarter-text--highlighted-custom-2,.react-datepicker__year-text--highlighted-custom-2{color:green}.react-datepicker__day--holidays,.react-datepicker__month-text--holidays,.react-datepicker__quarter-text--holidays,.react-datepicker__year-text--holidays{position:relative;border-radius:.3rem;background-color:#ff6803;color:#fff}.react-datepicker__day--holidays .overlay,.react-datepicker__month-text--holidays .overlay,.react-datepicker__quarter-text--holidays .overlay,.react-datepicker__year-text--holidays .overlay{position:absolute;bottom:100%;left:50%;transform:translate(-50%);background-color:#333;color:#fff;padding:4px;border-radius:4px;white-space:nowrap;visibility:hidden;opacity:0;transition:visibility 0s,opacity .3s ease-in-out}.react-datepicker__day--holidays:not([aria-disabled=true]):hover,.react-datepicker__month-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__year-text--holidays:not([aria-disabled=true]):hover{background-color:#cf5300}.react-datepicker__day--holidays:hover .overlay,.react-datepicker__month-text--holidays:hover .overlay,.react-datepicker__quarter-text--holidays:hover .overlay,.react-datepicker__year-text--holidays:hover .overlay{visibility:visible;opacity:1}.react-datepicker__day--selected,.react-datepicker__day--in-selecting-range,.react-datepicker__day--in-range,.react-datepicker__month-text--selected,.react-datepicker__month-text--in-selecting-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--selected,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--selected,.react-datepicker__year-text--in-selecting-range,.react-datepicker__year-text--in-range{border-radius:.3rem;background-color:#216ba5;color:#fff}.react-datepicker__day--selected:not([aria-disabled=true]):hover,.react-datepicker__day--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__day--in-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-range:not([aria-disabled=true]):hover{background-color:#1d5d90}.react-datepicker__day--keyboard-selected,.react-datepicker__month-text--keyboard-selected,.react-datepicker__quarter-text--keyboard-selected,.react-datepicker__year-text--keyboard-selected{border-radius:.3rem;background-color:#bad9f1;color:#000}.react-datepicker__day--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--keyboard-selected:not([aria-disabled=true]):hover{background-color:#1d5d90;color:#fff}.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__month-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__quarter-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__year-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range){background-color:#216ba580}.react-datepicker__month--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range){background-color:#f0f0f0;color:#000}.react-datepicker__day--disabled,.react-datepicker__month-text--disabled,.react-datepicker__quarter-text--disabled,.react-datepicker__year-text--disabled{cursor:default;color:#ccc}.react-datepicker__day--disabled .overlay,.react-datepicker__month-text--disabled .overlay,.react-datepicker__quarter-text--disabled .overlay,.react-datepicker__year-text--disabled .overlay{position:absolute;bottom:70%;left:50%;transform:translate(-50%);background-color:#333;color:#fff;padding:4px;border-radius:4px;white-space:nowrap;visibility:hidden;opacity:0;transition:visibility 0s,opacity .3s ease-in-out}.react-datepicker__input-container{position:relative;display:inline-block;width:100%}.react-datepicker__input-container .react-datepicker__calendar-icon{position:absolute;padding:.625em;box-sizing:content-box}.react-datepicker__view-calendar-icon input{padding:6px 10px 5px 25px}.react-datepicker__year-read-view,.react-datepicker__month-read-view,.react-datepicker__month-year-read-view{border:1px solid transparent;border-radius:.3rem;position:relative}.react-datepicker__year-read-view:hover,.react-datepicker__month-read-view:hover,.react-datepicker__month-year-read-view:hover{cursor:pointer}.react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow{border-top-color:#b3b3b3}.react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow{transform:rotate(135deg);right:-16px;top:0}.react-datepicker__year-dropdown,.react-datepicker__month-dropdown,.react-datepicker__month-year-dropdown{background-color:#f0f0f0;position:absolute;width:50%;left:25%;top:30px;z-index:1;text-align:center;border-radius:.3rem;border:1px solid #aeaeae}.react-datepicker__year-dropdown:hover,.react-datepicker__month-dropdown:hover,.react-datepicker__month-year-dropdown:hover{cursor:pointer}.react-datepicker__year-dropdown--scrollable,.react-datepicker__month-dropdown--scrollable,.react-datepicker__month-year-dropdown--scrollable{height:150px;overflow-y:scroll}.react-datepicker__year-option,.react-datepicker__month-option,.react-datepicker__month-year-option{line-height:20px;width:100%;display:block;margin-left:auto;margin-right:auto}.react-datepicker__year-option:first-of-type,.react-datepicker__month-option:first-of-type,.react-datepicker__month-year-option:first-of-type{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.react-datepicker__year-option:last-of-type,.react-datepicker__month-option:last-of-type,.react-datepicker__month-year-option:last-of-type{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.react-datepicker__year-option:hover,.react-datepicker__month-option:hover,.react-datepicker__month-year-option:hover{background-color:#ccc}.react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming{border-bottom-color:#b3b3b3}.react-datepicker__year-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__month-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous{border-top-color:#b3b3b3}.react-datepicker__year-option--selected,.react-datepicker__month-option--selected,.react-datepicker__month-year-option--selected{position:absolute;left:15px}.react-datepicker__close-icon{cursor:pointer;background-color:transparent;border:0;outline:0;padding:0 6px 0 0;position:absolute;top:0;right:0;height:100%;display:table-cell;vertical-align:middle}.react-datepicker__close-icon:after{cursor:pointer;background-color:#216ba5;color:#fff;border-radius:50%;height:16px;width:16px;padding:2px;font-size:12px;line-height:1;text-align:center;display:table-cell;vertical-align:middle;content:"×"}.react-datepicker__close-icon--disabled{cursor:default}.react-datepicker__close-icon--disabled:after{cursor:default;background-color:#ccc}.react-datepicker__today-button{background:#f0f0f0;border-top:1px solid #aeaeae;cursor:pointer;text-align:center;font-weight:700;padding:5px 0;clear:left}.react-datepicker__portal{position:fixed;width:100vw;height:100vh;background-color:#000c;left:0;top:0;justify-content:center;align-items:center;display:flex;z-index:2147483647}.react-datepicker__children-container{width:17.25em;margin:.5em;padding-right:.25em;padding-left:.25em;height:auto}.react-datepicker__aria-live{position:absolute;clip-path:circle(0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;width:1px;white-space:nowrap}.react-datepicker__calendar-icon{width:1em;height:1em;vertical-align:-.125em}.react-datepicker-popper-offset{margin-top:-.7em}:where(.preview-tab,.widget,.palette-selector,.ddp-field){--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 16px;--spacing-lg: 24px;--spacing-xl: 32px;--spacing-2xl: 48px;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--transition-fast: .15s ease;--shadow-lg: 0 10px 25px rgba(0, 0, 0, .4)}.preview-tab{display:flex;flex-direction:column;gap:var(--spacing-md);position:relative}.preview-tab__empty{display:flex;align-items:center;justify-content:center;min-height:300px;color:var(--text-muted);font-size:.9rem;border:2px dashed var(--bg-elevated);border-radius:var(--radius-lg)}.preview-tab__loading{display:flex;align-items:center;justify-content:center;padding:var(--spacing-2xl) 0;color:var(--text-secondary)}.preview-tab__error{padding:var(--spacing-md);background:#f443361a;border:1px solid var(--color-error);border-radius:var(--radius-md);color:var(--color-error);font-size:.875rem;text-align:center}.preview-tab__grid{display:grid;grid-template-columns:repeat(var(--dash-cols, 30),1fr);grid-template-rows:repeat(var(--dash-rows, 10),var(--dash-cell-h, 40px));grid-auto-rows:var(--dash-cell-h, 40px);gap:var(--dash-gap, 6px);padding:var(--dash-pad, 16px);background:var(--bg-dark);border-radius:var(--radius-lg)}.preview-tab__grid--stacked{grid-template-columns:1fr;grid-template-rows:none;grid-auto-rows:auto}.preview-tab__widget{display:flex;background:var(--bg-elevated);border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-md);overflow:hidden;min-height:0;container-type:size}.preview-tab__widget--control{background:var(--bg-elevated);border:1px dashed rgba(255,255,255,.15)}.preview-tab__widget-loading{display:flex;align-items:center;justify-content:center;height:100%;min-height:80px;color:var(--text-muted);font-size:.8125rem}.preview-tab__recalculating{position:fixed;bottom:var(--spacing-lg);right:var(--spacing-lg);padding:var(--spacing-sm) var(--spacing-lg);background:var(--bg-elevated);border:1px solid var(--action-orange);border-radius:var(--radius-md);color:var(--action-orange);font-size:.8125rem;font-weight:var(--font-weight-medium);box-shadow:var(--shadow-lg);z-index:50}.palette-selector{display:flex;flex-direction:column;gap:var(--spacing-sm)}.palette-selector--disabled{opacity:.5;pointer-events:none}.palette-selector__options{display:flex;flex-direction:column;gap:var(--spacing-xs)}.palette-selector__option{display:flex;flex-direction:column;gap:var(--spacing-xs);padding:var(--spacing-xs);background:transparent;border:1.5px solid var(--bg-elevated);border-radius:var(--radius-sm);cursor:pointer;transition:border-color var(--transition-fast)}.palette-selector__option:hover:not(:disabled){border-color:var(--text-muted)}.palette-selector__option--active{border-color:var(--action-orange)}.palette-selector__bar{display:flex;width:100%;height:18px;border-radius:3px;overflow:hidden}.palette-selector__bar--theme{height:12px;opacity:.85}.palette-selector__swatch{flex:1;min-width:0}.palette-selector__label{font-size:.7rem;color:var(--text-muted);text-align:left}.palette-selector__custom{display:flex;flex-direction:column;gap:6px}.palette-selector__row{display:flex;flex-direction:column;gap:4px}.palette-selector__row-label{font-size:.6rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;font-weight:var(--font-weight-semibold)}.palette-selector__row-slots{display:flex;gap:4px;flex-wrap:wrap}.palette-selector__color-input{width:24px;height:24px;padding:0;border:1.5px solid rgba(255,255,255,.25);border-radius:var(--radius-sm);background:transparent;cursor:pointer;transition:border-color var(--transition-fast);flex-shrink:0}.palette-selector__color-input:hover:not(:disabled){border-color:#ffffff80}.palette-selector__color-input:hover:not(:disabled){border-color:var(--action-orange)}.palette-selector__color-input::-webkit-color-swatch-wrapper{padding:2px}.palette-selector__color-input::-webkit-color-swatch{border:none;border-radius:2px}.ddp-field{width:100%;min-width:0;display:block}.ddp-field .react-datepicker-wrapper,.ddp-field .react-datepicker__input-container{width:100%;display:block}.ddp-field .react-datepicker__input-container input{width:100%;padding:var(--spacing-sm) var(--spacing-md);background:var(--bg-elevated);border:1.5px solid var(--bg-elevated);border-radius:var(--radius-sm);font-size:.8125rem;color:var(--text-primary);box-sizing:border-box;transition:border-color var(--transition-fast)}.ddp-field .react-datepicker__input-container input:focus{outline:none;border-color:var(--action-orange)}.ddp-field .react-datepicker__input-container input::placeholder{color:var(--text-muted)}.ddp-field .react-datepicker__input-container input:disabled{opacity:.6;cursor:not-allowed}.ddp-field .react-datepicker__month{min-height:168px}.react-datepicker-popper{z-index:1100!important}.widget{flex:1;display:flex;flex-direction:column;padding:var(--spacing-sm);background:var(--bg-elevated);border-radius:var(--radius-md);overflow:hidden;box-sizing:border-box;min-height:0;min-width:0}.widget__title{flex-shrink:0;margin:0 0 clamp(2px,1cqmin,8px);font-size:clamp(.5rem,4cqi,.9rem);font-weight:var(--font-weight-semibold);color:var(--text-secondary);line-height:1.2;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget__state{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;padding:var(--spacing-xs);font-size:clamp(.45rem,2.5cqi,.85rem);color:var(--text-muted)}.widget__state--error{color:var(--color-error)}.widget-filter,.widget-palette{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:clamp(4px,1.5cqi,12px);padding:clamp(4px,1cqi,8px) clamp(6px,1.5cqi,12px);box-sizing:border-box;min-height:0;min-width:0;overflow:hidden}.widget-variable{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;box-sizing:border-box;min-height:0;min-width:0;overflow:hidden}.widget-filter__label,.widget-palette__label,.widget-variable__label{flex-shrink:0;font-size:clamp(.45rem,6cqi,3rem);color:var(--text-muted);font-weight:var(--font-weight-medium)}.widget-kpi{justify-content:center;align-items:center;text-align:center;gap:clamp(2px,1cqmin,10px);padding:clamp(4px,2cqmin,16px)}.widget-kpi .widget__title{margin:0;font-size:clamp(.45rem,min(12cqi,12cqb),6rem);color:var(--text-muted);font-weight:var(--font-weight-medium)}.widget-kpi__value{font-size:clamp(.85rem,min(22cqi,22cqb),8rem);font-weight:var(--font-weight-bold);color:var(--text-primary);line-height:1.1;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}.widget-kpi__trend{display:flex;align-items:center;justify-content:center;gap:clamp(2px,.8cqmin,6px);font-size:clamp(.4rem,min(8cqi,8cqb),2rem);max-width:100%;overflow:hidden;flex-wrap:wrap}.widget-kpi__trend--up{color:var(--color-success)}.widget-kpi__trend--down{color:var(--color-error)}.widget-kpi__variance{font-weight:var(--font-weight-semibold);white-space:nowrap}.widget-kpi__trend-label{color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@container (max-width: 180px){.widget-kpi__trend-label{display:none}}@container (max-height: 70px){.widget-kpi .widget__title{display:none}}.widget-gauge{align-items:center;gap:0;overflow:hidden}.widget-gauge .widget__title{margin:0;font-size:clamp(.5rem,6cqi,3rem);color:var(--text-muted);font-weight:var(--font-weight-medium)}.widget-gauge__chart{position:relative;width:100%;flex:1;min-height:0}.widget-gauge__chart svg{margin-top:5%;display:block;width:100%;height:100%}.widget-gauge__center{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;margin-top:25%}.widget-gauge__percent{font-size:clamp(.5rem,9cqi,4rem);font-weight:var(--font-weight-bold);color:var(--text-primary);line-height:1}.widget-gauge__comparison{font-size:clamp(.4rem,3.5cqi,2rem);color:var(--text-muted)}.widget-gauge__badge{font-size:clamp(.35rem,3cqi,1.25rem);font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.3px;padding:1px var(--spacing-xs);border-radius:var(--radius-sm);background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.widget-chart{gap:var(--spacing-xs)}.widget-chart .widget__title{color:var(--text-primary)}.widget-chart__container{flex:1;min-height:0;overflow:hidden}.widget-table{display:flex;flex-direction:column;gap:.4rem;height:100%;overflow:hidden;padding:.5rem .6rem;box-sizing:border-box}.widget-table__td--placeholder{color:var(--text-muted, #999);text-align:center;padding:.75rem .5rem}.widget-table__tabs{flex:0 0 auto;display:flex;gap:.25rem;border-bottom:1px solid var(--border, rgba(255, 255, 255, .12))}.widget-table__tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-muted, #999);font:inherit;font-size:.78rem;font-weight:600;padding:.25rem .6rem;cursor:pointer}.widget-table__tab:hover{color:var(--text-primary, #f5f5f5)}.widget-table__tab--active{color:var(--color-accent, #f9812a);border-bottom-color:var(--color-accent, #f9812a)}.widget-table__scroll{flex:1 1 auto;min-height:0;overflow:auto}.widget-table__table{width:100%;border-collapse:collapse;font-size:.78rem}.widget-table__th{position:sticky;top:0;z-index:1;text-align:left;font-weight:600;color:var(--text-secondary, #ccc);background:var(--bg-elevated, #333);padding:.35rem .5rem;border-bottom:1px solid var(--border, rgba(255, 255, 255, .12));white-space:nowrap}.widget-table__th--num{text-align:right}.widget-table__td{padding:.3rem .5rem;color:var(--text-primary, #f5f5f5);border-bottom:1px solid var(--border, rgba(255, 255, 255, .06));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:26ch}.widget-table__td--num{text-align:right;font-variant-numeric:tabular-nums}.widget-table__td--up{color:var(--color-success, #a4c639);font-weight:600}.widget-table__td--down{color:var(--color-error, #e5534b);font-weight:600}.widget-table__table tbody tr:hover{background:#ffffff08}.widget-filter__date-range{display:flex;align-items:center;gap:clamp(2px,1cqi,8px);flex:1;min-width:0}.widget-filter__date-range--stacked{flex-direction:column;align-items:stretch;gap:clamp(4px,1.5cqmin,10px);width:100%;padding:clamp(2px,1cqmin,8px) 0}.widget-filter__date-range .ddp-field{flex:1;min-width:0;width:100%}.widget-filter__date-range .ddp-field .react-datepicker__input-container input,.widget-filter__select{padding:clamp(8px,4cqmin,22px) clamp(6px,1.5cqmin,12px);font-size:clamp(.5rem,10cqmin,2rem);background:var(--bg-paper);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-sm);color:var(--text-primary);flex:1;min-width:0;width:100%;box-sizing:border-box;text-align:center;font-variant-numeric:tabular-nums}.widget-filter__date-sep{font-size:clamp(.35rem,2.5cqi,.8rem);color:var(--text-muted)}.widget-filter__multi{display:flex;flex-direction:column;align-items:stretch;justify-content:space-around;gap:clamp(4px,1.5cqmin,14px);flex:1;min-height:0;width:100%;padding:clamp(6px,2cqmin,14px) clamp(4px,2cqmin,12px);box-sizing:border-box;overflow-y:auto}.widget-filter__multi::-webkit-scrollbar{width:6px}.widget-filter__multi::-webkit-scrollbar-track{background:transparent}.widget-filter__multi::-webkit-scrollbar-thumb{background:var(--bg-elevated);border-radius:3px}.widget-filter__multi::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.widget-filter__multi-clear{flex-shrink:0;width:100%;padding:clamp(3px,1cqmin,8px) clamp(8px,2.5cqmin,14px);background:transparent;border:1px solid var(--bg-elevated);border-radius:var(--radius-sm);color:var(--action-orange);font-size:clamp(.4rem,7cqmin,1rem);font-weight:var(--font-weight-semibold);text-align:center;cursor:pointer;transition:background-color var(--transition-fast),border-color var(--transition-fast)}.widget-filter__multi-clear:hover{background-color:var(--bg-elevated);border-color:var(--action-orange)}.widget-filter__multi-option{display:flex;align-items:center;gap:clamp(6px,4cqmin,14px);padding:clamp(4px,1.5cqmin,12px) clamp(8px,2.5cqmin,14px);height:clamp(20px,18cqb,120px);background:var(--bg-paper);border:1px solid var(--bg-elevated);border-radius:var(--radius-sm);cursor:pointer;transition:border-color var(--transition-fast),background-color var(--transition-fast);font-size:clamp(.45rem,8cqmin,1.2rem);font-weight:var(--font-weight-medium);color:var(--text-primary);line-height:1;flex-shrink:0;box-sizing:border-box}.widget-filter__multi-option:hover{border-color:var(--text-muted);background-color:var(--bg-elevated)}.widget-filter__multi-option:has(input[type=checkbox]:checked){border-color:var(--text-muted);background-color:var(--bg-elevated)}.widget-filter__multi-option input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:clamp(12px,7cqmin,22px);height:clamp(12px,7cqmin,22px);border:1.5px solid var(--text-muted);border-radius:3px;background:var(--bg-elevated);cursor:pointer;position:relative;flex-shrink:0;transition:border-color var(--transition-fast),background-color var(--transition-fast);margin:0}.widget-filter__multi-option input[type=checkbox]:hover{border-color:var(--action-orange)}.widget-filter__multi-option input[type=checkbox]:checked{background:var(--action-orange);border-color:var(--action-orange)}.widget-filter__multi-option input[type=checkbox]:checked:after{content:"";position:absolute;left:30%;top:8%;width:30%;height:60%;border:solid var(--bg-dark);border-width:0 2px 2px 0;transform:rotate(45deg)}.widget-filter__select{width:95%;max-height:45%;margin-top:2%;flex:1;font-size:clamp(.4rem,5cqi,1.5rem);font-weight:var(--font-weight-semibold);color:var(--text-primary);text-align:left;padding:clamp(8px,4cqi,22px) clamp(6px,1.5cqi,12px);min-width:0;box-sizing:border-box}.widget-filter>.widget-filter__select,.widget-filter__date-range--year .widget-filter__select,.widget-filter__date-range--month .widget-filter__select,.widget-filter__date-range--week .widget-filter__select{text-align:center;text-align-last:center;font-weight:var(--font-weight-semibold);color:var(--text-primary);background:var(--bg-paper);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-sm);cursor:pointer;appearance:none;-webkit-appearance:none;-moz-appearance:none;background-image:none;transition:border-color var(--transition-fast),background-color var(--transition-fast);box-sizing:border-box;width:100%;margin-top:0;max-height:none;padding:clamp(2px,.8cqmin,6px) clamp(6px,1.5cqmin,12px);line-height:1}.widget-filter>.widget-filter__select:hover,.widget-filter>.widget-filter__select:focus,.widget-filter__date-range--year .widget-filter__select:hover,.widget-filter__date-range--year .widget-filter__select:focus,.widget-filter__date-range--month .widget-filter__select:hover,.widget-filter__date-range--month .widget-filter__select:focus,.widget-filter__date-range--week .widget-filter__select:hover,.widget-filter__date-range--week .widget-filter__select:focus{outline:none;border-color:var(--action-orange);background-color:var(--bg-elevated)}.widget-filter>.widget-filter__select option,.widget-filter__date-range--year .widget-filter__select option,.widget-filter__date-range--month .widget-filter__select option,.widget-filter__date-range--week .widget-filter__select option{background:var(--bg-paper);color:var(--text-primary);font-size:.875rem;font-weight:var(--font-weight-normal);text-align:left;padding:6px 10px}.widget-filter>.widget-filter__select{flex:0 1 auto;height:clamp(50px,22cqmin,140px);max-height:75%;margin-block:auto;align-self:center;font-size:clamp(.6rem,12cqmin,2.2rem)}.widget-filter__date-range--year,.widget-filter__date-range--month,.widget-filter__date-range--week{display:flex;flex-direction:column;align-items:stretch;justify-content:center;gap:clamp(6px,2.5cqmin,16px);flex:1;width:100%;padding:clamp(6px,2cqmin,16px) clamp(4px,2cqmin,14px);box-sizing:border-box}.widget-filter__date-range--year .widget-filter__select{flex:0 1 auto;height:clamp(50px,22cqmin,140px);font-size:clamp(.6rem,12cqmin,2.2rem)}.widget-filter__date-range--month .widget-filter__select{flex:0 1 auto;height:clamp(30px,10cqmin,66px);font-size:clamp(.5rem,10cqmin,1.4rem)}.widget-filter__date-range--week .widget-filter__select{flex:0 1 auto;height:clamp(22px,12cqmin,48px);font-size:clamp(.45rem,8cqmin,3rem)}.widget-filter__search{position:relative;display:flex;align-items:center;flex:1;min-width:0;width:100%;padding:clamp(2px,1cqmin,8px) 0}.widget-filter .widget-filter__search-field{width:100%;padding:clamp(6px,3cqmin,18px) clamp(8px,2cqmin,14px);background:var(--bg-dark);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-sm);color:var(--text-primary);font-size:clamp(.55rem,10cqmin,1.8rem);font-weight:var(--font-weight-semibold);text-align:center;box-sizing:border-box;cursor:text;transition:border-color var(--transition-fast),background-color var(--transition-fast)}.widget-filter .widget-filter__search-field::placeholder{color:var(--text-muted);font-weight:var(--font-weight-normal)}.widget-filter .widget-filter__search-field:hover,.widget-filter .widget-filter__search-field:focus{outline:none;border-color:var(--action-orange);background-color:var(--bg-paper)}.widget-filter__search-panel{z-index:10000;display:flex;flex-direction:column;background:var(--bg-paper);border:1px solid var(--bg-elevated);border-radius:var(--radius-sm);box-shadow:var(--shadow-md, 0 8px 28px rgba(0, 0, 0, .45));overflow:hidden}.widget-filter__search-list{display:flex;flex-direction:column;gap:2px;padding:6px;overflow-y:auto}.widget-filter__search-option{display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;background:transparent;border:none;border-left:3px solid transparent;border-radius:var(--radius-sm);color:var(--text-primary);font-size:.85rem;font-weight:var(--font-weight-medium);text-align:left;cursor:pointer;transition:background-color var(--transition-fast),color var(--transition-fast)}.widget-filter__search-option:hover{background-color:var(--bg-elevated)}.widget-filter__search-option.is-selected{background-color:var(--bg-elevated);border-left-color:var(--action-orange);color:var(--action-orange)}.widget-filter__search-check{flex-shrink:0;width:1em;color:var(--action-orange);font-weight:var(--font-weight-semibold)}.widget-filter__search-option input[type=checkbox]{width:16px;height:16px;flex-shrink:0;accent-color:var(--action-orange);cursor:pointer}.widget-filter__search-clear{width:100%;margin-bottom:4px;padding:8px 10px;background:transparent;border:none;border-bottom:1px solid var(--bg-elevated);border-radius:0;color:var(--action-orange);font-size:.8rem;font-weight:var(--font-weight-semibold);text-align:left;cursor:pointer;transition:background-color var(--transition-fast)}.widget-filter__search-clear:hover{background-color:var(--bg-elevated)}.widget-filter__search-empty{padding:12px;color:var(--text-muted);font-size:.85rem;text-align:center}.widget-filter__search-list::-webkit-scrollbar{width:6px}.widget-filter__search-list::-webkit-scrollbar-track{background:transparent}.widget-filter__search-list::-webkit-scrollbar-thumb{background:var(--bg-elevated);border-radius:3px}.widget-filter__search-list::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.widget-variable__input-wrapper{display:flex;align-items:center;margin-top:2%;width:90%;background:var(--bg-paper);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-sm);overflow:hidden}.widget-variable__input{flex:1;font-size:clamp(.4rem,5cqi,1.5rem);font-weight:var(--font-weight-semibold);background:transparent;border:none;outline:none;color:var(--text-primary);text-align:left;padding:clamp(2px,1cqi,6px) clamp(4px,1.5cqi,8px);min-width:0;box-sizing:border-box}.widget-variable__input::-webkit-outer-spin-button,.widget-variable__input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.widget-variable__input[type=number]{-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}.widget-variable__input:disabled{opacity:.6;cursor:not-allowed}.widget-variable__suffix{font-size:clamp(.4rem,4cqi,1.25rem);color:var(--text-muted);white-space:nowrap;padding:0 clamp(4px,1.5cqi,8px);border-left:1px solid rgba(255,255,255,.1);flex-shrink:0}.widget-variable__lock-icon{font-size:clamp(.45rem,2.5cqi,.75rem)}.widget-variable--locked .widget-variable__input-wrapper{border-style:dashed}.widget-palette{flex-direction:column;justify-content:flex-start;align-items:stretch;padding:clamp(4px,1.5cqmin,12px);gap:clamp(2px,1cqmin,8px);overflow:auto}.widget-palette__label{text-align:center;flex-shrink:0}.widget-palette__lock-icon{font-size:clamp(.45rem,2.5cqmin,.75rem);align-self:center}.widget-palette--locked .palette-selector__color-input{opacity:.6;cursor:not-allowed}.widget-palette .palette-selector{gap:clamp(2px,3cqmin,28px);flex:1;min-height:0;justify-content:center}.widget-palette .palette-selector__row{gap:clamp(1px,1.2cqmin,10px);min-height:0}.widget-palette .palette-selector__row-label{font-size:clamp(.35rem,1.8cqmin,.7rem);line-height:1}.widget-palette .palette-selector__row-slots{gap:clamp(1px,.8cqmin,6px);flex-wrap:nowrap;justify-content:space-between;width:100%;min-height:0}.widget-palette .palette-selector__color-input{flex:1 1 0;min-width:0;min-height:0;width:auto;height:clamp(8px,10cqmin,60px);border:1px solid rgba(255,255,255,.2);padding:0}.widget-palette .palette-selector__color-input:hover:not(:disabled){border-color:#fff6}
1
+ @charset "UTF-8";.react-datepicker__navigation-icon:before,.react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow{border-color:#ccc;border-style:solid;border-width:3px 3px 0 0;content:"";display:block;height:9px;position:absolute;top:6px;width:9px}.react-datepicker__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.react-datepicker-wrapper{display:inline-block;padding:0;border:0}.react-datepicker{font-family:Helvetica Neue,helvetica,arial,sans-serif;font-size:.8rem;background-color:#fff;color:#000;border:1px solid #aeaeae;border-radius:.3rem;display:inline-block;position:relative;line-height:initial}.react-datepicker--time-only .react-datepicker__time-container{border-left:0}.react-datepicker--time-only .react-datepicker__time,.react-datepicker--time-only .react-datepicker__time-box{border-bottom-left-radius:.375em;border-bottom-right-radius:.375em}.react-datepicker-popper{z-index:1;line-height:0}.react-datepicker-popper .react-datepicker__triangle{stroke:#aeaeae}.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle{fill:#f0f0f0;color:#f0f0f0}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle,.react-datepicker-popper--header-middle[data-placement^=bottom] .react-datepicker__triangle,.react-datepicker-popper--header-bottom[data-placement^=bottom] .react-datepicker__triangle{fill:#fff;color:#fff}.react-datepicker-popper--header-bottom[data-placement^=top] .react-datepicker__triangle{fill:#f0f0f0;color:#f0f0f0}.react-datepicker__header{text-align:center;background-color:#f0f0f0;border-bottom:1px solid #aeaeae;border-top-left-radius:.3rem;padding:8px 0;position:relative}.react-datepicker__header--time{padding-bottom:8px;padding-left:5px;padding-right:5px}.react-datepicker__header--time:not(.react-datepicker__header--time--only){border-top-left-radius:0}.react-datepicker__header:not(.react-datepicker__header--has-time-select,.react-datepicker__header--middle,.react-datepicker__header--bottom){border-top-right-radius:.3rem}.react-datepicker__header--middle{border-top:1px solid #aeaeae;border-radius:0;margin-top:4px}.react-datepicker__header--bottom{border-bottom:none;border-top:1px solid #aeaeae;border-radius:0 0 .3rem .3rem}.react-datepicker__header-wrapper{position:relative}.react-datepicker__header-wrapper .react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button){right:2px}.react-datepicker__year-dropdown-container--select,.react-datepicker__month-dropdown-container--select,.react-datepicker__month-year-dropdown-container--select,.react-datepicker__year-dropdown-container--scroll,.react-datepicker__month-dropdown-container--scroll,.react-datepicker__month-year-dropdown-container--scroll{display:inline-block;margin:0 15px}.react-datepicker__month-select,.react-datepicker__year-select,.react-datepicker__month-year-select{background-color:transparent;border:1px solid #aeaeae;border-radius:.3rem;color:inherit;cursor:pointer;font-family:inherit;font-size:inherit;margin-top:5px;padding:2px 5px}.react-datepicker__month-select:focus-visible,.react-datepicker__year-select:focus-visible,.react-datepicker__month-year-select:focus-visible{outline:auto 1px}.react-datepicker__current-month,.react-datepicker-time__header,.react-datepicker-year-header{margin-top:0;color:#000;font-weight:700;font-size:.944rem}h2.react-datepicker__current-month{padding:0;margin:0}.react-datepicker-time__header{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.react-datepicker__navigation{align-items:center;background:none;display:flex;justify-content:center;text-align:center;cursor:pointer;position:absolute;top:2px;padding:0;border:none;z-index:1;height:32px;width:32px;text-indent:-999em;overflow:hidden}.react-datepicker__navigation--previous{left:2px}.react-datepicker__navigation--next{right:2px}.react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button){right:85px}.react-datepicker__navigation--years{position:relative;top:0;display:block;margin-left:auto;margin-right:auto}.react-datepicker__navigation--years-previous{top:4px}.react-datepicker__navigation--years-upcoming{top:-4px}.react-datepicker__navigation:hover *:before{border-color:#a6a6a6}.react-datepicker__navigation-icon{position:relative;top:-1px;font-size:20px;width:0}.react-datepicker__navigation-icon--next{left:-2px}.react-datepicker__navigation-icon--next:before{transform:rotate(45deg);left:-7px}.react-datepicker__navigation-icon--previous{right:-2px}.react-datepicker__navigation-icon--previous:before{transform:rotate(225deg);right:-7px}.react-datepicker__month-container{float:left}.react-datepicker__year{margin:.5em;text-align:center}.react-datepicker__year-wrapper{display:flex;flex-wrap:wrap;max-width:180px}.react-datepicker__year .react-datepicker__year-text{display:inline-block;width:5em;margin:2px}.react-datepicker__month{margin:.5em;text-align:center}.react-datepicker__month .react-datepicker__month-text,.react-datepicker__month .react-datepicker__quarter-text{display:inline-block;width:5em;margin:2px}.react-datepicker__input-time-container{clear:both;width:100%;float:left;margin:5px 0 10px 15px;text-align:left}.react-datepicker__input-time-container .react-datepicker-time__caption,.react-datepicker__input-time-container .react-datepicker-time__input-container{display:inline-block}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input{display:inline-block;margin-left:10px}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input{width:auto}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-inner-spin-button,.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]{-moz-appearance:textfield}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__delimiter{margin-left:5px;display:inline-block}.react-datepicker__time-container{float:right;border-left:1px solid #aeaeae;width:85px}.react-datepicker__time-container--with-today-button{display:inline;border:1px solid #aeaeae;border-radius:.375em;position:absolute;right:-87px;top:0}.react-datepicker__time-container .react-datepicker__time{position:relative;background:#fff;border-bottom-right-radius:.375em}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box{width:85px;overflow-x:hidden;margin:0 auto;text-align:center;border-bottom-right-radius:.375em}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list{list-style:none;margin:0;height:calc(195px + 1.0625em);overflow-y:scroll;padding-right:0;padding-left:0;width:100%;box-sizing:content-box}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item{height:30px;padding:5px 10px;white-space:nowrap}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover{cursor:pointer;background-color:#f0f0f0}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected{background-color:#216ba5;color:#fff;font-weight:700}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected:hover{background-color:#216ba5}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled{color:#ccc}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled:hover{cursor:default;background-color:transparent}.react-datepicker__week-number{color:#ccc;display:inline-block;width:2.125em;line-height:2.125em;text-align:center;margin:.208em}.react-datepicker__week-number.react-datepicker__week-number--clickable{cursor:pointer}.react-datepicker__week-number.react-datepicker__week-number--clickable:not(.react-datepicker__week-number--selected):hover{border-radius:.3rem;background-color:#f0f0f0}.react-datepicker__week-number--selected{border-radius:.3rem;background-color:#216ba5;color:#fff}.react-datepicker__week-number--selected:hover{background-color:#1d5d90}.react-datepicker__day-names{text-align:center;white-space:nowrap;margin-bottom:-8px}.react-datepicker__week{white-space:nowrap}.react-datepicker__day-name,.react-datepicker__day,.react-datepicker__time-name{color:#000;display:inline-block;width:2.125em;line-height:2.125em;text-align:center;margin:.208em}.react-datepicker__day-name--disabled,.react-datepicker__day--disabled,.react-datepicker__time-name--disabled{cursor:default;color:#ccc}.react-datepicker__day,.react-datepicker__month-text,.react-datepicker__quarter-text,.react-datepicker__year-text{cursor:pointer}.react-datepicker__day:not([aria-disabled=true]):hover,.react-datepicker__month-text:not([aria-disabled=true]):hover,.react-datepicker__quarter-text:not([aria-disabled=true]):hover,.react-datepicker__year-text:not([aria-disabled=true]):hover{border-radius:.3rem;background-color:#f0f0f0}.react-datepicker__day--today,.react-datepicker__month-text--today,.react-datepicker__quarter-text--today,.react-datepicker__year-text--today{font-weight:700}.react-datepicker__day--highlighted,.react-datepicker__month-text--highlighted,.react-datepicker__quarter-text--highlighted,.react-datepicker__year-text--highlighted{border-radius:.3rem;background-color:#3dcc4a;color:#fff}.react-datepicker__day--highlighted:not([aria-disabled=true]):hover,.react-datepicker__month-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__year-text--highlighted:not([aria-disabled=true]):hover{background-color:#32be3f}.react-datepicker__day--highlighted-custom-1,.react-datepicker__month-text--highlighted-custom-1,.react-datepicker__quarter-text--highlighted-custom-1,.react-datepicker__year-text--highlighted-custom-1{color:#f0f}.react-datepicker__day--highlighted-custom-2,.react-datepicker__month-text--highlighted-custom-2,.react-datepicker__quarter-text--highlighted-custom-2,.react-datepicker__year-text--highlighted-custom-2{color:green}.react-datepicker__day--holidays,.react-datepicker__month-text--holidays,.react-datepicker__quarter-text--holidays,.react-datepicker__year-text--holidays{position:relative;border-radius:.3rem;background-color:#ff6803;color:#fff}.react-datepicker__day--holidays .overlay,.react-datepicker__month-text--holidays .overlay,.react-datepicker__quarter-text--holidays .overlay,.react-datepicker__year-text--holidays .overlay{position:absolute;bottom:100%;left:50%;transform:translate(-50%);background-color:#333;color:#fff;padding:4px;border-radius:4px;white-space:nowrap;visibility:hidden;opacity:0;transition:visibility 0s,opacity .3s ease-in-out}.react-datepicker__day--holidays:not([aria-disabled=true]):hover,.react-datepicker__month-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__year-text--holidays:not([aria-disabled=true]):hover{background-color:#cf5300}.react-datepicker__day--holidays:hover .overlay,.react-datepicker__month-text--holidays:hover .overlay,.react-datepicker__quarter-text--holidays:hover .overlay,.react-datepicker__year-text--holidays:hover .overlay{visibility:visible;opacity:1}.react-datepicker__day--selected,.react-datepicker__day--in-selecting-range,.react-datepicker__day--in-range,.react-datepicker__month-text--selected,.react-datepicker__month-text--in-selecting-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--selected,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--selected,.react-datepicker__year-text--in-selecting-range,.react-datepicker__year-text--in-range{border-radius:.3rem;background-color:#216ba5;color:#fff}.react-datepicker__day--selected:not([aria-disabled=true]):hover,.react-datepicker__day--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__day--in-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-range:not([aria-disabled=true]):hover{background-color:#1d5d90}.react-datepicker__day--keyboard-selected,.react-datepicker__month-text--keyboard-selected,.react-datepicker__quarter-text--keyboard-selected,.react-datepicker__year-text--keyboard-selected{border-radius:.3rem;background-color:#bad9f1;color:#000}.react-datepicker__day--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--keyboard-selected:not([aria-disabled=true]):hover{background-color:#1d5d90;color:#fff}.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__month-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__quarter-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__year-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range){background-color:#216ba580}.react-datepicker__month--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range){background-color:#f0f0f0;color:#000}.react-datepicker__day--disabled,.react-datepicker__month-text--disabled,.react-datepicker__quarter-text--disabled,.react-datepicker__year-text--disabled{cursor:default;color:#ccc}.react-datepicker__day--disabled .overlay,.react-datepicker__month-text--disabled .overlay,.react-datepicker__quarter-text--disabled .overlay,.react-datepicker__year-text--disabled .overlay{position:absolute;bottom:70%;left:50%;transform:translate(-50%);background-color:#333;color:#fff;padding:4px;border-radius:4px;white-space:nowrap;visibility:hidden;opacity:0;transition:visibility 0s,opacity .3s ease-in-out}.react-datepicker__input-container{position:relative;display:inline-block;width:100%}.react-datepicker__input-container .react-datepicker__calendar-icon{position:absolute;padding:.625em;box-sizing:content-box}.react-datepicker__view-calendar-icon input{padding:6px 10px 5px 25px}.react-datepicker__year-read-view,.react-datepicker__month-read-view,.react-datepicker__month-year-read-view{border:1px solid transparent;border-radius:.3rem;position:relative}.react-datepicker__year-read-view:hover,.react-datepicker__month-read-view:hover,.react-datepicker__month-year-read-view:hover{cursor:pointer}.react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow{border-top-color:#b3b3b3}.react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow{transform:rotate(135deg);right:-16px;top:0}.react-datepicker__year-dropdown,.react-datepicker__month-dropdown,.react-datepicker__month-year-dropdown{background-color:#f0f0f0;position:absolute;width:50%;left:25%;top:30px;z-index:1;text-align:center;border-radius:.3rem;border:1px solid #aeaeae}.react-datepicker__year-dropdown:hover,.react-datepicker__month-dropdown:hover,.react-datepicker__month-year-dropdown:hover{cursor:pointer}.react-datepicker__year-dropdown--scrollable,.react-datepicker__month-dropdown--scrollable,.react-datepicker__month-year-dropdown--scrollable{height:150px;overflow-y:scroll}.react-datepicker__year-option,.react-datepicker__month-option,.react-datepicker__month-year-option{line-height:20px;width:100%;display:block;margin-left:auto;margin-right:auto}.react-datepicker__year-option:first-of-type,.react-datepicker__month-option:first-of-type,.react-datepicker__month-year-option:first-of-type{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.react-datepicker__year-option:last-of-type,.react-datepicker__month-option:last-of-type,.react-datepicker__month-year-option:last-of-type{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.react-datepicker__year-option:hover,.react-datepicker__month-option:hover,.react-datepicker__month-year-option:hover{background-color:#ccc}.react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming{border-bottom-color:#b3b3b3}.react-datepicker__year-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__month-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous{border-top-color:#b3b3b3}.react-datepicker__year-option--selected,.react-datepicker__month-option--selected,.react-datepicker__month-year-option--selected{position:absolute;left:15px}.react-datepicker__close-icon{cursor:pointer;background-color:transparent;border:0;outline:0;padding:0 6px 0 0;position:absolute;top:0;right:0;height:100%;display:table-cell;vertical-align:middle}.react-datepicker__close-icon:after{cursor:pointer;background-color:#216ba5;color:#fff;border-radius:50%;height:16px;width:16px;padding:2px;font-size:12px;line-height:1;text-align:center;display:table-cell;vertical-align:middle;content:"×"}.react-datepicker__close-icon--disabled{cursor:default}.react-datepicker__close-icon--disabled:after{cursor:default;background-color:#ccc}.react-datepicker__today-button{background:#f0f0f0;border-top:1px solid #aeaeae;cursor:pointer;text-align:center;font-weight:700;padding:5px 0;clear:left}.react-datepicker__portal{position:fixed;width:100vw;height:100vh;background-color:#000c;left:0;top:0;justify-content:center;align-items:center;display:flex;z-index:2147483647}.react-datepicker__children-container{width:17.25em;margin:.5em;padding-right:.25em;padding-left:.25em;height:auto}.react-datepicker__aria-live{position:absolute;clip-path:circle(0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;width:1px;white-space:nowrap}.react-datepicker__calendar-icon{width:1em;height:1em;vertical-align:-.125em}.react-datepicker-popper-offset{margin-top:-.7em}:where(.preview-tab,.widget,.palette-selector,.ddp-field){--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 16px;--spacing-lg: 24px;--spacing-xl: 32px;--spacing-2xl: 48px;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--transition-fast: .15s ease;--shadow-lg: 0 10px 25px rgba(0, 0, 0, .4)}.preview-tab{display:flex;flex-direction:column;gap:var(--spacing-md);position:relative}.preview-tab__empty{display:flex;align-items:center;justify-content:center;min-height:300px;color:var(--text-muted);font-size:.9rem;border:2px dashed var(--bg-elevated);border-radius:var(--radius-lg)}.preview-tab__loading{display:flex;align-items:center;justify-content:center;padding:var(--spacing-2xl) 0;color:var(--text-secondary)}.preview-tab__error{padding:var(--spacing-md);background:#f443361a;border:1px solid var(--color-error);border-radius:var(--radius-md);color:var(--color-error);font-size:.875rem;text-align:center}.preview-tab__grid{display:grid;grid-template-columns:repeat(var(--dash-cols, 30),1fr);grid-template-rows:repeat(var(--dash-rows, 10),var(--dash-cell-h, 40px));grid-auto-rows:var(--dash-cell-h, 40px);gap:var(--dash-gap, 6px);padding:var(--dash-pad, 16px);background:var(--bg-dark);border-radius:var(--radius-lg)}.preview-tab__grid--stacked{grid-template-columns:1fr;grid-template-rows:none;grid-auto-rows:auto}.preview-tab__widget{display:flex;background:var(--bg-elevated);border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-md);overflow:hidden;min-height:0;container-type:size}.preview-tab__widget--control{background:var(--bg-elevated);border:1px dashed rgba(255,255,255,.15)}.preview-tab__widget-loading{display:flex;align-items:center;justify-content:center;height:100%;min-height:80px;color:var(--text-muted);font-size:.8125rem}.preview-tab__recalculating{position:fixed;bottom:var(--spacing-lg);right:var(--spacing-lg);padding:var(--spacing-sm) var(--spacing-lg);background:var(--bg-elevated);border:1px solid var(--action-orange);border-radius:var(--radius-md);color:var(--action-orange);font-size:.8125rem;font-weight:var(--font-weight-medium);box-shadow:var(--shadow-lg);z-index:50}.palette-selector{display:flex;flex-direction:column;gap:var(--spacing-sm)}.palette-selector--disabled{opacity:.5;pointer-events:none}.palette-selector__options{display:flex;flex-direction:column;gap:var(--spacing-xs)}.palette-selector__option{display:flex;flex-direction:column;gap:var(--spacing-xs);padding:var(--spacing-xs);background:transparent;border:1.5px solid var(--bg-elevated);border-radius:var(--radius-sm);cursor:pointer;transition:border-color var(--transition-fast)}.palette-selector__option:hover:not(:disabled){border-color:var(--text-muted)}.palette-selector__option--active{border-color:var(--action-orange)}.palette-selector__bar{display:flex;width:100%;height:18px;border-radius:3px;overflow:hidden}.palette-selector__bar--theme{height:12px;opacity:.85}.palette-selector__swatch{flex:1;min-width:0}.palette-selector__label{font-size:.7rem;color:var(--text-muted);text-align:left}.palette-selector__custom{display:flex;flex-direction:column;gap:6px}.palette-selector__row{display:flex;flex-direction:column;gap:4px}.palette-selector__row-label{font-size:.6rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;font-weight:var(--font-weight-semibold)}.palette-selector__row-slots{display:flex;gap:4px;flex-wrap:wrap}.palette-selector__color-input{width:24px;height:24px;padding:0;border:1.5px solid rgba(255,255,255,.25);border-radius:var(--radius-sm);background:transparent;cursor:pointer;transition:border-color var(--transition-fast);flex-shrink:0}.palette-selector__color-input:hover:not(:disabled){border-color:#ffffff80}.palette-selector__color-input:hover:not(:disabled){border-color:var(--action-orange)}.palette-selector__color-input::-webkit-color-swatch-wrapper{padding:2px}.palette-selector__color-input::-webkit-color-swatch{border:none;border-radius:2px}.ddp-field{width:100%;min-width:0;display:block}.ddp-field .react-datepicker-wrapper,.ddp-field .react-datepicker__input-container{width:100%;display:block}.ddp-field .react-datepicker__input-container input{width:100%;padding:var(--spacing-sm) var(--spacing-md);background:var(--bg-elevated);border:1.5px solid var(--bg-elevated);border-radius:var(--radius-sm);font-size:.8125rem;color:var(--text-primary);box-sizing:border-box;transition:border-color var(--transition-fast)}.ddp-field .react-datepicker__input-container input:focus{outline:none;border-color:var(--action-orange)}.ddp-field .react-datepicker__input-container input::placeholder{color:var(--text-muted)}.ddp-field .react-datepicker__input-container input:disabled{opacity:.6;cursor:not-allowed}.ddp-field .react-datepicker__month{min-height:168px}.react-datepicker-popper{z-index:1100!important}.widget{flex:1;display:flex;flex-direction:column;padding:var(--spacing-sm);background:var(--bg-elevated);border-radius:var(--radius-md);overflow:hidden;box-sizing:border-box;min-height:0;min-width:0}.widget__title{flex-shrink:0;margin:0 0 clamp(2px,1cqmin,8px);font-size:clamp(.5rem,4cqi,.9rem);font-weight:var(--font-weight-semibold);color:var(--text-secondary);line-height:1.2;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget__state{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;padding:var(--spacing-xs);font-size:clamp(.45rem,2.5cqi,.85rem);color:var(--text-muted)}.widget__state--error{color:var(--color-error)}.widget-filter,.widget-palette{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:clamp(4px,1.5cqi,12px);padding:clamp(4px,1cqi,8px) clamp(6px,1.5cqi,12px);box-sizing:border-box;min-height:0;min-width:0;overflow:hidden}.widget-variable{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;box-sizing:border-box;min-height:0;min-width:0;overflow:hidden}.widget-filter__label,.widget-palette__label,.widget-variable__label{flex-shrink:0;font-size:clamp(.45rem,6cqi,3rem);color:var(--text-muted);font-weight:var(--font-weight-medium)}.widget-kpi{justify-content:center;align-items:center;text-align:center;gap:clamp(2px,1cqmin,10px);padding:clamp(4px,2cqmin,16px)}.widget-kpi .widget__title{margin:0;font-size:clamp(.45rem,min(12cqi,12cqb),6rem);color:var(--text-muted);font-weight:var(--font-weight-medium)}.widget-kpi__value{font-size:clamp(.85rem,min(22cqi,22cqb),8rem);font-weight:var(--font-weight-bold);color:var(--text-primary);line-height:1.1;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}.widget-kpi__trend{display:flex;align-items:center;justify-content:center;gap:clamp(2px,.8cqmin,6px);font-size:clamp(.4rem,min(8cqi,8cqb),2rem);max-width:100%;overflow:hidden;flex-wrap:wrap}.widget-kpi__trend--good{color:var(--color-success)}.widget-kpi__trend--bad{color:var(--color-error)}.widget-kpi__trend--muted{opacity:.75;font-size:.9em}.widget-kpi__variance{font-weight:var(--font-weight-semibold);white-space:nowrap}.widget-kpi__trend-label{color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@container (max-width: 180px){.widget-kpi__trend-label{display:none}}@container (max-height: 70px){.widget-kpi .widget__title{display:none}}.widget-gauge{align-items:center;gap:0;overflow:hidden}.widget-gauge .widget__title{margin:0;font-size:clamp(.5rem,6cqi,3rem);color:var(--text-muted);font-weight:var(--font-weight-medium)}.widget-gauge__chart{position:relative;width:100%;flex:1;min-height:0}.widget-gauge__chart svg{margin-top:5%;display:block;width:100%;height:100%}.widget-gauge__center{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;margin-top:25%}.widget-gauge__percent{font-size:clamp(.5rem,9cqi,4rem);font-weight:var(--font-weight-bold);color:var(--text-primary);line-height:1}.widget-gauge__comparison{font-size:clamp(.4rem,3.5cqi,2rem);color:var(--text-muted)}.widget-gauge__badge{font-size:clamp(.35rem,3cqi,1.25rem);font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.3px;padding:1px var(--spacing-xs);border-radius:var(--radius-sm);background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.widget-chart{gap:var(--spacing-xs)}.widget-chart .widget__title{color:var(--text-primary)}.widget-chart__container{flex:1;min-height:0;overflow:hidden}.widget-composition{gap:var(--spacing-xs)}.widget-composition .widget__title{color:var(--text-primary)}.widget-composition__container{flex:1;min-height:0;overflow:hidden}.widget-table{display:flex;flex-direction:column;gap:.4rem;height:100%;overflow:hidden;padding:.5rem .6rem;box-sizing:border-box}.widget-table__td--placeholder{color:var(--text-muted, #999);text-align:center;padding:.75rem .5rem}.widget-table__tabs{flex:0 0 auto;display:flex;gap:.25rem;border-bottom:1px solid var(--border, rgba(255, 255, 255, .12))}.widget-table__tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-muted, #999);font:inherit;font-size:.78rem;font-weight:600;padding:.25rem .6rem;cursor:pointer}.widget-table__tab:hover{color:var(--text-primary, #f5f5f5)}.widget-table__tab--active{color:var(--color-accent, #f9812a);border-bottom-color:var(--color-accent, #f9812a)}.widget-table__scroll{flex:1 1 auto;min-height:0;overflow:auto}.widget-table__table{width:100%;border-collapse:collapse;font-size:.78rem}.widget-table__th{position:sticky;top:0;z-index:1;text-align:left;font-weight:600;color:var(--text-secondary, #ccc);background:var(--bg-elevated, #333);padding:.35rem .5rem;border-bottom:1px solid var(--border, rgba(255, 255, 255, .12));white-space:nowrap}.widget-table__th--num{text-align:right}.widget-table__td{padding:.3rem .5rem;color:var(--text-primary, #f5f5f5);border-bottom:1px solid var(--border, rgba(255, 255, 255, .06));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:26ch}.widget-table__td--num{text-align:right;font-variant-numeric:tabular-nums}.widget-table__td--up{color:var(--color-success, #a4c639);font-weight:600}.widget-table__td--down{color:var(--color-error, #e5534b);font-weight:600}.widget-table__table tbody tr:hover{background:#ffffff08}.widget-filter__date-range{display:flex;align-items:center;gap:clamp(2px,1cqi,8px);flex:1;min-width:0}.widget-filter__date-range--stacked{flex-direction:column;align-items:stretch;gap:clamp(4px,1.5cqmin,10px);width:100%;padding:clamp(2px,1cqmin,8px) 0}.widget-filter__date-range .ddp-field{flex:1;min-width:0;width:100%}.widget-filter__date-range .ddp-field .react-datepicker__input-container input,.widget-filter__select{padding:clamp(8px,4cqmin,22px) clamp(6px,1.5cqmin,12px);font-size:clamp(.5rem,10cqmin,2rem);background:var(--bg-paper);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-sm);color:var(--text-primary);flex:1;min-width:0;width:100%;box-sizing:border-box;text-align:center;font-variant-numeric:tabular-nums}.widget-filter__date-sep{font-size:clamp(.35rem,2.5cqi,.8rem);color:var(--text-muted)}.widget-filter__multi{display:flex;flex-direction:column;align-items:stretch;justify-content:space-around;gap:clamp(4px,1.5cqmin,14px);flex:1;min-height:0;width:100%;padding:clamp(6px,2cqmin,14px) clamp(4px,2cqmin,12px);box-sizing:border-box;overflow-y:auto}.widget-filter__multi::-webkit-scrollbar{width:6px}.widget-filter__multi::-webkit-scrollbar-track{background:transparent}.widget-filter__multi::-webkit-scrollbar-thumb{background:var(--bg-elevated);border-radius:3px}.widget-filter__multi::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.widget-filter__multi-clear{flex-shrink:0;width:100%;padding:clamp(3px,1cqmin,8px) clamp(8px,2.5cqmin,14px);background:transparent;border:1px solid var(--bg-elevated);border-radius:var(--radius-sm);color:var(--action-orange);font-size:clamp(.4rem,7cqmin,1rem);font-weight:var(--font-weight-semibold);text-align:center;cursor:pointer;transition:background-color var(--transition-fast),border-color var(--transition-fast)}.widget-filter__multi-clear:hover{background-color:var(--bg-elevated);border-color:var(--action-orange)}.widget-filter__multi-option{display:flex;align-items:center;gap:clamp(6px,4cqmin,14px);padding:clamp(4px,1.5cqmin,12px) clamp(8px,2.5cqmin,14px);height:clamp(20px,18cqb,120px);background:var(--bg-paper);border:1px solid var(--bg-elevated);border-radius:var(--radius-sm);cursor:pointer;transition:border-color var(--transition-fast),background-color var(--transition-fast);font-size:clamp(.45rem,8cqmin,1.2rem);font-weight:var(--font-weight-medium);color:var(--text-primary);line-height:1;flex-shrink:0;box-sizing:border-box}.widget-filter__multi-option:hover{border-color:var(--text-muted);background-color:var(--bg-elevated)}.widget-filter__multi-option:has(input[type=checkbox]:checked){border-color:var(--text-muted);background-color:var(--bg-elevated)}.widget-filter__multi-option input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:clamp(12px,7cqmin,22px);height:clamp(12px,7cqmin,22px);border:1.5px solid var(--text-muted);border-radius:3px;background:var(--bg-elevated);cursor:pointer;position:relative;flex-shrink:0;transition:border-color var(--transition-fast),background-color var(--transition-fast);margin:0}.widget-filter__multi-option input[type=checkbox]:hover{border-color:var(--action-orange)}.widget-filter__multi-option input[type=checkbox]:checked{background:var(--action-orange);border-color:var(--action-orange)}.widget-filter__multi-option input[type=checkbox]:checked:after{content:"";position:absolute;left:30%;top:8%;width:30%;height:60%;border:solid var(--bg-dark);border-width:0 2px 2px 0;transform:rotate(45deg)}.widget-filter__select{width:95%;max-height:45%;margin-top:2%;flex:1;font-size:clamp(.4rem,5cqi,1.5rem);font-weight:var(--font-weight-semibold);color:var(--text-primary);text-align:left;padding:clamp(8px,4cqi,22px) clamp(6px,1.5cqi,12px);min-width:0;box-sizing:border-box}.widget-filter>.widget-filter__select,.widget-filter__date-range--year .widget-filter__select,.widget-filter__date-range--month .widget-filter__select,.widget-filter__date-range--week .widget-filter__select{text-align:center;text-align-last:center;font-weight:var(--font-weight-semibold);color:var(--text-primary);background:var(--bg-paper);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-sm);cursor:pointer;appearance:none;-webkit-appearance:none;-moz-appearance:none;background-image:none;transition:border-color var(--transition-fast),background-color var(--transition-fast);box-sizing:border-box;width:100%;margin-top:0;max-height:none;padding:clamp(2px,.8cqmin,6px) clamp(6px,1.5cqmin,12px);line-height:1}.widget-filter>.widget-filter__select:hover,.widget-filter>.widget-filter__select:focus,.widget-filter__date-range--year .widget-filter__select:hover,.widget-filter__date-range--year .widget-filter__select:focus,.widget-filter__date-range--month .widget-filter__select:hover,.widget-filter__date-range--month .widget-filter__select:focus,.widget-filter__date-range--week .widget-filter__select:hover,.widget-filter__date-range--week .widget-filter__select:focus{outline:none;border-color:var(--action-orange);background-color:var(--bg-elevated)}.widget-filter>.widget-filter__select option,.widget-filter__date-range--year .widget-filter__select option,.widget-filter__date-range--month .widget-filter__select option,.widget-filter__date-range--week .widget-filter__select option{background:var(--bg-paper);color:var(--text-primary);font-size:.875rem;font-weight:var(--font-weight-normal);text-align:left;padding:6px 10px}.widget-filter>.widget-filter__select{flex:0 1 auto;height:clamp(50px,22cqmin,140px);max-height:75%;margin-block:auto;align-self:center;font-size:clamp(.6rem,12cqmin,2.2rem)}.widget-filter__date-range--year,.widget-filter__date-range--month,.widget-filter__date-range--week{display:flex;flex-direction:column;align-items:stretch;justify-content:center;gap:clamp(6px,2.5cqmin,16px);flex:1;width:100%;padding:clamp(6px,2cqmin,16px) clamp(4px,2cqmin,14px);box-sizing:border-box}.widget-filter__date-range--year .widget-filter__select{flex:0 1 auto;height:clamp(50px,22cqmin,140px);font-size:clamp(.6rem,12cqmin,2.2rem)}.widget-filter__date-range--month .widget-filter__select{flex:0 1 auto;height:clamp(30px,10cqmin,66px);font-size:clamp(.5rem,10cqmin,1.4rem)}.widget-filter__date-range--week .widget-filter__select{flex:0 1 auto;height:clamp(22px,12cqmin,48px);font-size:clamp(.45rem,8cqmin,3rem)}.widget-filter__search{position:relative;display:flex;align-items:center;flex:1;min-width:0;width:100%;padding:clamp(2px,1cqmin,8px) 0}.widget-filter .widget-filter__search-field{width:100%;padding:clamp(6px,3cqmin,18px) clamp(8px,2cqmin,14px);background:var(--bg-dark);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-sm);color:var(--text-primary);font-size:clamp(.55rem,10cqmin,1.8rem);font-weight:var(--font-weight-semibold);text-align:center;box-sizing:border-box;cursor:text;transition:border-color var(--transition-fast),background-color var(--transition-fast)}.widget-filter .widget-filter__search-field::placeholder{color:var(--text-muted);font-weight:var(--font-weight-normal)}.widget-filter .widget-filter__search-field:hover,.widget-filter .widget-filter__search-field:focus{outline:none;border-color:var(--action-orange);background-color:var(--bg-paper)}.widget-filter__search-panel{z-index:10000;display:flex;flex-direction:column;background:var(--bg-paper);border:1px solid var(--bg-elevated);border-radius:var(--radius-sm);box-shadow:var(--shadow-md, 0 8px 28px rgba(0, 0, 0, .45));overflow:hidden}.widget-filter__search-list{display:flex;flex-direction:column;gap:2px;padding:6px;overflow-y:auto}.widget-filter__search-option{display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;background:transparent;border:none;border-left:3px solid transparent;border-radius:var(--radius-sm);color:var(--text-primary);font-size:.85rem;font-weight:var(--font-weight-medium);text-align:left;cursor:pointer;transition:background-color var(--transition-fast),color var(--transition-fast)}.widget-filter__search-option:hover{background-color:var(--bg-elevated)}.widget-filter__search-option.is-selected{background-color:var(--bg-elevated);border-left-color:var(--action-orange);color:var(--action-orange)}.widget-filter__search-check{flex-shrink:0;width:1em;color:var(--action-orange);font-weight:var(--font-weight-semibold)}.widget-filter__search-option input[type=checkbox]{width:16px;height:16px;flex-shrink:0;accent-color:var(--action-orange);cursor:pointer}.widget-filter__search-clear{width:100%;margin-bottom:4px;padding:8px 10px;background:transparent;border:none;border-bottom:1px solid var(--bg-elevated);border-radius:0;color:var(--action-orange);font-size:.8rem;font-weight:var(--font-weight-semibold);text-align:left;cursor:pointer;transition:background-color var(--transition-fast)}.widget-filter__search-clear:hover{background-color:var(--bg-elevated)}.widget-filter__search-empty{padding:12px;color:var(--text-muted);font-size:.85rem;text-align:center}.widget-filter__search-list::-webkit-scrollbar{width:6px}.widget-filter__search-list::-webkit-scrollbar-track{background:transparent}.widget-filter__search-list::-webkit-scrollbar-thumb{background:var(--bg-elevated);border-radius:3px}.widget-filter__search-list::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.widget-variable__input-wrapper{display:flex;align-items:center;margin-top:2%;width:90%;background:var(--bg-paper);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-sm);overflow:hidden}.widget-variable__input{flex:1;font-size:clamp(.4rem,5cqi,1.5rem);font-weight:var(--font-weight-semibold);background:transparent;border:none;outline:none;color:var(--text-primary);text-align:left;padding:clamp(2px,1cqi,6px) clamp(4px,1.5cqi,8px);min-width:0;box-sizing:border-box}.widget-variable__input::-webkit-outer-spin-button,.widget-variable__input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.widget-variable__input[type=number]{-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}.widget-variable__input:disabled{opacity:.6;cursor:not-allowed}.widget-variable__suffix{font-size:clamp(.4rem,4cqi,1.25rem);color:var(--text-muted);white-space:nowrap;padding:0 clamp(4px,1.5cqi,8px);border-left:1px solid rgba(255,255,255,.1);flex-shrink:0}.widget-variable__lock-icon{font-size:clamp(.45rem,2.5cqi,.75rem)}.widget-variable--locked .widget-variable__input-wrapper{border-style:dashed}.widget-palette{flex-direction:column;justify-content:flex-start;align-items:stretch;padding:clamp(4px,1.5cqmin,12px);gap:clamp(2px,1cqmin,8px);overflow:auto}.widget-palette__label{text-align:center;flex-shrink:0}.widget-palette__lock-icon{font-size:clamp(.45rem,2.5cqmin,.75rem);align-self:center}.widget-palette--locked .palette-selector__color-input{opacity:.6;cursor:not-allowed}.widget-palette .palette-selector{gap:clamp(2px,3cqmin,28px);flex:1;min-height:0;justify-content:center}.widget-palette .palette-selector__row{gap:clamp(1px,1.2cqmin,10px);min-height:0}.widget-palette .palette-selector__row-label{font-size:clamp(.35rem,1.8cqmin,.7rem);line-height:1}.widget-palette .palette-selector__row-slots{gap:clamp(1px,.8cqmin,6px);flex-wrap:nowrap;justify-content:space-between;width:100%;min-height:0}.widget-palette .palette-selector__color-input{flex:1 1 0;min-width:0;min-height:0;width:auto;height:clamp(8px,10cqmin,60px);border:1px solid rgba(255,255,255,.2);padding:0}.widget-palette .palette-selector__color-input:hover:not(:disabled){border-color:#fff6}
@@ -1,10 +1,15 @@
1
1
  export type AggregationType = 'sum' | 'avg' | 'count' | 'min' | 'max' | 'count_distinct';
2
- export type ComparisonType = 'yoy' | 'mom' | 'previous_period' | 'target' | 'none';
2
+ /** Como ler a diferença entre o valor do widget e a linha de base. */
3
+ export type ComparisonDisplay = 'variance' | 'difference' | 'ratio' | 'value';
4
+ /** Sentido do indicador: separa a direção (a seta) do julgamento (a cor). */
5
+ export type GoodWhen = 'higher' | 'lower' | 'neutral';
3
6
  export type FilterType = 'date_range' | 'select' | 'multi_select';
4
- export type WidgetType = 'kpi_card' | 'gauge' | 'chart' | 'filter' | 'variable' | 'color_palette' | 'table';
5
- export type DataWidgetType = 'kpi_card' | 'gauge' | 'chart' | 'table';
7
+ export type WidgetType = 'kpi_card' | 'gauge' | 'chart' | 'composition' | 'filter' | 'variable' | 'color_palette' | 'table';
8
+ export type DataWidgetType = 'kpi_card' | 'gauge' | 'chart' | 'composition' | 'table';
6
9
  export type ControlWidgetType = 'filter' | 'variable' | 'color_palette';
7
- export type ChartType = 'bar' | 'line' | 'area' | 'pie';
10
+ export type ChartType = 'bar' | 'line' | 'area';
11
+ export type CompositionDisplay = 'pie' | 'bridge';
12
+ export type BridgeDirection = 'ascending' | 'descending';
8
13
  export type FormatType = 'currency' | 'number' | 'integer' | 'percentage' | 'date' | 'text';
9
14
  export type DateFilterMode = 'range' | 'monthly' | 'weekly' | 'yearly';
10
15
  export type Granularity = 'day' | 'week' | 'month' | 'year' | 'weekday';
@@ -27,9 +32,19 @@ export interface GridPosition {
27
32
  w: number;
28
33
  h: number;
29
34
  }
30
- export interface ComparisonConfig {
31
- type: ComparisonType;
32
- targetId?: string;
35
+ /**
36
+ * Uma linha de base para o valor do widget, e como ler a diferença.
37
+ *
38
+ * A base é sempre uma fórmula — a mesma plataforma do valor principal. Não há
39
+ * tipos de comparação: "mês anterior" é a fórmula do widget com desvio nos
40
+ * operandos, e "vs meta" é uma fórmula de um operando de variável.
41
+ */
42
+ export interface Comparison {
43
+ id: string;
44
+ label?: string;
45
+ formula: KpiTerm[];
46
+ display?: ComparisonDisplay;
47
+ goodWhen?: GoodWhen;
33
48
  }
34
49
  export interface AggregationStep {
35
50
  aggregation: AggregationType;
@@ -52,12 +67,34 @@ export interface WidgetFilter {
52
67
  /** all = E entre as condicoes; any = OU. Default: all. */
53
68
  match?: 'all' | 'any';
54
69
  }
70
+ export type TimeOffsetUnit = 'day' | 'week' | 'month' | 'quarter' | 'year';
71
+ export type TimeOffsetMode = 'calendar' | 'window';
72
+ /**
73
+ * Desvio da janela de data lida por UM operando.
74
+ *
75
+ * `amount` negativo olha para tras. Em `calendar` as duas pontas da janela
76
+ * recuam `amount` unidades — e o "mesmo periodo no mes anterior". Em `window` a
77
+ * janela recua blocos contiguos de mesma duracao, e `unit` nao participa.
78
+ */
79
+ export interface TimeOffset {
80
+ amount: number;
81
+ unit?: TimeOffsetUnit;
82
+ mode?: TimeOffsetMode;
83
+ }
84
+ /**
85
+ * Um numero dentro da formula. Tres origens, nesta ordem de precedencia:
86
+ * `constant`, `variableId` (widget `variable`) e a cadeia sobre `column`.
87
+ */
55
88
  export interface KpiOperand {
56
89
  column?: string;
57
90
  columnExpression?: ColumnExpressionTerm[];
91
+ /** Id de um widget `variable` — valor ajustavel por quem ve o dashboard. */
92
+ variableId?: string;
58
93
  intermediateSteps?: AggregationStep[];
59
94
  finalAggregation?: AggregationType;
60
95
  constant?: number;
96
+ /** Move a janela de data deste operando, sem afetar os demais termos. */
97
+ timeOffset?: TimeOffset;
61
98
  }
62
99
  export interface KpiTerm {
63
100
  operand: KpiOperand;
@@ -85,17 +122,20 @@ export interface KpiCardConfig extends WidgetFilterTargeting {
85
122
  groupGranularity?: Granularity;
86
123
  outerAggregation?: AggregationType;
87
124
  kpiTerms?: KpiTerm[];
88
- comparison?: ComparisonConfig;
125
+ comparisons?: Comparison[];
89
126
  filterExpression?: WidgetFilter;
90
127
  }
128
+ /**
129
+ * O gauge não tem conceito próprio de meta: o arco é a primeira comparação lida
130
+ * como proporção. Mesma config e mesmo motor do card.
131
+ */
91
132
  export interface GaugeConfig extends WidgetFilterTargeting {
92
133
  label: string;
93
134
  format?: FormatType;
94
135
  column?: string;
95
136
  aggregation?: AggregationType;
96
- targetId?: string;
97
- comparison?: ComparisonConfig;
98
137
  kpiTerms?: KpiTerm[];
138
+ comparisons?: Comparison[];
99
139
  groupBy?: string;
100
140
  groupGranularity?: Granularity;
101
141
  outerAggregation?: AggregationType;
@@ -106,8 +146,46 @@ export interface ChartConfig extends WidgetFilterTargeting {
106
146
  chartType?: ChartType;
107
147
  xAxis?: ChartAxisConfig;
108
148
  series?: ChartSeriesConfig[];
149
+ format?: FormatType;
150
+ filterExpression?: WidgetFilter;
151
+ }
152
+ /**
153
+ * Categoria curada da coluna de decomposicao.
154
+ *
155
+ * `value` e o valor bruto no dataset (`DESP_ADM`, `03.02.001`); `label` e o que
156
+ * aparece na barra. A posicao na lista importa so na ponte.
157
+ */
158
+ export interface CompositionCategory {
159
+ value: string;
160
+ label?: string;
161
+ }
162
+ /**
163
+ * Decomposicao de UMA medida pelas categorias de UMA coluna.
164
+ *
165
+ * `categories` e a curadoria: quais entram, com que rotulo e — na ponte — em que
166
+ * ordem. O que ficar de fora cai em "Outros", somado e nunca descartado.
167
+ *
168
+ * A ponte nao tem ancoras: `direction` decide as duas pontas.
169
+ *
170
+ * ascending 0 -> +cat1 -> +cat2 -> [total]
171
+ * descending [total] -> -cat1 -> -cat2 -> 0
172
+ *
173
+ * Nos dois sentidos o total e a soma das proprias categorias, entao a ponte
174
+ * fecha exatamente — nao ha sobra a explicar.
175
+ */
176
+ export interface CompositionConfig extends WidgetFilterTargeting {
177
+ label: string;
178
+ display?: CompositionDisplay;
109
179
  categoryColumn?: string;
180
+ /** Mesma plataforma de fórmula do KPI card, avaliada por categoria. */
181
+ kpiTerms?: KpiTerm[];
182
+ /** Vazio = todas as categorias encontradas, por valor decrescente. */
183
+ categories?: CompositionCategory[];
184
+ /** Nome da barra que agrupa o que ficou fora da curadoria (default "Outros"). */
185
+ otherLabel?: string;
110
186
  format?: FormatType;
187
+ direction?: BridgeDirection;
188
+ totalLabel?: string;
111
189
  filterExpression?: WidgetFilter;
112
190
  }
113
191
  export interface TableColumnConfig {
@@ -148,7 +226,7 @@ export interface PaletteConfig {
148
226
  label?: string;
149
227
  locked?: boolean;
150
228
  }
151
- export type AnyWidgetConfig = KpiCardConfig | GaugeConfig | ChartConfig | TableConfig | FilterConfig | VariableConfig | PaletteConfig;
229
+ export type AnyWidgetConfig = KpiCardConfig | GaugeConfig | ChartConfig | CompositionConfig | TableConfig | FilterConfig | VariableConfig | PaletteConfig;
152
230
  export type WidgetDefinition = {
153
231
  id: string;
154
232
  type: 'kpi_card';
@@ -164,6 +242,11 @@ export type WidgetDefinition = {
164
242
  type: 'chart';
165
243
  grid: GridPosition;
166
244
  config: ChartConfig;
245
+ } | {
246
+ id: string;
247
+ type: 'composition';
248
+ grid: GridPosition;
249
+ config: CompositionConfig;
167
250
  } | {
168
251
  id: string;
169
252
  type: 'table';
@@ -229,16 +312,21 @@ export declare const WIDGET_TYPE_LABELS: Record<WidgetType, string>;
229
312
  export declare const DATA_WIDGET_TYPES: DataWidgetType[];
230
313
  export declare const CONTROL_WIDGET_TYPES: ControlWidgetType[];
231
314
  export declare const CONTROL_WIDGET_SET: Set<WidgetType>;
315
+ export declare const TIME_OFFSET_UNIT_LABELS: Record<TimeOffsetUnit, [string, string]>;
316
+ export declare const TIME_OFFSET_WINDOW_LABEL: [string, string];
232
317
  export declare const AGGREGATION_LABELS: Record<AggregationType, string>;
233
318
  export declare const FORMAT_LABELS: Record<FormatType, string>;
234
319
  export declare const NUMERIC_FORMAT_OPTIONS: [FormatType, string][];
235
- export declare const COMPARISON_LABELS: Record<ComparisonType, string>;
320
+ export declare const COMPARISON_DISPLAY_LABELS: Record<ComparisonDisplay, string>;
321
+ export declare const GOOD_WHEN_LABELS: Record<GoodWhen, string>;
236
322
  export declare const FILTER_OPERATOR_LABELS: Record<FilterOperator, string>;
237
323
  /** Operadores que dispensam valor — a condição se resolve só pela coluna. */
238
324
  export declare const VALUELESS_FILTER_OPERATORS: FilterOperator[];
239
325
  /** Operadores cujo valor é uma lista de opções. */
240
326
  export declare const LIST_FILTER_OPERATORS: FilterOperator[];
241
327
  export declare const CHART_TYPE_LABELS: Record<ChartType, string>;
328
+ export declare const COMPOSITION_DISPLAY_LABELS: Record<CompositionDisplay, string>;
329
+ export declare const BRIDGE_DIRECTION_LABELS: Record<BridgeDirection, string>;
242
330
  export declare const FILTER_TYPE_LABELS: Record<FilterType, string>;
243
331
  export declare const MULTI_VALUE_SEPARATOR = "\u001F";
244
332
  export declare const DEFAULT_GRID: Record<WidgetType, GridPosition>;
@@ -0,0 +1,8 @@
1
+ import type { TimeOffset } from '../types';
2
+ /**
3
+ * Descreve o desvio: `−1 mês`, `+2 semanas`, `−1 janela`.
4
+ *
5
+ * Desvio zero não é deslocamento nenhum e devolve string vazia — quem chama
6
+ * decide se omite o rótulo ou o campo inteiro.
7
+ */
8
+ export declare function formatTimeOffset(offset: TimeOffset): string;
@@ -0,0 +1,7 @@
1
+ interface Props {
2
+ data: Record<string, unknown>;
3
+ palette: string[];
4
+ label?: string;
5
+ }
6
+ export declare function CompositionWidget({ data, palette, label: propLabel }: Props): import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,26 @@
1
+ export interface ComputedComparison {
2
+ id?: string;
3
+ label?: string | null;
4
+ /** `unavailable` = configurada, mas sem como resolver (ex: desvio sem filtro de data). */
5
+ status?: string;
6
+ display?: string;
7
+ baseline?: number | null;
8
+ baseline_formatted?: string | null;
9
+ delta?: number | null;
10
+ delta_formatted?: string | null;
11
+ variance_pct?: number | null;
12
+ ratio?: number | null;
13
+ /** Numero em destaque, ja formatado pelo backend conforme `display`. */
14
+ formatted?: string | null;
15
+ trend?: string | null;
16
+ sentiment?: string | null;
17
+ }
18
+ export declare const TREND_ARROWS: Record<string, string>;
19
+ /**
20
+ * Comparacoes que o dashboard publicado mostra.
21
+ *
22
+ * As indisponiveis somem em vez de virar "-": quem ve o dashboard nao configurou
23
+ * nada e nao tem o que fazer com o aviso. Quem configurou ve a pendencia no
24
+ * builder, que le o mesmo `status`.
25
+ */
26
+ export declare function visibleComparisons(raw: unknown): ComputedComparison[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actionexec/dashboards",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Biblioteca de renderizacao de dashboards da plataforma Action — componente <Dashboard> unico, consumindo /external/dashboards.",
5
5
  "type": "module",
6
6
  "repository": {