myio-js-library 0.1.525 → 0.1.526

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/index.cjs CHANGED
@@ -768,7 +768,7 @@ module.exports = __toCommonJS(src_exports);
768
768
  // package.json
769
769
  var package_default = {
770
770
  name: "myio-js-library",
771
- version: "0.1.525",
771
+ version: "0.1.526",
772
772
  description: "A clean, standalone JS SDK for MYIO projects",
773
773
  license: "MIT",
774
774
  repository: "github:gh-myio/myio-js-library",
@@ -3551,7 +3551,7 @@ var CSS_TOKENS = `
3551
3551
  --myio-spacing-lg: 24px;
3552
3552
 
3553
3553
  /* Typography */
3554
- --myio-font: 'Roboto', Arial, sans-serif;
3554
+ --myio-font: 'Nunito', system-ui, sans-serif;
3555
3555
  --myio-font-size: 14px;
3556
3556
  --myio-font-size-sm: 12px;
3557
3557
  --myio-font-size-lg: 16px;
@@ -3877,7 +3877,7 @@ var DATERANGEPICKER_STYLES = `
3877
3877
  ========================================== */
3878
3878
 
3879
3879
  .daterangepicker {
3880
- font-family: 'Inter', 'Roboto', Arial, sans-serif;
3880
+ font-family: 'Nunito', system-ui, sans-serif;
3881
3881
  border: 1px solid #e0e0e0;
3882
3882
  border-radius: 10px;
3883
3883
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
@@ -5987,7 +5987,7 @@ function injectStyles() {
5987
5987
  const s = document.createElement("style");
5988
5988
  s.id = STYLE_ID;
5989
5989
  s.textContent = `
5990
- .myio-divcard { box-sizing: border-box; font-family: 'Nunito', sans-serif; border: 1px solid #e2e8f0;
5990
+ .myio-divcard { box-sizing: border-box; font-family: 'Nunito', system-ui, sans-serif; border: 1px solid #e2e8f0;
5991
5991
  border-radius: 10px; overflow: hidden; margin-bottom: 10px; background: #fff; }
5992
5992
  .myio-divcard * { box-sizing: border-box; }
5993
5993
  .myio-divcard__head { display: flex; align-items: center; gap: 8px; padding: 8px 12px;
@@ -6589,7 +6589,7 @@ function injectStyles2() {
6589
6589
  const s = document.createElement("style");
6590
6590
  s.id = STYLE_ID2;
6591
6591
  s.textContent = `
6592
- .mdp-root, .mdp-root * { box-sizing: border-box; font-family: 'Nunito', sans-serif; }
6592
+ .mdp-root, .mdp-root * { box-sizing: border-box; font-family: 'Nunito', system-ui, sans-serif; }
6593
6593
  .mdp-tabs { display: flex; gap: 4px; margin-bottom: 10px; border-bottom: 1px solid #eee; }
6594
6594
  .mdp-tab { border: 1px solid transparent; border-bottom: none; background: none; cursor: pointer;
6595
6595
  font-size: 13px; font-weight: 700; color: #64748b; padding: 8px 14px; border-radius: 8px 8px 0 0; }
@@ -9320,7 +9320,7 @@ var CSS_STRING = `
9320
9320
  border-radius: var(--myio-card-radius);
9321
9321
  box-shadow: var(--myio-card-shadow);
9322
9322
  padding: 14px;
9323
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
9323
+ font-family: 'Nunito', system-ui, sans-serif;
9324
9324
  font-size: 14px;
9325
9325
  line-height: 1.4;
9326
9326
  color: var(--myio-text-1);
@@ -9567,7 +9567,7 @@ var CSS_STRING = `
9567
9567
  position: relative;
9568
9568
  min-width: 300px;
9569
9569
  text-align: left;
9570
- font-family: sans-serif; /* Use a fonte que preferir */
9570
+ font-family: 'Nunito', system-ui, sans-serif; /* Use a fonte que preferir */
9571
9571
  line-height: 1.6;
9572
9572
  }
9573
9573
 
@@ -10181,7 +10181,7 @@ var CSS_STRING = `
10181
10181
  inset 0 1px 0 rgba(255, 255, 255, 0.1);
10182
10182
  min-width: 340px;
10183
10183
  max-width: 420px;
10184
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
10184
+ font-family: 'Nunito', system-ui, sans-serif;
10185
10185
  font-size: 12px;
10186
10186
  color: #e2e8f0;
10187
10187
  overflow: hidden;
@@ -10373,7 +10373,7 @@ var CSS_STRING = `
10373
10373
  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15), 0 2px 10px rgba(0, 0, 0, 0.08);
10374
10374
  min-width: 280px;
10375
10375
  max-width: 320px;
10376
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
10376
+ font-family: 'Nunito', system-ui, sans-serif;
10377
10377
  font-size: 12px;
10378
10378
  color: #1e293b;
10379
10379
  overflow: hidden;
@@ -10607,7 +10607,7 @@ var CSS_STRING = `
10607
10607
  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15), 0 2px 10px rgba(0, 0, 0, 0.08);
10608
10608
  min-width: 300px;
10609
10609
  max-width: 360px;
10610
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
10610
+ font-family: 'Nunito', system-ui, sans-serif;
10611
10611
  font-size: 12px;
10612
10612
  color: #1e293b;
10613
10613
  overflow: hidden;
@@ -17231,7 +17231,7 @@ function renderCardComponentV5({
17231
17231
  width: 320px;
17232
17232
  padding: 16px;
17233
17233
  border-radius: 8px;
17234
- font-family: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
17234
+ font-family: 'Nunito', system-ui, sans-serif;
17235
17235
  font-size: 15px;
17236
17236
  color: #fff;
17237
17237
  transform: translateX(120%);
@@ -18924,7 +18924,7 @@ function injectCardActionSelectorStyles() {
18924
18924
  position: relative; width: 90%; max-width: 380px;
18925
18925
  background: #fff; border-radius: 16px; overflow: hidden;
18926
18926
  box-shadow: 0 20px 60px rgba(0,0,0,.3);
18927
- font-family: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
18927
+ font-family: 'Nunito', system-ui, sans-serif;
18928
18928
  transform: translateY(16px) scale(.98); transition: transform .2s ease;
18929
18929
  }
18930
18930
  .myio-card-action-picker.show .myio-card-action-picker__content { transform: translateY(0) scale(1); }
@@ -19073,7 +19073,7 @@ function renderCardComponentV6({
19073
19073
  width: 320px;
19074
19074
  padding: 16px;
19075
19075
  border-radius: 8px;
19076
- font-family: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
19076
+ font-family: 'Nunito', system-ui, sans-serif;
19077
19077
  font-size: 15px;
19078
19078
  color: #fff;
19079
19079
  transform: translateX(120%);
@@ -21217,7 +21217,7 @@ var HEADER_CSS = `
21217
21217
  flex-direction: column;
21218
21218
  flex-shrink: 0;
21219
21219
  box-sizing: border-box;
21220
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
21220
+ font-family: 'Nunito', system-ui, sans-serif;
21221
21221
  }
21222
21222
 
21223
21223
  .myio-hp--top-border {
@@ -21753,7 +21753,7 @@ var PANEL_CSS = `
21753
21753
  background: #faf8f1;
21754
21754
  border: 1px solid #e8e4d9;
21755
21755
  overflow: hidden;
21756
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
21756
+ font-family: 'Nunito', system-ui, sans-serif;
21757
21757
  position: relative;
21758
21758
  height: 100%;
21759
21759
  min-width: 180px;
@@ -22284,7 +22284,7 @@ var PANEL_CSS2 = `
22284
22284
  background: #faf8f1;
22285
22285
  border: 1px solid #e8e4d9;
22286
22286
  overflow: hidden;
22287
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
22287
+ font-family: 'Nunito', system-ui, sans-serif;
22288
22288
  height: 100%;
22289
22289
  min-width: 0;
22290
22290
  }
@@ -23185,7 +23185,7 @@ var MyIOChartModalClass = class {
23185
23185
  max-width: 900px;
23186
23186
  margin: auto;
23187
23187
  color: #fff;
23188
- font-family: Arial, sans-serif;
23188
+ font-family: 'Nunito', system-ui, sans-serif;
23189
23189
  box-shadow: 0 8px 30px rgba(0,0,0,0.5);
23190
23190
  ">
23191
23191
 
@@ -23657,7 +23657,7 @@ var MyIOToast = (function() {
23657
23657
  padding: 16px 20px;
23658
23658
  background-color: #323232;
23659
23659
  color: white;
23660
- font-family: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
23660
+ font-family: 'Nunito', system-ui, sans-serif;
23661
23661
  font-size: 14px;
23662
23662
  border-radius: 8px;
23663
23663
  box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
@@ -24034,7 +24034,7 @@ var LoadingSpinner = class {
24034
24034
  align-items: center;
24035
24035
  text-align: center;
24036
24036
  color: #ffffff;
24037
- font-family: Inter, system-ui, sans-serif;
24037
+ font-family: 'Nunito', system-ui, sans-serif;
24038
24038
  font-size: 14px;
24039
24039
  line-height: 1.5;
24040
24040
  padding: 24px 32px;
@@ -24348,7 +24348,7 @@ function injectStyles8(doc) {
24348
24348
  justify-content: center;
24349
24349
  align-items: center;
24350
24350
  gap: 6px;
24351
- font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
24351
+ font-family: 'Nunito', system-ui, sans-serif;
24352
24352
  }
24353
24353
 
24354
24354
  /* Dark theme (default) */
@@ -24445,7 +24445,7 @@ function injectTooltipStyles(doc) {
24445
24445
  .myio-ver-tooltip-container {
24446
24446
  position: fixed;
24447
24447
  z-index: 999999;
24448
- font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
24448
+ font-family: 'Nunito', system-ui, sans-serif;
24449
24449
  }
24450
24450
 
24451
24451
  /* Light theme tooltip (default) */
@@ -26815,7 +26815,7 @@ async function openRealTimeTelemetryModal(params) {
26815
26815
  border:1px solid #e2e8f0;
26816
26816
  box-shadow:0 10px 40px rgba(0,0,0,0.15),0 2px 10px rgba(0,0,0,0.08);
26817
26817
  min-width:240px;max-width:320px;overflow:hidden;
26818
- font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
26818
+ font-family:Nunito, system-ui, sans-serif;
26819
26819
  font-size:12px;color:#1e293b;
26820
26820
  user-select:none;
26821
26821
  }
@@ -26843,7 +26843,7 @@ async function openRealTimeTelemetryModal(params) {
26843
26843
  padding:4px 14px;font-size:12px;border-bottom:1px solid #f5f5f5;}
26844
26844
  .rtt-tt-history-row{display:flex;align-items:center;gap:6px;
26845
26845
  padding:5px 14px;font-size:12px;color:#374151;border-bottom:1px solid #f8fafc;
26846
- font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;}
26846
+ font-family:Nunito, system-ui, sans-serif;}
26847
26847
  .rtt-tt-history-row:last-child{border-bottom:none;}
26848
26848
  .rtt-tt-row-ts{color:#bbb;}
26849
26849
  .rtt-tt-row-val{font-weight:600;}
@@ -28604,7 +28604,7 @@ var DEFAULT_STYLES = {
28604
28604
  spacingMd: "16px",
28605
28605
  spacingLg: "24px",
28606
28606
  spacingXl: "32px",
28607
- fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
28607
+ fontFamily: "Nunito, system-ui, sans-serif",
28608
28608
  fontSizeXs: "12px",
28609
28609
  fontSizeSm: "14px",
28610
28610
  fontSizeMd: "16px",
@@ -30155,7 +30155,7 @@ var DEFAULT_STYLES2 = {
30155
30155
  textColor: "#1f2937",
30156
30156
  borderColor: "#e5e7eb",
30157
30157
  borderRadius: "8px",
30158
- fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
30158
+ fontFamily: "Nunito, system-ui, sans-serif",
30159
30159
  modalWidth: "90vw",
30160
30160
  modalHeight: "90vh"
30161
30161
  };
@@ -32275,7 +32275,7 @@ var EnergyModalView = class {
32275
32275
  getModalStyles() {
32276
32276
  const styles = this.config.params.styles || {};
32277
32277
  const defaultPrimary = styles.primaryColor || "#4A148C";
32278
- const defaultFont = styles.fontFamily || '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif';
32278
+ const defaultFont = styles.fontFamily || "Nunito, system-ui, sans-serif";
32279
32279
  return `
32280
32280
  /* --- VARI\xC1VEIS DE TEMA (LIGHT MODE - PADR\xC3O) --- */
32281
32281
  .myio-energy-modal-scope {
@@ -33465,7 +33465,7 @@ function injectParticipationChartStyles() {
33465
33465
  border-radius: 10px;
33466
33466
  background: var(--mpc-bg, var(--mpc-bg-default));
33467
33467
  color: var(--mpc-text, var(--mpc-text-default));
33468
- font-family: Inter, 'Segoe UI', system-ui, -apple-system, sans-serif;
33468
+ font-family: 'Nunito', system-ui, sans-serif;
33469
33469
  font-size: 13px;
33470
33470
  }
33471
33471
  .${P2} * { box-sizing: border-box; }
@@ -33965,7 +33965,7 @@ function createParticipationChart(container, params) {
33965
33965
  text2.setAttribute("fill", "#ffffff");
33966
33966
  text2.setAttribute("font-size", "12");
33967
33967
  text2.setAttribute("font-weight", "700");
33968
- text2.setAttribute("font-family", "Inter, 'Segoe UI', system-ui, sans-serif");
33968
+ text2.setAttribute("font-family", "'Nunito', system-ui, sans-serif");
33969
33969
  text2.setAttribute("pointer-events", "none");
33970
33970
  text2.textContent = fmtPct(pct);
33971
33971
  svg.appendChild(text2);
@@ -33997,7 +33997,7 @@ function createParticipationChart(container, params) {
33997
33997
  label.setAttribute("text-anchor", "end");
33998
33998
  label.setAttribute("fill", textColor);
33999
33999
  label.setAttribute("font-size", "11");
34000
- label.setAttribute("font-family", "Inter, 'Segoe UI', system-ui, sans-serif");
34000
+ label.setAttribute("font-family", "'Nunito', system-ui, sans-serif");
34001
34001
  const raw = item.label || "";
34002
34002
  label.textContent = raw.length > 18 ? `${raw.slice(0, 17)}\u2026` : raw;
34003
34003
  svg.appendChild(label);
@@ -34018,7 +34018,7 @@ function createParticipationChart(container, params) {
34018
34018
  value.setAttribute("text-anchor", "start");
34019
34019
  value.setAttribute("fill", mutedColor);
34020
34020
  value.setAttribute("font-size", "10.5");
34021
- value.setAttribute("font-family", "Inter, 'Segoe UI', system-ui, sans-serif");
34021
+ value.setAttribute("font-family", "'Nunito', system-ui, sans-serif");
34022
34022
  value.textContent = `${settings.formatValue(item.value)}${settings.unit ? ` ${settings.unit}` : ""} \xB7 ${fmtPct(pct)}`;
34023
34023
  svg.appendChild(value);
34024
34024
  });
@@ -39855,7 +39855,7 @@ var PowerLimitsModalView = class {
39855
39855
  opacity: 0;
39856
39856
  visibility: hidden;
39857
39857
  transition: all 0.3s ease;
39858
- font-family: ${styles.fontFamily || "'Roboto', Arial, sans-serif"};
39858
+ font-family: ${styles.fontFamily || "'Nunito', system-ui, sans-serif"};
39859
39859
  }
39860
39860
 
39861
39861
  .myio-power-limits-overlay.active {
@@ -41414,7 +41414,7 @@ var WelcomeModalView = class _WelcomeModalView {
41414
41414
  RFC-0112: Welcome Modal Head Office
41415
41415
  ========================================== */
41416
41416
 
41417
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');
41417
+ @import url('https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700;800&display=swap');
41418
41418
 
41419
41419
  /* CSS Reset to isolate modal from parent styles */
41420
41420
  .myio-welcome-modal,
@@ -41449,7 +41449,7 @@ var WelcomeModalView = class _WelcomeModalView {
41449
41449
  display: flex;
41450
41450
  align-items: center;
41451
41451
  justify-content: center;
41452
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important;
41452
+ font-family: 'Nunito', system-ui, sans-serif !important;
41453
41453
  font-size: 16px !important;
41454
41454
  line-height: 1.5 !important;
41455
41455
  font-weight: 400 !important;
@@ -44486,7 +44486,7 @@ var HeaderView = class {
44486
44486
  height: 100%;
44487
44487
  padding: 8px 12px 4px 12px;
44488
44488
  box-sizing: border-box;
44489
- font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
44489
+ font-family: 'Nunito', system-ui, sans-serif;
44490
44490
  color: var(--hdr-ink-1);
44491
44491
  background: transparent;
44492
44492
  }
@@ -45287,7 +45287,7 @@ var HeaderFilterModal = class {
45287
45287
  justify-content: center;
45288
45288
  align-items: center;
45289
45289
  z-index: 10000;
45290
- font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
45290
+ font-family: 'Nunito', system-ui, sans-serif;
45291
45291
  }
45292
45292
 
45293
45293
  .${HEADER_CSS_PREFIX}-filter-backdrop {
@@ -46259,7 +46259,7 @@ function getStyles() {
46259
46259
  --fc-empty-border: rgba(184, 165, 214, 0.4);
46260
46260
 
46261
46261
  /* Static tokens */
46262
- --fc-font-family: 'Nunito', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
46262
+ --fc-font-family: 'Nunito', system-ui, sans-serif;
46263
46263
  --fc-shadow-md: 0 4px 16px rgba(0, 0, 0, 0.4);
46264
46264
  --fc-shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.5);
46265
46265
  --fc-radius-sm: 6px;
@@ -47388,7 +47388,7 @@ function render(container, modalId, state6) {
47388
47388
  max-height: ${state6.isMaximized ? "100%" : "92vh"};
47389
47389
  display: flex; flex-direction: column; overflow: hidden;
47390
47390
  border: 1px solid ${colors2.border};
47391
- font-family: 'Roboto', Arial, sans-serif;
47391
+ font-family: 'Nunito', system-ui, sans-serif;
47392
47392
  }
47393
47393
  #${modalId} .myio-alarm-compare-header {
47394
47394
  background: #3e1a7d; color: white;
@@ -47804,7 +47804,7 @@ function render2(container, modalId, state6) {
47804
47804
  display: flex; flex-direction: column; overflow: hidden;
47805
47805
  border: 1px solid ${colors2.border};
47806
47806
  border-radius: 12px;
47807
- font-family: 'Roboto', Arial, sans-serif;
47807
+ font-family: 'Nunito', system-ui, sans-serif;
47808
47808
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
47809
47809
  }
47810
47810
  #${modalId} .myio-op-compare-content.maximized {
@@ -48956,7 +48956,7 @@ var MODAL_CSS = `
48956
48956
  display: flex;
48957
48957
  align-items: center;
48958
48958
  justify-content: center;
48959
- font-family: 'Roboto', Arial, sans-serif;
48959
+ font-family: 'Nunito', system-ui, sans-serif;
48960
48960
  }
48961
48961
 
48962
48962
  .myio-integrations-modal {
@@ -49434,7 +49434,7 @@ var ANNOTATIONS_STYLES = `
49434
49434
  display: flex;
49435
49435
  flex-direction: column;
49436
49436
  height: 100%;
49437
- font-family: 'Inter', system-ui, -apple-system, sans-serif;
49437
+ font-family: 'Nunito', system-ui, sans-serif;
49438
49438
  color: #1a1a2e;
49439
49439
  padding: 4px;
49440
49440
  }
@@ -51891,7 +51891,7 @@ var ANNOTATIONS_STYLES = `
51891
51891
  max-width: 340px;
51892
51892
  min-width: 280px;
51893
51893
  animation: annotationTourSlideIn 0.3s ease;
51894
- font-family: 'Inter', system-ui, -apple-system, sans-serif;
51894
+ font-family: 'Nunito', system-ui, sans-serif;
51895
51895
  }
51896
51896
 
51897
51897
  @keyframes annotationTourSlideIn {
@@ -57615,7 +57615,7 @@ function openAlarmDetailsModal(alarm, themeMode = "light", groupMode, onAction)
57615
57615
  const sumTbl = grid.querySelector(".adm-rpt-table-wrap--summary")?.outerHTML ?? "";
57616
57616
  win.document.write(`<!DOCTYPE html><html><head><title>Relat\xF3rio \u2014 ${escHtml2(alarm.title)}</title>
57617
57617
  <style>
57618
- body{font-family:Arial,sans-serif;padding:24px;font-size:12px;color:#111;}
57618
+ body{font-family:Nunito, system-ui, sans-serif;padding:24px;font-size:12px;color:#111;}
57619
57619
  h2{font-size:15px;margin:0 0 4px;}p{color:#6b7280;font-size:11px;margin:0 0 16px;}
57620
57620
  h3{font-size:12px;font-weight:700;margin:20px 0 8px;text-transform:uppercase;letter-spacing:.5px;color:#7c3aed;}
57621
57621
  table{border-collapse:collapse;width:100%;margin-bottom:16px;}
@@ -57888,7 +57888,7 @@ var ALARMS_NOTIFICATIONS_PANEL_STYLES = `
57888
57888
  Container
57889
57889
  ===================================================================== */
57890
57890
  .myio-alarms-panel {
57891
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
57891
+ font-family: 'Nunito', system-ui, sans-serif;
57892
57892
  font-size: 12px;
57893
57893
  line-height: 1.4;
57894
57894
  color: var(--alarms-text);
@@ -59476,7 +59476,7 @@ var ALARMS_NOTIFICATIONS_PANEL_STYLES = `
59476
59476
  .alarms-trend-chart .chart-label {
59477
59477
  font-size: 10px;
59478
59478
  fill: var(--alarms-text-muted);
59479
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
59479
+ font-family: 'Nunito', system-ui, sans-serif;
59480
59480
  }
59481
59481
 
59482
59482
  .alarms-trend-legend {
@@ -60030,7 +60030,7 @@ var ALARMS_NOTIFICATIONS_PANEL_STYLES = `
60030
60030
  display: block;
60031
60031
  margin: 0;
60032
60032
  padding: 0;
60033
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
60033
+ font-family: 'Nunito', system-ui, sans-serif;
60034
60034
  font-size: 15px;
60035
60035
  font-weight: 700;
60036
60036
  color: #111827;
@@ -63389,7 +63389,7 @@ var AlarmsTab = class {
63389
63389
  }
63390
63390
  showToast(msg) {
63391
63391
  const el2 = document.createElement("div");
63392
- el2.style.cssText = "position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:#dc2626;color:#fff;font-size:13px;font-weight:600;padding:10px 20px;border-radius:8px;z-index:99999;box-shadow:0 4px 12px rgba(0,0,0,0.25);pointer-events:none;font-family:Inter,system-ui,-apple-system,sans-serif;white-space:nowrap;";
63392
+ el2.style.cssText = "position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:#dc2626;color:#fff;font-size:13px;font-weight:600;padding:10px 20px;border-radius:8px;z-index:99999;box-shadow:0 4px 12px rgba(0,0,0,0.25);pointer-events:none;font-family:Nunito, system-ui, sans-serif;white-space:nowrap;";
63393
63393
  el2.textContent = `\u26A0\uFE0F ${msg}`;
63394
63394
  document.body.appendChild(el2);
63395
63395
  setTimeout(() => el2.remove(), 4e3);
@@ -63430,7 +63430,7 @@ var AlarmsTab = class {
63430
63430
  flex-direction: column;
63431
63431
  gap: 20px;
63432
63432
  padding: 4px;
63433
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
63433
+ font-family: 'Nunito', system-ui, sans-serif;
63434
63434
  }
63435
63435
  .at-section {
63436
63436
  background: #fff;
@@ -63701,7 +63701,7 @@ var AlarmsTab = class {
63701
63701
  max-width: 440px;
63702
63702
  width: calc(100% - 32px);
63703
63703
  overflow: hidden;
63704
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
63704
+ font-family: 'Nunito', system-ui, sans-serif;
63705
63705
  }
63706
63706
  .at-confirm-warning-bar {
63707
63707
  height: 4px;
@@ -65286,7 +65286,7 @@ ${this._formatFileSize(f.size)} \xB7 ${f.type || "arquivo"}`;
65286
65286
  flex-direction: column;
65287
65287
  gap: 20px;
65288
65288
  padding: 4px;
65289
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
65289
+ font-family: 'Nunito', system-ui, sans-serif;
65290
65290
  }
65291
65291
  .ct-section {
65292
65292
  background: #fff;
@@ -66869,7 +66869,7 @@ var SettingsModalView = class {
66869
66869
  align-items: center;
66870
66870
  justify-content: center;
66871
66871
  z-index: 9999999;
66872
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
66872
+ font-family: 'Nunito', system-ui, sans-serif;
66873
66873
  }
66874
66874
 
66875
66875
  .myio-device-settings-modal {
@@ -69595,7 +69595,7 @@ async function openDashboardPopupSettings(params) {
69595
69595
  // src/components/createInputDateRangePickerInsideDIV.ts
69596
69596
  var PREMIUM_STYLES = `
69597
69597
  .myio-daterange-wrapper {
69598
- font-family: 'Roboto', Arial, sans-serif;
69598
+ font-family: 'Nunito', system-ui, sans-serif;
69599
69599
  background: #f9f9f9;
69600
69600
  padding: 20px;
69601
69601
  border-radius: 8px;
@@ -69931,7 +69931,7 @@ function openGoalsPanel(params) {
69931
69931
  danger: styles.errorColor || "#dc2626",
69932
69932
  amber: styles.warningColor || "#d97706",
69933
69933
  borderRadius: styles.borderRadius || "10px",
69934
- fontFamily: styles.fontFamily || "'Nunito', 'Roboto', Arial, sans-serif",
69934
+ fontFamily: styles.fontFamily || "'Nunito', system-ui, sans-serif",
69935
69935
  zIndex: styles.zIndex || 1e4
69936
69936
  };
69937
69937
  const MODAL_ID6 = "goals-gcdr-modal";
@@ -71629,7 +71629,7 @@ function renderModal(container, state6, modalId, error) {
71629
71629
  max-height: ${contentMaxHeight}; height: ${isMaximized ? "100%" : "auto"};
71630
71630
  overflow: hidden; display: flex; flex-direction: column;
71631
71631
  box-shadow: 0 4px 12px rgba(0,0,0,0.15);
71632
- font-family: 'Roboto', Arial, sans-serif;
71632
+ font-family: 'Nunito', system-ui, sans-serif;
71633
71633
  ">
71634
71634
  <!-- Header - MyIO Premium Style (via ModalHeader component) -->
71635
71635
  ${ModalHeader.generateInlineHTML({
@@ -71736,7 +71736,7 @@ function renderModal(container, state6, modalId, error) {
71736
71736
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
71737
71737
  font-size: 14px; font-weight: 500; height: 38px;
71738
71738
  display: flex; align-items: center; gap: 8px;
71739
- font-family: 'Roboto', Arial, sans-serif;
71739
+ font-family: 'Nunito', system-ui, sans-serif;
71740
71740
  " ${state6.isLoading ? "disabled" : ""}>
71741
71741
  ${state6.isLoading ? '<span style="animation: spin 1s linear infinite; display: inline-block;">\u21BB</span> Carregando...' : "Carregar"}
71742
71742
  </button>
@@ -71823,7 +71823,7 @@ function renderModal(container, state6, modalId, error) {
71823
71823
  color: ${colors2.text}; border: 1px solid ${colors2.border};
71824
71824
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
71825
71825
  font-size: 14px; display: flex; align-items: center; gap: 8px;
71826
- font-family: 'Roboto', Arial, sans-serif;
71826
+ font-family: 'Nunito', system-ui, sans-serif;
71827
71827
  " ${state6.data.length === 0 ? "disabled" : ""}>
71828
71828
  \u{1F4E5} Exportar CSV
71829
71829
  </button>
@@ -71831,7 +71831,7 @@ function renderModal(container, state6, modalId, error) {
71831
71831
  background: #3e1a7d; color: white; border: none;
71832
71832
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
71833
71833
  font-size: 14px; font-weight: 500;
71834
- font-family: 'Roboto', Arial, sans-serif;
71834
+ font-family: 'Nunito', system-ui, sans-serif;
71835
71835
  ">
71836
71836
  Fechar
71837
71837
  </button>
@@ -72407,7 +72407,7 @@ function renderModal2(container, state6, modalId) {
72407
72407
  max-height: ${contentMaxHeight}; height: ${isMaximized ? "100%" : "auto"};
72408
72408
  overflow: hidden; display: flex; flex-direction: column;
72409
72409
  box-shadow: 0 4px 12px rgba(0,0,0,0.15);
72410
- font-family: 'Roboto', Arial, sans-serif;
72410
+ font-family: 'Nunito', system-ui, sans-serif;
72411
72411
  ">
72412
72412
  <!-- Header - MyIO Premium Style -->
72413
72413
  <div style="
@@ -72531,7 +72531,7 @@ function renderModal2(container, state6, modalId) {
72531
72531
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
72532
72532
  font-size: 14px; font-weight: 500; height: 38px;
72533
72533
  display: flex; align-items: center; gap: 8px;
72534
- font-family: 'Roboto', Arial, sans-serif;
72534
+ font-family: 'Nunito', system-ui, sans-serif;
72535
72535
  " ${state6.isLoading ? "disabled" : ""}>
72536
72536
  ${state6.isLoading ? '<span style="animation: spin 1s linear infinite; display: inline-block;">\u21BB</span> Carregando...' : "Carregar"}
72537
72537
  </button>
@@ -72578,7 +72578,7 @@ function renderModal2(container, state6, modalId) {
72578
72578
  color: ${colors2.text}; border: 1px solid ${colors2.border};
72579
72579
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
72580
72580
  font-size: 14px; display: flex; align-items: center; gap: 8px;
72581
- font-family: 'Roboto', Arial, sans-serif;
72581
+ font-family: 'Nunito', system-ui, sans-serif;
72582
72582
  " ${state6.deviceData.every((dd) => dd.data.length === 0) ? "disabled" : ""}>
72583
72583
  \u{1F4E5} Exportar CSV
72584
72584
  </button>
@@ -72586,7 +72586,7 @@ function renderModal2(container, state6, modalId) {
72586
72586
  background: #3e1a7d; color: white; border: none;
72587
72587
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
72588
72588
  font-size: 14px; font-weight: 500;
72589
- font-family: 'Roboto', Arial, sans-serif;
72589
+ font-family: 'Nunito', system-ui, sans-serif;
72590
72590
  ">
72591
72591
  Fechar
72592
72592
  </button>
@@ -73271,7 +73271,7 @@ function renderModal3(container, state6, modalId, onClose, onSave) {
73271
73271
  font-size: 14px;
73272
73272
  font-weight: 600;
73273
73273
  color: #fff;
73274
- font-family: 'Roboto', sans-serif;
73274
+ font-family: 'Nunito', system-ui, sans-serif;
73275
73275
  display: flex;
73276
73276
  align-items: center;
73277
73277
  gap: 8px;
@@ -82855,7 +82855,7 @@ function createModalHeader(config2) {
82855
82855
  color: ${textColor};
82856
82856
  border-radius: ${borderRadius};
82857
82857
  min-height: 20px;
82858
- font-family: 'Roboto', Arial, sans-serif;
82858
+ font-family: 'Nunito', system-ui, sans-serif;
82859
82859
  ">
82860
82860
  <h2 id="${config2.id}-header-title" style="
82861
82861
  margin: 6px;
@@ -84120,7 +84120,7 @@ function getWidgetStyles(theme, primaryColor, headerStyles) {
84120
84120
  };
84121
84121
  return `
84122
84122
  .myio-chart-widget {
84123
- font-family: Inter, system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;
84123
+ font-family: 'Nunito', system-ui, sans-serif;
84124
84124
  background: ${colors2.chartBackground};
84125
84125
  border: 1px solid ${colors2.border};
84126
84126
  border-radius: 16px;
@@ -85608,7 +85608,7 @@ function injectStyles11(doc) {
85608
85608
  opacity: 0;
85609
85609
  pointer-events: none; /* unpinned: never blocks the chart hover */
85610
85610
  transition: opacity .15s ease;
85611
- font-family: Nunito, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
85611
+ font-family: 'Nunito', system-ui, sans-serif;
85612
85612
  }
85613
85613
  .myio-gbt.myio-gbt--visible { opacity: 1; }
85614
85614
  /* Header stays clickable even while unpinned, so the \u{1F4CC} pin is reachable as the
@@ -85748,6 +85748,26 @@ function injectStyles11(doc) {
85748
85748
  font-variant-numeric: tabular-nums;
85749
85749
  flex-shrink: 0;
85750
85750
  }
85751
+ /* Deviation chip (pill) \u2014 good/bad/neutral. Right-aligned, roughly fixed width so
85752
+ the value column above lines up cleanly. */
85753
+ .myio-gbt__chip {
85754
+ display: inline-flex;
85755
+ align-items: center;
85756
+ gap: 3px;
85757
+ justify-content: flex-end;
85758
+ min-width: 66px;
85759
+ padding: 1px 8px;
85760
+ border-radius: 999px;
85761
+ font-size: 10.5px;
85762
+ font-weight: 800;
85763
+ line-height: 1.5;
85764
+ white-space: nowrap;
85765
+ font-variant-numeric: tabular-nums;
85766
+ flex-shrink: 0;
85767
+ }
85768
+ .myio-gbt__chip--good { background: rgba(22,163,74,.12); color: #16a34a; }
85769
+ .myio-gbt__chip--bad { background: rgba(239,68,68,.12); color: #ef4444; }
85770
+ .myio-gbt__chip--neutral { background: rgba(100,116,139,.12); color: #64748b; }
85751
85771
  .myio-gbt__children {
85752
85772
  display: none;
85753
85773
  margin-left: 10px;
@@ -85782,6 +85802,13 @@ function resolveAccent(explicit, doc) {
85782
85802
  return DEFAULT_ACCENT;
85783
85803
  }
85784
85804
  var _rowSeq = 0;
85805
+ function renderDeltaChip(delta) {
85806
+ const tone = delta.tone === "good" ? "good" : delta.tone === "bad" ? "bad" : "neutral";
85807
+ const arrow = delta.arrow === "up" ? "\u2191" : delta.arrow === "down" ? "\u2193" : "\u2248";
85808
+ const pctTxt = fmtPct3(Math.abs(Number(delta.pct)));
85809
+ const txt = delta.text ? ` ${esc5(delta.text)}` : "";
85810
+ return `<span class="myio-gbt__chip myio-gbt__chip--${tone}">${arrow} ${esc5(pctTxt)}${txt}</span>`;
85811
+ }
85785
85812
  function renderRow(row, level) {
85786
85813
  const hasChildren = Array.isArray(row.children) && row.children.length > 0;
85787
85814
  const open = !!row.defaultExpanded;
@@ -85790,9 +85817,10 @@ function renderRow(row, level) {
85790
85817
  const caret = hasChildren ? `<button class="myio-gbt__caret${open ? " is-open" : ""}" data-caret="${id}" title="Expandir/recolher">\u25B8</button>` : `<span class="myio-gbt__caret-spacer"></span>`;
85791
85818
  const swatch = row.color ? `<span class="myio-gbt__swatch" style="background:${esc5(row.color)}"></span>` : "";
85792
85819
  const icon = row.icon ? `<span class="myio-gbt__icon">${esc5(row.icon)}</span>` : "";
85793
- const pctHtml = pct != null && isFinite(pct) ? `<span class="myio-gbt__pct">${esc5(fmtPct3(pct))}</span>` : "";
85820
+ const chipHtml = row.delta ? renderDeltaChip(row.delta) : "";
85821
+ const pctHtml = !row.delta && pct != null && isFinite(pct) ? `<span class="myio-gbt__pct">${esc5(fmtPct3(pct))}</span>` : "";
85794
85822
  const rowClass = level > 0 ? "myio-gbt__row myio-gbt__row--child" : "myio-gbt__row";
85795
- let html = `<div class="${rowClass}">` + caret + swatch + icon + `<span class="myio-gbt__label">${esc5(row.label)}</span><span class="myio-gbt__value">${esc5(row.valueText)}</span>` + pctHtml + `</div>`;
85823
+ let html = `<div class="${rowClass}">` + caret + swatch + icon + `<span class="myio-gbt__label">${esc5(row.label)}</span><span class="myio-gbt__value">${esc5(row.valueText)}</span>` + chipHtml + pctHtml + `</div>`;
85796
85824
  if (hasChildren) {
85797
85825
  const childHtml = row.children.map((c) => renderRow(c, level + 1)).join("");
85798
85826
  html += `<div class="myio-gbt__children${open ? " is-open" : ""}" data-children="${id}">${childHtml}</div>`;
@@ -85909,7 +85937,7 @@ function createGoalsBarTooltip(opts) {
85909
85937
  hideTimer = setTimeout(() => {
85910
85938
  if (!pinned) el2.classList.remove("myio-gbt--visible");
85911
85939
  hideTimer = null;
85912
- }, 260);
85940
+ }, 450);
85913
85941
  }
85914
85942
  function destroy() {
85915
85943
  clearHideTimer();
@@ -85971,13 +85999,27 @@ var _currentDomain = "energy";
85971
85999
  var _currentGran = "1d";
85972
86000
  var _selectedDate = _todayISO();
85973
86001
  var _selectedYear = (/* @__PURE__ */ new Date()).getFullYear();
85974
- var _periodStart = _isoNDaysAgo(29);
86002
+ var _periodStart = _firstOfMonthISO();
85975
86003
  var _periodEnd = _todayISO();
85976
86004
  var _chartType = "bar";
85977
86005
  var _lastRender = null;
85978
86006
  var _renderSeq = 0;
85979
86007
  var _datePickerControl = null;
85980
86008
  var _barTip = null;
86009
+ var _periodDeviceBreakdown = null;
86010
+ function _neutralDelta(a, b) {
86011
+ if (a == null || b == null || !(b > 0) || !isFinite(a)) return void 0;
86012
+ const d = (a - b) / b * 100;
86013
+ return { pct: Math.abs(d), tone: "neutral", arrow: d > 0.05 ? "up" : d < -0.05 ? "down" : "flat" };
86014
+ }
86015
+ function _bandDelta(real, ref, midText) {
86016
+ if (real == null || ref == null || !(ref > 0) || !isFinite(real)) return void 0;
86017
+ const d = (real - ref) / ref * 100;
86018
+ const abs = Math.abs(d);
86019
+ if (d < -3) return { pct: abs, tone: "good", arrow: "down", text: "abaixo" };
86020
+ if (d > 3) return { pct: abs, tone: "bad", arrow: "up", text: "ultrapassou" };
86021
+ return { pct: abs, tone: "neutral", arrow: "flat", text: midText };
86022
+ }
85981
86023
  function _todayISO() {
85982
86024
  const d = /* @__PURE__ */ new Date();
85983
86025
  const mm = String(d.getMonth() + 1).padStart(2, "0");
@@ -85991,6 +86033,11 @@ function _isoNDaysAgo(n) {
85991
86033
  const dd = String(d.getDate()).padStart(2, "0");
85992
86034
  return `${d.getFullYear()}-${mm}-${dd}`;
85993
86035
  }
86036
+ function _firstOfMonthISO() {
86037
+ const d = /* @__PURE__ */ new Date();
86038
+ const mm = String(d.getMonth() + 1).padStart(2, "0");
86039
+ return `${d.getFullYear()}-${mm}-01`;
86040
+ }
85994
86041
  function _getTopDoc() {
85995
86042
  try {
85996
86043
  return (window.top || window).document;
@@ -86167,6 +86214,26 @@ async function _fetchMonthData(domain, year) {
86167
86214
  const totals = await _fetchSeriesTotals(domain, boundaries, "1M", "1d") ?? await _fetchTotalsThrottled(domain, boundaries, "1M");
86168
86215
  return { labels, totals };
86169
86216
  }
86217
+ async function _fetchPeriodDeviceBreakdown(domain, boundaries, gran) {
86218
+ try {
86219
+ const fn = _options?.fetchConsumption;
86220
+ if (!fn || !boundaries.length) return null;
86221
+ const start = boundaries[0].startTs;
86222
+ const end = boundaries[boundaries.length - 1].endTs;
86223
+ const devices = await fn(domain, start, end, gran);
86224
+ if (!Array.isArray(devices) || devices.length === 0) return null;
86225
+ const list = devices.map((d) => ({
86226
+ label: String(d.name || d.label || d.deviceName || "Medidor"),
86227
+ value: Number(d.total_value) || Number(d.value) || 0
86228
+ })).filter((d) => d.value > 0);
86229
+ if (list.length === 0) return null;
86230
+ const sum = list.reduce((a, d) => a + d.value, 0);
86231
+ if (!(sum > 0)) return null;
86232
+ return { list, sum };
86233
+ } catch {
86234
+ return null;
86235
+ }
86236
+ }
86170
86237
  function _buildBoundaries(gran, dateISO) {
86171
86238
  if (gran === "1M") return _buildMonthBoundaries(_selectedYear);
86172
86239
  if (gran === "1h") return _buildHourBoundaries(dateISO);
@@ -86237,34 +86304,6 @@ function _goalNodeValue(node) {
86237
86304
  const v = node.adjustedValue ?? node.value;
86238
86305
  return v == null ? null : v;
86239
86306
  }
86240
- function _budgetNodeValue(node) {
86241
- if (!node) return null;
86242
- return node.value == null ? null : node.value;
86243
- }
86244
- function _buildBudgetLine(domain, labels, gran, dateISO) {
86245
- const tree = _getGoalsTree(domain);
86246
- if (!tree) return labels.map(() => null);
86247
- if (gran === "1h") {
86248
- const ref = (dateISO || _selectedDate).split("-");
86249
- const mm = ref[1] ?? "";
86250
- const dd = ref[2] ?? "";
86251
- if (tree.hourly && Object.keys(tree.hourly).length > 0) {
86252
- return labels.map((lbl) => {
86253
- const hh = lbl.replace("h", "").padStart(2, "0");
86254
- return _budgetNodeValue(tree.hourly[`${mm}-${dd}T${hh}`]);
86255
- });
86256
- }
86257
- return labels.map(() => null);
86258
- }
86259
- if (gran === "1M") {
86260
- return labels.map((lbl) => {
86261
- const m = MONTH_LABELS_PT.indexOf(lbl);
86262
- if (m < 0) return null;
86263
- return _budgetNodeValue(tree.monthly?.[String(m + 1).padStart(2, "0")]);
86264
- });
86265
- }
86266
- return labels.map((lbl) => _budgetNodeValue(tree.daily?.[_labelToDailyKey(lbl)]));
86267
- }
86268
86307
  function _buildGoalLine(domain, labels, gran, dateISO) {
86269
86308
  const tree = _getGoalsTree(domain);
86270
86309
  if (!tree) return labels.map(() => null);
@@ -86322,12 +86361,14 @@ function _renderChart(canvas, labels, totals, goalLine, domain, prevTotals) {
86322
86361
  fill: false,
86323
86362
  tension: 0.4,
86324
86363
  pointRadius: isLine ? 2 : 0,
86364
+ // Legenda: barra → quadradinho (usePointStyle + 'rect').
86365
+ pointStyle: "rect",
86325
86366
  order: 4
86326
86367
  });
86327
86368
  }
86328
86369
  datasets.push({
86329
86370
  type: _chartType,
86330
- label: `Consumo (${cfg.unit})`,
86371
+ label: `Realizado (${cfg.unit})`,
86331
86372
  data: totals,
86332
86373
  borderColor: cfg.barColor,
86333
86374
  backgroundColor: isLine ? cfg.barColorAlpha : cfg.barColor,
@@ -86337,6 +86378,8 @@ function _renderChart(canvas, labels, totals, goalLine, domain, prevTotals) {
86337
86378
  tension: 0.4,
86338
86379
  pointRadius: isLine ? 3 : 0,
86339
86380
  pointHoverRadius: 4,
86381
+ // Legenda: barra → quadradinho (usePointStyle + 'rect').
86382
+ pointStyle: "rect",
86340
86383
  order: 5
86341
86384
  });
86342
86385
  if (hasGoals) {
@@ -86352,6 +86395,8 @@ function _renderChart(canvas, labels, totals, goalLine, domain, prevTotals) {
86352
86395
  fill: false,
86353
86396
  spanGaps: true,
86354
86397
  tension: 0.4,
86398
+ // Meta é LINHA — legenda deve mostrar um traço, não um quadradinho.
86399
+ pointStyle: "line",
86355
86400
  order: 0
86356
86401
  });
86357
86402
  }
@@ -86365,7 +86410,6 @@ function _renderChart(canvas, labels, totals, goalLine, domain, prevTotals) {
86365
86410
  const useLarge = !!(cfg.unitLarge && cfg.threshold && yMax && yMax >= cfg.threshold);
86366
86411
  const axisDivisor = useLarge ? cfg.threshold : 1;
86367
86412
  const axisUnit = useLarge ? cfg.unitLarge : cfg.unit;
86368
- const budgetLine = _buildBudgetLine(domain, labels, _currentGran, _selectedDate);
86369
86413
  let accent = cfg.primaryColor;
86370
86414
  try {
86371
86415
  const root = _overlay || _getTopDoc().documentElement;
@@ -86377,32 +86421,47 @@ function _renderChart(canvas, labels, totals, goalLine, domain, prevTotals) {
86377
86421
  const realizado = totals[idx];
86378
86422
  const meta = goalLine[idx];
86379
86423
  const prev = prevTotals ? prevTotals[idx] : null;
86380
- const budget = budgetLine[idx];
86381
- const ref = meta != null && meta > 0 ? meta : realizado || null;
86382
- const pctOf = (v) => v != null && ref ? v / ref * 100 : null;
86383
86424
  const rows = [];
86384
- rows.push({
86385
- icon: "\u{1F4CA}",
86386
- label: "Realizado",
86387
- color: cfg.barColor,
86388
- valueText: _formatValue(realizado, domain),
86389
- pct: meta != null && meta > 0 ? pctOf(realizado) : null
86390
- });
86391
86425
  if (prev != null && prev > 0) {
86392
86426
  rows.push({
86393
86427
  icon: "\u{1F553}",
86394
86428
  label: "A-1 (ano anterior)",
86395
86429
  color: "#94a3b8",
86396
86430
  valueText: _formatValue(prev, domain),
86397
- pct: pctOf(prev)
86431
+ delta: meta != null && meta > 0 ? _neutralDelta(prev, meta) : void 0
86398
86432
  });
86399
86433
  }
86434
+ const realizadoRow = {
86435
+ icon: "\u{1F4CA}",
86436
+ label: "Realizado",
86437
+ color: cfg.barColor,
86438
+ valueText: _formatValue(realizado, domain),
86439
+ delta: prev != null && prev > 0 ? _neutralDelta(realizado, prev) : void 0
86440
+ };
86441
+ try {
86442
+ const bd = _periodDeviceBreakdown;
86443
+ if (bd && bd.sum > 0 && realizado > 0 && bd.list.length > 0) {
86444
+ realizadoRow.children = bd.list.map((d) => {
86445
+ const w = d.value / bd.sum;
86446
+ return {
86447
+ icon: cfg.icon,
86448
+ label: d.label,
86449
+ valueText: _formatValue(realizado * w, domain),
86450
+ pct: w * 100
86451
+ };
86452
+ });
86453
+ realizadoRow.defaultExpanded = false;
86454
+ }
86455
+ } catch {
86456
+ }
86457
+ rows.push(realizadoRow);
86400
86458
  if (meta != null) {
86401
86459
  const metaRow = {
86402
86460
  icon: "\u{1F3AF}",
86403
86461
  label: "Meta",
86404
86462
  color: cfg.goalColor,
86405
- valueText: _formatValue(meta, domain)
86463
+ valueText: _formatValue(meta, domain),
86464
+ delta: _bandDelta(realizado, meta, "na meta")
86406
86465
  };
86407
86466
  const gdata = _getGoalsData(domain);
86408
86467
  if (gdata?.granularity === "DEVICE" && Array.isArray(gdata.devices) && gdata.devices.length && meta > 0) {
@@ -86426,15 +86485,6 @@ function _renderChart(canvas, labels, totals, goalLine, domain, prevTotals) {
86426
86485
  }
86427
86486
  rows.push(metaRow);
86428
86487
  }
86429
- if (budget != null && (meta == null || Math.abs(budget - meta) > 1e-6)) {
86430
- rows.push({
86431
- icon: "\u{1F4CB}",
86432
- label: "Or\xE7ado",
86433
- color: "#f59e0b",
86434
- valueText: _formatValue(budget, domain),
86435
- pct: pctOf(budget)
86436
- });
86437
- }
86438
86488
  let subtitle;
86439
86489
  if (meta != null && meta > 0) {
86440
86490
  const dev = (realizado - meta) / meta * 100;
@@ -86442,6 +86492,13 @@ function _renderChart(canvas, labels, totals, goalLine, domain, prevTotals) {
86442
86492
  }
86443
86493
  return { title: labels[idx] ?? "", subtitle, rows, accentColor: accent };
86444
86494
  };
86495
+ let _lastMouse = null;
86496
+ try {
86497
+ canvas.addEventListener("mousemove", (e) => {
86498
+ _lastMouse = { x: e.clientX, y: e.clientY };
86499
+ });
86500
+ } catch {
86501
+ }
86445
86502
  const externalTip = _barTip ? (context) => {
86446
86503
  try {
86447
86504
  const tt = context?.tooltip;
@@ -86453,10 +86510,11 @@ function _renderChart(canvas, labels, totals, goalLine, domain, prevTotals) {
86453
86510
  if (!dp) return;
86454
86511
  const idx = dp.dataIndex;
86455
86512
  const rect = context.chart.canvas.getBoundingClientRect();
86456
- _barTip.show(buildBarTipData(idx), {
86457
- clientX: rect.left + tt.caretX,
86458
- clientY: rect.top + tt.caretY
86459
- });
86513
+ const pos = _lastMouse ?? {
86514
+ x: rect.left + tt.caretX,
86515
+ y: rect.top + tt.caretY
86516
+ };
86517
+ _barTip.show(buildBarTipData(idx), { clientX: pos.x, clientY: pos.y });
86460
86518
  } catch {
86461
86519
  }
86462
86520
  } : void 0;
@@ -86473,7 +86531,9 @@ function _renderChart(canvas, labels, totals, goalLine, domain, prevTotals) {
86473
86531
  legend: {
86474
86532
  display: hasGoals || hasPrev,
86475
86533
  position: "bottom",
86476
- labels: { color: "#374151", font: { size: 11 } }
86534
+ // usePointStyle + pointStyle por dataset: barras (Realizado/Ano anterior)
86535
+ // ficam quadradinhos ('rect'), Meta fica um traço ('line').
86536
+ labels: { color: "#374151", font: { size: 11 }, usePointStyle: true }
86477
86537
  },
86478
86538
  tooltip: {
86479
86539
  // Premium tooltip via external handler; se indisponível, cai no built-in.
@@ -86584,6 +86644,15 @@ async function _loadAndRender(domain, gran, dateISO) {
86584
86644
  if (!canvas) return;
86585
86645
  _renderChart(canvas, labels, totals, goalLine, domain, prevTotals);
86586
86646
  _lastRender = { labels, totals, goalLine, prevTotals, domain };
86647
+ _periodDeviceBreakdown = null;
86648
+ if (domain !== "temperature") {
86649
+ const mySeq = seq;
86650
+ const bnds = _buildBoundaries(gran, dateISO);
86651
+ _fetchPeriodDeviceBreakdown(domain, bnds, gran).then((bd) => {
86652
+ if (mySeq === _renderSeq) _periodDeviceBreakdown = bd;
86653
+ }).catch(() => {
86654
+ });
86655
+ }
86587
86656
  if (statsEl) {
86588
86657
  const total = totals.reduce((a, b) => a + b, 0);
86589
86658
  const avg = totals.length ? total / totals.length : 0;
@@ -86635,7 +86704,7 @@ function _injectStyles(topDoc) {
86635
86704
  const s = topDoc.createElement("style");
86636
86705
  s.id = STYLE_ID6;
86637
86706
  s.textContent = `
86638
- .gm-overlay{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.5);backdrop-filter:blur(4px);opacity:0;transition:opacity .2s ease;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;}
86707
+ .gm-overlay{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.5);backdrop-filter:blur(4px);opacity:0;transition:opacity .2s ease;font-family:'Nunito', system-ui, sans-serif;}
86639
86708
  .gm-overlay.show{opacity:1;}
86640
86709
  .gm-modal{position:relative;background:#fff;border-radius:16px;box-shadow:0 20px 60px rgba(0,0,0,.25);width:min(1000px,95vw);height:min(660px,90vh);overflow:hidden;display:flex;flex-direction:column;transform:translateY(12px) scale(.98);transition:transform .2s ease;}
86641
86710
  .gm-overlay.show .gm-modal{transform:translateY(0) scale(1);}
@@ -86692,6 +86761,10 @@ function _buildModalHTML() {
86692
86761
  <button class="gm-gran-btn${_currentGran === "1d" ? " active" : ""}" data-gran="1d">1d</button>
86693
86762
  <button class="gm-gran-btn${_currentGran === "1h" ? " active" : ""}" data-gran="1h">1h</button>
86694
86763
  </div>
86764
+ <div class="gm-gran-wrap" title="Atalhos de per\xEDodo">
86765
+ <button class="gm-gran-btn" data-preset="prevYear">Ano ${(/* @__PURE__ */ new Date()).getFullYear() - 1}</button>
86766
+ <button class="gm-gran-btn" data-preset="curYear">Ano ${(/* @__PURE__ */ new Date()).getFullYear()}</button>
86767
+ </div>
86695
86768
  <div class="gm-date-picker-wrap" id="gm-date-picker-wrap">
86696
86769
  <input type="text" id="gm-date-range-input" class="gm-date-input" readonly placeholder="Selecione o per\xEDodo\u2026" />
86697
86770
  </div>
@@ -86777,6 +86850,20 @@ function _wireEvents(overlay, topDoc) {
86777
86850
  _loadAndRender(_currentDomain, _currentGran, _selectedDate);
86778
86851
  });
86779
86852
  });
86853
+ overlay.querySelectorAll(".gm-gran-btn[data-preset]").forEach((btn) => {
86854
+ btn.addEventListener("click", () => {
86855
+ const which = btn.dataset.preset;
86856
+ const Y = (/* @__PURE__ */ new Date()).getFullYear();
86857
+ const year = which === "prevYear" ? Y - 1 : Y;
86858
+ _selectedYear = year;
86859
+ _currentGran = "1M";
86860
+ _periodStart = `${year}-01-01`;
86861
+ _periodEnd = which === "prevYear" ? `${year}-12-31` : _todayISO();
86862
+ overlay.querySelectorAll(".gm-gran-btn[data-gran]").forEach((b) => b.classList.toggle("active", b.dataset.gran === "1M"));
86863
+ _initDatePicker(topDoc).catch(console.error);
86864
+ _loadAndRender(_currentDomain, _currentGran, _selectedDate);
86865
+ });
86866
+ });
86780
86867
  }
86781
86868
  function _updateGoalsHint(topDoc) {
86782
86869
  const existing = topDoc.getElementById("gm-no-goals-hint-el");
@@ -86846,7 +86933,7 @@ var GoalsModal = {
86846
86933
  _options = options;
86847
86934
  _currentDomain = options.initialDomain ?? "energy";
86848
86935
  _periodEnd = _todayISO();
86849
- _periodStart = _isoNDaysAgo((options.defaultPeriodDays ?? 30) - 1);
86936
+ _periodStart = options.defaultPeriodDays != null ? _isoNDaysAgo(options.defaultPeriodDays - 1) : _firstOfMonthISO();
86850
86937
  _selectedDate = _todayISO();
86851
86938
  _selectedYear = (/* @__PURE__ */ new Date()).getFullYear();
86852
86939
  _currentGran = "1d";
@@ -87193,7 +87280,7 @@ function generatePDFContent(data, config2) {
87193
87280
  <title>${deviceLabel} - ${domainLabel} Report</title>
87194
87281
  <style>
87195
87282
  body {
87196
- font-family: 'Roboto', Arial, sans-serif;
87283
+ font-family: 'Nunito', system-ui, sans-serif;
87197
87284
  margin: 0;
87198
87285
  padding: 24px;
87199
87286
  color: ${colors2.text};
@@ -87628,7 +87715,7 @@ function createDistributionChartWidget(config2) {
87628
87715
  return `
87629
87716
  <style>
87630
87717
  #${widgetId} {
87631
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
87718
+ font-family: 'Nunito', system-ui, sans-serif;
87632
87719
  }
87633
87720
  #${widgetId} .myio-dist-header {
87634
87721
  display: flex;
@@ -88316,7 +88403,7 @@ var ContractDevicesModalView = class {
88316
88403
  align-items: center;
88317
88404
  justify-content: center;
88318
88405
  z-index: 10000;
88319
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
88406
+ font-family: 'Nunito', system-ui, sans-serif;
88320
88407
  }
88321
88408
 
88322
88409
  .myio-contract-devices-modal {
@@ -89523,7 +89610,7 @@ var HUB_CSS = `
89523
89610
  opacity: 0;
89524
89611
  pointer-events: none;
89525
89612
  transition: opacity 0.2s ease;
89526
- font-family: Nunito, Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
89613
+ font-family: 'Nunito', system-ui, sans-serif;
89527
89614
  }
89528
89615
  .myio-conf-picker.show {
89529
89616
  opacity: 1;
@@ -89940,7 +90027,7 @@ var PRICING_PANEL_CSS = `
89940
90027
  opacity: 0;
89941
90028
  pointer-events: none;
89942
90029
  transition: opacity 0.2s ease;
89943
- font-family: Nunito, Inter, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
90030
+ font-family: 'Nunito', system-ui, sans-serif;
89944
90031
  }
89945
90032
  .myio-pricing.show {
89946
90033
  opacity: 1;
@@ -91295,7 +91382,7 @@ var MeasurementSetupView = class {
91295
91382
  opacity: 0;
91296
91383
  visibility: hidden;
91297
91384
  transition: all 0.3s ease;
91298
- font-family: ${styles.fontFamily || "'Roboto', Arial, sans-serif"};
91385
+ font-family: ${styles.fontFamily || "'Nunito', system-ui, sans-serif"};
91299
91386
  }
91300
91387
 
91301
91388
  .myio-measurement-setup-overlay.active {
@@ -92126,7 +92213,7 @@ function ensureBusyModalDOM() {
92126
92213
  z-index: 99999;
92127
92214
  align-items: center;
92128
92215
  justify-content: center;
92129
- font-family: 'Roboto', Inter, system-ui, -apple-system, sans-serif;
92216
+ font-family: 'Nunito', system-ui, sans-serif;
92130
92217
  ">
92131
92218
  <div style="
92132
92219
  background: ${MYIO_PURPLE_DARK};
@@ -92606,7 +92693,7 @@ function renderModal4(container, state6, modalId, t, error) {
92606
92693
  max-height: ${contentMaxHeight}; height: ${state6.isMaximized ? "100%" : "auto"};
92607
92694
  overflow: hidden; display: flex; flex-direction: column;
92608
92695
  box-shadow: 0 4px 12px rgba(0,0,0,0.15);
92609
- font-family: 'Roboto', Arial, sans-serif;
92696
+ font-family: 'Nunito', system-ui, sans-serif;
92610
92697
  ">
92611
92698
  <!-- Header - MyIO Premium Style -->
92612
92699
  <div style="
@@ -92665,7 +92752,7 @@ function renderModal4(container, state6, modalId, t, error) {
92665
92752
  background: ${state6.theme === "dark" ? "rgba(255,255,255,0.1)" : "#f3f4f6"};
92666
92753
  color: ${colors2.text}; border: 1px solid ${colors2.border};
92667
92754
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
92668
- font-size: 14px; font-family: 'Roboto', Arial, sans-serif;
92755
+ font-size: 14px; font-family: 'Nunito', system-ui, sans-serif;
92669
92756
  ">${t.back}</button>
92670
92757
  ` : ""}
92671
92758
  </div>
@@ -92674,49 +92761,49 @@ function renderModal4(container, state6, modalId, t, error) {
92674
92761
  <button id="${modalId}-bulk-attr" style="
92675
92762
  background: #f59e0b; color: white; border: none;
92676
92763
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
92677
- font-size: 14px; font-weight: 500; font-family: 'Roboto', Arial, sans-serif;
92764
+ font-size: 14px; font-weight: 500; font-family: 'Nunito', system-ui, sans-serif;
92678
92765
  display: flex; align-items: center; gap: 6px;
92679
92766
  ">\u26A1 For\xE7ar Atributo (${state6.selectedDevices.length})</button>
92680
92767
  <button id="${modalId}-bulk-profile" style="
92681
92768
  background: #8b5cf6; color: white; border: none;
92682
92769
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
92683
- font-size: 14px; font-weight: 500; font-family: 'Roboto', Arial, sans-serif;
92770
+ font-size: 14px; font-weight: 500; font-family: 'Nunito', system-ui, sans-serif;
92684
92771
  display: flex; align-items: center; gap: 6px;
92685
92772
  ">\u{1F3F7}\uFE0F For\xE7ar Profile (${state6.selectedDevices.length})</button>
92686
92773
  <button id="${modalId}-bulk-owner" style="
92687
92774
  background: #10b981; color: white; border: none;
92688
92775
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
92689
- font-size: 14px; font-weight: 500; font-family: 'Roboto', Arial, sans-serif;
92776
+ font-size: 14px; font-weight: 500; font-family: 'Nunito', system-ui, sans-serif;
92690
92777
  display: flex; align-items: center; gap: 6px;
92691
92778
  " ${!state6.selectedCustomer ? 'disabled title="Selecione um Customer primeiro"' : ""}>\u{1F464} Atribuir Owner (${state6.selectedDevices.length})</button>
92692
92779
  <button id="${modalId}-bulk-relation" style="
92693
92780
  background: #0a6d5e; color: white; border: none;
92694
92781
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
92695
- font-size: 14px; font-weight: 500; font-family: 'Roboto', Arial, sans-serif;
92782
+ font-size: 14px; font-weight: 500; font-family: 'Nunito', system-ui, sans-serif;
92696
92783
  display: flex; align-items: center; gap: 6px;
92697
92784
  " ${!state6.selectedCustomer ? 'disabled title="Selecione um Customer primeiro"' : ""}>\u{1F517} For\xE7ar Rela\xE7\xE3o (${state6.selectedDevices.length})</button>
92698
92785
  <button id="${modalId}-clear-gcdr-ids" style="
92699
92786
  background: #dc2626; color: white; border: none;
92700
92787
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
92701
- font-size: 14px; font-weight: 500; font-family: 'Roboto', Arial, sans-serif;
92788
+ font-size: 14px; font-weight: 500; font-family: 'Nunito', system-ui, sans-serif;
92702
92789
  display: flex; align-items: center; gap: 6px;
92703
92790
  " ${!state6.selectedCustomer ? 'disabled title="Selecione um Customer primeiro"' : ""}>\u{1F9F9} Clear GCDR IDs</button>
92704
92791
  <button id="${modalId}-custom-shortcut" style="
92705
92792
  background: #ef4444; color: white; border: none;
92706
92793
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
92707
- font-size: 14px; font-weight: 500; font-family: 'Roboto', Arial, sans-serif;
92794
+ font-size: 14px; font-weight: 500; font-family: 'Nunito', system-ui, sans-serif;
92708
92795
  display: flex; align-items: center; gap: 6px;
92709
92796
  ">\u{1F39B}\uFE0F CUSTOM (${state6.selectedDevices.length})</button>
92710
92797
  <button id="${modalId}-bulk-sync-ingestion" style="
92711
92798
  background: #0284c7; color: white; border: none;
92712
92799
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
92713
- font-size: 14px; font-weight: 500; font-family: 'Roboto', Arial, sans-serif;
92800
+ font-size: 14px; font-weight: 500; font-family: 'Nunito', system-ui, sans-serif;
92714
92801
  display: flex; align-items: center; gap: 6px;
92715
92802
  " ${!state6.selectedCustomer ? 'disabled title="Selecione um Customer primeiro"' : ""}>\u{1F504} Sync Ingestion ID (${state6.selectedDevices.length})</button>
92716
92803
  <button id="${modalId}-bulk-delete" style="
92717
92804
  background: #b91c1c; color: white; border: 1px solid #7f1d1d;
92718
92805
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
92719
- font-size: 14px; font-weight: 600; font-family: 'Roboto', Arial, sans-serif;
92806
+ font-size: 14px; font-weight: 600; font-family: 'Nunito', system-ui, sans-serif;
92720
92807
  display: flex; align-items: center; gap: 6px;
92721
92808
  " title="Deletar permanentemente os dispositivos selecionados (irrevers\xEDvel)">\u{1F5D1}\uFE0F Deletar (${state6.selectedDevices.length})</button>
92722
92809
  ` : ""}
@@ -92724,13 +92811,13 @@ function renderModal4(container, state6, modalId, t, error) {
92724
92811
  <button id="${modalId}-lojas-sync" style="
92725
92812
  background: #3b82f6; color: white; border: none;
92726
92813
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
92727
- font-size: 14px; font-weight: 500; font-family: 'Roboto', Arial, sans-serif;
92814
+ font-size: 14px; font-weight: 500; font-family: 'Nunito', system-ui, sans-serif;
92728
92815
  display: flex; align-items: center; gap: 6px;
92729
92816
  " ${state6.lojasDataLoading ? "disabled" : ""}>\u{1F504} Sync Ingestion</button>
92730
92817
  <button id="${modalId}-lojas-apply" style="
92731
92818
  background: #ef4444; color: white; border: none;
92732
92819
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
92733
- font-size: 14px; font-weight: 500; font-family: 'Roboto', Arial, sans-serif;
92820
+ font-size: 14px; font-weight: 500; font-family: 'Nunito', system-ui, sans-serif;
92734
92821
  display: flex; align-items: center; gap: 6px;
92735
92822
  " ${state6.lojasDataLoading ? "disabled" : ""}>\u{1F3EC} Aplicar ${state6.lojasConfig?.label ?? "LOJAS"} (${state6.lojasDeviceData.length})</button>
92736
92823
  ` : ""}
@@ -92738,19 +92825,19 @@ function renderModal4(container, state6, modalId, t, error) {
92738
92825
  background: ${state6.theme === "dark" ? "rgba(255,255,255,0.1)" : "#f3f4f6"};
92739
92826
  color: ${colors2.text}; border: 1px solid ${colors2.border};
92740
92827
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
92741
- font-size: 14px; font-family: 'Roboto', Arial, sans-serif;
92828
+ font-size: 14px; font-family: 'Nunito', system-ui, sans-serif;
92742
92829
  ">${t.cancel}</button>
92743
92830
  ${state6.currentStep < 3 ? `
92744
92831
  <button id="${modalId}-next" style="
92745
92832
  background: ${MYIO_PURPLE}; color: white; border: none;
92746
92833
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
92747
- font-size: 14px; font-weight: 500; font-family: 'Roboto', Arial, sans-serif;
92834
+ font-size: 14px; font-weight: 500; font-family: 'Nunito', system-ui, sans-serif;
92748
92835
  " ${state6.deviceSelectionMode === "multi" ? 'disabled title="Desabilitado no modo multi"' : ""}>${t.next}</button>
92749
92836
  ` : state6.lojasMode ? "" : `
92750
92837
  <button id="${modalId}-save" style="
92751
92838
  background: ${colors2.success}; color: white; border: none;
92752
92839
  padding: 8px 16px; border-radius: 6px; cursor: pointer;
92753
- font-size: 14px; font-weight: 500; font-family: 'Roboto', Arial, sans-serif;
92840
+ font-size: 14px; font-weight: 500; font-family: 'Nunito', system-ui, sans-serif;
92754
92841
  ">${t.save}</button>
92755
92842
  `}
92756
92843
  </div>
@@ -94839,7 +94926,7 @@ function openRelationsDetailPanel(deviceId, deviceName, direction, rels, state6,
94839
94926
  z-index:99999; background:${colors2.bg}; border:1px solid ${colors2.border};
94840
94927
  border-radius:12px; box-shadow:0 20px 60px rgba(0,0,0,.35);
94841
94928
  min-width:380px; max-width:500px; width:90vw; max-height:70vh;
94842
- display:flex; flex-direction:column; font-family:system-ui,sans-serif;
94929
+ display:flex; flex-direction:column; font-family:Nunito, system-ui, sans-serif;
94843
94930
  `;
94844
94931
  const rows = currentRels.map((rel, idx) => {
94845
94932
  const [tcBg, tcColor] = typeColor(rel.entityType);
@@ -95010,7 +95097,7 @@ async function openClearGcdrIdsModal(state6) {
95010
95097
  position:fixed; inset:0; z-index:99999;
95011
95098
  background:rgba(0,0,0,0.55); backdrop-filter:blur(4px);
95012
95099
  display:flex; align-items:center; justify-content:center;
95013
- font-family:'Roboto',Inter,system-ui,sans-serif;
95100
+ font-family:'Nunito', system-ui, sans-serif;
95014
95101
  `;
95015
95102
  overlay.addEventListener("click", (e) => {
95016
95103
  if (e.target === overlay) close();
@@ -96278,7 +96365,7 @@ function showMiniTooltip(trigger, content, colors2) {
96278
96365
  box-shadow: 0 4px 12px rgba(0,0,0,0.15);
96279
96366
  white-space: pre-line;
96280
96367
  max-width: 280px;
96281
- font-family: 'Roboto', Arial, sans-serif;
96368
+ font-family: 'Nunito', system-ui, sans-serif;
96282
96369
  `;
96283
96370
  miniTooltipEl.textContent = content;
96284
96371
  document.body.appendChild(miniTooltipEl);
@@ -97315,7 +97402,7 @@ function openCheckFixScopeDialog(state6, onConfirm) {
97315
97402
  }
97316
97403
  const overlay = document.createElement("div");
97317
97404
  overlay.id = DIALOG_ID;
97318
- overlay.style.cssText = "position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,0.55);display:flex;align-items:center;justify-content:center;font-family:Roboto,Inter,system-ui,sans-serif;";
97405
+ overlay.style.cssText = "position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,0.55);display:flex;align-items:center;justify-content:center;font-family:Nunito, system-ui, sans-serif;";
97319
97406
  overlay.innerHTML = `
97320
97407
  <div style="background:${c.surface};border-radius:12px;width:480px;max-width:92vw;max-height:88vh;
97321
97408
  overflow:hidden;display:flex;flex-direction:column;box-shadow:0 12px 40px rgba(0,0,0,0.4);">
@@ -97919,7 +98006,7 @@ function injectDialogStyles() {
97919
98006
  align-items: center;
97920
98007
  justify-content: center;
97921
98008
  background: rgba(17, 24, 39, 0.55);
97922
- font-family: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
98009
+ font-family: 'Nunito', system-ui, sans-serif;
97923
98010
  }
97924
98011
  .myio-dialog {
97925
98012
  background: #ffffff;
@@ -98210,7 +98297,7 @@ function injectGenericModalStyles() {
98210
98297
  align-items: center;
98211
98298
  justify-content: center;
98212
98299
  background: rgba(17, 24, 39, 0.55);
98213
- font-family: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
98300
+ font-family: 'Nunito', system-ui, sans-serif;
98214
98301
  }
98215
98302
  .myio-genmodal {
98216
98303
  background: #ffffff;
@@ -98449,7 +98536,7 @@ function injectStyles12() {
98449
98536
  display: flex;
98450
98537
  align-items: center;
98451
98538
  gap: 6px;
98452
- font-family: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
98539
+ font-family: 'Nunito', system-ui, sans-serif;
98453
98540
  max-width: 100%;
98454
98541
  }
98455
98542
  .myio-tabs__arrow {
@@ -98670,7 +98757,7 @@ function injectStyles13() {
98670
98757
  style.id = STYLE_ID11;
98671
98758
  style.textContent = `
98672
98759
  .myio-gallery {
98673
- font-family: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
98760
+ font-family: 'Nunito', system-ui, sans-serif;
98674
98761
  display: flex;
98675
98762
  flex-direction: column;
98676
98763
  gap: 14px;
@@ -98770,7 +98857,7 @@ function injectStyles13() {
98770
98857
  position: fixed; inset: 0; z-index: 10800;
98771
98858
  display: flex; align-items: center; justify-content: center;
98772
98859
  background: rgba(0,0,0,.82);
98773
- font-family: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
98860
+ font-family: 'Nunito', system-ui, sans-serif;
98774
98861
  }
98775
98862
  .myio-gallery-lb__img { max-width: 88vw; max-height: 82vh; border-radius: 10px; box-shadow: 0 20px 60px rgba(0,0,0,.5); }
98776
98863
  .myio-gallery-lb__cap {
@@ -102641,7 +102728,7 @@ var UserManagementModalView = class {
102641
102728
  /* \u2500\u2500 Component styles (theme-agnostic via variables) \u2500\u2500 */
102642
102729
  .um-modal {
102643
102730
  background: var(--um-modal-bg);
102644
- font-family: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
102731
+ font-family: 'Nunito', system-ui, sans-serif;
102645
102732
  border-radius: 14px; width: 96vw; max-width: 1200px;
102646
102733
  --modal-header-radius: 14px 14px 0 0;
102647
102734
  height: 84vh; display: flex; flex-direction: column;
@@ -102785,7 +102872,7 @@ var UserManagementModalView = class {
102785
102872
  background: var(--um-modal-bg); border: 1px solid var(--um-border);
102786
102873
  border-radius: 10px; box-shadow: 0 8px 32px rgba(0,0,0,0.2);
102787
102874
  width: 260px; pointer-events: none;
102788
- font-family: 'Nunito', -apple-system, sans-serif;
102875
+ font-family: 'Nunito', system-ui, sans-serif;
102789
102876
  }
102790
102877
  .um-sync-tooltip-header {
102791
102878
  display: flex; align-items: center; gap: 7px;
@@ -102811,7 +102898,7 @@ var UserManagementModalView = class {
102811
102898
  background: var(--um-modal-bg); border: 1px solid var(--um-border);
102812
102899
  border-radius: 10px; box-shadow: 0 8px 32px rgba(0,0,0,0.18);
102813
102900
  width: 320px; max-height: 340px; overflow-y: auto;
102814
- font-family: 'Nunito', -apple-system, sans-serif;
102901
+ font-family: 'Nunito', system-ui, sans-serif;
102815
102902
  }
102816
102903
  .um-assign-popup-header {
102817
102904
  display: flex; align-items: center; justify-content: space-between;
@@ -103759,7 +103846,7 @@ var MenuView = class {
103759
103846
  ========================================== */
103760
103847
 
103761
103848
  .myio-menu-root {
103762
- font-family: 'Inter', 'Roboto', 'Segoe UI', sans-serif;
103849
+ font-family: 'Nunito', system-ui, sans-serif;
103763
103850
  width: 100%;
103764
103851
  box-sizing: border-box;
103765
103852
  }
@@ -110874,7 +110961,7 @@ var MODAL_CSS2 = `
110874
110961
  overflow: hidden;
110875
110962
  transform: scale(0.95) translateY(10px);
110876
110963
  transition: transform 0.2s ease;
110877
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
110964
+ font-family: 'Nunito', system-ui, sans-serif;
110878
110965
  }
110879
110966
 
110880
110967
  /* Two-column layout when device grid is shown */
@@ -112482,7 +112569,7 @@ var CSS3 = `
112482
112569
  border:1px solid var(--cgc-border);
112483
112570
  border-radius:12px;
112484
112571
  overflow:hidden;
112485
- font-family:'Nunito',sans-serif;
112572
+ font-family:'Nunito', system-ui, sans-serif;
112486
112573
  transition:transform .15s ease, box-shadow .15s ease;
112487
112574
  }
112488
112575
  .myio-cgc[data-theme="dark"]{
@@ -112504,7 +112591,7 @@ var CSS3 = `
112504
112591
  .myio-cgc__expand{
112505
112592
  position:absolute;top:6px;right:8px;z-index:2;
112506
112593
  border:none;background:transparent;cursor:pointer;
112507
- color:var(--cgc-muted);font:700 13px 'Nunito',sans-serif;line-height:1;
112594
+ color:var(--cgc-muted);font:700 13px 'Nunito', system-ui, sans-serif;line-height:1;
112508
112595
  padding:3px 5px;border-radius:6px;opacity:.55;transition:opacity .15s, background .15s;
112509
112596
  }
112510
112597
  .myio-cgc__expand:hover{opacity:1;background:rgba(124,58,237,.12);color:#7C3AED;}
@@ -112512,7 +112599,7 @@ var CSS3 = `
112512
112599
  font-size/margin grandes em h4, cortando o t\xEDtulo dentro do card). */
112513
112600
  .myio-cgc h4.myio-cgc__title{
112514
112601
  margin:0!important;padding:10px 26px 4px;
112515
- font:800 14px/1.4 'Nunito',sans-serif!important;color:var(--cgc-text);
112602
+ font:800 14px/1.4 'Nunito', system-ui, sans-serif!important;color:var(--cgc-text);
112516
112603
  text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
112517
112604
  }
112518
112605
  .myio-cgc__title--clickable{cursor:pointer;}
@@ -112521,7 +112608,7 @@ var CSS3 = `
112521
112608
  .myio-cgc__chart canvas{width:100%!important;height:100%!important;}
112522
112609
  .myio-cgc__chart-empty{
112523
112610
  display:flex;align-items:center;justify-content:center;height:100%;
112524
- font:600 11px 'Nunito',sans-serif;color:var(--cgc-muted);
112611
+ font:600 11px 'Nunito', system-ui, sans-serif;color:var(--cgc-muted);
112525
112612
  }
112526
112613
  .myio-cgc__totals{
112527
112614
  display:grid;grid-template-columns:repeat(4,1fr);
@@ -112529,13 +112616,13 @@ var CSS3 = `
112529
112616
  }
112530
112617
  .myio-cgc__total{padding:6px 3px;text-align:center;border-right:1px solid var(--cgc-border);min-width:0;}
112531
112618
  .myio-cgc__total:last-child{border-right:none;}
112532
- .myio-cgc__total-label{display:block;font:700 9.5px 'Nunito',sans-serif;line-height:1.35;white-space:nowrap;}
112619
+ .myio-cgc__total-label{display:block;font:700 9.5px 'Nunito', system-ui, sans-serif;line-height:1.35;white-space:nowrap;}
112533
112620
  .myio-cgc__total-label--realized{color:var(--cgc-realized);}
112534
112621
  .myio-cgc__total-label--prev{color:var(--cgc-prev);}
112535
112622
  .myio-cgc__total-label--budget{color:var(--cgc-budget);}
112536
112623
  .myio-cgc__total-label--orcado{color:var(--cgc-orcado);}
112537
112624
  .myio-cgc__total-value{
112538
- display:block;font:700 11px 'Nunito',sans-serif;color:var(--cgc-text);
112625
+ display:block;font:700 11px 'Nunito', system-ui, sans-serif;color:var(--cgc-text);
112539
112626
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
112540
112627
  }
112541
112628
  .myio-cgc__deltas{
@@ -112544,16 +112631,23 @@ var CSS3 = `
112544
112631
  }
112545
112632
  .myio-cgc__delta{padding:5px 3px 8px;text-align:center;border-right:1px solid var(--cgc-border);min-width:0;}
112546
112633
  .myio-cgc__delta:last-child{border-right:none;}
112547
- .myio-cgc__delta-label{display:block;font:600 9px 'Nunito',sans-serif;color:var(--cgc-muted);line-height:1.4;margin-bottom:2px;}
112548
- .myio-cgc__delta-value{display:block;font:800 11.5px 'Nunito',sans-serif;}
112634
+ .myio-cgc__delta-label{display:block;font:600 9px 'Nunito', system-ui, sans-serif;color:var(--cgc-muted);line-height:1.4;margin-bottom:2px;}
112635
+ .myio-cgc__delta-value{display:block;font:800 11.5px 'Nunito', system-ui, sans-serif;}
112549
112636
  /* Coluna A-1: dois chips pequenos empilhados (Or\xE7ado vs A-1, Meta vs A-1). */
112550
112637
  .myio-cgc__delta-dual{display:flex;flex-direction:column;gap:2px;align-items:center;}
112551
112638
  .myio-cgc__delta-mini{display:inline-flex;align-items:center;gap:3px;line-height:1.2;}
112552
- .myio-cgc__delta-mini-label{font:700 8px 'Nunito',sans-serif;color:var(--cgc-muted);}
112639
+ .myio-cgc__delta-mini-label{font:700 8px 'Nunito', system-ui, sans-serif;color:var(--cgc-muted);}
112553
112640
  .myio-cgc__delta-mini .myio-cgc__delta-value{display:inline;font-size:9.5px;}
112554
112641
  .myio-cgc__delta-value--good{color:var(--cgc-good);}
112555
112642
  .myio-cgc__delta-value--bad{color:var(--cgc-bad);}
112556
112643
  .myio-cgc__delta-value--neutral{color:var(--cgc-muted);}
112644
+ /* Linhas "vs <ref>" (col2/3/4): "vs" na cor da coluna, ref na sua cor, + chip.
112645
+ col1 mostra "<ref> SEM DADOS". */
112646
+ .myio-cgc__delta-lines{display:flex;flex-direction:column;gap:2px;align-items:center;}
112647
+ .myio-cgc__vsline{display:inline-flex;align-items:center;gap:3px;line-height:1.25;font:800 8.5px 'Nunito',sans-serif;white-space:nowrap;}
112648
+ .myio-cgc__vs,.myio-cgc__vsref{font-weight:800;}
112649
+ .myio-cgc__vsline .myio-cgc__delta-value{font-size:9.5px;}
112650
+ .myio-cgc__nodata{color:var(--cgc-muted);font-weight:600;font-size:8px;letter-spacing:.3px;}
112557
112651
  `;
112558
112652
  function injectCustomerGoalsCardStyles() {
112559
112653
  if (typeof document === "undefined") return;
@@ -112809,49 +112903,49 @@ var CustomerGoalsCard = class {
112809
112903
  const hasBudget = !!s.budget || !!(s.budgetBreakdown && s.budgetBreakdown.length);
112810
112904
  const hasOrcado = this.hasRawOrcado();
112811
112905
  const t = totals;
112812
- const yl = this.params.yearLabels;
112813
- const curLbl = yl?.current || "Atual";
112814
- const prevLbl = yl?.previous || "A-1";
112815
112906
  const orcadoVal = hasOrcado ? t.orcado : hasBudget ? t.budget : null;
112816
112907
  const hasMetaCol = hasOrcado && hasBudget;
112817
112908
  const valueCell = (cls, label, total, val) => `<div class="myio-cgc__total"><span class="myio-cgc__total-label myio-cgc__total-label--${cls}">${label}</span><span class="myio-cgc__total-value" data-total="${total}">${this.fmtQty(val)}</span></div>`;
112818
- const deltaCell = (header, chipsHtml) => `<div class="myio-cgc__delta">${header ? `<span class="myio-cgc__delta-label">${header}</span>` : ""}${chipsHtml}</div>`;
112819
- const miniChip = (label, badgeHtml2) => `<span class="myio-cgc__delta-mini"><span class="myio-cgc__delta-mini-label">${label}</span>${badgeHtml2}</span>`;
112909
+ const vsLine = (vsVar, refLabel, refVar, badge) => `<span class="myio-cgc__vsline"><span class="myio-cgc__vs" style="color:var(${vsVar})">vs</span> <span class="myio-cgc__vsref" style="color:var(${refVar})">${refLabel}</span>${badge}</span>`;
112910
+ const noDataLine = (refVar, refLabel) => `<span class="myio-cgc__vsline"><span class="myio-cgc__vsref" style="color:var(${refVar})">${refLabel}</span> <span class="myio-cgc__nodata">SEM DADOS</span></span>`;
112911
+ const deltaLines = (lines) => `<div class="myio-cgc__delta"><div class="myio-cgc__delta-lines">${lines.join("")}</div></div>`;
112820
112912
  const valueCells = [];
112821
112913
  const deltaCells = [];
112822
112914
  let anyDelta = false;
112823
112915
  if (hasPrev) {
112824
112916
  valueCells.push(valueCell("prev", "A-1", "prev", t.previousYear));
112825
- const grow = [];
112826
- if (hasOrcado) grow.push(miniChip("Or&ccedil;.", this.growthBadge(t.orcado, t.previousYear)));
112827
- if (hasMetaCol) grow.push(miniChip("Meta", this.growthBadge(t.budget, t.previousYear)));
112828
- if (!hasOrcado && hasBudget) grow.push(miniChip("Or&ccedil;.", this.growthBadge(t.budget, t.previousYear)));
112829
- if (grow.length) {
112830
- anyDelta = true;
112831
- const header = grow.length > 1 ? "vs Or&ccedil;ado &amp; vs Meta" : "vs Or&ccedil;ado";
112832
- deltaCells.push(deltaCell(header, `<div class="myio-cgc__delta-dual">${grow.join("")}</div>`));
112833
- } else {
112834
- deltaCells.push(deltaCell("", ""));
112835
- }
112917
+ const lines = [];
112918
+ if (hasOrcado || hasBudget) lines.push(noDataLine("--cgc-orcado", "Or&ccedil;."));
112919
+ if (hasMetaCol) lines.push(noDataLine("--cgc-budget", "Meta"));
112920
+ if (lines.length) anyDelta = true;
112921
+ deltaCells.push(deltaLines(lines));
112836
112922
  }
112837
112923
  valueCells.push(valueCell("realized", "Realizado", "realized", t.realized));
112838
112924
  if (hasPrev) {
112839
112925
  anyDelta = true;
112840
112926
  deltaCells.push(
112841
- deltaCell(`${this.esc(curLbl)} &times; ${this.esc(prevLbl)}`, this.growthBadge(t.realized, t.previousYear))
112927
+ deltaLines([vsLine("--cgc-realized", "A-1", "--cgc-prev", this.growthBadge(t.realized, t.previousYear))])
112842
112928
  );
112843
112929
  } else {
112844
- deltaCells.push(deltaCell("", ""));
112930
+ deltaCells.push(deltaLines([]));
112845
112931
  }
112846
112932
  if (hasOrcado || hasBudget) {
112847
112933
  anyDelta = true;
112848
112934
  valueCells.push(valueCell("orcado", "Or&ccedil;ado", hasOrcado ? "orcado" : "budget", orcadoVal));
112849
- deltaCells.push(deltaCell("vs Or&ccedil;ado", this.deltaBadge(t.realized, orcadoVal)));
112935
+ const lines = [
112936
+ vsLine("--cgc-orcado", "Realizado", "--cgc-realized", this.deltaBadge(t.realized, orcadoVal))
112937
+ ];
112938
+ if (hasPrev) lines.push(vsLine("--cgc-orcado", "A-1", "--cgc-prev", this.growthBadge(orcadoVal, t.previousYear)));
112939
+ deltaCells.push(deltaLines(lines));
112850
112940
  }
112851
112941
  if (hasMetaCol) {
112852
112942
  anyDelta = true;
112853
112943
  valueCells.push(valueCell("budget", "Meta", "budget", t.budget));
112854
- deltaCells.push(deltaCell("vs Meta", this.deltaBadge(t.realized, t.budget)));
112944
+ const lines = [
112945
+ vsLine("--cgc-budget", "Realizado", "--cgc-realized", this.deltaBadge(t.realized, t.budget))
112946
+ ];
112947
+ if (hasPrev) lines.push(vsLine("--cgc-budget", "A-1", "--cgc-prev", this.growthBadge(t.budget, t.previousYear)));
112948
+ deltaCells.push(deltaLines(lines));
112855
112949
  }
112856
112950
  const nCols = valueCells.length;
112857
112951
  const gridStyle = `grid-template-columns:repeat(${nCols},1fr);`;
@@ -113196,7 +113290,7 @@ var EnergyPanelController = class {
113196
113290
  // src/components/energy-panel/styles.ts
113197
113291
  var ENERGY_PANEL_STYLES = `
113198
113292
  .energy-panel-wrap {
113199
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
113293
+ font-family: 'Nunito', system-ui, sans-serif;
113200
113294
  color: #1e293b;
113201
113295
  background-color: #f8fafc;
113202
113296
  padding: 16px;
@@ -114166,7 +114260,7 @@ var WaterPanelController = class {
114166
114260
  // src/components/water-panel/styles.ts
114167
114261
  var WATER_PANEL_STYLES = `
114168
114262
  .water-panel-wrap {
114169
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
114263
+ font-family: 'Nunito', system-ui, sans-serif;
114170
114264
  color: #1e293b;
114171
114265
  background-color: #f8fafc;
114172
114266
  padding: 16px;
@@ -115348,7 +115442,7 @@ var HEADER_SHOPPING_STYLES = `
115348
115442
 
115349
115443
  /* ===== Base ===== */
115350
115444
  .tbx-toolbar {
115351
- font-family: 'Nunito', Inter, system-ui, -apple-system, Segoe UI, Roboto, Arial, "Helvetica Neue", Helvetica;
115445
+ font-family: 'Nunito', system-ui, sans-serif;
115352
115446
  color: var(--tbx-text);
115353
115447
  background: var(--tbx-bg);
115354
115448
  width: 100%;
@@ -116743,7 +116837,7 @@ var MENU_SHOPPING_STYLES = `
116743
116837
  height: 100%;
116744
116838
  padding: 16px 0;
116745
116839
  box-sizing: border-box;
116746
- font-family: 'Nunito', "Inter", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
116840
+ font-family: 'Nunito', system-ui, sans-serif;
116747
116841
  position: relative;
116748
116842
  background: var(--bg);
116749
116843
  color: var(--text);
@@ -118024,8 +118118,7 @@ var TELEMETRY_GRID_SHOPPING_STYLES = `
118024
118118
  --brand: #5B2EBC;
118025
118119
  --brand-ghost: rgba(91, 46, 188, 0.08);
118026
118120
  --bg-soft: #f7fbff;
118027
- --font-ui: 'Nunito', Inter, 'Inter var', 'Plus Jakarta Sans', 'SF Pro Text', system-ui, -apple-system, Segoe UI,
118028
- Roboto, 'Helvetica Neue', Arial, sans-serif;
118121
+ --font-ui: 'Nunito', system-ui, sans-serif;
118029
118122
  }
118030
118123
 
118031
118124
  /* Light mode explicit */
@@ -118379,8 +118472,7 @@ var TELEMETRY_GRID_SHOPPING_STYLES = `
118379
118472
  --brand: #5B2EBC;
118380
118473
  --brand-ghost: rgba(91, 46, 188, 0.08);
118381
118474
  --bg-soft: #f7fbff;
118382
- --font-ui: 'Nunito', Inter, 'Inter var', 'Plus Jakarta Sans', 'SF Pro Text', system-ui, -apple-system, Segoe UI,
118383
- Roboto, 'Helvetica Neue', Arial, sans-serif;
118475
+ --font-ui: 'Nunito', system-ui, sans-serif;
118384
118476
 
118385
118477
  position: fixed;
118386
118478
  inset: 0;
@@ -120063,7 +120155,7 @@ var TELEMETRY_INFO_SHOPPING_STYLES = `
120063
120155
  padding: 12px !important;
120064
120156
  background: var(--tis-bg) !important;
120065
120157
  color: var(--tis-text) !important;
120066
- font-family: 'Nunito', Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif !important;
120158
+ font-family: 'Nunito', system-ui, sans-serif !important;
120067
120159
  box-sizing: border-box !important;
120068
120160
  border-radius: 12px !important;
120069
120161
  overflow: auto !important;
@@ -122058,7 +122150,7 @@ var OPERATIONAL_GENERAL_LIST_STYLES = `
122058
122150
  display: flex;
122059
122151
  flex-direction: column;
122060
122152
  background: transparent;
122061
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
122153
+ font-family: 'Nunito', system-ui, sans-serif;
122062
122154
  }
122063
122155
 
122064
122156
  /* ====== LIGHT/DARK THEME MODE ====== */
@@ -124493,7 +124585,7 @@ var DEVICE_OPERATIONAL_CARD_STYLES = `
124493
124585
  --myio-chip-not-installed-bg: #e9d5ff;
124494
124586
  --myio-chip-not-installed-fg: #7c3aed;
124495
124587
 
124496
- font-family: 'Inter', 'Roboto', 'Segoe UI', sans-serif;
124588
+ font-family: 'Nunito', system-ui, sans-serif;
124497
124589
  background: var(--alarms-bg-primary);
124498
124590
  color: var(--alarms-text-primary);
124499
124591
  height: 100%;
@@ -126145,7 +126237,7 @@ var DEVICE_OPERATIONAL_CARD_GRID_STYLES = `
126145
126237
  --grid-accent: #8b5cf6;
126146
126238
  --grid-accent-light: rgba(139, 92, 246, 0.1);
126147
126239
 
126148
- font-family: 'Inter', 'Roboto', 'Segoe UI', sans-serif;
126240
+ font-family: 'Nunito', system-ui, sans-serif;
126149
126241
  background: var(--grid-bg-primary);
126150
126242
  color: var(--grid-text-primary);
126151
126243
  height: 100%;
@@ -130975,7 +131067,7 @@ var OPERATIONAL_DASHBOARD_STYLES = `
130975
131067
  width: 100%;
130976
131068
  background: transparent;
130977
131069
  color: var(--ink-1, #f1f5f9);
130978
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
131070
+ font-family: 'Nunito', system-ui, sans-serif;
130979
131071
  overflow: auto;
130980
131072
  padding: 0;
130981
131073
  box-sizing: border-box;
@@ -134528,7 +134620,7 @@ var BAS_DASHBOARD_STYLES = `
134528
134620
  flex-direction: column;
134529
134621
  width: 100%;
134530
134622
  height: 100%;
134531
- font-family: 'Roboto', 'Segoe UI', sans-serif;
134623
+ font-family: 'Nunito', system-ui, sans-serif;
134532
134624
  overflow: hidden;
134533
134625
  background: var(--bas-bg-main);
134534
134626
  color: var(--bas-text-primary);
@@ -135316,7 +135408,7 @@ function injectFancoilRemoteStyles() {
135316
135408
  background: #BBB8A6;
135317
135409
  border-radius: 18px;
135318
135410
  padding: 12px;
135319
- font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, sans-serif;
135411
+ font-family: 'Nunito', system-ui, sans-serif;
135320
135412
  color: #18446C;
135321
135413
  display: flex;
135322
135414
  flex-direction: column;
@@ -135606,7 +135698,7 @@ function injectFancoilRemoteStyles() {
135606
135698
  text-align: center;
135607
135699
  max-width: 360px;
135608
135700
  width: 90%;
135609
- font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, sans-serif;
135701
+ font-family: 'Nunito', system-ui, sans-serif;
135610
135702
  color: #222;
135611
135703
  }
135612
135704
 
@@ -136136,7 +136228,7 @@ function injectSolenoidControlStyles() {
136136
136228
  justify-content: center;
136137
136229
  gap: 5%;
136138
136230
  margin: 0;
136139
- font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, sans-serif;
136231
+ font-family: 'Nunito', system-ui, sans-serif;
136140
136232
  color: #18446C;
136141
136233
  box-sizing: border-box;
136142
136234
  overflow: hidden;
@@ -136257,7 +136349,7 @@ function injectSolenoidControlStyles() {
136257
136349
  text-align: center;
136258
136350
  max-width: 90%;
136259
136351
  width: 300px;
136260
- font-family: 'Segoe UI', Arial, sans-serif;
136352
+ font-family: 'Nunito', system-ui, sans-serif;
136261
136353
  z-index: 2147483647;
136262
136354
  color: #222;
136263
136355
  }
@@ -136650,7 +136742,7 @@ function injectSwitchControlStyles() {
136650
136742
  border-radius: 12px;
136651
136743
  background: #ffffff;
136652
136744
  border: 1px solid #e0e0e0;
136653
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
136745
+ font-family: 'Nunito', system-ui, sans-serif;
136654
136746
  transition: all 0.2s ease;
136655
136747
  cursor: pointer;
136656
136748
  user-select: none;
@@ -137213,7 +137305,7 @@ function injectActionButtonStyles() {
137213
137305
  gap: 8px;
137214
137306
  border: none;
137215
137307
  cursor: pointer;
137216
- font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, sans-serif;
137308
+ font-family: 'Nunito', system-ui, sans-serif;
137217
137309
  font-weight: 600;
137218
137310
  white-space: nowrap;
137219
137311
  transition: all 0.2s ease;
@@ -137539,7 +137631,7 @@ var SCHEDULING_SHARED_STYLES = `
137539
137631
  display: flex;
137540
137632
  flex-direction: column;
137541
137633
  overflow-y: auto;
137542
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
137634
+ font-family: 'Nunito', system-ui, sans-serif;
137543
137635
  color: #e0e0e0;
137544
137636
  box-sizing: border-box;
137545
137637
  }
@@ -138061,7 +138153,7 @@ var SCHEDULING_SHARED_STYLES = `
138061
138153
  text-align: center;
138062
138154
  max-width: 360px;
138063
138155
  width: 100%;
138064
- font-family: sans-serif;
138156
+ font-family: 'Nunito', system-ui, sans-serif;
138065
138157
  color: #222 !important;
138066
138158
  }
138067
138159
 
@@ -139719,7 +139811,7 @@ var STYLES = `
139719
139811
  --dgv6-card: #0f1d30;
139720
139812
  --dgv6-bg: rgba(11, 18, 32, 0.65);
139721
139813
  --dgv6-accent: #38bdf8;
139722
- --dgv6-font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
139814
+ --dgv6-font: 'Nunito', system-ui, sans-serif;
139723
139815
 
139724
139816
  display: flex;
139725
139817
  flex-direction: column;
@@ -140434,7 +140526,7 @@ function injectOnOffDeviceModalStyles() {
140434
140526
  flex-direction: row;
140435
140527
  width: 100%;
140436
140528
  max-width: 100%;
140437
- font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, sans-serif;
140529
+ font-family: 'Nunito', system-ui, sans-serif;
140438
140530
  box-sizing: border-box;
140439
140531
  overflow: hidden;
140440
140532
  }
@@ -141333,7 +141425,7 @@ function injectOnOffTimelineStyles() {
141333
141425
 
141334
141426
  .${ONOFF_TIMELINE_CSS_PREFIX} {
141335
141427
  width: 100%;
141336
- font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, sans-serif;
141428
+ font-family: 'Nunito', system-ui, sans-serif;
141337
141429
  box-sizing: border-box;
141338
141430
  }
141339
141431
 
@@ -142336,7 +142428,7 @@ function exportTimelineToPDF(data, labels = {}, locale = "pt-BR", opts = {}) {
142336
142428
  <style>
142337
142429
  @import url('https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700;800&display=swap');
142338
142430
  * { box-sizing: border-box; }
142339
- body { font-family: 'Nunito', 'Segoe UI', Arial, sans-serif; margin: 0; padding: 32px 40px; color: #1f2937; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
142431
+ body { font-family: 'Nunito', system-ui, sans-serif; margin: 0; padding: 32px 40px; color: #1f2937; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
142340
142432
 
142341
142433
  .report-header { background: linear-gradient(135deg, #1e3a8a 0%, #2563eb 100%); color: #fff; border-radius: 14px; padding: 24px 28px; display: flex; justify-content: space-between; align-items: flex-start; gap: 24px; }
142342
142434
  .report-header .brand { font-size: 12px; font-weight: 700; letter-spacing: 1.5px; text-transform: uppercase; opacity: .85; }
@@ -142469,7 +142561,7 @@ function exportSchedulesToPDF(schedules, deviceName, locale = "pt-BR") {
142469
142561
  <meta charset="UTF-8">
142470
142562
  <title>Agendamentos - ${deviceName}</title>
142471
142563
  <style>
142472
- body { font-family: 'Segoe UI', Arial, sans-serif; margin: 40px; color: #1f2937; }
142564
+ body { font-family: 'Nunito', system-ui, sans-serif; margin: 40px; color: #1f2937; }
142473
142565
  h1 { color: #3b82f6; font-size: 24px; margin-bottom: 8px; }
142474
142566
  .subtitle { color: #6b7280; font-size: 14px; margin-bottom: 24px; }
142475
142567
  .schedule-card { background: #f9fafb; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px; margin-bottom: 12px; }
@@ -143220,7 +143312,7 @@ var OnOffDeviceModalView = class {
143220
143312
  position: relative; background: #1f2937; color: #f9fafb;
143221
143313
  border-radius: 12px; padding: 24px 28px; min-width: 280px; max-width: 380px;
143222
143314
  box-shadow: 0 20px 60px rgba(0,0,0,0.5); text-align: center;
143223
- font-family: sans-serif;
143315
+ font-family: 'Nunito', system-ui, sans-serif;
143224
143316
  `;
143225
143317
  const msg = document.createElement("p");
143226
143318
  msg.style.cssText = "margin: 0 0 20px; font-size: 15px; line-height: 1.5;";
@@ -143664,7 +143756,7 @@ var OnOffDeviceModalController = class {
143664
143756
  display: flex;
143665
143757
  flex-direction: column;
143666
143758
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
143667
- font-family: 'Roboto', 'Segoe UI', Arial, sans-serif;
143759
+ font-family: 'Nunito', system-ui, sans-serif;
143668
143760
  }
143669
143761
 
143670
143762
  .${ON_OFF_MODAL_CSS_PREFIX}-content.maximized {
@@ -144016,7 +144108,7 @@ function injectAmbienteModalStyles() {
144016
144108
  align-items: center;
144017
144109
  justify-content: center;
144018
144110
  z-index: 10000;
144019
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
144111
+ font-family: 'Nunito', system-ui, sans-serif;
144020
144112
  opacity: 0;
144021
144113
  visibility: hidden;
144022
144114
  transition: opacity 0.2s ease, visibility 0.2s ease;
@@ -144974,7 +145066,7 @@ function injectAmbienteGroupModalStyles() {
144974
145066
  align-items: center;
144975
145067
  justify-content: center;
144976
145068
  z-index: 10000;
144977
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
145069
+ font-family: 'Nunito', system-ui, sans-serif;
144978
145070
  opacity: 0;
144979
145071
  visibility: hidden;
144980
145072
  transition: opacity 0.2s ease, visibility 0.2s ease;
@@ -145881,7 +145973,7 @@ function injectSidebarMenuStyles() {
145881
145973
  background: #ffffff;
145882
145974
  border-right: 1px solid #e5e7eb;
145883
145975
  border-radius: 0 16px 16px 0;
145884
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
145976
+ font-family: 'Nunito', system-ui, sans-serif;
145885
145977
  transition: width var(--sidebar-transition);
145886
145978
  overflow: hidden;
145887
145979
  z-index: 100;
@@ -148151,7 +148243,7 @@ var STYLES2 = `
148151
148243
  display: flex;
148152
148244
  align-items: center;
148153
148245
  justify-content: center;
148154
- font-family: 'Roboto', Inter, system-ui, -apple-system, sans-serif;
148246
+ font-family: 'Nunito', system-ui, sans-serif;
148155
148247
  }
148156
148248
  #${MODAL_ID4} .gcdr-card {
148157
148249
  background: #fff;
@@ -148789,7 +148881,7 @@ var STYLES3 = `
148789
148881
  display: flex;
148790
148882
  align-items: center;
148791
148883
  justify-content: center;
148792
- font-family: 'Roboto', Inter, system-ui, -apple-system, sans-serif;
148884
+ font-family: 'Nunito', system-ui, sans-serif;
148793
148885
  }
148794
148886
  #${MODAL_ID5} .abm-card {
148795
148887
  background: #fff;
@@ -149070,7 +149162,7 @@ var STYLES3 = `
149070
149162
  position: fixed; inset: 0;
149071
149163
  background: rgba(0,0,0,0.55); backdrop-filter: blur(4px);
149072
149164
  z-index: 99999; display: flex; align-items: center; justify-content: center;
149073
- font-family: 'Roboto', Inter, system-ui, -apple-system, sans-serif;
149165
+ font-family: 'Nunito', system-ui, sans-serif;
149074
149166
  }
149075
149167
  .abm-confirm-modal {
149076
149168
  background: #fff; border-radius: 10px; width: min(420px, 94vw);
@@ -150534,7 +150626,7 @@ var DEFAULT_INGESTION_API = "https://management.myio-bas.com";
150534
150626
  var DEFAULT_INGESTION_AUTH = "https://api.myio-bas.com/auth/token";
150535
150627
  var DEFAULT_PROVISIONING_API = "https://provisioning.apps.myio-bas.com";
150536
150628
  var S = {
150537
- root: "font-family:system-ui,sans-serif;font-size:14px;color:#111;background:#fff;border:1px solid #e0e0e0;border-radius:8px;overflow:hidden;",
150629
+ root: "font-family:Nunito, system-ui, sans-serif;font-size:14px;color:#111;background:#fff;border:1px solid #e0e0e0;border-radius:8px;overflow:hidden;",
150538
150630
  header: "padding:12px 16px;background:#f5f6fa;border-bottom:1px solid #e0e0e0;display:flex;align-items:center;gap:12px;",
150539
150631
  badge: (bg, fg) => `font-size:12px;padding:2px 8px;border-radius:9999px;background:${bg};color:${fg};`,
150540
150632
  tableWrap: "overflow-x:auto;border-bottom:1px solid #e0e0e0;",
@@ -152198,7 +152290,7 @@ var TicketDetailModal = class {
152198
152290
  width: 100%; max-width: 580px;
152199
152291
  max-height: 86vh; min-height: 0;
152200
152292
  display: flex; flex-direction: column;
152201
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
152293
+ font-family: 'Nunito', system-ui, sans-serif;
152202
152294
  font-size: 13px; color: #1a1a2e;
152203
152295
  animation: tdm-slide-up 0.2s ease;
152204
152296
  }
@@ -152950,7 +153042,7 @@ var HEADER_ANNOTATIONS_STYLES = `
152950
153042
  box-shadow: 0 20px 50px rgba(15, 23, 42, 0.18);
152951
153043
  display: flex;
152952
153044
  flex-direction: column;
152953
- font-family: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
153045
+ font-family: 'Nunito', system-ui, sans-serif;
152954
153046
  color: #1e293b;
152955
153047
  overflow: hidden;
152956
153048
  animation: myio-anno-pop 0.16s ease-out;
@@ -153835,7 +153927,7 @@ var STYLES4 = `
153835
153927
  border-radius: 12px;
153836
153928
  box-shadow: 0 20px 50px rgba(15, 23, 42, 0.3);
153837
153929
  padding: 18px 20px;
153838
- font-family: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
153930
+ font-family: 'Nunito', system-ui, sans-serif;
153839
153931
  color: #1e293b;
153840
153932
  }
153841
153933
  .${MODAL_DOM_ID} .${MODAL_DOM_ID}__title {