diff --git a/10/ecolyo.26edbface76655274ad8.js b/10/ecolyo.fe3625578fa387c11975.js
similarity index 95%
rename from 10/ecolyo.26edbface76655274ad8.js
rename to 10/ecolyo.fe3625578fa387c11975.js
index e43290a87c92830f42e6fa920fa4b533d96ac118..64136c33375d7128c80ec4596ef34f3fb932a7ea 100644
--- a/10/ecolyo.26edbface76655274ad8.js
+++ b/10/ecolyo.fe3625578fa387c11975.js
@@ -17,6 +17,9 @@ var _Header = _interopRequireDefault(__webpack_require__("0soq"));
 var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
 var _LegalNoticeContent = _interopRequireDefault(__webpack_require__("cm3A"));
 __webpack_require__("pSgn");
+/**
+ * http://ecolyo.cozy.tools:8080/#/options/legalnotice
+ */
 var LegalNoticeView = function LegalNoticeView() {
   return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_CozyBar.default, {
     titleKey: "common.title_legal_notice",
diff --git a/6/ecolyo.22960faffb0acb9e49a6.js b/3/ecolyo.6a2555d0fd2f917f5ede.js
similarity index 86%
rename from 6/ecolyo.22960faffb0acb9e49a6.js
rename to 3/ecolyo.6a2555d0fd2f917f5ede.js
index 05ece69f3d8bf03d21234c5fa73fd02e21d17054..b19d35af9a52c927d72d7af95e7d6adb62961f91 100644
--- a/6/ecolyo.22960faffb0acb9e49a6.js
+++ b/3/ecolyo.6a2555d0fd2f917f5ede.js
@@ -1,4 +1,15 @@
-(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[6],{
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[3],{
+
+/***/ "+dce":
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__("DjJv")(false);
+// Module
+exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.options-root {\n  display: flex;\n  flex-direction: column;\n  gap: 2rem;\n}\n\n.info-links {\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n}\n\n.styled-card-root {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 0 1.5rem;\n}\n.styled-card-root .styled-card-content {\n  max-width: 45.75rem;\n  width: 100%;\n}\n.styled-card-root .styled-card-content .styled-card-header {\n  color: #e0e0e0;\n  margin-bottom: 1rem;\n}\n.styled-card-root .styled-card-content .matomo-content * {\n  font-family: Lato, sans-serif;\n}", ""]);
+
+
+
+/***/ }),
 
 /***/ "2R85":
 /***/ (function(module, exports, __webpack_require__) {
@@ -13,22 +24,23 @@ Object.defineProperty(exports, "__esModule", {
 exports.default = void 0;
 var _I18n = __webpack_require__("nUfk");
 var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
-__webpack_require__("wGz8");
+__webpack_require__("5mrP");
 var MatomoOptOut = function MatomoOptOut() {
   var _useI18n = (0, _I18n.useI18n)(),
     t = _useI18n.t;
   var baseUrl = "https://statweb.grandlyon.com/";
   return /*#__PURE__*/_react.default.createElement("div", {
-    className: "matomo-opt-out-container"
+    className: "styled-card-root"
   }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "matomo-opt-out"
+    className: "styled-card-content"
   }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "opt-out-header text-16-normal-uppercase"
+    className: "styled-card-header text-16-normal-uppercase"
   }, t('matomo.matomo_title')), /*#__PURE__*/_react.default.createElement("iframe", {
     title: "opt-out",
     style: {
       height: '250px'
     },
+    className: "matomo-content",
     src: "".concat(baseUrl, "index.php?module=CoreAdminHome&action=optOut&language=fr&backgroundColor=121212&fontColor=e0e0e0&fontSize=&fontFamily=sans-serif")
   })));
 };
@@ -70,6 +82,10 @@ var SwitchBase = (0, _styles.withStyles)({
         opacity: 1,
         backgroundColor: 'var(--multiColor)'
       }
+    },
+    '&.Mui-focusVisible': {
+      outline: '2px solid #1976d2',
+      outlineOffset: '2px'
     }
   },
   checked: {},
@@ -158,12 +174,38 @@ var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WE
 
 /***/ }),
 
+/***/ "5mrP":
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__("+dce");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__("HkU0")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
 /***/ "635L":
 /***/ (function(module, exports, __webpack_require__) {
 
 exports = module.exports = __webpack_require__("DjJv")(false);
 // Module
-exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.report-option-root {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 0 1.5rem;\n  margin-top: 2rem;\n}\n.report-option-root .report-option-content {\n  max-width: 45.75rem;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: 2rem;\n}\n.report-option-root .head {\n  color: #e0e0e0;\n  margin-bottom: 1rem;\n}\n.report-option-root .reportCard {\n  border: 1px solid #383941;\n  border-radius: 4px;\n  padding: 12px 16px;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  color: #e0e0e0;\n}\n.report-option-root .reportCard .row {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n}\n.report-option-root .switch-container-alert {\n  color: #e0e0e0;\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n.report-option-root .alert-input-subtext {\n  color: #a0a0a0;\n}", ""]);
+exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.report-option-root {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 0 1.5rem;\n}\n.report-option-root .report-option-content {\n  max-width: 45.75rem;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: 2rem;\n}\n.report-option-root .head {\n  color: #e0e0e0;\n  margin-bottom: 1rem;\n}\n.report-option-root .reportCard {\n  border: 1px solid #383941;\n  border-radius: 4px;\n  padding: 12px 16px;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  color: #e0e0e0;\n}\n.report-option-root .reportCard .row {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n}\n.report-option-root .switch-container-alert {\n  color: #e0e0e0;\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n.report-option-root .alert-input-subtext {\n  color: #a0a0a0;\n}", ""]);
 
 
 
@@ -225,11 +267,9 @@ var ExportStartModal = function ExportStartModal(_ref) {
   }, t('export.modal_start.text1')), /*#__PURE__*/_react.default.createElement("div", null, t('export.modal_start.text2'), /*#__PURE__*/_react.default.createElement("br", null), t('export.modal_start.text3')), /*#__PURE__*/_react.default.createElement("div", {
     className: "buttons"
   }, /*#__PURE__*/_react.default.createElement(_core.Button, {
-    "aria-label": t('export.modal_start.button_cancel'),
     onClick: handleCloseClick,
     className: "btnSecondary"
   }, t('export.modal_start.button_cancel')), /*#__PURE__*/_react.default.createElement(_core.Button, {
-    "aria-label": t('export.button_download'),
     onClick: handleDownloadClick,
     className: "btnPrimary"
   }, t('export.button_download'))))));
@@ -237,17 +277,6 @@ var ExportStartModal = function ExportStartModal(_ref) {
 var _default = ExportStartModal;
 exports.default = _default;
 
-/***/ }),
-
-/***/ "7M/C":
-/***/ (function(module, exports, __webpack_require__) {
-
-exports = module.exports = __webpack_require__("DjJv")(false);
-// Module
-exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.help-root {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 0 1.5rem;\n  margin-top: 2rem;\n}\n.help-root .help-content {\n  max-width: 45.75rem;\n  width: 100%;\n}\n.help-root .help-content a {\n  color: #ffffff;\n  text-decoration: none;\n}\n.help-root .help-content .help-header {\n  color: #e0e0e0;\n  margin-bottom: 1rem;\n}\n\n.help-card-link {\n  color: #ffffff;\n  cursor: pointer;\n}\n\n.help-card {\n  display: flex;\n  flex-direction: row;\n  margin: -0.75rem 0;\n  width: 100%;\n}\n.help-card .help-card-content {\n  display: flex;\n  flex-direction: row;\n}\n.help-card .help-card-content .help-card-content-icon {\n  margin: 0.5rem 0;\n  min-width: 42px;\n}\n.help-card .help-card-content .help-card-content-title {\n  margin: 0 1rem;\n  align-self: center;\n  text-decoration: none;\n}", ""]);
-
-
-
 /***/ }),
 
 /***/ "7iMq":
@@ -283,45 +312,32 @@ Object.defineProperty(exports, "__esModule", {
   value: true
 });
 exports.default = void 0;
-var _Link = _interopRequireDefault(__webpack_require__("FFKy"));
 var _questionMark = _interopRequireDefault(__webpack_require__("pAsk"));
+var _StyledCard = _interopRequireDefault(__webpack_require__("y8/m"));
 var _StyledIcon = _interopRequireDefault(__webpack_require__("VP3k"));
 var _I18n = __webpack_require__("nUfk");
 var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
-var _reactRouterDom = __webpack_require__("Iyno");
 var _hooks = __webpack_require__("6FOS");
 var _modal = __webpack_require__("IvDH");
-__webpack_require__("MmZq");
+__webpack_require__("5mrP");
 var HelpLink = function HelpLink() {
   var _useI18n = (0, _I18n.useI18n)(),
     t = _useI18n.t;
   var dispatch = (0, _hooks.useAppDispatch)();
   return /*#__PURE__*/_react.default.createElement("div", {
-    className: "help-root"
+    className: "styled-card-root"
   }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "help-content"
+    className: "styled-card-content"
   }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "help-header text-16-normal-uppercase"
-  }, t('help.title_help')), /*#__PURE__*/_react.default.createElement(_Link.default, {
-    className: "help-card-link",
-    component: _reactRouterDom.Link,
+    className: "styled-card-header text-16-normal-uppercase"
+  }, t('help.title_help')), /*#__PURE__*/_react.default.createElement(_StyledCard.default, {
     onClick: function onClick() {
       return dispatch((0, _modal.openFeedbackModal)(true));
-    },
-    to: ""
-  }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "card"
-  }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "help-card"
-  }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "help-card-content"
+    }
   }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
-    className: "help-card-content-icon",
     icon: _questionMark.default,
-    size: 42
-  }), /*#__PURE__*/_react.default.createElement("div", {
-    className: "help-card-content-title"
-  }, t('help.read_help'))))))));
+    size: 38
+  }), t('help.read_help'))));
 };
 var _default = HelpLink;
 exports.default = _default;
@@ -442,35 +458,32 @@ var ExportLoadingModal = function ExportLoadingModal(_ref) {
   }(), [client, t]);
   var getExportDataSheet = (0, _react2.useCallback)( /*#__PURE__*/function () {
     var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(fluidType) {
-      var consumptionService, _yield$consumptionSer, _yield$consumptionSer2, firstDataDate, _yield$consumptionSer3, _yield$consumptionSer4, lastDataDate, timePeriod, dataLoad, exportDataSheet, _iterator2, _step2, data, dataRow;
+      var consumptionService, _yield$Promise$all, _yield$Promise$all2, firstDataDates, lastDataDates, firstDataDate, lastDataDate, timePeriod, dataLoad, exportDataSheet, _iterator2, _step2, data, dataRow;
       return _regenerator.default.wrap(function _callee2$(_context2) {
         while (1) {
           switch (_context2.prev = _context2.next) {
             case 0:
               consumptionService = new _consumption.default(client);
               _context2.next = 3;
-              return consumptionService.fetchAllFirstDateData([fluidType], _enums.TimeStep.MONTH);
+              return Promise.all([consumptionService.fetchAllFirstDateData([fluidType], _enums.TimeStep.MONTH), consumptionService.fetchAllLastDateData([fluidType], _enums.TimeStep.MONTH)]);
             case 3:
-              _yield$consumptionSer = _context2.sent;
-              _yield$consumptionSer2 = (0, _slicedToArray2.default)(_yield$consumptionSer, 1);
-              firstDataDate = _yield$consumptionSer2[0];
-              _context2.next = 8;
-              return consumptionService.fetchAllLastDateData([fluidType], _enums.TimeStep.MONTH);
-            case 8:
-              _yield$consumptionSer3 = _context2.sent;
-              _yield$consumptionSer4 = (0, _slicedToArray2.default)(_yield$consumptionSer3, 1);
-              lastDataDate = _yield$consumptionSer4[0];
+              _yield$Promise$all = _context2.sent;
+              _yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 2);
+              firstDataDates = _yield$Promise$all2[0];
+              lastDataDates = _yield$Promise$all2[1];
+              firstDataDate = firstDataDates[0];
+              lastDataDate = lastDataDates[0];
               if (!(!firstDataDate || !lastDataDate)) {
-                _context2.next = 13;
+                _context2.next = 11;
                 break;
               }
               return _context2.abrupt("return", null);
-            case 13:
+            case 11:
               timePeriod = {
                 startDate: firstDataDate,
                 endDate: lastDataDate
               };
-              _context2.next = 16;
+              _context2.next = 14;
               return consumptionService.getGraphData({
                 timePeriod: timePeriod,
                 timeStep: _enums.TimeStep.MONTH,
@@ -478,60 +491,60 @@ var ExportLoadingModal = function ExportLoadingModal(_ref) {
                 isHome: false,
                 isExport: true
               });
-            case 16:
+            case 14:
               dataLoad = _context2.sent;
               if (dataLoad !== null && dataLoad !== void 0 && dataLoad.actualData) {
-                _context2.next = 19;
+                _context2.next = 17;
                 break;
               }
               return _context2.abrupt("return", null);
-            case 19:
+            case 17:
               exportDataSheet = {
                 fluidName: t("FLUID.".concat(_enums.FluidType[fluidType], ".LABEL")),
                 data: []
               };
               _iterator2 = _createForOfIteratorHelper(dataLoad.actualData);
-              _context2.prev = 21;
+              _context2.prev = 19;
               _iterator2.s();
-            case 23:
+            case 21:
               if ((_step2 = _iterator2.n()).done) {
-                _context2.next = 33;
+                _context2.next = 31;
                 break;
               }
               data = _step2.value;
               if (!(data.value === -1)) {
-                _context2.next = 27;
+                _context2.next = 25;
                 break;
               }
-              return _context2.abrupt("continue", 31);
-            case 27:
-              _context2.next = 29;
+              return _context2.abrupt("continue", 29);
+            case 25:
+              _context2.next = 27;
               return buildDataRow(data, fluidType);
-            case 29:
+            case 27:
               dataRow = _context2.sent;
               exportDataSheet.data.push(dataRow);
+            case 29:
+              _context2.next = 21;
+              break;
             case 31:
-              _context2.next = 23;
+              _context2.next = 36;
               break;
             case 33:
-              _context2.next = 38;
-              break;
-            case 35:
-              _context2.prev = 35;
-              _context2.t0 = _context2["catch"](21);
+              _context2.prev = 33;
+              _context2.t0 = _context2["catch"](19);
               _iterator2.e(_context2.t0);
-            case 38:
-              _context2.prev = 38;
+            case 36:
+              _context2.prev = 36;
               _iterator2.f();
-              return _context2.finish(38);
-            case 41:
+              return _context2.finish(36);
+            case 39:
               return _context2.abrupt("return", exportDataSheet);
-            case 42:
+            case 40:
             case "end":
               return _context2.stop();
           }
         }
-      }, _callee2, null, [[21, 35, 38, 41]]);
+      }, _callee2, null, [[19, 33, 36, 39]]);
     }));
     return function (_x3) {
       return _ref3.apply(this, arguments);
@@ -645,7 +658,6 @@ var ExportLoadingModal = function ExportLoadingModal(_ref) {
   })), /*#__PURE__*/_react2.default.createElement("div", {
     className: "text-16-bold subtitle"
   }, t('export.modal_loading.text1')), /*#__PURE__*/_react2.default.createElement("div", null, t('export.modal_loading.text2')), /*#__PURE__*/_react2.default.createElement(_core.Button, {
-    "aria-label": t('export.modal_loading.button_cancel'),
     onClick: handleCloseClick,
     className: "btnSecondary"
   }, t('export.modal_loading.button_cancel')))));
@@ -668,32 +680,6 @@ var insertInto;
 
 
 
-var options = {"hmr":true}
-
-options.transform = transform
-options.insertInto = undefined;
-
-var update = __webpack_require__("HkU0")(content, options);
-
-if(content.locals) module.exports = content.locals;
-
-if(false) {}
-
-/***/ }),
-
-/***/ "C3hE":
-/***/ (function(module, exports, __webpack_require__) {
-
-
-var content = __webpack_require__("e4Hf");
-
-if(typeof content === 'string') content = [[module.i, content, '']];
-
-var transform;
-var insertInto;
-
-
-
 var options = {"hmr":true}
 
 options.transform = transform
@@ -943,17 +929,6 @@ var ExportDoneModal = function ExportDoneModal(_ref) {
 var _default = ExportDoneModal;
 exports.default = _default;
 
-/***/ }),
-
-/***/ "Jlsz":
-/***/ (function(module, exports, __webpack_require__) {
-
-exports = module.exports = __webpack_require__("DjJv")(false);
-// Module
-exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.matomo-opt-out-container {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 0 1.5rem;\n  margin: 2rem 0;\n}\n.matomo-opt-out-container .matomo-opt-out {\n  margin: 0 auto;\n  max-width: 45.75rem;\n  width: 100%;\n}\n.matomo-opt-out-container .matomo-opt-out .opt-out-header {\n  color: #e0e0e0;\n}\n.matomo-opt-out-container .matomo-opt-out * {\n  font-family: Lato, sans-serif;\n}", ""]);
-
-
-
 /***/ }),
 
 /***/ "KQ7M":
@@ -965,32 +940,6 @@ exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE
 
 
 
-/***/ }),
-
-/***/ "MmZq":
-/***/ (function(module, exports, __webpack_require__) {
-
-
-var content = __webpack_require__("7M/C");
-
-if(typeof content === 'string') content = [[module.i, content, '']];
-
-var transform;
-var insertInto;
-
-
-
-var options = {"hmr":true}
-
-options.transform = transform
-options.insertInto = undefined;
-
-var update = __webpack_require__("HkU0")(content, options);
-
-if(content.locals) module.exports = content.locals;
-
-if(false) {}
-
 /***/ }),
 
 /***/ "QgM0":
@@ -1100,9 +1049,7 @@ var ReportOptions = function ReportOptions() {
       }));
       return _getMaxLoadData.apply(this, arguments);
     }
-    if (subscribed) {
-      getMaxLoadData();
-    }
+    subscribed && getMaxLoadData();
     return function () {
       subscribed = false;
     };
@@ -1228,7 +1175,7 @@ if(false) {}
 
 /***/ }),
 
-/***/ "S8m7":
+/***/ "Shzl":
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -1239,38 +1186,30 @@ Object.defineProperty(exports, "__esModule", {
   value: true
 });
 exports.default = void 0;
-var _Link = _interopRequireDefault(__webpack_require__("FFKy"));
 var _accessibility = _interopRequireDefault(__webpack_require__("YMCP"));
+var _StyledCard = _interopRequireDefault(__webpack_require__("y8/m"));
 var _StyledIcon = _interopRequireDefault(__webpack_require__("VP3k"));
 var _I18n = __webpack_require__("nUfk");
 var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
-__webpack_require__("C3hE");
-var Accessibility = function Accessibility() {
+__webpack_require__("5mrP");
+var AccessibilityLink = function AccessibilityLink() {
   var _useI18n = (0, _I18n.useI18n)(),
     t = _useI18n.t;
+  var goToAccessibility = function goToAccessibility() {
+    window.open('https://ecolyo.com/accessibilite.html');
+  };
   return /*#__PURE__*/_react.default.createElement("div", {
-    className: "gcu-link-root"
-  }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "gcu-link-content"
-  }, /*#__PURE__*/_react.default.createElement(_Link.default, {
-    className: "gcu-link-card-link",
-    href: "https://ecolyo.com/accessibilite.html",
-    target: "_blank"
-  }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "card"
+    className: "styled-card-root"
   }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "gcu-link-card"
-  }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "gcu-link-card-content"
+    className: "styled-card-content"
+  }, /*#__PURE__*/_react.default.createElement(_StyledCard.default, {
+    onClick: goToAccessibility
   }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
-    className: "gcu-link-card-content-icon",
     icon: _accessibility.default,
-    size: 42
-  }), /*#__PURE__*/_react.default.createElement("div", {
-    className: "gcu-link-card-content-title"
-  }, t('common.title_accessibility'))))))));
+    size: 38
+  }), t('common.title_accessibility'))));
 };
-var _default = Accessibility;
+var _default = AccessibilityLink;
 exports.default = _default;
 
 /***/ }),
@@ -1352,39 +1291,32 @@ Object.defineProperty(exports, "__esModule", {
   value: true
 });
 exports.default = void 0;
-var _Link = _interopRequireDefault(__webpack_require__("FFKy"));
 var _legalNotice = _interopRequireDefault(__webpack_require__("li/p"));
+var _StyledCard = _interopRequireDefault(__webpack_require__("y8/m"));
 var _StyledIcon = _interopRequireDefault(__webpack_require__("VP3k"));
 var _I18n = __webpack_require__("nUfk");
 var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
 var _reactRouterDom = __webpack_require__("Iyno");
-__webpack_require__("x7TP");
+__webpack_require__("5mrP");
 var LegalNoticeLink = function LegalNoticeLink() {
   var _useI18n = (0, _I18n.useI18n)(),
     t = _useI18n.t;
+  var navigate = (0, _reactRouterDom.useNavigate)();
+  var goToLegalNotice = function goToLegalNotice() {
+    navigate("/options/legalnotice");
+  };
   return /*#__PURE__*/_react.default.createElement("div", {
-    className: "legal-notice-root"
-  }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "legal-notice-content"
-  }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "legal-notice-header text-16-normal-uppercase"
-  }, t('legal.title_legal')), /*#__PURE__*/_react.default.createElement(_Link.default, {
-    className: "legal-notice-card-link",
-    component: _reactRouterDom.Link,
-    to: "/options/legalnotice"
-  }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "card"
+    className: "styled-card-root"
   }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "legal-notice-card"
+    className: "styled-card-content"
   }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "legal-notice-card-content"
+    className: "styled-card-header text-16-normal-uppercase"
+  }, t('legal.title_legal')), /*#__PURE__*/_react.default.createElement(_StyledCard.default, {
+    onClick: goToLegalNotice
   }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
-    className: "legal-notice-card-content-icon",
     icon: _legalNotice.default,
-    size: 42
-  }), /*#__PURE__*/_react.default.createElement("div", {
-    className: "legal-notice-card-content-title"
-  }, t('legal.read_legal'))))))));
+    size: 38
+  }), t('legal.read_legal'))));
 };
 var _default = LegalNoticeLink;
 exports.default = _default;
@@ -1411,17 +1343,6 @@ exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE
 
 
 
-/***/ }),
-
-/***/ "aJIj":
-/***/ (function(module, exports, __webpack_require__) {
-
-exports = module.exports = __webpack_require__("DjJv")(false);
-// Module
-exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.legal-notice-root {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  color: #ffffff;\n  padding: 0 1.5rem;\n  margin-top: 2rem;\n}\n.legal-notice-root .legal-notice-header {\n  color: #e0e0e0;\n  margin-bottom: 1rem;\n}\n.legal-notice-root .legal-notice-content {\n  max-width: 45.75rem;\n  width: 100%;\n}\n@media only screen and (max-width : 768px) {\n  .legal-notice-root .legal-notice-content {\n    width: 100%;\n  }\n}\n\n.legal-notice-card-link {\n  color: black;\n}\n\n.legal-notice-card {\n  display: flex;\n  flex-direction: row;\n  margin: -0.75rem 0;\n  width: 100%;\n}\n@media only screen and (max-width : 768px) {\n  .legal-notice-card {\n    width: 100%;\n  }\n}\n.legal-notice-card .legal-notice-card-content {\n  display: flex;\n  flex-direction: row;\n}\n.legal-notice-card .legal-notice-card-content .legal-notice-card-content-icon {\n  margin: 0.5rem 0;\n}\n.legal-notice-card .legal-notice-card-content .legal-notice-card-content-title {\n  margin: 0 1rem;\n  align-self: center;\n  color: white;\n}", ""]);
-
-
-
 /***/ }),
 
 /***/ "dDs/":
@@ -1542,9 +1463,7 @@ var ExportData = function ExportData() {
         return _ref.apply(this, arguments);
       };
     }();
-    if (subscribed) {
-      getExportableFluids();
-    }
+    subscribed && getExportableFluids();
     return function () {
       subscribed = false;
     };
@@ -1552,12 +1471,13 @@ var ExportData = function ExportData() {
   var fluidCheckbox = function fluidCheckbox() {
     return exportableFluids.map(function (fluidType) {
       return /*#__PURE__*/_react.default.createElement("label", {
+        htmlFor: "export-".concat(fluidType),
         key: fluidType
       }, /*#__PURE__*/_react.default.createElement("input", {
+        id: "export-".concat(fluidType),
         type: "checkbox",
         className: "inputCheckbox",
         value: fluidType,
-        name: t("FLUID.".concat(_enums.FluidType[fluidType], ".LABEL")),
         onChange: function onChange() {
           return handleChange(fluidType);
         },
@@ -1646,17 +1566,6 @@ var ExportData = function ExportData() {
 var _default = ExportData;
 exports.default = _default;
 
-/***/ }),
-
-/***/ "e4Hf":
-/***/ (function(module, exports, __webpack_require__) {
-
-exports = module.exports = __webpack_require__("DjJv")(false);
-// Module
-exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.gcu-link-root {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  color: #ffffff;\n  padding: 0 1.5rem 0;\n  margin-top: 0.5rem;\n}\n.gcu-link-root .gcu-link-header {\n  margin-bottom: 1.25rem;\n}\n.gcu-link-root .gcu-link-content {\n  max-width: 45.75rem;\n  width: 100%;\n}\n.gcu-link-root .gcu-link-content p {\n  color: #ffffff;\n}\n.gcu-link-root .gcu-link-content a {\n  color: #ffffff;\n  text-decoration: none;\n}\n.gcu-link-root .gcu-link-content li {\n  margin: 1rem 0;\n}\n.gcu-link-root .gcu-link-content h2 {\n  color: #ffffff;\n}\n.gcu-link-root .gcu-link-content h3 {\n  color: #ffffff;\n  margin: 2.5rem 0 1rem;\n}\n.gcu-link-root .gcu-link-content .ln-contact {\n  color: #e3b82a;\n}\n\n.gcu-link-card-link {\n  color: black;\n}\n\n.gcu-link-card {\n  display: flex;\n  flex-direction: row;\n  margin: -0.75rem 0;\n  width: 100%;\n}\n.gcu-link-card .gcu-link-card-content {\n  display: flex;\n  flex-direction: row;\n}\n.gcu-link-card .gcu-link-card-content .gcu-link-card-content-icon {\n  margin: 0.5rem 0;\n}\n.gcu-link-card .gcu-link-card-content .gcu-link-card-content-title {\n  margin: 0 1rem;\n  align-self: center;\n}", ""]);
-
-
-
 /***/ }),
 
 /***/ "eLac":
@@ -1690,7 +1599,7 @@ if(false) {}
 
 exports = module.exports = __webpack_require__("DjJv")(false);
 // Module
-exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ndiv.expansion-panel-root,\ndiv.expansion-panel-root.Mui-expanded:last-child {\n  margin: 0.2rem 0;\n}\n\n.export-option-root {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  margin-top: 0.5rem;\n  padding: 0 1.5rem;\n}\n.export-option-root .export-option-content {\n  max-width: 45.75rem;\n  width: 100%;\n}\n.export-option-root .export-option-content .MuiAccordionSummary-content {\n  margin: 0;\n}\n.export-option-root .export-option-content .MuiIconButton-edgeEnd {\n  margin: 0;\n}\n.export-option-root .export-option-content .accordion-title {\n  color: #ffffff;\n}\n.export-option-root .export-option-content .expansion-panel-summary {\n  padding: 0 0.25rem 0 1rem;\n}\n.export-option-root .export-option-content .expansion-panel-summary .expansion-panel-content {\n  gap: 1rem;\n}\n.export-option-root .export-option-content .expansion-panel-details {\n  flex-direction: column;\n  gap: 1rem;\n}\n.export-option-root .export-option-content .expansion-panel-details .grey {\n  color: #a0a0a0;\n}\n.export-option-root .export-option-content .expansion-panel-details label {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  cursor: pointer;\n}", ""]);
+exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ndiv.expansion-panel-root,\ndiv.expansion-panel-root.Mui-expanded:last-child {\n  margin: 0.2rem 0;\n}\n\n.export-option-root {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 0 1.5rem;\n}\n.export-option-root .export-option-content {\n  max-width: 45.75rem;\n  width: 100%;\n}\n.export-option-root .export-option-content .MuiAccordionSummary-content {\n  margin: 0;\n}\n.export-option-root .export-option-content .MuiIconButton-edgeEnd {\n  margin: 0;\n}\n.export-option-root .export-option-content .accordion-title {\n  color: #ffffff;\n}\n.export-option-root .export-option-content .expansion-panel-summary {\n  padding: 0 0.25rem 0 1rem;\n}\n.export-option-root .export-option-content .expansion-panel-summary .expansion-panel-content {\n  gap: 1rem;\n}\n.export-option-root .export-option-content .expansion-panel-details {\n  flex-direction: column;\n  gap: 1rem;\n}\n.export-option-root .export-option-content .expansion-panel-details .grey {\n  color: #a0a0a0;\n}\n.export-option-root .export-option-content .expansion-panel-details label {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  cursor: pointer;\n}", ""]);
 
 
 
@@ -1777,37 +1686,30 @@ Object.defineProperty(exports, "__esModule", {
   value: true
 });
 exports.default = void 0;
-var _Link = _interopRequireDefault(__webpack_require__("FFKy"));
 var _gcu = _interopRequireDefault(__webpack_require__("YaId"));
+var _StyledCard = _interopRequireDefault(__webpack_require__("y8/m"));
 var _StyledIcon = _interopRequireDefault(__webpack_require__("VP3k"));
 var _I18n = __webpack_require__("nUfk");
 var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
 var _reactRouterDom = __webpack_require__("Iyno");
-__webpack_require__("C3hE");
+__webpack_require__("5mrP");
 var GCULink = function GCULink() {
   var _useI18n = (0, _I18n.useI18n)(),
     t = _useI18n.t;
+  var navigate = (0, _reactRouterDom.useNavigate)();
+  var goToGCU = function goToGCU() {
+    navigate("/options/gcu");
+  };
   return /*#__PURE__*/_react.default.createElement("div", {
-    className: "gcu-link-root"
-  }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "gcu-link-content"
-  }, /*#__PURE__*/_react.default.createElement(_Link.default, {
-    className: "gcu-link-card-link",
-    component: _reactRouterDom.Link,
-    to: "/options/gcu"
-  }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "card"
+    className: "styled-card-root"
   }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "gcu-link-card"
-  }, /*#__PURE__*/_react.default.createElement("div", {
-    className: "gcu-link-card-content"
+    className: "styled-card-content"
+  }, /*#__PURE__*/_react.default.createElement(_StyledCard.default, {
+    onClick: goToGCU
   }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
-    className: "gcu-link-card-content-icon",
     icon: _gcu.default,
-    size: 42
-  }), /*#__PURE__*/_react.default.createElement("div", {
-    className: "gcu-link-card-content-title"
-  }, t('common.title_gcu'))))))));
+    size: 38
+  }), t('common.title_gcu'))));
 };
 var _default = GCULink;
 exports.default = _default;
@@ -1842,15 +1744,19 @@ var _CozyBar = _interopRequireDefault(__webpack_require__("6pCu"));
 var _Header = _interopRequireDefault(__webpack_require__("0soq"));
 var _I18n = __webpack_require__("nUfk");
 var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
-var _Accessibility = _interopRequireDefault(__webpack_require__("S8m7"));
+var _AccessibilityLink = _interopRequireDefault(__webpack_require__("Shzl"));
 var _ExportData = _interopRequireDefault(__webpack_require__("dhGa"));
 var _GCULink = _interopRequireDefault(__webpack_require__("peiT"));
 var _HelpLink = _interopRequireDefault(__webpack_require__("9KuK"));
 var _LegalNoticeLink = _interopRequireDefault(__webpack_require__("Z4DH"));
 var _MatomoOptOut = _interopRequireDefault(__webpack_require__("2R85"));
+__webpack_require__("5mrP");
 var _ProfileTypeOptions = _interopRequireDefault(__webpack_require__("FN7j"));
 var _ReportOptions = _interopRequireDefault(__webpack_require__("QgM0"));
 var _Version = _interopRequireDefault(__webpack_require__("v6Nj"));
+/**
+ * http://ecolyo.cozy.tools:8080/#/options
+ */
 var OptionsView = function OptionsView() {
   var _useI18n = (0, _I18n.useI18n)(),
     t = _useI18n.t;
@@ -1858,7 +1764,11 @@ var OptionsView = function OptionsView() {
     titleKey: "common.title_options"
   }), /*#__PURE__*/_react.default.createElement(_Header.default, {
     desktopTitleKey: "common.title_options"
-  }), /*#__PURE__*/_react.default.createElement(_Content.default, null, /*#__PURE__*/_react.default.createElement(_ProfileTypeOptions.default, null), /*#__PURE__*/_react.default.createElement(_ExportData.default, null), /*#__PURE__*/_react.default.createElement(_ReportOptions.default, null), /*#__PURE__*/_react.default.createElement(_HelpLink.default, null), /*#__PURE__*/_react.default.createElement(_LegalNoticeLink.default, null), /*#__PURE__*/_react.default.createElement(_GCULink.default, null), /*#__PURE__*/_react.default.createElement(_Accessibility.default, null), /*#__PURE__*/_react.default.createElement(_MatomoOptOut.default, null), /*#__PURE__*/_react.default.createElement("div", {
+  }), /*#__PURE__*/_react.default.createElement(_Content.default, null, /*#__PURE__*/_react.default.createElement("div", {
+    className: "options-root"
+  }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_ProfileTypeOptions.default, null), /*#__PURE__*/_react.default.createElement(_ExportData.default, null)), /*#__PURE__*/_react.default.createElement(_ReportOptions.default, null), /*#__PURE__*/_react.default.createElement(_HelpLink.default, null), /*#__PURE__*/_react.default.createElement("div", {
+    className: "info-links"
+  }, /*#__PURE__*/_react.default.createElement(_LegalNoticeLink.default, null), /*#__PURE__*/_react.default.createElement(_GCULink.default, null), /*#__PURE__*/_react.default.createElement(_AccessibilityLink.default, null)), /*#__PURE__*/_react.default.createElement(_MatomoOptOut.default, null)), /*#__PURE__*/_react.default.createElement("div", {
     className: "parameters-logos"
   }, /*#__PURE__*/_react.default.createElement("img", {
     src: _logos_partenaires.default,
@@ -1921,32 +1831,6 @@ exports.default = _default;
 
 /***/ }),
 
-/***/ "wGz8":
-/***/ (function(module, exports, __webpack_require__) {
-
-
-var content = __webpack_require__("Jlsz");
-
-if(typeof content === 'string') content = [[module.i, content, '']];
-
-var transform;
-var insertInto;
-
-
-
-var options = {"hmr":true}
-
-options.transform = transform
-options.insertInto = undefined;
-
-var update = __webpack_require__("HkU0")(content, options);
-
-if(content.locals) module.exports = content.locals;
-
-if(false) {}
-
-/***/ }),
-
 /***/ "wb2P":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -1956,32 +1840,6 @@ exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE
 
 
 
-/***/ }),
-
-/***/ "x7TP":
-/***/ (function(module, exports, __webpack_require__) {
-
-
-var content = __webpack_require__("aJIj");
-
-if(typeof content === 'string') content = [[module.i, content, '']];
-
-var transform;
-var insertInto;
-
-
-
-var options = {"hmr":true}
-
-options.transform = transform
-options.insertInto = undefined;
-
-var update = __webpack_require__("HkU0")(content, options);
-
-if(content.locals) module.exports = content.locals;
-
-if(false) {}
-
 /***/ }),
 
 /***/ "xmwE":
diff --git a/3/ecolyo.95b2454562935abe3938.js b/4/ecolyo.695280492ae6033997a0.js
similarity index 98%
rename from 3/ecolyo.95b2454562935abe3938.js
rename to 4/ecolyo.695280492ae6033997a0.js
index 0ba5f8e4ae4c7905e60905b10196f25354c3487a..beee982a679e5cc0f3221e948fe711b14e7c199c 100644
--- a/3/ecolyo.95b2454562935abe3938.js
+++ b/4/ecolyo.695280492ae6033997a0.js
@@ -1,4 +1,4 @@
-(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[3],{
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[4],{
 
 /***/ "//i3":
 /***/ (function(module, exports, __webpack_require__) {
@@ -119,23 +119,17 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
                 return cs.checkDoctypeEntries(_enums.FluidType.ELECTRICITY, _enums.TimeStep.HALF_AN_HOUR);
               case 3:
                 isHalfHourLoadActivated = _context.sent;
-                if (subscribed) {
-                  _context.next = 6;
-                  break;
-                }
-                return _context.abrupt("return");
-              case 6:
                 if (!isHalfHourLoadActivated) {
-                  _context.next = 13;
+                  _context.next = 11;
                   break;
                 }
                 setIsHalfHourActivated(true);
                 aggregatedDate = analysisMonth.minus({
                   month: 1
                 });
-                _context.next = 11;
+                _context.next = 9;
                 return emas.getEnedisMonthlyAnalysisByDate(aggregatedDate.year, aggregatedDate.month);
-              case 11:
+              case 9:
                 data = _context.sent;
                 if (data !== null && data !== void 0 && data.length) {
                   aggregatedData = emas.aggregateValuesToDataLoad(data[0]);
@@ -146,9 +140,9 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
                     setFacturePercentage(percentage);
                   }
                 }
-              case 13:
+              case 11:
                 setIsLoading(false);
-              case 14:
+              case 12:
               case "end":
                 return _context.stop();
             }
@@ -157,7 +151,7 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
       }));
       return _fetchEnedisAnalysisData.apply(this, arguments);
     }
-    fetchEnedisAnalysisData();
+    subscribed && fetchEnedisAnalysisData();
     return function () {
       subscribed = false;
     };
@@ -181,7 +175,7 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
                 }));
               case 2:
                 price = _context2.sent;
-                if (subscribed && price) {
+                if (price) {
                   setElecPrice(price);
                 }
               case 4:
@@ -193,7 +187,7 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
       }));
       return _getAllLastPrices.apply(this, arguments);
     }
-    getAllLastPrices();
+    subscribed && getAllLastPrices();
     return function () {
       subscribed = false;
     };
@@ -205,23 +199,19 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
     }
     function _getOffPeakHours() {
       _getOffPeakHours = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
-        var _offPeakHours;
+        var offPeakHours;
         return _regenerator.default.wrap(function _callee3$(_context3) {
           while (1) {
             switch (_context3.prev = _context3.next) {
               case 0:
-                if (!subscribed) {
-                  _context3.next = 5;
-                  break;
-                }
-                _context3.next = 3;
+                _context3.next = 2;
                 return emas.getOffPeakHours();
-              case 3:
-                _offPeakHours = _context3.sent;
-                if (_offPeakHours) {
-                  setOffPeakHours(_offPeakHours);
+              case 2:
+                offPeakHours = _context3.sent;
+                if (offPeakHours) {
+                  setOffPeakHours(offPeakHours);
                 }
-              case 5:
+              case 4:
               case "end":
                 return _context3.stop();
             }
@@ -230,7 +220,7 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
       }));
       return _getOffPeakHours.apply(this, arguments);
     }
-    getOffPeakHours();
+    subscribed && getOffPeakHours();
     return function () {
       subscribed = false;
     };
@@ -560,7 +550,7 @@ exports.default = _default;
 
 exports = module.exports = __webpack_require__("DjJv")(false);
 // Module
-exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.analysis-graph {\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n}\n.analysis-graph .consumption-title {\n  display: flex;\n  justify-content: space-between;\n}\n.analysis-graph .consumption-title .user-title,\n.analysis-graph .consumption-title .average-title {\n  flex-basis: 45%;\n  line-height: 3rem;\n}\n.analysis-graph .consumption-title .user-title {\n  line-height: 3rem;\n  text-align: right;\n  color: #e3b82a;\n}\n.analysis-graph .consumption-title .average-title {\n  color: #bfcce4;\n}\n.analysis-graph .consumption-sep {\n  border: 1px solid #7b7b7b;\n  margin: 1rem 0;\n}\n.analysis-graph div.expansion-panel-root {\n  border: solid 2px #bfcce4;\n  color: #bfcce4;\n  margin-block: 0 !important;\n  box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.5490196078);\n}\n.analysis-graph .accordion-title {\n  font-weight: bold;\n}\n.analysis-graph .accordion-desc {\n  color: #e0e0e0;\n}\n.analysis-graph div.expansion-panel-summary {\n  padding: 0 1rem;\n}\n.analysis-graph .loader-container {\n  min-height: 350px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  margin: auto;\n}\n.analysis-graph .accordion-icon {\n  color: #bfcce4;\n}\n\n.no-profile {\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  gap: 1rem;\n}\n.no-profile div {\n  text-align: center;\n  color: #ffffff;\n}\n.no-profile button {\n  max-width: 320px;\n}", ""]);
+exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.analysis-graph {\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n}\n.analysis-graph .consumption-title {\n  display: flex;\n  justify-content: space-between;\n}\n.analysis-graph .consumption-title .user-title,\n.analysis-graph .consumption-title .average-title {\n  flex-basis: 45%;\n  line-height: 3rem;\n}\n.analysis-graph .consumption-title .user-title {\n  line-height: 3rem;\n  text-align: right;\n  color: #e3b82a;\n}\n.analysis-graph .consumption-title .average-title {\n  color: #bfcce4;\n}\n.analysis-graph .consumption-sep {\n  border: 1px solid #7b7b7b;\n  margin: 1rem 0;\n}\n.analysis-graph div.expansion-panel-root {\n  border: solid 1px #bfcce4;\n  color: #bfcce4;\n  margin-block: 0 !important;\n  box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.5490196078);\n}\n.analysis-graph .accordion-title {\n  font-weight: bold;\n}\n.analysis-graph .accordion-desc {\n  color: #e0e0e0;\n}\n.analysis-graph div.expansion-panel-summary {\n  padding: 0 1rem;\n}\n.analysis-graph .loader-container {\n  min-height: 350px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  margin: auto;\n}\n.analysis-graph .accordion-icon {\n  color: #bfcce4;\n}\n\n.no-profile {\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  gap: 1rem;\n}\n.no-profile div {\n  text-align: center;\n  color: #ffffff;\n}\n.no-profile button {\n  max-width: 320px;\n}", ""]);
 
 
 
@@ -669,6 +659,28 @@ exports.default = _default;
 
 /***/ }),
 
+/***/ "DQPj":
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("lomp");
+/* harmony import */ var _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("nOWK");
+/* harmony import */ var _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1__);
+
+
+var symbol = new _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0___default.a({
+  "id": "euro-gold_ea58ac76c389424882ad9d6c9bce649c",
+  "use": "euro-gold_ea58ac76c389424882ad9d6c9bce649c-usage",
+  "viewBox": "0 0 22 22",
+  "content": "<symbol viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" id=\"euro-gold_ea58ac76c389424882ad9d6c9bce649c\">\n<circle cx=\"11\" cy=\"11\" r=\"10.5\" fill=\"#121212\" stroke=\"#E3B82A\" />\n<path d=\"M6 9.57631H7.064C7.18667 8.92565 7.38133 8.33898 7.648 7.81631C7.91467 7.28831 8.24 6.84031 8.624 6.47231C9.008 6.10431 9.44267 5.82165 9.928 5.62431C10.4133 5.42165 10.9413 5.32031 11.512 5.32031C12.2533 5.32031 12.888 5.46431 13.416 5.75231C13.944 6.03498 14.3867 6.41898 14.744 6.90431L14.048 7.65631C13.9947 7.71498 13.9387 7.76831 13.88 7.81631C13.8213 7.85898 13.7387 7.88031 13.632 7.88031C13.5573 7.88031 13.488 7.85898 13.424 7.81631C13.3653 7.77365 13.2987 7.72031 13.224 7.65631C13.1493 7.59231 13.0667 7.52298 12.976 7.44831C12.8853 7.37365 12.776 7.30431 12.648 7.24031C12.5253 7.17631 12.3787 7.12298 12.208 7.08031C12.0373 7.03765 11.8347 7.01631 11.6 7.01631C10.9707 7.01631 10.44 7.23231 10.008 7.66431C9.576 8.09631 9.27467 8.73365 9.104 9.57631H13.12V10.1843C13.12 10.307 13.0693 10.4216 12.968 10.5283C12.872 10.6296 12.7387 10.6803 12.568 10.6803H8.968C8.96267 10.771 8.96 10.8616 8.96 10.9523C8.96 11.0376 8.96 11.1256 8.96 11.2163C8.96 11.2803 8.96 11.3443 8.96 11.4083C8.96 11.4723 8.96267 11.5336 8.968 11.5923H12.36V12.1923C12.36 12.315 12.3093 12.4296 12.208 12.5363C12.1067 12.6376 11.9733 12.6883 11.808 12.6883H9.064C9.21333 13.6056 9.49867 14.291 9.92 14.7443C10.3467 15.1923 10.8747 15.4163 11.504 15.4163C11.888 15.4163 12.1947 15.3656 12.424 15.2643C12.6587 15.1576 12.848 15.0403 12.992 14.9123C13.1413 14.7843 13.264 14.6696 13.36 14.5683C13.4613 14.4616 13.5707 14.4083 13.688 14.4083C13.7467 14.4083 13.7973 14.419 13.84 14.4403C13.8827 14.4563 13.928 14.491 13.976 14.5443L14.832 15.3283C14.4587 15.9043 13.984 16.347 13.408 16.6563C12.832 16.9603 12.1627 17.1123 11.4 17.1123C10.7707 17.1123 10.2053 17.0083 9.704 16.8003C9.208 16.587 8.776 16.2883 8.408 15.9043C8.04 15.5203 7.73867 15.0563 7.504 14.5123C7.27467 13.9683 7.112 13.3603 7.016 12.6883H6V11.5923H6.928C6.92267 11.5336 6.92 11.4723 6.92 11.4083C6.92 11.3443 6.92 11.2803 6.92 11.2163C6.92 11.1256 6.92 11.0376 6.92 10.9523C6.92 10.8616 6.92267 10.771 6.928 10.6803H6V9.57631Z\" fill=\"#E3B82A\" />\n</symbol>"
+});
+var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default.a.add(symbol);
+/* harmony default export */ __webpack_exports__["default"] = (symbol);
+
+/***/ }),
+
 /***/ "DQr1":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -1056,13 +1068,9 @@ var Comparison = function Comparison(_ref) {
           while (1) {
             switch (_context.prev = _context.next) {
               case 0:
-                if (!subscribed) {
-                  _context.next = 6;
-                  break;
-                }
-                _context.next = 3;
+                _context.next = 2;
                 return consumptionService.getPerformanceIndicators(periods.monthPeriod, _enums.TimeStep.MONTH, fluidsWithData, periods.previousYearPeriod);
-              case 3:
+              case 2:
                 fetchedYearIndicators = _context.sent;
                 if (fetchedYearIndicators) {
                   setYearPerformanceIndicators(fetchedYearIndicators);
@@ -1073,7 +1081,7 @@ var Comparison = function Comparison(_ref) {
                   }
                 }
                 setIsLoading(false);
-              case 6:
+              case 5:
               case "end":
                 return _context.stop();
             }
@@ -1082,7 +1090,7 @@ var Comparison = function Comparison(_ref) {
       }));
       return _populateData.apply(this, arguments);
     }
-    populateData();
+    subscribed && populateData();
     return function () {
       subscribed = false;
     };
@@ -1329,9 +1337,7 @@ var TotalAnalysisChart = function TotalAnalysisChart(_ref) {
       }));
       return _getTotalData.apply(this, arguments);
     }
-    if (subscribed) {
-      getTotalData();
-    }
+    subscribed && getTotalData();
     return function () {
       subscribed = false;
     };
@@ -1422,7 +1428,7 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.default = void 0;
 var _defineProperty2 = _interopRequireDefault(__webpack_require__("J58c"));
-var _euroIcon = _interopRequireDefault(__webpack_require__("tIXY"));
+var _euroGold = _interopRequireDefault(__webpack_require__("DQPj"));
 var _classnames = _interopRequireDefault(__webpack_require__("uRLs"));
 var _StyledIcon = _interopRequireDefault(__webpack_require__("VP3k"));
 var _I18n = __webpack_require__("nUfk");
@@ -1503,7 +1509,7 @@ var ProfileComparatorRow = function ProfileComparatorRow(_ref) {
   }))), /*#__PURE__*/_react.default.createElement("div", {
     className: "icon-container"
   }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
-    icon: isMulti ? _euroIcon.default : (0, _picto.getPicto)(fluidType, true),
+    icon: isMulti ? _euroGold.default : (0, _picto.getPicto)(fluidType, true),
     size: 22,
     className: noData ? 'noData' : ''
   })), /*#__PURE__*/_react.default.createElement("div", {
@@ -1660,9 +1666,7 @@ var MaxConsumptionCard = function MaxConsumptionCard(_ref) {
       }));
       return _getMaxLoadData.apply(this, arguments);
     }
-    if (subscribed) {
-      getMaxLoadData();
-    }
+    subscribed && getMaxLoadData();
     return function () {
       subscribed = false;
     };
@@ -2027,6 +2031,9 @@ var _date = __webpack_require__("0bnf");
 __webpack_require__("I1or");
 function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
 function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
+/**
+ * http://ecolyo.cozy.tools:8080/#/analysis
+ */
 var AnalysisView = function AnalysisView() {
   var client = (0, _cozyClient.useClient)();
   var _useAppSelector = (0, _hooks.useAppSelector)(function (state) {
@@ -2143,6 +2150,7 @@ var _react = _interopRequireWildcard(__webpack_require__("ivGQ"));
 var _consumption = _interopRequireDefault(__webpack_require__("zET3"));
 var _performanceIndicator = _interopRequireDefault(__webpack_require__("1il/"));
 var _hooks = __webpack_require__("6FOS");
+var _utils = __webpack_require__("RgLR");
 var _Comparison = _interopRequireDefault(__webpack_require__("QpDQ"));
 var _ElecHalfHourMonthlyAnalysis = _interopRequireDefault(__webpack_require__("//i3"));
 var _IncompleteDataWarning = _interopRequireDefault(__webpack_require__("eyR8"));
@@ -2203,7 +2211,7 @@ var MonthlyAnalysis = function MonthlyAnalysis(_ref) {
     var subscribed = true;
     var populateData = /*#__PURE__*/function () {
       var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
-        var timePeriod, comparisonTimePeriod, resultFluids, fetchedIncompleteDataFluids, fetchedPerformanceIndicators;
+        var timePeriod, comparisonTimePeriod, _yield$Promise$all, _yield$Promise$all2, resultFluids, fetchedIncompleteDataFluids, fetchedPerformanceIndicators;
         return _regenerator.default.wrap(function _callee$(_context) {
           while (1) {
             switch (_context.prev = _context.next) {
@@ -2226,13 +2234,12 @@ var MonthlyAnalysis = function MonthlyAnalysis(_ref) {
                   }).endOf('month')
                 };
                 _context.next = 5;
-                return consumptionService.getFluidsWithDataForTimePeriod([_enums.FluidType.ELECTRICITY, _enums.FluidType.WATER, _enums.FluidType.GAS], timePeriod);
+                return Promise.all([consumptionService.getFluidsWithDataForTimePeriod(_utils.allFluids, timePeriod), consumptionService.getFluidsWithIncompleteData(_utils.allFluids, timePeriod.startDate)]);
               case 5:
-                resultFluids = _context.sent;
-                _context.next = 8;
-                return consumptionService.getFluidsWithIncompleteData([_enums.FluidType.ELECTRICITY, _enums.FluidType.WATER, _enums.FluidType.GAS], timePeriod.startDate);
-              case 8:
-                fetchedIncompleteDataFluids = _context.sent;
+                _yield$Promise$all = _context.sent;
+                _yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 2);
+                resultFluids = _yield$Promise$all2[0];
+                fetchedIncompleteDataFluids = _yield$Promise$all2[1];
                 setIncompleteDataFluids(fetchedIncompleteDataFluids);
                 _context.next = 12;
                 return consumptionService.getPerformanceIndicators(timePeriod, _enums.TimeStep.MONTH, resultFluids, comparisonTimePeriod);
@@ -2259,9 +2266,7 @@ var MonthlyAnalysis = function MonthlyAnalysis(_ref) {
         return _ref2.apply(this, arguments);
       };
     }();
-    if (subscribed) {
-      populateData();
-    }
+    subscribed && populateData();
     return function () {
       saveLastScrollPosition();
       subscribed = false;
@@ -2666,7 +2671,7 @@ var ProfileComparator = function ProfileComparator(_ref) {
               case 4:
                 profileType = _context.sent;
                 if (!(profileType !== null)) {
-                  _context.next = 11;
+                  _context.next = 13;
                   break;
                 }
                 profileTypeService = new _profileType.default(profileType, client, analysisMonth.minus({
@@ -2676,14 +2681,12 @@ var ProfileComparator = function ProfileComparator(_ref) {
                 return profileTypeService.getMonthlyForecast(analysisDate.year, analysisDate.month);
               case 9:
                 monthlyForecast = _context.sent;
-                if (subscribed) {
-                  setForecast(monthlyForecast);
-                  if (monthlyForecast) {
-                    getTotalValueWithConnectedFluids(monthlyForecast);
-                  }
-                  setIsLoading(false);
+                setForecast(monthlyForecast);
+                if (monthlyForecast) {
+                  getTotalValueWithConnectedFluids(monthlyForecast);
                 }
-              case 11:
+                setIsLoading(false);
+              case 13:
               case "end":
                 return _context.stop();
             }
@@ -2692,7 +2695,7 @@ var ProfileComparator = function ProfileComparator(_ref) {
       }));
       return _loadAverageConsumption.apply(this, arguments);
     }
-    loadAverageConsumption();
+    subscribed && loadAverageConsumption();
     return function () {
       subscribed = false;
     };
@@ -2702,7 +2705,6 @@ var ProfileComparator = function ProfileComparator(_ref) {
   }, /*#__PURE__*/_react.default.createElement("div", {
     className: "text-16-normal"
   }, t('analysis.approximative_description')), /*#__PURE__*/_react.default.createElement(_Button.default, {
-    "aria-label": t('analysis.accessibility.button_go_to_profil'),
     onClick: function onClick() {
       return navigate('/profileType');
     },
@@ -2918,28 +2920,6 @@ exports.default = _default;
 
 /***/ }),
 
-/***/ "tIXY":
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("lomp");
-/* harmony import */ var _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("nOWK");
-/* harmony import */ var _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1__);
-
-
-var symbol = new _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0___default.a({
-  "id": "euro-icon_ea58ac76c389424882ad9d6c9bce649c",
-  "use": "euro-icon_ea58ac76c389424882ad9d6c9bce649c-usage",
-  "viewBox": "0 0 22 22",
-  "content": "<symbol viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" id=\"euro-icon_ea58ac76c389424882ad9d6c9bce649c\">\n<circle cx=\"11\" cy=\"11\" r=\"10.5\" fill=\"#121212\" stroke=\"#E3B82A\" />\n<path d=\"M6 9.57631H7.064C7.18667 8.92565 7.38133 8.33898 7.648 7.81631C7.91467 7.28831 8.24 6.84031 8.624 6.47231C9.008 6.10431 9.44267 5.82165 9.928 5.62431C10.4133 5.42165 10.9413 5.32031 11.512 5.32031C12.2533 5.32031 12.888 5.46431 13.416 5.75231C13.944 6.03498 14.3867 6.41898 14.744 6.90431L14.048 7.65631C13.9947 7.71498 13.9387 7.76831 13.88 7.81631C13.8213 7.85898 13.7387 7.88031 13.632 7.88031C13.5573 7.88031 13.488 7.85898 13.424 7.81631C13.3653 7.77365 13.2987 7.72031 13.224 7.65631C13.1493 7.59231 13.0667 7.52298 12.976 7.44831C12.8853 7.37365 12.776 7.30431 12.648 7.24031C12.5253 7.17631 12.3787 7.12298 12.208 7.08031C12.0373 7.03765 11.8347 7.01631 11.6 7.01631C10.9707 7.01631 10.44 7.23231 10.008 7.66431C9.576 8.09631 9.27467 8.73365 9.104 9.57631H13.12V10.1843C13.12 10.307 13.0693 10.4216 12.968 10.5283C12.872 10.6296 12.7387 10.6803 12.568 10.6803H8.968C8.96267 10.771 8.96 10.8616 8.96 10.9523C8.96 11.0376 8.96 11.1256 8.96 11.2163C8.96 11.2803 8.96 11.3443 8.96 11.4083C8.96 11.4723 8.96267 11.5336 8.968 11.5923H12.36V12.1923C12.36 12.315 12.3093 12.4296 12.208 12.5363C12.1067 12.6376 11.9733 12.6883 11.808 12.6883H9.064C9.21333 13.6056 9.49867 14.291 9.92 14.7443C10.3467 15.1923 10.8747 15.4163 11.504 15.4163C11.888 15.4163 12.1947 15.3656 12.424 15.2643C12.6587 15.1576 12.848 15.0403 12.992 14.9123C13.1413 14.7843 13.264 14.6696 13.36 14.5683C13.4613 14.4616 13.5707 14.4083 13.688 14.4083C13.7467 14.4083 13.7973 14.419 13.84 14.4403C13.8827 14.4563 13.928 14.491 13.976 14.5443L14.832 15.3283C14.4587 15.9043 13.984 16.347 13.408 16.6563C12.832 16.9603 12.1627 17.1123 11.4 17.1123C10.7707 17.1123 10.2053 17.0083 9.704 16.8003C9.208 16.587 8.776 16.2883 8.408 15.9043C8.04 15.5203 7.73867 15.0563 7.504 14.5123C7.27467 13.9683 7.112 13.3603 7.016 12.6883H6V11.5923H6.928C6.92267 11.5336 6.92 11.4723 6.92 11.4083C6.92 11.3443 6.92 11.2803 6.92 11.2163C6.92 11.1256 6.92 11.0376 6.92 10.9523C6.92 10.8616 6.92267 10.771 6.928 10.6803H6V9.57631Z\" fill=\"#E3B82A\" />\n</symbol>"
-});
-var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default.a.add(symbol);
-/* harmony default export */ __webpack_exports__["default"] = (symbol);
-
-/***/ }),
-
 /***/ "vFpx":
 /***/ (function(module, exports, __webpack_require__) {
 
diff --git a/4/ecolyo.441219e784196cc9bbea.js b/5/ecolyo.097c09aeec4cd782ebaf.js
similarity index 92%
rename from 4/ecolyo.441219e784196cc9bbea.js
rename to 5/ecolyo.097c09aeec4cd782ebaf.js
index b0e6d62aeaa71f57dffe34f84b31b2ae5150a40a..a22c8237b4529d9e3dd6a24c651d17b306c8aa0d 100644
--- a/4/ecolyo.441219e784196cc9bbea.js
+++ b/5/ecolyo.097c09aeec4cd782ebaf.js
@@ -1,4 +1,4 @@
-(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[4],{
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[5],{
 
 /***/ "/jgc":
 /***/ (function(module, exports, __webpack_require__) {
@@ -74,7 +74,6 @@ var NoDataModal = function NoDataModal(_ref) {
   }, t('consumption_visualizer.why_no_data')), /*#__PURE__*/_react.default.createElement("div", {
     className: "text-16-normal"
   }, t('consumption_visualizer.dataModal.list_title')), /*#__PURE__*/_react.default.createElement("ul", null, /*#__PURE__*/_react.default.createElement("li", null, t('consumption_visualizer.dataModal.item1')), /*#__PURE__*/_react.default.createElement("li", null, t('consumption_visualizer.dataModal.item2')), /*#__PURE__*/_react.default.createElement("li", null, t('consumption_visualizer.dataModal.item3')), /*#__PURE__*/_react.default.createElement("li", null, t('consumption_visualizer.dataModal.item4'))), /*#__PURE__*/_react.default.createElement(_core.Button, {
-    "aria-label": t('ecogesture_info_modal.button_close'),
     onClick: handleCloseClick,
     className: "btnPrimary"
   }, t('ecogesture_info_modal.button_close'))));
@@ -141,6 +140,17 @@ exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE
 
 
 
+/***/ }),
+
+/***/ "0nuy":
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__("DjJv")(false);
+// Module
+exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.pricing-root {\n  margin: 0 auto;\n  margin-bottom: 1rem;\n  max-width: 45.75rem;\n  width: 100%;\n  box-sizing: border-box;\n}\n@media only screen and (max-width : 768px) {\n  .pricing-root {\n    padding-left: 1rem;\n    padding-right: 1rem;\n  }\n}\n.pricing-root .pricing-container {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  border-radius: 4px;\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n  padding: 1rem;\n}\n.pricing-root .pricing-container p {\n  margin: 0;\n}\n.pricing-root .pricing-container .row {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n}\n.pricing-root .pricing-container .row .year {\n  color: #ffffff;\n}\n.pricing-root .pricing-container .gauges {\n  display: grid;\n  grid-template-columns: 1fr auto 3fr auto 1fr;\n  gap: 4px;\n}\n.pricing-root .pricing-container .gauges .separator {\n  border-right: 1px solid #a0a0a0;\n  height: 130%;\n}\n.pricing-root .pricing-container .limit-container {\n  margin-top: 4px;\n  display: grid;\n  grid-template-columns: 1fr auto 3fr auto 1fr;\n}\n.pricing-root .pricing-container .limit-container span {\n  color: #a0a0a0;\n}\n.pricing-root .pricing-container .limit-container .limit12 {\n  grid-column: 2;\n}\n.pricing-root .pricing-container .limit-container .limit180 {\n  grid-column: 4;\n}\n.pricing-root .pricing-container .gauge-container.free .gauge-border {\n  border-color: #99cfff;\n  background-image: linear-gradient(45deg, #99cfff 11.11%, #383941 11.11%, #383941 50%, #99cfff 50%, #99cfff 61.11%, #383941 61.11%, #383941 100%);\n}\n.pricing-root .pricing-container .gauge-container.free .gauge-content {\n  background-color: #99cfff;\n}\n.pricing-root .pricing-container .gauge-container.regular .gauge-border {\n  border-radius: 0;\n  border-color: #3a98ec;\n  background-image: linear-gradient(45deg, #3a98ec 11.11%, #383941 11.11%, #383941 50%, #3a98ec 50%, #3a98ec 61.11%, #383941 61.11%, #383941 100%);\n}\n.pricing-root .pricing-container .gauge-container.regular .gauge-content {\n  background-color: #3a98ec;\n}\n.pricing-root .pricing-container .gauge-container.double .gauge-border {\n  border-radius: 0 20px 20px 0;\n  border-color: #3793ff;\n  background-image: linear-gradient(45deg, #3793ff 11.11%, #383941 11.11%, #383941 50%, #3793ff 50%, #3793ff 61.11%, #383941 61.11%, #383941 100%);\n}\n.pricing-root .pricing-container .gauge-container.double .gauge-content {\n  background-color: #3793ff;\n}\n.pricing-root .pricing-container .gauge-container.no-color .gauge-border {\n  border-color: transparent;\n  background-color: #383941;\n  background-image: none;\n}\n.pricing-root .pricing-container .gauge-container.no-color .gauge-content {\n  background-color: transparent;\n}\n.pricing-root .pricing-container .gauge-container .gauge-border {\n  height: 16px;\n  box-sizing: border-box;\n  border: 1px solid;\n  background-size: 9px 9px;\n  border-radius: 20px 0 0 20px;\n  overflow: hidden;\n  position: relative;\n}\n.pricing-root .pricing-container .gauge-container .gauge-border .gauge-content {\n  position: absolute;\n  transition: all 0.5s ease;\n  height: 17px;\n  width: 100%;\n}\n.pricing-root .pricing-container .gauge-container .gauge-border .gauge-content.rounded {\n  border-radius: 0 20px 20px 0;\n}\n.pricing-root .pricing-container .iconFree,\n.pricing-root .pricing-container .iconRegular,\n.pricing-root .pricing-container .iconDouble {\n  z-index: 10;\n  position: absolute;\n  top: 1px;\n  left: 1px;\n}\n.pricing-root .pricing-container .iconFree.filled,\n.pricing-root .pricing-container .iconRegular.filled,\n.pricing-root .pricing-container .iconDouble.filled {\n  color: #1b1c22;\n}\n.pricing-root .pricing-container .iconDouble:nth-of-type(2) {\n  left: 15px;\n}\n.pricing-root .pricing-container .pricing {\n  margin-bottom: 4px;\n}\n.pricing-root .pricing-container .pricing.free {\n  color: #99cfff;\n}\n.pricing-root .pricing-container .pricing.regular {\n  color: #3a98ec;\n}\n.pricing-root .pricing-container .pricing.double {\n  color: #3793ff;\n}\n.pricing-root .pricing-container .consumption span {\n  color: #ffffff;\n  font-weight: 700;\n}", ""]);
+
+
+
 /***/ }),
 
 /***/ "0q4G":
@@ -286,6 +296,10 @@ var SwitchBase = (0, _styles.withStyles)({
         opacity: 1,
         backgroundColor: 'var(--multiColor)'
       }
+    },
+    '&.Mui-focusVisible': {
+      outline: '2px solid #1976d2',
+      outlineOffset: '2px'
     }
   },
   checked: {},
@@ -599,6 +613,205 @@ exports.default = _default;
 
 /***/ }),
 
+/***/ "5t94":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _interopRequireDefault = __webpack_require__("jm00");
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.WaterPricing = void 0;
+var _regenerator = _interopRequireDefault(__webpack_require__("hJxD"));
+var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__("HZZ/"));
+var _slicedToArray2 = _interopRequireDefault(__webpack_require__("XkwL"));
+var _core = __webpack_require__("rMFn");
+var _euroCrossed = _interopRequireDefault(__webpack_require__("Slgs"));
+var _euro = _interopRequireDefault(__webpack_require__("wtOv"));
+var _classnames = _interopRequireDefault(__webpack_require__("uRLs"));
+var _StyledIcon = _interopRequireDefault(__webpack_require__("VP3k"));
+var _cozyClient = __webpack_require__("xEu0");
+var _I18n = __webpack_require__("nUfk");
+var _enums = __webpack_require__("j0hM");
+var _luxon = __webpack_require__("1EDv");
+var _react = _interopRequireWildcard(__webpack_require__("ivGQ"));
+var _consumption = _interopRequireDefault(__webpack_require__("zET3"));
+var _hooks = __webpack_require__("6FOS");
+__webpack_require__("ZXzv");
+var _WaterPricingModal = __webpack_require__("OONe");
+function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
+function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
+// In m³
+var MAX_FREE = 12;
+var MAX_REGULAR = 180;
+var WaterPricing = function WaterPricing() {
+  var _useI18n = (0, _I18n.useI18n)(),
+    t = _useI18n.t;
+  var client = (0, _cozyClient.useClient)();
+  var _useAppSelector = (0, _hooks.useAppSelector)(function (state) {
+      return state.ecolyo.chart;
+    }),
+    selectedDate = _useAppSelector.selectedDate;
+  var _useState = (0, _react.useState)(false),
+    _useState2 = (0, _slicedToArray2.default)(_useState, 2),
+    showModal = _useState2[0],
+    setShowModal = _useState2[1];
+  var _useState3 = (0, _react.useState)(0),
+    _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
+    consumption = _useState4[0],
+    setConsumption = _useState4[1];
+  var pricing = consumption > 180 ? 'double' : consumption > 12 ? 'regular' : 'free';
+  var isFreeExceeded = consumption >= MAX_FREE;
+  var isRegularExceeded = consumption >= MAX_REGULAR;
+  var freePercentage = Math.min(consumption / MAX_FREE * 100, 100);
+  // threshold of 30% to display icon
+  var freeWithThreshold = Math.max(30, freePercentage);
+  var regularPercentage = Math.min(consumption / MAX_REGULAR * 100, 100);
+  var regularWithThreshold = Math.max(10, regularPercentage);
+  var year = Number(selectedDate.toFormat('y'));
+  (0, _react.useEffect)(function () {
+    function fetchData() {
+      return _fetchData.apply(this, arguments);
+    }
+    function _fetchData() {
+      _fetchData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
+        var cs, startDate, endDate, dataLoad, rounded;
+        return _regenerator.default.wrap(function _callee$(_context) {
+          while (1) {
+            switch (_context.prev = _context.next) {
+              case 0:
+                cs = new _consumption.default(client);
+                startDate = _luxon.DateTime.local(year, 1, 1);
+                endDate = _luxon.DateTime.local(year, 12, 31);
+                _context.next = 5;
+                return cs.getGraphData({
+                  fluidTypes: [_enums.FluidType.WATER],
+                  timeStep: _enums.TimeStep.YEAR,
+                  timePeriod: {
+                    startDate: startDate,
+                    endDate: endDate
+                  }
+                });
+              case 5:
+                dataLoad = _context.sent;
+                if (dataLoad !== null && dataLoad !== void 0 && dataLoad.actualData) {
+                  _context.next = 8;
+                  break;
+                }
+                return _context.abrupt("return", null);
+              case 8:
+                rounded = Math.ceil(dataLoad.actualData[0].value / 100) / 10;
+                setConsumption(rounded);
+              case 10:
+              case "end":
+                return _context.stop();
+            }
+          }
+        }, _callee);
+      }));
+      return _fetchData.apply(this, arguments);
+    }
+    fetchData();
+  }, [client, year]);
+  return /*#__PURE__*/_react.default.createElement("div", {
+    className: "pricing-root"
+  }, /*#__PURE__*/_react.default.createElement("div", {
+    className: "pricing-container"
+  }, /*#__PURE__*/_react.default.createElement("div", {
+    className: "row"
+  }, /*#__PURE__*/_react.default.createElement("span", {
+    className: "year text-16-bold"
+  }, t('consumption.water_pricing.year', {
+    year: year
+  })), /*#__PURE__*/_react.default.createElement(_core.Button, {
+    className: "btnText",
+    onClick: function onClick() {
+      return setShowModal(true);
+    }
+  }, t('consumption.water_pricing.more'))), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
+    className: "gauges"
+  }, /*#__PURE__*/_react.default.createElement("div", {
+    className: "gauge-container free"
+  }, /*#__PURE__*/_react.default.createElement("div", {
+    className: "gauge-border"
+  }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
+    className: "iconFree",
+    icon: _euroCrossed.default,
+    size: 12
+  }), /*#__PURE__*/_react.default.createElement("div", {
+    className: (0, _classnames.default)('gauge-content', {
+      rounded: !isFreeExceeded
+    }),
+    style: {
+      right: "".concat(100 - freeWithThreshold, "%")
+    }
+  }))), /*#__PURE__*/_react.default.createElement("div", {
+    className: "separator"
+  }), /*#__PURE__*/_react.default.createElement("div", {
+    className: (0, _classnames.default)('gauge-container regular', {
+      'no-color': !isFreeExceeded
+    })
+  }, /*#__PURE__*/_react.default.createElement("div", {
+    className: "gauge-border"
+  }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
+    className: "iconRegular ".concat(!isFreeExceeded ? '' : 'filled'),
+    icon: _euro.default,
+    size: 12
+  }), /*#__PURE__*/_react.default.createElement("div", {
+    className: (0, _classnames.default)('gauge-content', {
+      rounded: !isRegularExceeded
+    }),
+    style: {
+      right: "".concat(100 - regularWithThreshold, "%")
+    }
+  }))), /*#__PURE__*/_react.default.createElement("div", {
+    className: "separator"
+  }), /*#__PURE__*/_react.default.createElement("div", {
+    className: (0, _classnames.default)('gauge-container double', {
+      'no-color': !isRegularExceeded
+    })
+  }, /*#__PURE__*/_react.default.createElement("div", {
+    className: "gauge-border"
+  }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
+    className: "iconDouble ".concat(!isRegularExceeded ? '' : 'filled'),
+    icon: _euro.default,
+    size: 12
+  }), /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
+    className: "iconDouble ".concat(!isRegularExceeded ? '' : 'filled'),
+    icon: _euro.default,
+    size: 12
+  }), /*#__PURE__*/_react.default.createElement("div", {
+    className: "gauge-content rounded",
+    style: {
+      right: "".concat(40, "%")
+    }
+  })))), /*#__PURE__*/_react.default.createElement("div", {
+    className: "limit-container"
+  }, /*#__PURE__*/_react.default.createElement("span", {
+    className: "limit12"
+  }, MAX_FREE, "m\xB3"), /*#__PURE__*/_react.default.createElement("span", {
+    className: "limit180"
+  }, MAX_REGULAR, "m\xB3"))), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", {
+    className: "pricing ".concat(pricing, " text-14")
+  }, t("consumption.water_pricing.".concat(pricing))), /*#__PURE__*/_react.default.createElement("p", {
+    className: "consumption text-14",
+    dangerouslySetInnerHTML: {
+      __html: t('consumption.water_pricing.consumption', {
+        consumption: consumption
+      })
+    }
+  })), showModal && /*#__PURE__*/_react.default.createElement(_WaterPricingModal.WaterPricingModal, {
+    handleCloseClick: function handleCloseClick() {
+      return setShowModal(false);
+    }
+  })));
+};
+exports.WaterPricing = WaterPricing;
+
+/***/ }),
+
 /***/ 6:
 /***/ (function(module, exports) {
 
@@ -1037,13 +1250,13 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) {
     }, _callee);
   })), [dispatch, fluidService]);
   var refreshChallengeState = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
-    var challengeService, _yield$challengeServi, updatedUserChallenge, dataloads, _yield$challengeServi2, isDone;
+    var challengeService, _yield$challengeServi, updatedUserChallenge, dataloads, _challengeService$isC, isDone;
     return _regenerator.default.wrap(function _callee2$(_context2) {
       while (1) {
         switch (_context2.prev = _context2.next) {
           case 0:
             if (!((currentChallenge === null || currentChallenge === void 0 ? void 0 : currentChallenge.state) === _enums.UserChallengeState.DUEL && (currentChallenge === null || currentChallenge === void 0 ? void 0 : currentChallenge.duel.state) === _enums.UserDuelState.ONGOING)) {
-              _context2.next = 13;
+              _context2.next = 10;
               break;
             }
             challengeService = new _challenge.default(client);
@@ -1058,13 +1271,9 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) {
               currentDataload: dataloads
             }));
             // Check is duel is done and display notification
-            _context2.next = 10;
-            return challengeService.isChallengeDone(updatedUserChallenge, dataloads);
-          case 10:
-            _yield$challengeServi2 = _context2.sent;
-            isDone = _yield$challengeServi2.isDone;
+            _challengeService$isC = challengeService.isChallengeDone(updatedUserChallenge, dataloads), isDone = _challengeService$isC.isDone;
             dispatch((0, _global.toggleChallengeDuelNotification)(isDone));
-          case 13:
+          case 10:
           case "end":
             return _context2.stop();
         }
@@ -1941,6 +2150,17 @@ var EpglBill = function EpglBill(_ref) {
 var _default = EpglBill;
 exports.default = _default;
 
+/***/ }),
+
+/***/ "Mi3D":
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__("DjJv")(false);
+// Module
+exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.waterPricingModal {\n  text-align: center;\n}\n.waterPricingModal h1 {\n  color: #3a98ec;\n}\n.waterPricingModal p {\n  color: #e0e0e0;\n}", ""]);
+
+
+
 /***/ }),
 
 /***/ "MjJv":
@@ -2014,6 +2234,60 @@ exports.default = _default;
 
 /***/ }),
 
+/***/ "OONe":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _interopRequireDefault = __webpack_require__("jm00");
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.WaterPricingModal = void 0;
+var _core = __webpack_require__("rMFn");
+var _Button = _interopRequireDefault(__webpack_require__("49+2"));
+var _close = _interopRequireDefault(__webpack_require__("lCJQ"));
+var _StyledIconButton = _interopRequireDefault(__webpack_require__("90PE"));
+var _I18n = __webpack_require__("nUfk");
+var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
+__webpack_require__("ZrXv");
+var WaterPricingModal = function WaterPricingModal(_ref) {
+  var handleCloseClick = _ref.handleCloseClick;
+  var _useI18n = (0, _I18n.useI18n)(),
+    t = _useI18n.t;
+  return /*#__PURE__*/_react.default.createElement(_core.Dialog, {
+    open: true,
+    disableEscapeKeyDown: true,
+    onClose: function onClose(event, reason) {
+      event && reason !== 'backdropClick' && handleCloseClick();
+    },
+    classes: {
+      root: 'modal-root',
+      paper: 'modal-paper'
+    }
+  }, /*#__PURE__*/_react.default.createElement(_StyledIconButton.default, {
+    icon: _close.default,
+    onClick: handleCloseClick,
+    "aria-label": t('feedback.accessibility.button_close'),
+    className: "modal-paper-close-button"
+  }), /*#__PURE__*/_react.default.createElement("div", {
+    className: "waterPricingModal"
+  }, /*#__PURE__*/_react.default.createElement("h1", {
+    className: "text-20-bold"
+  }, t('consumption.water_pricing.modal.title')), /*#__PURE__*/_react.default.createElement("p", {
+    dangerouslySetInnerHTML: {
+      __html: t('consumption.water_pricing.modal.details')
+    }
+  }), /*#__PURE__*/_react.default.createElement(_Button.default, {
+    onClick: handleCloseClick,
+    className: "btnPrimary"
+  }, t('consumption.water_pricing.modal.understood'))));
+};
+exports.WaterPricingModal = WaterPricingModal;
+
+/***/ }),
+
 /***/ "OfDd":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -2149,7 +2423,7 @@ var FluidChartSlide = function FluidChartSlide(_ref) {
           while (1) {
             switch (_context.prev = _context.next) {
               case 0:
-                if (currentTimeStep != timeStep && subscribed) {
+                if (currentTimeStep != timeStep) {
                   setIsDataLoaded(false);
                   setTimeStep(currentTimeStep);
                 }
@@ -2182,7 +2456,7 @@ var FluidChartSlide = function FluidChartSlide(_ref) {
                 });
               case 15:
                 graphData = _context.sent;
-                if (subscribed && graphData && (graphData === null || graphData === void 0 ? void 0 : graphData.actualData.length) > 0) {
+                if (graphData && (graphData === null || graphData === void 0 ? void 0 : graphData.actualData.length) > 0) {
                   setChartData(graphData);
                   setIsDataLoaded(true);
                 }
@@ -2195,7 +2469,7 @@ var FluidChartSlide = function FluidChartSlide(_ref) {
       }));
       return _loadData.apply(this, arguments);
     }
-    loadData();
+    subscribed && loadData();
     return function () {
       subscribed = false;
     };
@@ -2231,6 +2505,28 @@ exports.default = _default;
 
 /***/ }),
 
+/***/ "Slgs":
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("lomp");
+/* harmony import */ var _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("nOWK");
+/* harmony import */ var _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1__);
+
+
+var symbol = new _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0___default.a({
+  "id": "euro-crossed_d4fdb59967cf531acebe07a2ac25bffd",
+  "use": "euro-crossed_d4fdb59967cf531acebe07a2ac25bffd-usage",
+  "viewBox": "0 0 12 12",
+  "content": "<symbol viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" id=\"euro-crossed_d4fdb59967cf531acebe07a2ac25bffd\">\n  <rect x=\"0.5\" y=\"0.5\" width=\"11\" height=\"11\" rx=\"5.5\" stroke=\"#1B1C22\" />\n  <path d=\"M9.5 8.5L4 3\" stroke=\"#1B1C22\" stroke-linecap=\"round\" />\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.29445 4.70867C4.2492 4.80317 4.20873 4.90039 4.17333 5H3.33333C3.15 5 3 5.15 3 5.33333C3 5.51667 3.15 5.66667 3.33333 5.66667H4.02C4.00667 5.77667 4 5.88667 4 6C4 6.11333 4.00667 6.22333 4.02 6.33333H3.33333C3.15 6.33333 3 6.48333 3 6.66667C3 6.85 3.15 7 3.33333 7H4.17333C4.58667 8.16333 5.69333 9 7 9C7.46345 9 7.90137 8.89571 8.29333 8.70755L7.65291 8.06712C7.44768 8.13205 7.22878 8.16667 7 8.16667C6.16333 8.16667 5.44 7.69333 5.08 7H6.58579L5.91912 6.33333H4.86C4.84333 6.22333 4.83333 6.11333 4.83333 6C4.83333 5.88667 4.84333 5.77667 4.86 5.66667H5.25245L4.29445 4.70867ZM6.34784 3.93363C6.5538 3.86847 6.77294 3.83333 7 3.83333C7.41667 3.83333 7.80667 3.95333 8.14 4.15667C8.30667 4.26 8.52333 4.24333 8.66333 4.10333C8.85667 3.91 8.81333 3.59333 8.58 3.45C8.12 3.16667 7.57667 3 7 3C6.53657 3 6.0983 3.10524 5.70719 3.29298L6.34784 3.93363Z\" fill=\"#1B1C22\" />\n</symbol>"
+});
+var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default.a.add(symbol);
+/* harmony default export */ __webpack_exports__["default"] = (symbol);
+
+/***/ }),
+
 /***/ "SseS":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -2876,10 +3172,62 @@ if(false) {}
 
 exports = module.exports = __webpack_require__("DjJv")(false);
 // Module
-exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.timestep-selector {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-evenly;\n  align-items: flex-end;\n  margin: auto;\n  margin-top: 1rem;\n  max-width: 45.75rem;\n}\n.timestep-selector .btnSecondary {\n  max-width: 90px;\n  border-radius: 4px;\n  margin-top: 0;\n}\n.timestep-selector .timestep-container {\n  width: 100%;\n}\n.timestep-selector .timestep-bar {\n  margin: 0 1rem 0 1.7rem;\n  padding: 0;\n  display: flex;\n  justify-content: space-evenly;\n  align-items: center;\n  height: 3rem;\n}\n.timestep-selector .timestep-bar.elec-bar {\n  margin-left: 1rem;\n}\n.timestep-selector .timestep-bar .circle {\n  cursor: pointer;\n  position: relative;\n  display: block;\n  width: 8px;\n  height: 8px;\n  border-radius: 100%;\n  text-align: center;\n  background-color: #a0a0a0;\n  z-index: 1;\n  transition: all 300ms ease;\n  margin: 0 2px;\n}\n.timestep-selector .timestep-bar .circle .clickable-area {\n  position: absolute;\n  width: 35px;\n  height: 35px;\n  display: block;\n  left: -14px;\n  top: -15px;\n}\n.timestep-selector .timestep-bar .text {\n  position: relative;\n  display: block;\n  top: 15px;\n  left: -20px;\n  text-align: center;\n  color: #7b7b7b;\n  width: 50px;\n  overflow: visible;\n}\n@media only screen and (max-width: 355px) {\n  .timestep-selector .timestep-bar .text {\n    opacity: 0;\n  }\n}\n.timestep-selector .timestep-bar .bar {\n  width: 100%;\n  position: relative;\n  display: block;\n  background-color: transparent;\n  border-top: 1px dashed #a0a0a0;\n  height: 0;\n  z-index: 0;\n  padding: 0 2px;\n}\n.timestep-selector .timestep-bar .bar:last-of-type {\n  display: none;\n}\n.timestep-selector .timestep-bar .circle.active {\n  background-color: white;\n  width: 10px;\n  height: 10px;\n}\n.timestep-selector .timestep-bar .circle.active .text {\n  opacity: 1;\n  top: 16px;\n  color: white;\n  transition: 300ms ease;\n}", ""]);
+exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.timestep-selector {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-evenly;\n  align-items: flex-end;\n  margin: auto;\n  margin-top: 1rem;\n  max-width: 45.75rem;\n}\n.timestep-selector .btnSecondary {\n  max-width: 90px;\n  border-radius: 4px;\n  margin-top: 0;\n}\n.timestep-selector .timestep-container {\n  width: 100%;\n}\n.timestep-selector .timestep-bar {\n  margin: 0 1rem 0 1.7rem;\n  padding: 0;\n  display: flex;\n  justify-content: space-evenly;\n  align-items: center;\n  height: 3rem;\n}\n.timestep-selector .timestep-bar.elec-bar {\n  margin-left: 1rem;\n}\n.timestep-selector .timestep-bar .circle {\n  cursor: pointer;\n  position: relative;\n  display: block;\n  width: 8px;\n  height: 8px;\n  border-radius: 100%;\n  text-align: center;\n  background-color: #a0a0a0;\n  z-index: 1;\n  transition: all 300ms ease;\n  margin: 0 2px;\n}\n.timestep-selector .timestep-bar .circle .clickable-area {\n  position: absolute;\n  width: 35px;\n  height: 35px;\n  display: block;\n  left: -14px;\n  top: -15px;\n}\n.timestep-selector .timestep-bar .circle:focus-visible {\n  outline: 2px solid #1b8bff;\n  outline-offset: 2px;\n}\n.timestep-selector .timestep-bar .text {\n  position: relative;\n  display: block;\n  top: 15px;\n  left: -20px;\n  text-align: center;\n  color: #7b7b7b;\n  width: 50px;\n  overflow: visible;\n}\n@media only screen and (max-width: 355px) {\n  .timestep-selector .timestep-bar .text {\n    opacity: 0;\n  }\n}\n.timestep-selector .timestep-bar .bar {\n  width: 100%;\n  position: relative;\n  display: block;\n  background-color: transparent;\n  border-top: 1px dashed #a0a0a0;\n  height: 0;\n  z-index: 0;\n  padding: 0 2px;\n}\n.timestep-selector .timestep-bar .bar:last-of-type {\n  display: none;\n}\n.timestep-selector .timestep-bar .circle.active {\n  background-color: white;\n  width: 10px;\n  height: 10px;\n}\n.timestep-selector .timestep-bar .circle.active .text {\n  opacity: 1;\n  top: 16px;\n  color: white;\n  transition: 300ms ease;\n}", ""]);
 
 
 
+/***/ }),
+
+/***/ "ZXzv":
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__("0nuy");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__("HkU0")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
+/***/ "ZrXv":
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__("Mi3D");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__("HkU0")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
 /***/ }),
 
 /***/ "c3xf":
@@ -4585,6 +4933,7 @@ var _date = __webpack_require__("0bnf");
 var _utils = __webpack_require__("RgLR");
 var _ConsumptionDetails = _interopRequireDefault(__webpack_require__("AG52"));
 var _FluidButtons = _interopRequireDefault(__webpack_require__("5dL7"));
+var _WaterPricing = __webpack_require__("5t94");
 function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
 function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
 function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
@@ -4592,6 +4941,12 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
 function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
 function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
 function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+/**
+ * http://ecolyo.cozy.tools:8080/#/consumption
+ * http://ecolyo.cozy.tools:8080/#/consumption/electricity
+ * http://ecolyo.cozy.tools:8080/#/consumption/water
+ * http://ecolyo.cozy.tools:8080/#/consumption/gas
+ */
 var ConsumptionView = function ConsumptionView(_ref) {
   var fluidType = _ref.fluidType;
   var client = (0, _cozyClient.useClient)();
@@ -4728,7 +5083,7 @@ var ConsumptionView = function ConsumptionView(_ref) {
     } finally {
       _iterator.f();
     }
-    if (subscribed) setConsentExpiredFluids(expiredConsents);
+    subscribed && setConsentExpiredFluids(expiredConsents);
     return function () {
       subscribed = false;
     };
@@ -4769,7 +5124,7 @@ var ConsumptionView = function ConsumptionView(_ref) {
     key: lastDataDateKey
   }), /*#__PURE__*/_react.default.createElement(_ConsumptionDetails.default, {
     fluidType: fluidType
-  })), !isMulti && /*#__PURE__*/_react.default.createElement(_KonnectorViewerCard.default, {
+  })), fluidType === _enums.FluidType.WATER && showOfflineData && /*#__PURE__*/_react.default.createElement(_WaterPricing.WaterPricing, null), !isMulti && /*#__PURE__*/_react.default.createElement(_KonnectorViewerCard.default, {
     fluidType: fluidType
   }), isMulti && !showOfflineData && /*#__PURE__*/_react.default.createElement(_KonnectorViewerList.default, null)), releaseNotes.show && /*#__PURE__*/_react.default.createElement(_ReleaseNotesModal.default, {
     open: releaseNotes.show
@@ -5024,9 +5379,7 @@ var EpglForm = function EpglForm(_ref) {
       setError(t('konnector_form.error_login_failed'));
     }
   }, [account, lastEpglLogin, t]);
-  return /*#__PURE__*/_react2.default.createElement("div", {
-    className: "connection-form"
-  }, hasCreatedAccount && /*#__PURE__*/_react2.default.createElement("h2", {
+  return /*#__PURE__*/_react2.default.createElement(_react2.default.Fragment, null, hasCreatedAccount && /*#__PURE__*/_react2.default.createElement("h2", {
     className: "connection-form-title eglgrandlyon text-20-bold"
   }, t('auth.eglgrandlyon.with_account.title')), /*#__PURE__*/_react2.default.createElement("div", {
     className: "connection-form-subtitle text-18-bold"
@@ -5038,17 +5391,16 @@ var EpglForm = function EpglForm(_ref) {
       error: error !== ''
     }),
     label: t("auth.eglgrandlyon.connect_form.login"),
-    name: "login",
     onChange: function onChange(e) {
       return changeLogin(e.target.value);
     },
     value: login,
     inputMode: "numeric",
-    error: Boolean(error)
+    error: Boolean(error),
+    required: true
   }), /*#__PURE__*/_react2.default.createElement(_core.TextField, {
     variant: "outlined",
     id: 'idFieldPassword' + fluidName,
-    name: "password",
     type: showPassword ? 'text' : 'password',
     className: (0, _classnames.default)('inputText', {
       error: error !== ''
@@ -5058,10 +5410,12 @@ var EpglForm = function EpglForm(_ref) {
       return changePassword(e.target.value);
     },
     value: password,
-    error: Boolean(error)
+    error: Boolean(error),
+    required: true
   }), /*#__PURE__*/_react2.default.createElement("span", null, /*#__PURE__*/_react2.default.createElement(_StyledIconButton.default, {
     icon: _trailingIcon.default,
-    "aria-label": t('auth.accessibility.button_reveal_password'),
+    "aria-label": showPassword ? t('auth.accessibility.button_hide_password') : t('auth.accessibility.button_reveal_password'),
+    "aria-checked": showPassword,
     className: "iconShowPassword",
     sized: 22,
     onClick: function onClick() {
@@ -5102,7 +5456,7 @@ exports.default = _default;
 
 exports = module.exports = __webpack_require__("DjJv")(false);
 // Module
-exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ninput.inputText,\ninput.inputNumber {\n  box-sizing: border-box;\n  border: 1px solid #7b7b7b;\n  background: transparent;\n  transition: all 300ms ease;\n  color: #e0e0e0;\n}\ninput.inputText:focus, input.inputText:focus-visible,\ninput.inputNumber:focus,\ninput.inputNumber:focus-visible {\n  border-color: #e3b82a;\n  outline: none;\n}\n\ninput.inputText {\n  appearance: none;\n  border-radius: 4px;\n  height: 45px;\n  width: 100%;\n  max-width: 280px;\n  padding: 0 0.5rem;\n}\n\ninput.inputNumber {\n  border-radius: 2px;\n  height: 40px;\n  width: 60px;\n  max-width: 5rem;\n  text-align: center;\n}\n\ninput.inputCheckbox {\n  width: 24px;\n  min-width: 24px;\n  height: 24px;\n  display: flex;\n  align-items: center;\n  border-radius: 4px;\n  cursor: pointer;\n  appearance: none;\n  background: #121212;\n  position: relative;\n  border: solid 1px #7b7b7b;\n}\ninput.inputCheckbox:checked {\n  background: #e3b82a;\n  border-color: #e3b82a;\n}\ninput.inputCheckbox:checked:before, input.inputCheckbox:checked:after {\n  content: \"\";\n  position: absolute;\n  display: inline-block;\n  background: #121212;\n  border-radius: 0.5rem;\n}\ninput.inputCheckbox:checked:before {\n  width: 3px;\n  height: 12px;\n  left: 10px;\n  top: 4px;\n  transform: rotate(41deg);\n}\ninput.inputCheckbox:checked:after {\n  width: 3px;\n  height: 6px;\n  left: 5px;\n  top: 8px;\n  transform: rotate(133deg);\n}\n\nform {\n  margin-top: 1rem;\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n}\nform .iconShowPassword {\n  float: right;\n  position: relative;\n  margin-top: -67px;\n  margin-right: 15px;\n}\nform .errorMessage {\n  color: #d25959;\n  min-height: 1.25rem;\n}", ""]);
+exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ninput.inputText,\ninput.inputNumber {\n  box-sizing: border-box;\n  border: 1px solid #7b7b7b;\n  background: transparent;\n  transition: all 300ms ease;\n  color: #e0e0e0;\n}\n\ninput.inputText {\n  appearance: none;\n  border-radius: 4px;\n  height: 45px;\n  width: 100%;\n  max-width: 280px;\n  padding: 0 0.5rem;\n}\n\ninput.inputNumber {\n  border-radius: 2px;\n  height: 40px;\n  width: 60px;\n  max-width: 5rem;\n  text-align: center;\n}\n\ninput.inputCheckbox {\n  width: 24px;\n  min-width: 24px;\n  height: 24px;\n  display: flex;\n  align-items: center;\n  border-radius: 4px;\n  cursor: pointer;\n  appearance: none;\n  background: #121212;\n  position: relative;\n  border: solid 1px #7b7b7b;\n}\ninput.inputCheckbox:checked {\n  background: #e3b82a;\n  border-color: #e3b82a;\n}\ninput.inputCheckbox:checked:before, input.inputCheckbox:checked:after {\n  content: \"\";\n  position: absolute;\n  display: inline-block;\n  background: #121212;\n  border-radius: 0.5rem;\n}\ninput.inputCheckbox:checked:before {\n  width: 3px;\n  height: 12px;\n  left: 10px;\n  top: 4px;\n  transform: rotate(41deg);\n}\ninput.inputCheckbox:checked:after {\n  width: 3px;\n  height: 6px;\n  left: 5px;\n  top: 8px;\n  transform: rotate(133deg);\n}\n\ninput:focus-visible {\n  outline: 2px solid #1b8bff;\n  outline-offset: 2px;\n}\n\nform {\n  margin-top: 1rem;\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n}\nform .iconShowPassword {\n  float: right;\n  position: relative;\n  margin-top: -67px;\n  margin-right: 15px;\n}\nform .errorMessage {\n  color: #d25959;\n  min-height: 1.25rem;\n}", ""]);
 
 
 
@@ -5231,7 +5585,7 @@ var TotalConsumption = function TotalConsumption(_ref) {
     };
   }(), [client, currentTimeStep, fluidType]);
   (0, _react.useEffect)(function () {
-    var isMounted = true;
+    var subscribed = true;
     var fetchTotal = /*#__PURE__*/function () {
       var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
         return _regenerator.default.wrap(function _callee2$(_context2) {
@@ -5258,9 +5612,9 @@ var TotalConsumption = function TotalConsumption(_ref) {
         return _ref3.apply(this, arguments);
       };
     }();
-    isMounted && fetchTotal();
+    subscribed && fetchTotal();
     return function () {
-      isMounted = false;
+      subscribed = false;
     };
   }, [currentDatachart, fluidType, currentTimeStep, client, computeTotal]);
   var compareIcon = function compareIcon() {
@@ -5287,6 +5641,28 @@ exports.default = _default;
 
 /***/ }),
 
+/***/ "wtOv":
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("lomp");
+/* harmony import */ var _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("nOWK");
+/* harmony import */ var _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1__);
+
+
+var symbol = new _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPORTED_MODULE_0___default.a({
+  "id": "euro_5e1406ecd7a2b918b25d7d0225c703ac",
+  "use": "euro_5e1406ecd7a2b918b25d7d0225c703ac-usage",
+  "viewBox": "0 0 12 12",
+  "content": "<symbol viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" id=\"euro_5e1406ecd7a2b918b25d7d0225c703ac\">\n  <rect x=\"0.5\" y=\"0.5\" width=\"11\" height=\"11\" rx=\"5.5\" stroke=\"currentColor\" />\n  <path d=\"M7 8.16667C6.16333 8.16667 5.44 7.69333 5.08 7H6.66667C6.85 7 7 6.85 7 6.66667C7 6.48333 6.85 6.33333 6.66667 6.33333H4.86C4.84333 6.22333 4.83333 6.11333 4.83333 6C4.83333 5.88667 4.84333 5.77667 4.86 5.66667H6.66667C6.85 5.66667 7 5.51667 7 5.33333C7 5.15 6.85 5 6.66667 5H5.08C5.44 4.30667 6.16667 3.83333 7 3.83333C7.41667 3.83333 7.80667 3.95333 8.14 4.15667C8.30667 4.26 8.52333 4.24333 8.66333 4.10333C8.85667 3.91 8.81333 3.59333 8.58 3.45C8.12 3.16667 7.57667 3 7 3C5.69333 3 4.58667 3.83667 4.17333 5H3.33333C3.15 5 3 5.15 3 5.33333C3 5.51667 3.15 5.66667 3.33333 5.66667H4.02C4.00667 5.77667 4 5.88667 4 6C4 6.11333 4.00667 6.22333 4.02 6.33333H3.33333C3.15 6.33333 3 6.48333 3 6.66667C3 6.85 3.15 7 3.33333 7H4.17333C4.58667 8.16333 5.69333 9 7 9C7.58 9 8.12 8.83667 8.58 8.55C8.81 8.40667 8.85333 8.08667 8.66 7.89333C8.52 7.75333 8.30333 7.73667 8.13667 7.84333C7.80667 8.05 7.42 8.16667 7 8.16667Z\" fill=\"currentColor\" />\n</symbol>"
+});
+var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default.a.add(symbol);
+/* harmony default export */ __webpack_exports__["default"] = (symbol);
+
+/***/ }),
+
 /***/ "x61U":
 /***/ (function(module, exports, __webpack_require__) {
 
diff --git a/5/ecolyo.dbb9361b7c3d2399eabb.js b/6/ecolyo.0b640b6f43df00eadbb5.js
similarity index 99%
rename from 5/ecolyo.dbb9361b7c3d2399eabb.js
rename to 6/ecolyo.0b640b6f43df00eadbb5.js
index 4dea009b4f7cdb1a2319af1960e17a33a643ad04..2f73c21202ba918614d12485b9240606eda765ae 100644
--- a/5/ecolyo.dbb9361b7c3d2399eabb.js
+++ b/6/ecolyo.0b640b6f43df00eadbb5.js
@@ -1,4 +1,4 @@
-(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[5],{
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[6],{
 
 /***/ "0LZU":
 /***/ (function(module, exports, __webpack_require__) {
@@ -87,11 +87,9 @@ var EcogestureResetModal = function EcogestureResetModal(_ref) {
   }, t('ecogesture.resetModal.text2')), /*#__PURE__*/_react.default.createElement("div", {
     className: "buttons-container"
   }, /*#__PURE__*/_react.default.createElement(_core.Button, {
-    "aria-label": t('ecogesture.resetModal.btn1'),
     onClick: closeEcogestureResetModal,
     className: "btnSecondary"
   }, t('ecogesture.resetModal.btn1')), /*#__PURE__*/_react.default.createElement(_core.Button, {
-    "aria-label": t('ecogesture.resetModal.btn2'),
     onClick: handleConfirmReset,
     className: "btnPrimary"
   }, t('ecogesture.resetModal.btn2')))));
@@ -278,17 +276,14 @@ var EcogestureEmptyList = function EcogestureEmptyList(_ref) {
   }, t("ecogesture.emptyList.".concat(objOrDoing, "2").concat(isDone))), /*#__PURE__*/_react.default.createElement("div", {
     className: "buttons"
   }, /*#__PURE__*/_react.default.createElement(_Button.default, {
-    "aria-label": t('ecogesture.emptyList.btn1'),
     onClick: function onClick() {
       return setTab(2);
     },
     className: "btnSecondary"
   }, t('ecogesture.emptyList.btn1')), isSelectionDone && /*#__PURE__*/_react.default.createElement(_Button.default, {
-    "aria-label": t('ecogesture.reset'),
     onClick: openResetEcogestureModal,
     className: "btnSecondary"
   }, t('ecogesture.reset')), !isSelectionDone && /*#__PURE__*/_react.default.createElement(_Button.default, {
-    "aria-label": t('ecogesture.emptyList.btn2'),
     onClick: function onClick() {
       navigate('/ecogesture-form');
     },
@@ -353,7 +348,7 @@ if(false) {}
 
 exports = module.exports = __webpack_require__("DjJv")(false);
 // Module
-exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.ecogesture-root {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 1rem 1.5rem 2.5rem 1.5rem;\n  gap: 1rem;\n}\n.ecogesture-root .efficiency-button-content {\n  max-width: 52rem;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n}\n.ecogesture-root .efficiency-button-content .selection {\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  gap: 1rem;\n  color: white;\n  text-align: center;\n}\n.ecogesture-root .efficiency-button-content .btnFilter {\n  max-width: 13rem;\n  justify-content: flex-start;\n}\n.ecogesture-root .efficiency-button-content .btnFilter span {\n  padding-left: 0.5rem;\n}\n.ecogesture-root .efficiency-button-content .btnFilter span.opened {\n  color: #e3b82a;\n}\n.ecogesture-root .ecogesture-content {\n  display: flex;\n  flex-wrap: wrap;\n  max-width: 53rem;\n  animation: appear 600ms ease;\n  width: 100%;\n  gap: 1rem;\n}\n@keyframes appear {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n.ecogesture-root .ecogesture-content .ecogesture-content-loading {\n  height: 80vh;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  color: #e0e0e0;\n}\n.ecogesture-root .ecogesture-content .ecogesture-list-item {\n  box-sizing: border-box;\n  height: 8rem;\n  animation: appear 600ms ease;\n  display: flex;\n  flex: 1;\n  flex-basis: 45%;\n  max-width: 48%;\n}\n.ecogesture-root .ecogesture-content .ecogesture-list-item > button {\n  height: 100%;\n  overflow: hidden;\n  animation: appear 600ms ease;\n}\n.ecogesture-root .ec-filter-error {\n  color: #e0e0e0;\n  text-align: center;\n  margin-top: 2rem;\n}\n.ecogesture-root .ec-filter-error div:first-child {\n  margin-bottom: 1rem;\n}\n\ndiv.filter-menu {\n  margin-top: 3.5rem;\n  margin-left: -0.5rem;\n  color: white;\n  background: linear-gradient(0deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.09)), linear-gradient(180deg, #323339 0%, #25262b 100%);\n  border: 1px solid #a0a0a0;\n  box-sizing: border-box;\n  box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);\n  border-radius: 4px;\n  z-index: 3;\n  width: 220px;\n  padding: 0.5rem 0rem;\n  font-size: 0.875rem;\n  left: 0;\n  transition: all 300ms ease;\n}\ndiv.filter-menu.opened {\n  display: block;\n}\ndiv.filter-menu .filter {\n  padding: 0 1rem;\n}\ndiv.filter-menu .filter.filter-active {\n  background: rgba(160, 160, 160, 0.2);\n}\n\n.filter-menu-list li {\n  color: #ffffff;\n  text-transform: initial;\n  font-family: Lato, sans-serif;\n}\n.filter-menu-list li.item-active {\n  font-weight: 700;\n}\n\n.filter-menu-icon {\n  margin-left: auto;\n  min-width: 0;\n}", ""]);
+exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.ecogesture-root {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 1rem 1.5rem 2.5rem 1.5rem;\n  gap: 1rem;\n}\n.ecogesture-root .efficiency-button-content {\n  max-width: 52rem;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n}\n.ecogesture-root .efficiency-button-content .selection {\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  gap: 1rem;\n  color: white;\n  text-align: center;\n}\n.ecogesture-root .efficiency-button-content .btnFilter {\n  max-width: 13rem;\n  justify-content: flex-start;\n}\n.ecogesture-root .efficiency-button-content .btnFilter span {\n  padding-left: 0.5rem;\n}\n.ecogesture-root .efficiency-button-content .btnFilter span.opened {\n  color: #e3b82a;\n}\n.ecogesture-root .ecogesture-content {\n  display: flex;\n  flex-wrap: wrap;\n  max-width: 53rem;\n  animation: appear 600ms ease;\n  width: 100%;\n  gap: 1rem;\n}\n@keyframes appear {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n.ecogesture-root .ecogesture-content .ecogesture-content-loading {\n  height: 80vh;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  color: #e0e0e0;\n}\n.ecogesture-root .ecogesture-content .ecogesture-list-item {\n  box-sizing: border-box;\n  height: 8rem;\n  animation: appear 600ms ease;\n  display: flex;\n  flex: 1;\n  flex-basis: 45%;\n  max-width: 48%;\n}\n.ecogesture-root .ecogesture-content .ecogesture-list-item > button {\n  height: 100%;\n  overflow: hidden;\n  animation: appear 600ms ease;\n}\n.ecogesture-root .ec-filter-error {\n  color: #e0e0e0;\n  text-align: center;\n  margin-top: 2rem;\n}\n.ecogesture-root .ec-filter-error div:first-child {\n  margin-bottom: 1rem;\n}\n\ndiv.filter-menu {\n  margin-top: 3.5rem;\n  margin-left: -0.5rem;\n  color: white;\n  background: linear-gradient(0deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.09)), linear-gradient(180deg, #323339 0%, #25262b 100%);\n  border: 1px solid #a0a0a0;\n  box-sizing: border-box;\n  box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);\n  border-radius: 4px;\n  z-index: 3;\n  width: 220px;\n  padding: 0.5rem 0rem;\n  font-size: 0.875rem;\n  left: 0;\n  transition: all 300ms ease;\n}\ndiv.filter-menu.opened {\n  display: block;\n}\ndiv.filter-menu .filter {\n  padding: 0 1rem;\n}\ndiv.filter-menu .filter.filter-active {\n  background: rgba(160, 160, 160, 0.2);\n}\n\n.filter-menu-list li {\n  color: #ffffff;\n  text-transform: initial;\n  font-family: Lato, sans-serif;\n}\n.filter-menu-list li.item-active {\n  font-weight: 700;\n}\n.filter-menu-list li:focus-visible {\n  outline: 2px solid #1b8bff;\n  outline-offset: 2px;\n}\n\n.filter-menu-icon {\n  margin-left: auto;\n  min-width: 0;\n}", ""]);
 
 
 
@@ -406,6 +401,12 @@ var TabPanel = function TabPanel(_ref) {
     "aria-labelledby": "simple-tab-".concat(tab)
   }, children);
 };
+
+/**
+ * http://ecolyo.cozy.tools:8080/#/ecogestures
+ * http://ecolyo.cozy.tools:8080/#/ecogestures?tab=1
+ * http://ecolyo.cozy.tools:8080/#/ecogestures?tab=2
+ */
 var EcogestureTabsView = function EcogestureTabsView() {
   var _useI18n = (0, _I18n.useI18n)(),
     t = _useI18n.t;
diff --git a/7/ecolyo.62d0f8799ccda737a9e5.js b/7/ecolyo.1e90cb873be450d05a56.js
similarity index 99%
rename from 7/ecolyo.62d0f8799ccda737a9e5.js
rename to 7/ecolyo.1e90cb873be450d05a56.js
index 887a4a04296a277d70a1e4e0410d1ab7e5b38afa..90341943d67e2df667dbfafe88d8ca4234192196 100644
--- a/7/ecolyo.62d0f8799ccda737a9e5.js
+++ b/7/ecolyo.1e90cb873be450d05a56.js
@@ -80,7 +80,7 @@ var EstimatedConsumptionModal = function EstimatedConsumptionModal(_ref) {
                 return fluidsPricesService.getAllLastPrices();
               case 2:
                 prices = _context.sent;
-                if (subscribed && prices) {
+                if (prices) {
                   setPrices(prices);
                 }
               case 4:
@@ -92,7 +92,7 @@ var EstimatedConsumptionModal = function EstimatedConsumptionModal(_ref) {
       }));
       return _getAllLastPrices.apply(this, arguments);
     }
-    getAllLastPrices();
+    subscribed && getAllLastPrices();
     return function () {
       subscribed = false;
     };
diff --git a/8/ecolyo.52e866a28719760e1d4b.js b/8/ecolyo.42acbbc92a4cf3e13c3e.js
similarity index 97%
rename from 8/ecolyo.52e866a28719760e1d4b.js
rename to 8/ecolyo.42acbbc92a4cf3e13c3e.js
index 6418e11178c83bf016f9daf3281db1ff057024b2..42e015227c6129886989ba7db529fa671cd6761c 100644
--- a/8/ecolyo.52e866a28719760e1d4b.js
+++ b/8/ecolyo.42acbbc92a4cf3e13c3e.js
@@ -103,6 +103,9 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
 function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
 function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
 function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+/**
+ * http://ecolyo.cozy.tools:8080/#/ecogesture/ECOGESTURE0001
+ */
 var SingleEcogestureView = function SingleEcogestureView() {
   var _useI18n = (0, _I18n.useI18n)(),
     t = _useI18n.t;
@@ -189,25 +192,19 @@ var SingleEcogestureView = function SingleEcogestureView() {
                 return ecogestureService.getEcogesturesByIds([ecogestureID || '']);
               case 2:
                 data = _context2.sent;
-                if (!subscribed) {
-                  _context2.next = 15;
-                  break;
-                }
                 if (!(data !== null && data !== void 0 && data[0])) {
                   _context2.next = 12;
                   break;
                 }
                 setEcogesture(data[0]);
                 // Prevent case this key doesn't exist in doctype
-                _context2.next = 8;
+                _context2.next = 7;
                 return (0, _utils.importIconById)(data[0].id, 'ecogesture');
-              case 8:
+              case 7:
                 icon = _context2.sent;
-                if (subscribed) {
-                  setEcogestureIcon(icon || _default2.default);
-                  if ((currentChallenge === null || currentChallenge === void 0 ? void 0 : currentChallenge.exploration.ecogesture_id) === data[0]._id) {
-                    setValidExploration(currentChallenge.exploration.id);
-                  }
+                setEcogestureIcon(icon || _default2.default);
+                if ((currentChallenge === null || currentChallenge === void 0 ? void 0 : currentChallenge.exploration.ecogesture_id) === data[0]._id) {
+                  setValidExploration(currentChallenge.exploration.id);
                 }
                 _context2.next = 14;
                 break;
@@ -225,7 +222,7 @@ var SingleEcogestureView = function SingleEcogestureView() {
       }));
       return _getSingleEcogesture.apply(this, arguments);
     }
-    getSingleEcogesture();
+    subscribed && getSingleEcogesture();
     return function () {
       subscribed = false;
     };
@@ -351,7 +348,6 @@ var EcogestureNotFound = function EcogestureNotFound(_ref) {
   }), /*#__PURE__*/_react.default.createElement("div", {
     className: "text-18-bold head"
   }, text), /*#__PURE__*/_react.default.createElement(_core.Button, {
-    "aria-label": t('error_page.back'),
     onClick: function onClick() {
       return navigate("/".concat(returnPage));
     },
diff --git a/9/ecolyo.73a97eac0086801c9dc9.js b/9/ecolyo.f45e19d3c34ba67e355b.js
similarity index 95%
rename from 9/ecolyo.73a97eac0086801c9dc9.js
rename to 9/ecolyo.f45e19d3c34ba67e355b.js
index acdf013c01e75fb3b869940f0e6206eddc5eeedb..bd46ba8001c74eea135eac35f5e69a01300864db 100644
--- a/9/ecolyo.73a97eac0086801c9dc9.js
+++ b/9/ecolyo.f45e19d3c34ba67e355b.js
@@ -16,6 +16,9 @@ var _CozyBar = _interopRequireDefault(__webpack_require__("6pCu"));
 var _Header = _interopRequireDefault(__webpack_require__("0soq"));
 var _GCUContent = _interopRequireDefault(__webpack_require__("Tsab"));
 var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
+/**
+ * http://ecolyo.cozy.tools:8080/#/options/gcu
+ */
 var GCUView = function GCUView() {
   return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_CozyBar.default, {
     titleKey: "common.title_gcu",
diff --git a/app/ecolyo.0a6a4a1b5956baae2a4c.js b/app/ecolyo.4a6c58cfe16dca53ce12.js
similarity index 97%
rename from app/ecolyo.0a6a4a1b5956baae2a4c.js
rename to app/ecolyo.4a6c58cfe16dca53ce12.js
index 523999ed236437f519c2cf4972fc5c5009c5d33f..a5bb4ec7cceb72c37b645b2c306d69e5d6f419d3 100644
--- a/app/ecolyo.0a6a4a1b5956baae2a4c.js
+++ b/app/ecolyo.4a6c58cfe16dca53ce12.js
@@ -64,7 +64,7 @@
 /******/
 /******/ 	// script path function
 /******/ 	function jsonpScriptSrc(chunkId) {
-/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"3":"95b2454562935abe3938","4":"441219e784196cc9bbea","5":"dbb9361b7c3d2399eabb","6":"22960faffb0acb9e49a6","7":"62d0f8799ccda737a9e5","8":"52e866a28719760e1d4b","9":"73a97eac0086801c9dc9","10":"26edbface76655274ad8","11":"346fcb0fa7b2e3565ad3"}[chunkId] + ".js"
+/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"3":"6a2555d0fd2f917f5ede","4":"695280492ae6033997a0","5":"097c09aeec4cd782ebaf","6":"0b640b6f43df00eadbb5","7":"1e90cb873be450d05a56","8":"42acbbc92a4cf3e13c3e","9":"f45e19d3c34ba67e355b","10":"fe3625578fa387c11975","11":"346fcb0fa7b2e3565ad3"}[chunkId] + ".js"
 /******/ 	}
 /******/
 /******/ 	// The require function
@@ -334,7 +334,6 @@ var StepIdentity = function StepIdentity(_ref) {
     variant: "outlined",
     type: "text",
     id: "firstName",
-    name: "firstName",
     value: formData.firstname,
     onChange: function onChange(e) {
       return setFormData(function (prev) {
@@ -349,7 +348,6 @@ var StepIdentity = function StepIdentity(_ref) {
     variant: "outlined",
     type: "text",
     id: "lastName",
-    name: "lastName",
     required: true,
     value: formData.lastname,
     onChange: function onChange(e) {
@@ -364,7 +362,6 @@ var StepIdentity = function StepIdentity(_ref) {
     variant: "outlined",
     type: "email",
     id: "email",
-    name: "email",
     required: true,
     value: formData.email,
     onChange: function onChange(e) {
@@ -379,7 +376,6 @@ var StepIdentity = function StepIdentity(_ref) {
     variant: "outlined",
     type: "number",
     id: "zipCode",
-    name: "zipCode",
     required: true,
     value: formData.postalCode,
     onChange: function onChange(e) {
@@ -395,7 +391,6 @@ var StepIdentity = function StepIdentity(_ref) {
     label: t('auth.grdfgrandlyon.pceLabel'),
     variant: "outlined",
     id: "pce",
-    name: "pce",
     type: "number",
     inputMode: "numeric",
     required: true,
@@ -1852,11 +1847,11 @@ var StepConsent = function StepConsent(_ref) {
   }, t('auth.grdfgrandlyon.textConsent')), /*#__PURE__*/_react.default.createElement("ul", {
     className: "text-16-normal"
   }, /*#__PURE__*/_react.default.createElement("li", null, t('auth.grdfgrandlyon.consentLi1')), /*#__PURE__*/_react.default.createElement("li", null, t('auth.grdfgrandlyon.consentLi2'))), /*#__PURE__*/_react.default.createElement("label", {
+    htmlFor: "dataConsentGrdf",
     className: "inline"
   }, /*#__PURE__*/_react.default.createElement("input", {
-    id: "dataConsent",
+    id: "dataConsentGrdf",
     type: "checkbox",
-    name: "Data-consent-validation",
     className: "inputCheckbox",
     checked: formConsent.dataConsent,
     onChange: function onChange(e) {
@@ -1865,17 +1860,18 @@ var StepConsent = function StepConsent(_ref) {
           dataConsent: e.target.checked
         });
       });
-    }
+    },
+    required: true
   }), /*#__PURE__*/_react.default.createElement("span", {
     dangerouslySetInnerHTML: {
       __html: t('auth.grdfgrandlyon.consentCheck1')
     }
   })), /*#__PURE__*/_react.default.createElement("label", {
+    htmlFor: "pceConfirm",
     className: "inline"
   }, /*#__PURE__*/_react.default.createElement("input", {
-    id: "pdlConfirm",
+    id: "pceConfirm",
     type: "checkbox",
-    name: "Data-consent-validation",
     className: "inputCheckbox",
     checked: formConsent.pceConfirm,
     onChange: function onChange(e) {
@@ -1884,7 +1880,8 @@ var StepConsent = function StepConsent(_ref) {
           pceConfirm: e.target.checked
         });
       });
-    }
+    },
+    required: true
   }), /*#__PURE__*/_react.default.createElement("span", null, t('auth.grdfgrandlyon.consentCheck2'))));
 };
 var _default = StepConsent;
@@ -2228,9 +2225,7 @@ var ChallengeCardOnGoing = function ChallengeCardOnGoing(_ref) {
             switch (_context3.prev = _context3.next) {
               case 0:
                 (0, _utils.importIconById)(userChallenge.id, 'challenge').then(function (icon) {
-                  if (subscribed) {
-                    icon ? setChallengeIcon(icon) : setChallengeIcon(_CHALLENGE.default);
-                  }
+                  icon ? setChallengeIcon(icon) : setChallengeIcon(_CHALLENGE.default);
                 });
               case 1:
               case "end":
@@ -2241,7 +2236,7 @@ var ChallengeCardOnGoing = function ChallengeCardOnGoing(_ref) {
       }));
       return _importIcon.apply(this, arguments);
     }
-    importIcon();
+    subscribed && importIcon();
     return function () {
       subscribed = false;
     };
@@ -2258,14 +2253,9 @@ var ChallengeCardOnGoing = function ChallengeCardOnGoing(_ref) {
           while (1) {
             switch (_context5.prev = _context5.next) {
               case 0:
-                _context5.next = 2;
-                return challengeService.isChallengeDone(userChallenge, currentDataload);
+                isChallengeDone = challengeService.isChallengeDone(userChallenge, currentDataload);
+                setIsDone(isChallengeDone.isDone);
               case 2:
-                isChallengeDone = _context5.sent;
-                if (subscribed) {
-                  setIsDone(isChallengeDone.isDone);
-                }
-              case 4:
               case "end":
                 return _context5.stop();
             }
@@ -2307,7 +2297,7 @@ var ChallengeCardOnGoing = function ChallengeCardOnGoing(_ref) {
       };
     }();
     unlockDuel();
-    setChallengeResult();
+    subscribed && setChallengeResult();
     return function () {
       subscribed = false;
     };
@@ -2401,7 +2391,9 @@ var ChallengeCardOnGoing = function ChallengeCardOnGoing(_ref) {
     } else if (duel.state === _enums.UserDuelState.ONGOING && isDone) {
       return duelCard( /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
         className: "finalDuel result"
-      }, /*#__PURE__*/_react.default.createElement("span", null, t('challenge.card.ongoing.result')), /*#__PURE__*/_react.default.createElement("span", null, t('challenge.card.ongoing.duelDone'))), /*#__PURE__*/_react.default.createElement("div", {
+      }, /*#__PURE__*/_react.default.createElement("span", null, t('challenge.card.ongoing.result')), /*#__PURE__*/_react.default.createElement("span", {
+        className: "lowercase"
+      }, t('challenge.card.ongoing.duelDone'))), /*#__PURE__*/_react.default.createElement("div", {
         className: "notifChallenge"
       }, "1")), 'active');
     } else {
@@ -2777,9 +2769,7 @@ var QuizQuestion = function QuizQuestion(_ref) {
                 return quizService.getCustomQuestion(userChallenge.quiz.customQuestion, fluidTypes);
               case 3:
                 customQuestion = _context.sent;
-                if (subscribed) {
-                  setCustomQuestion(customQuestion);
-                }
+                setCustomQuestion(customQuestion);
               case 5:
               case "end":
                 return _context.stop();
@@ -2789,7 +2779,7 @@ var QuizQuestion = function QuizQuestion(_ref) {
       }));
       return _loadCustomQuestion.apply(this, arguments);
     }
-    if (isCustomQuest) {
+    if (isCustomQuest && subscribed) {
       loadCustomQuestion();
     }
     return function () {
@@ -3181,6 +3171,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
 function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
 function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
 var GrdfStep;
+/**
+ * http://ecolyo.cozy.tools:8080/#/connect/gas
+ */
 exports.GrdfStep = GrdfStep;
 (function (GrdfStep) {
   GrdfStep[GrdfStep["Identity"] = 0] = "Identity";
@@ -3649,6 +3642,9 @@ var _hooks = __webpack_require__("6FOS");
 var _ExplorationError = _interopRequireDefault(__webpack_require__("Cpvo"));
 var _ExplorationFinished = _interopRequireDefault(__webpack_require__("ongk"));
 var _ExplorationOngoing = _interopRequireDefault(__webpack_require__("iaBA"));
+/**
+ * http://ecolyo.cozy.tools:8080/#/challenges/
+ */
 var ExplorationView = function ExplorationView() {
   var _useAppSelector = (0, _hooks.useAppSelector)(function (state) {
       return state.ecolyo.challenge;
@@ -3942,29 +3938,9 @@ var ChallengeCardDone = function ChallengeCardDone(_ref) {
     currentChallenge = _useAppSelector.currentChallenge;
   var _useState = (0, _react.useState)(_default2.default),
     _useState2 = (0, _slicedToArray2.default)(_useState, 2),
-    winIcon = _useState2[0],
-    setWinIcon = _useState2[1];
-  var _useState3 = (0, _react.useState)(_default2.default),
-    _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
-    lossIcon = _useState4[0],
-    setLossIcon = _useState4[1];
-  var getUserSaving = function getUserSaving(_userChallenge) {
-    var label;
-    if (_userChallenge.success === _enums.UserChallengeSuccess.WIN) label = t('challenge.card_done.saving');else label = t('challenge.card_done.depense');
-    return label + ' ';
-  };
-  var getResultLabel = function getResultLabel(_userChallenge) {
-    switch (_userChallenge.success) {
-      case _enums.UserChallengeSuccess.WIN:
-        return t('challenge.card_done.win');
-      case _enums.UserChallengeSuccess.LOST:
-      default:
-        return t('challenge.card_done.lost');
-    }
-  };
-  var getIcon = function getIcon(_userChallenge) {
-    if (_userChallenge.success == _enums.UserChallengeSuccess.WIN) return winIcon;else return lossIcon;
-  };
+    resultIcon = _useState2[0],
+    setResultIcon = _useState2[1];
+  var isSuccess = userChallenge.success === _enums.UserChallengeSuccess.WIN;
   var goDuel = /*#__PURE__*/function () {
     var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
       return _regenerator.default.wrap(function _callee$(_context) {
@@ -4013,22 +3989,17 @@ var ChallengeCardDone = function ChallengeCardDone(_ref) {
     }
     function _handleEcogestureIcon() {
       _handleEcogestureIcon = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
-        var icon, icon2;
+        var icon;
         return _regenerator.default.wrap(function _callee3$(_context3) {
           while (1) {
             switch (_context3.prev = _context3.next) {
               case 0:
                 _context3.next = 2;
-                return (0, _utils.importIconById)(userChallenge.id + '-1', 'duelResult');
+                return (0, _utils.importIconById)(userChallenge.id + '-' + Number(isSuccess), 'duelResult');
               case 2:
                 icon = _context3.sent;
-                setWinIcon(icon || _default2.default);
-                _context3.next = 6;
-                return (0, _utils.importIconById)(userChallenge.id + '-0', 'duelResult');
-              case 6:
-                icon2 = _context3.sent;
-                setLossIcon(icon2 || _default2.default);
-              case 8:
+                setResultIcon(icon || _default2.default);
+              case 4:
               case "end":
                 return _context3.stop();
             }
@@ -4038,7 +4009,7 @@ var ChallengeCardDone = function ChallengeCardDone(_ref) {
       return _handleEcogestureIcon.apply(this, arguments);
     }
     handleEcogestureIcon();
-  }, [userChallenge]);
+  }, [isSuccess, userChallenge]);
   return /*#__PURE__*/_react.default.createElement("div", {
     className: "cardContent cardDone"
   }, /*#__PURE__*/_react.default.createElement("div", {
@@ -4047,7 +4018,7 @@ var ChallengeCardDone = function ChallengeCardDone(_ref) {
     className: "iconResult"
   }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
     className: "imgResult",
-    icon: getIcon(userChallenge),
+    icon: resultIcon,
     size: 180
   })), /*#__PURE__*/_react.default.createElement("div", {
     className: "statsResult"
@@ -4056,18 +4027,16 @@ var ChallengeCardDone = function ChallengeCardDone(_ref) {
       win: userChallenge.success === _enums.UserChallengeSuccess.WIN,
       lost: userChallenge.success === _enums.UserChallengeSuccess.LOST
     })
-  }, getResultLabel(userChallenge)), /*#__PURE__*/_react.default.createElement("span", {
+  }, isSuccess ? t('challenge.card_done.win') : t('challenge.card_done.lost')), /*#__PURE__*/_react.default.createElement("span", {
     className: "text-18"
-  }, getUserSaving(userChallenge), /*#__PURE__*/_react.default.createElement("span", {
+  }, isSuccess ? t('challenge.card_done.saving') : t('challenge.card_done.depense'), ' ', /*#__PURE__*/_react.default.createElement("span", {
     className: "text-18-bold"
   }, (0, _utils.formatNumberValues)(Math.abs(userChallenge.duel.threshold - userChallenge.duel.userConsumption)) + ' ', "\u20AC"), /*#__PURE__*/_react.default.createElement("br", null), t('challenge.card_done.final_defi'))), /*#__PURE__*/_react.default.createElement("div", {
     className: "buttons"
   }, /*#__PURE__*/_react.default.createElement(_core.Button, {
-    "aria-label": t('challenge.card_done.final_defi_view'),
     onClick: goDuel,
     className: "btnSecondary"
   }, t('challenge.card_done.final_defi_view')), /*#__PURE__*/_react.default.createElement(_core.Button, {
-    "aria-label": t('challenge.card_done.reset_defi'),
     onClick: handleChallengeReset,
     className: userChallenge.success === _enums.UserChallengeSuccess.WIN ? 'btnSecondary' : 'btnPrimaryNegative',
     disabled: currentChallenge !== null
@@ -4300,7 +4269,7 @@ exports.i(__webpack_require__("/O3k"), "");
 exports.push([module.i, "@import url(https://fonts.googleapis.com/css2?family=Lato:wght@400;700&display=swap);", ""]);
 
 // Module
-exports.push([module.i, "/* Cozy UI utilities classes */\n/* Cozy UI React components styles */\n/* App styles */\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\nhtml {\n  background: #121212;\n}\n\nbody {\n  background: #121212;\n  overflow: unset !important;\n  color: #e0e0e0;\n}\n\n.column {\n  display: flex;\n  flex-direction: column;\n}\n\n.row {\n  display: flex;\n  flex-direction: row;\n}\n\n.cozy-bar {\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-left: 0;\n}\n\n[role=banner] .coz-bar-container {\n  background-color: #ffffff;\n}\n@media only screen and (max-width : 768px) {\n  [role=banner] .coz-bar-container {\n    padding: 0.6rem 0 0 0;\n    background-color: unset;\n  }\n}\n\n.coz-bar-wrapper {\n  box-shadow: unset !important;\n  background: unset !important;\n}\n\n.coz-label {\n  color: #32363f;\n}\n\n.content-view-loading {\n  height: 80vh;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  color: #e0e0e0;\n}\n.content-view-loading .content-view-loading-text {\n  padding-top: 1rem;\n  margin: 0 2rem;\n  text-align: center;\n}\n.content-view-loading .content-view-loading-button {\n  max-width: 50vw;\n  margin-top: 1rem;\n}\n\n[role=main] {\n  /* width */\n  /* Track */\n  /* Handle */\n}\n[role=main]::-webkit-scrollbar {\n  width: 10px;\n}\n[role=main]::-webkit-scrollbar-track {\n  background: #3e4045;\n}\n[role=main]::-webkit-scrollbar-thumb {\n  background: #6f7074;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n* {\n  font-family: Lato, sans-serif;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np {\n  color: #a0a0a0;\n  font-family: Lato, sans-serif;\n}\n\n.home-title {\n  font-size: 1rem;\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 120%;\n  text-transform: uppercase;\n}\n\n.app-title {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: bold;\n  font-size: 21px;\n  line-height: 24px;\n  text-align: center;\n  letter-spacing: 0.15px;\n  color: #e0e0e0;\n  text-shadow: 0px -1px 0px #060609, 0px 1px 0px rgba(255, 255, 255, 0.07);\n}\n\n.text-10, .text-10-italic, .text-10-bold, .text-10-bold-capitalize, .text-10-bold-uppercase, .text-10-normal, .text-10-normal-150, .text-10-normal-uppercase {\n  font-style: normal;\n  font-size: 0.625rem;\n  line-height: 120%;\n}\n.text-10-normal, .text-10-normal-150, .text-10-normal-uppercase {\n  font-weight: normal;\n}\n.text-10-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-10-normal-150 {\n  line-height: 150%;\n}\n.text-10-bold, .text-10-bold-capitalize, .text-10-bold-uppercase {\n  font-weight: 700;\n}\n.text-10-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-10-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-10-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-12, .text-12-italic, .text-12-bold, .text-12-bold-capitalize, .text-12-bold-uppercase, .text-12-normal, .text-12-normal-150, .text-12-normal-uppercase {\n  font-style: normal;\n  font-size: 0.75rem;\n  line-height: 120%;\n}\n.text-12-normal, .text-12-normal-150, .text-12-normal-uppercase {\n  font-weight: normal;\n}\n.text-12-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-12-normal-150 {\n  line-height: 150%;\n}\n.text-12-bold, .text-12-bold-capitalize, .text-12-bold-uppercase {\n  font-weight: 700;\n}\n.text-12-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-12-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-12-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-13, .text-13-italic, .text-13-bold, .text-13-bold-capitalize, .text-13-bold-uppercase, .text-13-normal, .text-13-normal-150, .text-13-normal-uppercase {\n  font-style: normal;\n  font-size: 0.8125rem;\n  line-height: 120%;\n}\n.text-13-normal, .text-13-normal-150, .text-13-normal-uppercase {\n  font-weight: normal;\n}\n.text-13-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-13-normal-150 {\n  line-height: 150%;\n}\n.text-13-bold, .text-13-bold-capitalize, .text-13-bold-uppercase {\n  font-weight: 700;\n}\n.text-13-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-13-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-13-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-14, .text-14-italic, .text-14-bold, .text-14-bold-capitalize, .text-14-bold-uppercase, .text-14-normal, .text-14-normal-150, .text-14-normal-uppercase {\n  font-style: normal;\n  font-size: 0.875rem;\n  line-height: 120%;\n}\n.text-14-normal, .text-14-normal-150, .text-14-normal-uppercase {\n  font-weight: normal;\n}\n.text-14-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-14-normal-150 {\n  line-height: 150%;\n}\n.text-14-bold, .text-14-bold-capitalize, .text-14-bold-uppercase {\n  font-weight: 700;\n}\n.text-14-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-14-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-14-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-15, .text-15-italic, .text-15-bold, .text-15-bold-capitalize, .text-15-bold-uppercase, .text-15-normal, .text-15-normal-150, .text-15-normal-uppercase {\n  font-style: normal;\n  font-size: 0.938rem;\n  line-height: 120%;\n}\n.text-15-normal, .text-15-normal-150, .text-15-normal-uppercase {\n  font-weight: normal;\n}\n.text-15-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-15-normal-150 {\n  line-height: 150%;\n}\n.text-15-bold, .text-15-bold-capitalize, .text-15-bold-uppercase {\n  font-weight: 700;\n}\n.text-15-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-15-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-15-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-16, .text-16-italic, .text-16-bold, .text-16-bold-capitalize, .text-16-bold-uppercase, .text-16-normal, .text-16-normal-150, .text-16-normal-uppercase {\n  font-style: normal;\n  font-size: 1rem;\n  line-height: 120%;\n}\n.text-16-normal, .text-16-normal-150, .text-16-normal-uppercase {\n  font-weight: normal;\n}\n.text-16-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-16-normal-150 {\n  line-height: 150%;\n}\n.text-16-bold, .text-16-bold-capitalize, .text-16-bold-uppercase {\n  font-weight: 700;\n}\n.text-16-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-16-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-16-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-18, .text-18-italic, .text-18-bold, .text-18-bold-capitalize, .text-18-bold-uppercase, .text-18-normal, .text-18-normal-150, .text-18-normal-uppercase {\n  font-style: normal;\n  font-size: 1.125rem;\n  line-height: 120%;\n}\n.text-18-normal, .text-18-normal-150, .text-18-normal-uppercase {\n  font-weight: normal;\n}\n.text-18-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-18-normal-150 {\n  line-height: 150%;\n}\n.text-18-bold, .text-18-bold-capitalize, .text-18-bold-uppercase {\n  font-weight: 700;\n}\n.text-18-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-18-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-18-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-19, .text-19-italic, .text-19-bold, .text-19-bold-capitalize, .text-19-bold-uppercase, .text-19-normal, .text-19-normal-150, .text-19-normal-uppercase {\n  font-style: normal;\n  font-size: 1.188rem;\n  line-height: 120%;\n}\n.text-19-normal, .text-19-normal-150, .text-19-normal-uppercase {\n  font-weight: normal;\n}\n.text-19-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-19-normal-150 {\n  line-height: 150%;\n}\n.text-19-bold, .text-19-bold-capitalize, .text-19-bold-uppercase {\n  font-weight: 700;\n}\n.text-19-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-19-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-19-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-20, .text-20-italic, .text-20-bold, .text-20-bold-capitalize, .text-20-bold-uppercase, .text-20-normal, .text-20-normal-150, .text-20-normal-uppercase {\n  font-style: normal;\n  font-size: 1.25rem;\n  line-height: 120%;\n}\n.text-20-normal, .text-20-normal-150, .text-20-normal-uppercase {\n  font-weight: normal;\n}\n.text-20-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-20-normal-150 {\n  line-height: 150%;\n}\n.text-20-bold, .text-20-bold-capitalize, .text-20-bold-uppercase {\n  font-weight: 700;\n}\n.text-20-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-20-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-20-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-21, .text-21-italic, .text-21-bold, .text-21-bold-capitalize, .text-21-bold-uppercase, .text-21-normal, .text-21-normal-150, .text-21-normal-uppercase {\n  font-style: normal;\n  font-size: 1.313rem;\n  line-height: 120%;\n}\n.text-21-normal, .text-21-normal-150, .text-21-normal-uppercase {\n  font-weight: normal;\n}\n.text-21-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-21-normal-150 {\n  line-height: 150%;\n}\n.text-21-bold, .text-21-bold-capitalize, .text-21-bold-uppercase {\n  font-weight: 700;\n}\n.text-21-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-21-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-21-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-22, .text-22-italic, .text-22-bold, .text-22-bold-capitalize, .text-22-bold-uppercase, .text-22-normal, .text-22-normal-150, .text-22-normal-uppercase {\n  font-style: normal;\n  font-size: 1.375rem;\n  line-height: 120%;\n}\n.text-22-normal, .text-22-normal-150, .text-22-normal-uppercase {\n  font-weight: normal;\n}\n.text-22-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-22-normal-150 {\n  line-height: 150%;\n}\n.text-22-bold, .text-22-bold-capitalize, .text-22-bold-uppercase {\n  font-weight: 700;\n}\n.text-22-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-22-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-22-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-24, .text-24-italic, .text-24-bold, .text-24-bold-capitalize, .text-24-bold-uppercase, .text-24-normal, .text-24-normal-150, .text-24-normal-uppercase {\n  font-style: normal;\n  font-size: 1.5rem;\n  line-height: 120%;\n}\n.text-24-normal, .text-24-normal-150, .text-24-normal-uppercase {\n  font-weight: normal;\n}\n.text-24-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-24-normal-150 {\n  line-height: 150%;\n}\n.text-24-bold, .text-24-bold-capitalize, .text-24-bold-uppercase {\n  font-weight: 700;\n}\n.text-24-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-24-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-24-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-26, .text-26-italic, .text-26-bold, .text-26-bold-capitalize, .text-26-bold-uppercase, .text-26-normal, .text-26-normal-150, .text-26-normal-uppercase {\n  font-style: normal;\n  font-size: 1.625rem;\n  line-height: 120%;\n}\n.text-26-normal, .text-26-normal-150, .text-26-normal-uppercase {\n  font-weight: normal;\n}\n.text-26-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-26-normal-150 {\n  line-height: 150%;\n}\n.text-26-bold, .text-26-bold-capitalize, .text-26-bold-uppercase {\n  font-weight: 700;\n}\n.text-26-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-26-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-26-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-28, .text-28-italic, .text-28-bold, .text-28-bold-capitalize, .text-28-bold-uppercase, .text-28-normal, .text-28-normal-150, .text-28-normal-uppercase {\n  font-style: normal;\n  font-size: 1.75rem;\n  line-height: 120%;\n}\n.text-28-normal, .text-28-normal-150, .text-28-normal-uppercase {\n  font-weight: normal;\n}\n.text-28-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-28-normal-150 {\n  line-height: 150%;\n}\n.text-28-bold, .text-28-bold-capitalize, .text-28-bold-uppercase {\n  font-weight: 700;\n}\n.text-28-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-28-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-28-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-36, .text-36-italic, .text-36-bold, .text-36-bold-capitalize, .text-36-bold-uppercase, .text-36-normal, .text-36-normal-150, .text-36-normal-uppercase {\n  font-style: normal;\n  font-size: 2.25rem;\n  line-height: 120%;\n}\n.text-36-normal, .text-36-normal-150, .text-36-normal-uppercase {\n  font-weight: normal;\n}\n.text-36-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-36-normal-150 {\n  line-height: 150%;\n}\n.text-36-bold, .text-36-bold-capitalize, .text-36-bold-uppercase {\n  font-weight: 700;\n}\n.text-36-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-36-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-36-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n/* Card */\n.card-title-on {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1.125rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n.card-text-bold {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: bold;\n  font-size: 1rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n.card-indicator {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n.card-text {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n/* Chart */\n.chart-ticks-x-text {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1rem;\n  line-height: 120%;\n}\n@media only screen and (max-width : 768px) {\n  .chart-ticks-x-text {\n    font-size: 0.685rem;\n  }\n}\n\n.chart-ticks-y-text {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 0.9rem;\n  line-height: 120%;\n}\n@media only screen and (max-width : 768px) {\n  .chart-ticks-y-text {\n    font-size: 0.75rem;\n  }\n}\n\n/* Cozy bar */\n.cozybar {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: bold;\n  font-size: 1.3125rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.axis {\n  color: #7b7b7b;\n}\n.axis .tick-text {\n  fill: #7b7b7b;\n}\n.axis .tick-text.tick-text-selected {\n  fill: #e0e0e0;\n}\n.axis .separator {\n  text-align: center;\n  margin: 0 2px;\n  font-size: 1rem !important;\n}\n\n.value-text {\n  fill: #7b7b7b;\n}\n.value-text.selected {\n  fill: #e0e0e0;\n}\n\n.barContainer.disabled *,\n.barFill.disabled * {\n  cursor: default !important;\n}\n.barContainer:hover,\n.barFill:hover {\n  cursor: pointer;\n}\n\n.background-true {\n  opacity: 0.1;\n}\n.background-true:hover {\n  cursor: pointer;\n}\n\n.background-false {\n  opacity: 0;\n}\n\n.bar-compare-ELECTRICITY:hover,\n.bar-compare-GAS:hover,\n.bar-compare-WATER:hover,\n.bar-compare-MULTIFLUID:hover,\n.bar-MULTIFLUID:hover,\n.bar-WATER:hover,\n.bar-GAS:hover,\n.bar-ELECTRICITY:hover {\n  cursor: pointer;\n}\n.bar-compare-ELECTRICITY:hover.disabled,\n.bar-compare-GAS:hover.disabled,\n.bar-compare-WATER:hover.disabled,\n.bar-compare-MULTIFLUID:hover.disabled,\n.bar-MULTIFLUID:hover.disabled,\n.bar-WATER:hover.disabled,\n.bar-GAS:hover.disabled,\n.bar-ELECTRICITY:hover.disabled {\n  cursor: default;\n}\n\n.bar-ELECTRICITY {\n  fill: #5d3d2a;\n}\n.bar-ELECTRICITY.selected {\n  fill: #d87b39;\n  filter: drop-shadow(0 -0.1rem 0.2rem #d87b39);\n}\n\n.bar-compare-ELECTRICITY {\n  fill: #795c47;\n}\n.bar-compare-ELECTRICITY.selected {\n  fill: #e2bca1;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1);\n}\n\n.bar-WATER {\n  fill: #20415e;\n}\n.bar-WATER.selected {\n  fill: #3a98ec;\n  filter: drop-shadow(0 -0.1rem 0.2rem #3a98ec);\n}\n\n.bar-compare-WATER {\n  fill: #4d5c6e;\n}\n.bar-compare-WATER.selected {\n  fill: #abd4fa;\n  filter: drop-shadow(0 -0.1rem 0.2rem #abd4fa);\n}\n\n.bar-GAS {\n  fill: #184940;\n}\n.bar-GAS.selected {\n  fill: #45d1b8;\n  filter: drop-shadow(0 -0.1rem 0.2rem #45d1b8);\n}\n\n.bar-compare-GAS {\n  fill: #597773;\n}\n.bar-compare-GAS.selected {\n  fill: #a8f7e9;\n  filter: drop-shadow(0 -0.1rem 0.2rem #a8f7e9);\n}\n\n.bar-MULTIFLUID {\n  fill: #705d1d;\n}\n.bar-MULTIFLUID.selected {\n  fill: #e3b82a;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n.bar-MULTIFLUID.disabled:hover {\n  cursor: default;\n}\n\n.bar-duel {\n  fill: #61f0f2;\n}\n.bar-duel.selected {\n  fill: #61f0f2;\n  filter: drop-shadow(0 -0.1rem 0.2rem #61f0f2);\n}\n.bar-duel.disabled:hover {\n  cursor: default;\n}\n\n.bar-UPCOMING {\n  fill: #7b7b7b;\n  opacity: 0.6;\n}\n.bar-UPCOMING.selected {\n  fill: #7b7b7b;\n}\n.bar-UPCOMING.disabled:hover {\n  cursor: default;\n}\n\n.bar-compare-MULTIFLUID {\n  fill: #7d6a4e;\n}\n.bar-compare-MULTIFLUID.selected {\n  fill: #ffd597;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n\n.bar-average {\n  stroke-width: 2;\n  stroke: #e3b82a;\n}\n\n.week {\n  fill: #e2bca1;\n}\n.week.selected {\n  fill: #e2bca1;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1);\n}\n\n.weekend {\n  fill: #ffd597;\n}\n.weekend.selected {\n  fill: #ffd597;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n\n.barValue {\n  outline: none;\n}\n.barValue:focus-visible {\n  outline: 1px solid;\n}\n\n/** Animation **/\n.bounce-1 {\n  animation-name: bounce-1;\n  animation-timing-function: cubic-bezier(1, 1, 0.42, 1);\n  animation-iteration-count: 1;\n  transform-origin: bottom center;\n  transform-box: fill-box;\n}\n\n@keyframes bounce-1 {\n  0% {\n    transform: scale(0.1, 0.1);\n  }\n  28% {\n    transform: scale(0.1, 1.1);\n  }\n  45% {\n    transform: scale(0.8, 0.95);\n  }\n  55% {\n    transform: scale(1, 1);\n  }\n  65% {\n    transform: scale(1, 0.98);\n  }\n  75% {\n    transform: scale(1, 1);\n  }\n}\n.bounce-2 {\n  animation-name: bounce-2;\n  animation-timing-function: cubic-bezier(1, 1, 0.42, 1);\n  animation-iteration-count: 1;\n  transform-origin: bottom center;\n  transform-box: fill-box;\n}\n\n@keyframes bounce-2 {\n  0% {\n    transform: scale(1, 1);\n  }\n  28% {\n    transform: scale(1, 1.1);\n  }\n  45% {\n    transform: scale(0.8, 0.95);\n  }\n  55% {\n    transform: scale(1, 1);\n  }\n  65% {\n    transform: scale(1, 0.98);\n  }\n  75% {\n    transform: scale(1, 1);\n  }\n}\n/** Animation delay **/\n.delay {\n  animation-duration: 0.4s;\n}\n\n.delay--0 {\n  animation-duration: 0.4s;\n}\n\n.delay--1 {\n  animation-duration: 0.48s;\n}\n\n.delay--2 {\n  animation-duration: 0.56s;\n}\n\n.delay--3 {\n  animation-duration: 0.64s;\n}\n\n.delay--4 {\n  animation-duration: 0.72s;\n}\n\n.delay--5 {\n  animation-duration: 0.8s;\n}\n\n.delay--6 {\n  animation-duration: 0.88s;\n}\n\n.delay--7 {\n  animation-duration: 0.96s;\n}\n\n.delay--8 {\n  animation-duration: 1.04s;\n}\n\n.delay--9 {\n  animation-duration: 1.12s;\n}\n\n.delay--10 {\n  animation-duration: 1.2s;\n}\n\n.delay--11 {\n  animation-duration: 1.28s;\n}\n\n.delay--12 {\n  animation-duration: 1.36s;\n}\n\n.delay--13 {\n  animation-duration: 1.44s;\n}\n\n.delay--14 {\n  animation-duration: 1.52s;\n}\n\n.delay--15 {\n  animation-duration: 1.6s;\n}\n\n.delay--16 {\n  animation-duration: 1.68s;\n}\n\n.delay--17 {\n  animation-duration: 1.76s;\n}\n\n.delay--18 {\n  animation-duration: 1.84s;\n}\n\n.delay--19 {\n  animation-duration: 1.92s;\n}\n\n.delay--20 {\n  animation-duration: 2s;\n}\n\n.delay--21 {\n  animation-duration: 2.08s;\n}\n\n.delay--22 {\n  animation-duration: 2.16s;\n}\n\n.delay--23 {\n  animation-duration: 2.24s;\n}\n\n.delay--24 {\n  animation-duration: 2.32s;\n}\n\n.delay--25 {\n  animation-duration: 2.4s;\n}\n\n.delay--26 {\n  animation-duration: 2.48s;\n}\n\n.delay--27 {\n  animation-duration: 2.56s;\n}\n\n.delay--28 {\n  animation-duration: 2.64s;\n}\n\n.delay--29 {\n  animation-duration: 2.72s;\n}\n\n.delay--30 {\n  animation-duration: 2.8s;\n}\n\n.delay--31 {\n  animation-duration: 2.88s;\n}\n\n.delay--32 {\n  animation-duration: 2.96s;\n}\n\n.delay--33 {\n  animation-duration: 3.04s;\n}\n\n.delay--34 {\n  animation-duration: 3.12s;\n}\n\n.delay--35 {\n  animation-duration: 3.2s;\n}\n\n.delay--36 {\n  animation-duration: 3.28s;\n}\n\n.delay--37 {\n  animation-duration: 3.36s;\n}\n\n.delay--38 {\n  animation-duration: 3.44s;\n}\n\n.delay--39 {\n  animation-duration: 3.52s;\n}\n\n.delay--40 {\n  animation-duration: 3.6s;\n}\n\n.delay--41 {\n  animation-duration: 3.68s;\n}\n\n.delay--42 {\n  animation-duration: 3.76s;\n}\n\n.delay--43 {\n  animation-duration: 3.84s;\n}\n\n.delay--44 {\n  animation-duration: 3.92s;\n}\n\n.delay--45 {\n  animation-duration: 4s;\n}\n\n.delay--46 {\n  animation-duration: 4.08s;\n}\n\n.delay--47 {\n  animation-duration: 4.16s;\n}\n\n.delay--48 {\n  animation-duration: 4.24s;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\nbutton span {\n  font-size: 1rem;\n  font-weight: 700;\n}\nbutton.btnPrimary {\n  background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;\n  border: 1px solid;\n  border-color: transparent;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n}\nbutton.btnPrimary span:first-child {\n  color: #121212;\n}\nbutton.btnPrimary:hover, button.btnPrimary:focus, button.btnPrimary.active, button.btnPrimary:disabled {\n  background-color: #b89318;\n}\nbutton.btnPrimary:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\nbutton.btnSecondary {\n  background: transparent;\n  border: 1px solid;\n  border-color: #e0e0e0;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n}\nbutton.btnSecondary span:first-child {\n  color: #e0e0e0;\n}\nbutton.btnSecondary:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\nbutton.btnText {\n  text-decoration: underline;\n}\nbutton.btnText span {\n  text-transform: none;\n  font-weight: 400;\n}\nbutton.btnPrimaryNegative {\n  background: linear-gradient(180deg, #61f0f2 0%, #48c2c4 100%);\n  border: 1px solid;\n  border-color: transparent;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n}\nbutton.btnPrimaryNegative span:first-child {\n  color: #121212;\n}\nbutton.btnPrimaryNegative:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\nbutton.btnPrimaryNegative:hover {\n  opacity: 0.7;\n}\nbutton.btnIncrement {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  border: 1px solid;\n  border-color: transparent;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n  min-width: 40px;\n  width: 40px;\n  height: 40px;\n  border-radius: 4px;\n  box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.55);\n}\nbutton.btnIncrement span:first-child {\n  color: #ffffff;\n}\nbutton.btnIncrement:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ninput.inputText,\ninput.inputNumber {\n  box-sizing: border-box;\n  border: 1px solid #7b7b7b;\n  background: transparent;\n  transition: all 300ms ease;\n  color: #e0e0e0;\n}\ninput.inputText:focus, input.inputText:focus-visible,\ninput.inputNumber:focus,\ninput.inputNumber:focus-visible {\n  border-color: #e3b82a;\n  outline: none;\n}\n\ninput.inputText {\n  appearance: none;\n  border-radius: 4px;\n  height: 45px;\n  width: 100%;\n  max-width: 280px;\n  padding: 0 0.5rem;\n}\n\ninput.inputNumber {\n  border-radius: 2px;\n  height: 40px;\n  width: 60px;\n  max-width: 5rem;\n  text-align: center;\n}\n\ninput.inputCheckbox {\n  width: 24px;\n  min-width: 24px;\n  height: 24px;\n  display: flex;\n  align-items: center;\n  border-radius: 4px;\n  cursor: pointer;\n  appearance: none;\n  background: #121212;\n  position: relative;\n  border: solid 1px #7b7b7b;\n}\ninput.inputCheckbox:checked {\n  background: #e3b82a;\n  border-color: #e3b82a;\n}\ninput.inputCheckbox:checked:before, input.inputCheckbox:checked:after {\n  content: \"\";\n  position: absolute;\n  display: inline-block;\n  background: #121212;\n  border-radius: 0.5rem;\n}\ninput.inputCheckbox:checked:before {\n  width: 3px;\n  height: 12px;\n  left: 10px;\n  top: 4px;\n  transform: rotate(41deg);\n}\ninput.inputCheckbox:checked:after {\n  width: 3px;\n  height: 6px;\n  left: 5px;\n  top: 8px;\n  transform: rotate(133deg);\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.card {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  box-sizing: border-box;\n  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.75);\n  border-radius: 4px;\n  padding: 16px;\n}\n.card:hover {\n  background: linear-gradient(180deg, rgba(70, 71, 77, 0.7) 0%, rgba(57, 58, 63, 0.7) 100%);\n}\n.card.rich-card {\n  padding: 16px;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ndiv.modal-root .MuiBackdrop-root {\n  background-color: hsla(231deg, 11%, 12%, 0.85);\n}\n\ndiv.modal-paper {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  width: 36rem;\n  max-width: 100%;\n  max-height: 90vh;\n  padding: 2rem;\n  box-sizing: border-box;\n  box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);\n  border-radius: 4px;\n  margin: 0 0 0 13.75rem;\n  align-items: center;\n  color: #ffffff;\n}\n@media only screen and (max-width : 1023px) {\n  div.modal-paper {\n    width: 35rem;\n    margin: 0;\n  }\n}\n@media only screen and (max-width : 768px) {\n  div.modal-paper {\n    padding: 1rem 1rem 1.5rem;\n    width: 85%;\n    max-width: 35rem;\n    margin: 0;\n  }\n}\ndiv.modal-paper.no-padding {\n  padding: 0;\n}\ndiv.modal-paper.blue-border {\n  border: 1px solid rgba(88, 255, 255, 0.2509803922);\n}\ndiv.modal-paper.blue-light-border {\n  border: 1px solid #61f0f2;\n}\ndiv.modal-paper.yellow-border {\n  border: 1px solid rgba(227, 184, 42, 0.4);\n}\ndiv.modal-paper .modal-paper-close-button {\n  position: absolute;\n  top: 0.5rem;\n  right: 0.5rem;\n  padding: 5px 5px;\n  z-index: 10;\n}\n\ndiv.modal-paper-full-screen {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  width: 100%;\n  max-width: 100%;\n  height: 100%;\n  max-height: 100%;\n  padding: 0;\n  margin: 0;\n  box-sizing: border-box;\n  box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);\n  border-radius: 4px;\n  color: #ffffff;\n  display: flex;\n  align-items: center;\n}\ndiv.modal-paper-full-screen.dark-background {\n  background: #121212;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ndiv.expansion-panel-root {\n  margin: 1.2rem 0;\n  color: #e0e0e0;\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  border-radius: 4px;\n  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.75);\n  transition: background-color 0.6s ease;\n  box-sizing: border-box;\n}\ndiv.expansion-panel-root.Mui-expanded:first-child {\n  margin: 1.2rem 0;\n}\ndiv.expansion-panel-root.Mui-expanded:last-child {\n  margin: 1.2rem 0;\n}\ndiv.expansion-panel-root.red-border {\n  border: 1px solid #d25959;\n}\n\ndiv.expansion-panel-summary {\n  padding: 0.25rem 1.2rem;\n  min-height: 4rem;\n}\ndiv.expansion-panel-summary.Mui-focused {\n  border-radius: 4px;\n  background-color: unset;\n  box-shadow: 0 0 0 1px #e0e0e0;\n}\ndiv.expansion-panel-summary.Mui-expanded {\n  min-height: 4rem;\n}\ndiv.expansion-panel-summary.Mui-expanded.small {\n  min-height: 3rem;\n}\ndiv.expansion-panel-summary.small {\n  padding: 0 1.2rem;\n  min-height: 3rem;\n}\ndiv.expansion-panel-summary.bold-text {\n  font-weight: bold;\n}\n\ndiv.expansion-panel-content {\n  display: flex;\n  align-items: center;\n}\ndiv.expansion-panel-content.Mui-expanded {\n  margin: 0.75rem 0;\n}\n\ndiv.expansion-panel-details {\n  padding: 0 1.2rem 1.2rem;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\na {\n  color: #deaf0e;\n}\na:visited {\n  color: #deaf0e;\n}\n\na:focus {\n  outline: none;\n  box-shadow: inset 0 0 0 1px #e0e0e0;\n}\na:focus > div:first-child {\n  box-shadow: 0 0 0 1px #e0e0e0;\n}\n\na.MuiLink-underlineHover:hover {\n  text-decoration: none;\n}\n\na.MuiTypography-colorPrimary {\n  color: #e0e0e0;\n}\n\n:root {\n  white-space: pre-line;\n  --blue: #58ffff;\n  --blue40: rgba(88, 255, 255, 0.2509803922);\n  --blueBackground: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n  --blueRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n  --blueRadialGradientTrans: radial-gradient(circle, #58ffff 0%, rgba(255, 255, 255, 0) 100%);\n  --elecColor: #d87b39;\n  --elecColor40: rgba(216, 123, 57, 0.4);\n  --elecCompareColor: #e2bca1;\n  --gasColor: #45d1b8;\n  --gasColor40: rgba(69, 209, 184, 0.4);\n  --gasCompareColor: #a8f7e9;\n  --waterColor: #3a98ec;\n  --waterColor40: rgba(58, 152, 236, 0.4);\n  --waterCompareColor: #abd4fa;\n  --multiColor: #e3b82a;\n  --multiCompareColor: #ffd597;\n  --redPrimary: #d25959;\n  --greyBright: #e0e0e0;\n  --greyDark: #7b7b7b;\n  --textWhite: #ffffff;\n  --softGrey: #a0a0a0;\n  --darkLight: #25262b;\n  --darkLight2: #121212;\n  --textFont: Lato, sans-serif;\n  --greyLinearGradientBackground: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  --multiColorRadialGradientTrans: radial-gradient(circle, #e3b82a 0%, rgba(255, 255, 255, 0) 100%);\n  --elecColorRadialGradientTrans: radial-gradient(circle, #d87b39 0%, rgba(255, 255, 255, 0) 100%);\n  --waterColorRadialGradientTrans: radial-gradient(circle, #3a98ec 0%, rgba(255, 255, 255, 0) 100%);\n  --gasColorRadialGradientTrans: radial-gradient(circle, #e3b82a 0%, rgba(255, 255, 255, 0) 100%);\n  --multiColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;\n  --elecColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(158, 67, 2, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #d87b39;\n  --gasColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(4, 106, 88, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #45d1b8;\n  --waterColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(2, 93, 174, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #3a98ec;\n}\n\n.application {\n  overflow-x: hidden;\n  background-color: #121212;\n}\n\n.accordion-icon {\n  color: #ffffff;\n}\n\n.loaderContainer {\n  height: 80vh;\n  display: flex;\n  flex: 1;\n  justify-content: center;\n  align-items: center;\n}\n\n.makeStyles-fab-1 {\n  top: 12px;\n  left: 3rem !important;\n  width: 36px !important;\n  height: 36px !important;\n  background-color: #323339 !important;\n}\n\ninput:-webkit-autofill,\ninput:-webkit-autofill:hover,\ninput:-webkit-autofill:focus,\ninput:-webkit-autofill:active {\n  -webkit-box-shadow: 0 0 0 30px #1b1c22 inset !important;\n}", ""]);
+exports.push([module.i, "/* Cozy UI utilities classes */\n/* Cozy UI React components styles */\n/* App styles */\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\nhtml {\n  background: #121212;\n}\n\nbody {\n  background: #121212;\n  overflow: unset !important;\n  color: #e0e0e0;\n}\n\n.column {\n  display: flex;\n  flex-direction: column;\n}\n\n.row {\n  display: flex;\n  flex-direction: row;\n}\n\n.cozy-bar {\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-left: 0;\n}\n\n[role=banner] .coz-bar-container {\n  background-color: #ffffff;\n}\n@media only screen and (max-width : 768px) {\n  [role=banner] .coz-bar-container {\n    padding: 0.6rem 0 0 0;\n    background-color: unset;\n  }\n}\n\n.coz-bar-wrapper {\n  box-shadow: unset !important;\n  background: unset !important;\n}\n\n.coz-label {\n  color: #32363f;\n}\n\n.content-view-loading {\n  height: 80vh;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  color: #e0e0e0;\n}\n.content-view-loading .content-view-loading-text {\n  padding-top: 1rem;\n  margin: 0 2rem;\n  text-align: center;\n}\n.content-view-loading .content-view-loading-button {\n  max-width: 50vw;\n  margin-top: 1rem;\n}\n\n[role=main] {\n  /* width */\n  /* Track */\n  /* Handle */\n}\n[role=main]::-webkit-scrollbar {\n  width: 10px;\n}\n[role=main]::-webkit-scrollbar-track {\n  background: #3e4045;\n}\n[role=main]::-webkit-scrollbar-thumb {\n  background: #6f7074;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n* {\n  font-family: Lato, sans-serif;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np {\n  color: #a0a0a0;\n  font-family: Lato, sans-serif;\n}\n\n.home-title {\n  font-size: 1rem;\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 120%;\n  text-transform: uppercase;\n}\n\n.app-title {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: bold;\n  font-size: 21px;\n  line-height: 24px;\n  text-align: center;\n  letter-spacing: 0.15px;\n  color: #e0e0e0;\n  text-shadow: 0px -1px 0px #060609, 0px 1px 0px rgba(255, 255, 255, 0.07);\n}\n\n.text-10, .text-10-italic, .text-10-bold, .text-10-bold-capitalize, .text-10-bold-uppercase, .text-10-normal, .text-10-normal-150, .text-10-normal-uppercase {\n  font-style: normal;\n  font-size: 0.625rem;\n  line-height: 120%;\n}\n.text-10-normal, .text-10-normal-150, .text-10-normal-uppercase {\n  font-weight: normal;\n}\n.text-10-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-10-normal-150 {\n  line-height: 150%;\n}\n.text-10-bold, .text-10-bold-capitalize, .text-10-bold-uppercase {\n  font-weight: 700;\n}\n.text-10-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-10-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-10-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-12, .text-12-italic, .text-12-bold, .text-12-bold-capitalize, .text-12-bold-uppercase, .text-12-normal, .text-12-normal-150, .text-12-normal-uppercase {\n  font-style: normal;\n  font-size: 0.75rem;\n  line-height: 120%;\n}\n.text-12-normal, .text-12-normal-150, .text-12-normal-uppercase {\n  font-weight: normal;\n}\n.text-12-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-12-normal-150 {\n  line-height: 150%;\n}\n.text-12-bold, .text-12-bold-capitalize, .text-12-bold-uppercase {\n  font-weight: 700;\n}\n.text-12-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-12-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-12-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-13, .text-13-italic, .text-13-bold, .text-13-bold-capitalize, .text-13-bold-uppercase, .text-13-normal, .text-13-normal-150, .text-13-normal-uppercase {\n  font-style: normal;\n  font-size: 0.8125rem;\n  line-height: 120%;\n}\n.text-13-normal, .text-13-normal-150, .text-13-normal-uppercase {\n  font-weight: normal;\n}\n.text-13-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-13-normal-150 {\n  line-height: 150%;\n}\n.text-13-bold, .text-13-bold-capitalize, .text-13-bold-uppercase {\n  font-weight: 700;\n}\n.text-13-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-13-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-13-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-14, .text-14-italic, .text-14-bold, .text-14-bold-capitalize, .text-14-bold-uppercase, .text-14-normal, .text-14-normal-150, .text-14-normal-uppercase {\n  font-style: normal;\n  font-size: 0.875rem;\n  line-height: 120%;\n}\n.text-14-normal, .text-14-normal-150, .text-14-normal-uppercase {\n  font-weight: normal;\n}\n.text-14-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-14-normal-150 {\n  line-height: 150%;\n}\n.text-14-bold, .text-14-bold-capitalize, .text-14-bold-uppercase {\n  font-weight: 700;\n}\n.text-14-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-14-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-14-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-15, .text-15-italic, .text-15-bold, .text-15-bold-capitalize, .text-15-bold-uppercase, .text-15-normal, .text-15-normal-150, .text-15-normal-uppercase {\n  font-style: normal;\n  font-size: 0.938rem;\n  line-height: 120%;\n}\n.text-15-normal, .text-15-normal-150, .text-15-normal-uppercase {\n  font-weight: normal;\n}\n.text-15-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-15-normal-150 {\n  line-height: 150%;\n}\n.text-15-bold, .text-15-bold-capitalize, .text-15-bold-uppercase {\n  font-weight: 700;\n}\n.text-15-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-15-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-15-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-16, .text-16-italic, .text-16-bold, .text-16-bold-capitalize, .text-16-bold-uppercase, .text-16-normal, .text-16-normal-150, .text-16-normal-uppercase {\n  font-style: normal;\n  font-size: 1rem;\n  line-height: 120%;\n}\n.text-16-normal, .text-16-normal-150, .text-16-normal-uppercase {\n  font-weight: normal;\n}\n.text-16-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-16-normal-150 {\n  line-height: 150%;\n}\n.text-16-bold, .text-16-bold-capitalize, .text-16-bold-uppercase {\n  font-weight: 700;\n}\n.text-16-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-16-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-16-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-18, .text-18-italic, .text-18-bold, .text-18-bold-capitalize, .text-18-bold-uppercase, .text-18-normal, .text-18-normal-150, .text-18-normal-uppercase {\n  font-style: normal;\n  font-size: 1.125rem;\n  line-height: 120%;\n}\n.text-18-normal, .text-18-normal-150, .text-18-normal-uppercase {\n  font-weight: normal;\n}\n.text-18-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-18-normal-150 {\n  line-height: 150%;\n}\n.text-18-bold, .text-18-bold-capitalize, .text-18-bold-uppercase {\n  font-weight: 700;\n}\n.text-18-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-18-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-18-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-19, .text-19-italic, .text-19-bold, .text-19-bold-capitalize, .text-19-bold-uppercase, .text-19-normal, .text-19-normal-150, .text-19-normal-uppercase {\n  font-style: normal;\n  font-size: 1.188rem;\n  line-height: 120%;\n}\n.text-19-normal, .text-19-normal-150, .text-19-normal-uppercase {\n  font-weight: normal;\n}\n.text-19-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-19-normal-150 {\n  line-height: 150%;\n}\n.text-19-bold, .text-19-bold-capitalize, .text-19-bold-uppercase {\n  font-weight: 700;\n}\n.text-19-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-19-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-19-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-20, .text-20-italic, .text-20-bold, .text-20-bold-capitalize, .text-20-bold-uppercase, .text-20-normal, .text-20-normal-150, .text-20-normal-uppercase {\n  font-style: normal;\n  font-size: 1.25rem;\n  line-height: 120%;\n}\n.text-20-normal, .text-20-normal-150, .text-20-normal-uppercase {\n  font-weight: normal;\n}\n.text-20-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-20-normal-150 {\n  line-height: 150%;\n}\n.text-20-bold, .text-20-bold-capitalize, .text-20-bold-uppercase {\n  font-weight: 700;\n}\n.text-20-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-20-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-20-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-21, .text-21-italic, .text-21-bold, .text-21-bold-capitalize, .text-21-bold-uppercase, .text-21-normal, .text-21-normal-150, .text-21-normal-uppercase {\n  font-style: normal;\n  font-size: 1.313rem;\n  line-height: 120%;\n}\n.text-21-normal, .text-21-normal-150, .text-21-normal-uppercase {\n  font-weight: normal;\n}\n.text-21-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-21-normal-150 {\n  line-height: 150%;\n}\n.text-21-bold, .text-21-bold-capitalize, .text-21-bold-uppercase {\n  font-weight: 700;\n}\n.text-21-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-21-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-21-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-22, .text-22-italic, .text-22-bold, .text-22-bold-capitalize, .text-22-bold-uppercase, .text-22-normal, .text-22-normal-150, .text-22-normal-uppercase {\n  font-style: normal;\n  font-size: 1.375rem;\n  line-height: 120%;\n}\n.text-22-normal, .text-22-normal-150, .text-22-normal-uppercase {\n  font-weight: normal;\n}\n.text-22-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-22-normal-150 {\n  line-height: 150%;\n}\n.text-22-bold, .text-22-bold-capitalize, .text-22-bold-uppercase {\n  font-weight: 700;\n}\n.text-22-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-22-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-22-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-24, .text-24-italic, .text-24-bold, .text-24-bold-capitalize, .text-24-bold-uppercase, .text-24-normal, .text-24-normal-150, .text-24-normal-uppercase {\n  font-style: normal;\n  font-size: 1.5rem;\n  line-height: 120%;\n}\n.text-24-normal, .text-24-normal-150, .text-24-normal-uppercase {\n  font-weight: normal;\n}\n.text-24-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-24-normal-150 {\n  line-height: 150%;\n}\n.text-24-bold, .text-24-bold-capitalize, .text-24-bold-uppercase {\n  font-weight: 700;\n}\n.text-24-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-24-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-24-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-26, .text-26-italic, .text-26-bold, .text-26-bold-capitalize, .text-26-bold-uppercase, .text-26-normal, .text-26-normal-150, .text-26-normal-uppercase {\n  font-style: normal;\n  font-size: 1.625rem;\n  line-height: 120%;\n}\n.text-26-normal, .text-26-normal-150, .text-26-normal-uppercase {\n  font-weight: normal;\n}\n.text-26-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-26-normal-150 {\n  line-height: 150%;\n}\n.text-26-bold, .text-26-bold-capitalize, .text-26-bold-uppercase {\n  font-weight: 700;\n}\n.text-26-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-26-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-26-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-28, .text-28-italic, .text-28-bold, .text-28-bold-capitalize, .text-28-bold-uppercase, .text-28-normal, .text-28-normal-150, .text-28-normal-uppercase {\n  font-style: normal;\n  font-size: 1.75rem;\n  line-height: 120%;\n}\n.text-28-normal, .text-28-normal-150, .text-28-normal-uppercase {\n  font-weight: normal;\n}\n.text-28-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-28-normal-150 {\n  line-height: 150%;\n}\n.text-28-bold, .text-28-bold-capitalize, .text-28-bold-uppercase {\n  font-weight: 700;\n}\n.text-28-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-28-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-28-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-36, .text-36-italic, .text-36-bold, .text-36-bold-capitalize, .text-36-bold-uppercase, .text-36-normal, .text-36-normal-150, .text-36-normal-uppercase {\n  font-style: normal;\n  font-size: 2.25rem;\n  line-height: 120%;\n}\n.text-36-normal, .text-36-normal-150, .text-36-normal-uppercase {\n  font-weight: normal;\n}\n.text-36-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-36-normal-150 {\n  line-height: 150%;\n}\n.text-36-bold, .text-36-bold-capitalize, .text-36-bold-uppercase {\n  font-weight: 700;\n}\n.text-36-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-36-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-36-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n/* Card */\n.card-title-on {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1.125rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n.card-text-bold {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: bold;\n  font-size: 1rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n.card-indicator {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n.card-text {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n/* Chart */\n.chart-ticks-x-text {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1rem;\n  line-height: 120%;\n}\n@media only screen and (max-width : 768px) {\n  .chart-ticks-x-text {\n    font-size: 0.685rem;\n  }\n}\n\n.chart-ticks-y-text {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 0.9rem;\n  line-height: 120%;\n}\n@media only screen and (max-width : 768px) {\n  .chart-ticks-y-text {\n    font-size: 0.75rem;\n  }\n}\n\n/* Cozy bar */\n.cozybar {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: bold;\n  font-size: 1.3125rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.axis {\n  color: #7b7b7b;\n}\n.axis .tick-text {\n  fill: #7b7b7b;\n}\n.axis .tick-text.tick-text-selected {\n  fill: #e0e0e0;\n}\n.axis .separator {\n  text-align: center;\n  margin: 0 2px;\n  font-size: 1rem !important;\n}\n\n.value-text {\n  fill: #7b7b7b;\n}\n.value-text.selected {\n  fill: #e0e0e0;\n}\n\n.barContainer.disabled *,\n.barFill.disabled * {\n  cursor: default !important;\n}\n.barContainer:hover,\n.barFill:hover {\n  cursor: pointer;\n}\n\n.background-true {\n  opacity: 0.1;\n}\n.background-true:hover {\n  cursor: pointer;\n}\n\n.background-false {\n  opacity: 0;\n}\n\n.bar-compare-ELECTRICITY:hover,\n.bar-compare-GAS:hover,\n.bar-compare-WATER:hover,\n.bar-compare-MULTIFLUID:hover,\n.bar-MULTIFLUID:hover,\n.bar-WATER:hover,\n.bar-GAS:hover,\n.bar-ELECTRICITY:hover {\n  cursor: pointer;\n}\n.bar-compare-ELECTRICITY:hover.disabled,\n.bar-compare-GAS:hover.disabled,\n.bar-compare-WATER:hover.disabled,\n.bar-compare-MULTIFLUID:hover.disabled,\n.bar-MULTIFLUID:hover.disabled,\n.bar-WATER:hover.disabled,\n.bar-GAS:hover.disabled,\n.bar-ELECTRICITY:hover.disabled {\n  cursor: default;\n}\n\n.bar-ELECTRICITY {\n  fill: #5d3d2a;\n}\n.bar-ELECTRICITY.selected {\n  fill: #d87b39;\n  filter: drop-shadow(0 -0.1rem 0.2rem #d87b39);\n}\n\n.bar-compare-ELECTRICITY {\n  fill: #795c47;\n}\n.bar-compare-ELECTRICITY.selected {\n  fill: #e2bca1;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1);\n}\n\n.bar-WATER {\n  fill: #20415e;\n}\n.bar-WATER.selected {\n  fill: #3a98ec;\n  filter: drop-shadow(0 -0.1rem 0.2rem #3a98ec);\n}\n\n.bar-compare-WATER {\n  fill: #4d5c6e;\n}\n.bar-compare-WATER.selected {\n  fill: #abd4fa;\n  filter: drop-shadow(0 -0.1rem 0.2rem #abd4fa);\n}\n\n.bar-GAS {\n  fill: #184940;\n}\n.bar-GAS.selected {\n  fill: #45d1b8;\n  filter: drop-shadow(0 -0.1rem 0.2rem #45d1b8);\n}\n\n.bar-compare-GAS {\n  fill: #597773;\n}\n.bar-compare-GAS.selected {\n  fill: #a8f7e9;\n  filter: drop-shadow(0 -0.1rem 0.2rem #a8f7e9);\n}\n\n.bar-MULTIFLUID {\n  fill: #705d1d;\n}\n.bar-MULTIFLUID.selected {\n  fill: #e3b82a;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n.bar-MULTIFLUID.disabled:hover {\n  cursor: default;\n}\n\n.bar-duel {\n  fill: #61f0f2;\n}\n.bar-duel.selected {\n  fill: #61f0f2;\n  filter: drop-shadow(0 -0.1rem 0.2rem #61f0f2);\n}\n.bar-duel.disabled:hover {\n  cursor: default;\n}\n\n.bar-UPCOMING {\n  fill: #7b7b7b;\n  opacity: 0.6;\n}\n.bar-UPCOMING.selected {\n  fill: #7b7b7b;\n}\n.bar-UPCOMING.disabled:hover {\n  cursor: default;\n}\n\n.bar-compare-MULTIFLUID {\n  fill: #7d6a4e;\n}\n.bar-compare-MULTIFLUID.selected {\n  fill: #ffd597;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n\n.bar-average {\n  stroke-width: 2;\n  stroke: #e3b82a;\n}\n\n.week {\n  fill: #e2bca1;\n}\n.week.selected {\n  fill: #e2bca1;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1);\n}\n\n.weekend {\n  fill: #ffd597;\n}\n.weekend.selected {\n  fill: #ffd597;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n\n.barValue {\n  outline: none;\n}\n.barValue:focus-visible {\n  outline: 2px solid #1b8bff;\n  outline-offset: 2px;\n}\n\n/** Animation **/\n.bounce-1 {\n  animation-name: bounce-1;\n  animation-timing-function: cubic-bezier(1, 1, 0.42, 1);\n  animation-iteration-count: 1;\n  transform-origin: bottom center;\n  transform-box: fill-box;\n}\n\n@keyframes bounce-1 {\n  0% {\n    transform: scale(0.1, 0.1);\n  }\n  28% {\n    transform: scale(0.1, 1.1);\n  }\n  45% {\n    transform: scale(0.8, 0.95);\n  }\n  55% {\n    transform: scale(1, 1);\n  }\n  65% {\n    transform: scale(1, 0.98);\n  }\n  75% {\n    transform: scale(1, 1);\n  }\n}\n.bounce-2 {\n  animation-name: bounce-2;\n  animation-timing-function: cubic-bezier(1, 1, 0.42, 1);\n  animation-iteration-count: 1;\n  transform-origin: bottom center;\n  transform-box: fill-box;\n}\n\n@keyframes bounce-2 {\n  0% {\n    transform: scale(1, 1);\n  }\n  28% {\n    transform: scale(1, 1.1);\n  }\n  45% {\n    transform: scale(0.8, 0.95);\n  }\n  55% {\n    transform: scale(1, 1);\n  }\n  65% {\n    transform: scale(1, 0.98);\n  }\n  75% {\n    transform: scale(1, 1);\n  }\n}\n/** Animation delay **/\n.delay {\n  animation-duration: 0.4s;\n}\n\n.delay--0 {\n  animation-duration: 0.4s;\n}\n\n.delay--1 {\n  animation-duration: 0.48s;\n}\n\n.delay--2 {\n  animation-duration: 0.56s;\n}\n\n.delay--3 {\n  animation-duration: 0.64s;\n}\n\n.delay--4 {\n  animation-duration: 0.72s;\n}\n\n.delay--5 {\n  animation-duration: 0.8s;\n}\n\n.delay--6 {\n  animation-duration: 0.88s;\n}\n\n.delay--7 {\n  animation-duration: 0.96s;\n}\n\n.delay--8 {\n  animation-duration: 1.04s;\n}\n\n.delay--9 {\n  animation-duration: 1.12s;\n}\n\n.delay--10 {\n  animation-duration: 1.2s;\n}\n\n.delay--11 {\n  animation-duration: 1.28s;\n}\n\n.delay--12 {\n  animation-duration: 1.36s;\n}\n\n.delay--13 {\n  animation-duration: 1.44s;\n}\n\n.delay--14 {\n  animation-duration: 1.52s;\n}\n\n.delay--15 {\n  animation-duration: 1.6s;\n}\n\n.delay--16 {\n  animation-duration: 1.68s;\n}\n\n.delay--17 {\n  animation-duration: 1.76s;\n}\n\n.delay--18 {\n  animation-duration: 1.84s;\n}\n\n.delay--19 {\n  animation-duration: 1.92s;\n}\n\n.delay--20 {\n  animation-duration: 2s;\n}\n\n.delay--21 {\n  animation-duration: 2.08s;\n}\n\n.delay--22 {\n  animation-duration: 2.16s;\n}\n\n.delay--23 {\n  animation-duration: 2.24s;\n}\n\n.delay--24 {\n  animation-duration: 2.32s;\n}\n\n.delay--25 {\n  animation-duration: 2.4s;\n}\n\n.delay--26 {\n  animation-duration: 2.48s;\n}\n\n.delay--27 {\n  animation-duration: 2.56s;\n}\n\n.delay--28 {\n  animation-duration: 2.64s;\n}\n\n.delay--29 {\n  animation-duration: 2.72s;\n}\n\n.delay--30 {\n  animation-duration: 2.8s;\n}\n\n.delay--31 {\n  animation-duration: 2.88s;\n}\n\n.delay--32 {\n  animation-duration: 2.96s;\n}\n\n.delay--33 {\n  animation-duration: 3.04s;\n}\n\n.delay--34 {\n  animation-duration: 3.12s;\n}\n\n.delay--35 {\n  animation-duration: 3.2s;\n}\n\n.delay--36 {\n  animation-duration: 3.28s;\n}\n\n.delay--37 {\n  animation-duration: 3.36s;\n}\n\n.delay--38 {\n  animation-duration: 3.44s;\n}\n\n.delay--39 {\n  animation-duration: 3.52s;\n}\n\n.delay--40 {\n  animation-duration: 3.6s;\n}\n\n.delay--41 {\n  animation-duration: 3.68s;\n}\n\n.delay--42 {\n  animation-duration: 3.76s;\n}\n\n.delay--43 {\n  animation-duration: 3.84s;\n}\n\n.delay--44 {\n  animation-duration: 3.92s;\n}\n\n.delay--45 {\n  animation-duration: 4s;\n}\n\n.delay--46 {\n  animation-duration: 4.08s;\n}\n\n.delay--47 {\n  animation-duration: 4.16s;\n}\n\n.delay--48 {\n  animation-duration: 4.24s;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\nbutton span {\n  font-size: 1rem;\n  font-weight: 700;\n}\nbutton:focus-visible {\n  outline: 2px solid #1b8bff;\n  outline-offset: 2px;\n}\nbutton.btnPrimary {\n  background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;\n  border: 1px solid;\n  border-color: transparent;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n}\nbutton.btnPrimary span:first-child {\n  color: #121212;\n}\nbutton.btnPrimary:hover, button.btnPrimary:focus, button.btnPrimary.active, button.btnPrimary:disabled {\n  background-color: #b89318;\n}\nbutton.btnPrimary:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\nbutton.btnSecondary {\n  background: transparent;\n  border: 1px solid;\n  border-color: #e0e0e0;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n}\nbutton.btnSecondary span:first-child {\n  color: #e0e0e0;\n}\nbutton.btnSecondary:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\nbutton.btnText {\n  text-decoration: underline;\n}\nbutton.btnText span {\n  text-transform: none;\n  font-weight: 400;\n}\nbutton.btnPrimaryNegative {\n  background: linear-gradient(180deg, #61f0f2 0%, #48c2c4 100%);\n  border: 1px solid;\n  border-color: transparent;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n}\nbutton.btnPrimaryNegative span:first-child {\n  color: #121212;\n}\nbutton.btnPrimaryNegative:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\nbutton.btnPrimaryNegative:hover {\n  opacity: 0.7;\n}\nbutton.btnIncrement {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  border: 1px solid;\n  border-color: transparent;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n  min-width: 40px;\n  width: 40px;\n  height: 40px;\n  border-radius: 4px;\n  box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.55);\n}\nbutton.btnIncrement span:first-child {\n  color: #ffffff;\n}\nbutton.btnIncrement:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ninput.inputText,\ninput.inputNumber {\n  box-sizing: border-box;\n  border: 1px solid #7b7b7b;\n  background: transparent;\n  transition: all 300ms ease;\n  color: #e0e0e0;\n}\n\ninput.inputText {\n  appearance: none;\n  border-radius: 4px;\n  height: 45px;\n  width: 100%;\n  max-width: 280px;\n  padding: 0 0.5rem;\n}\n\ninput.inputNumber {\n  border-radius: 2px;\n  height: 40px;\n  width: 60px;\n  max-width: 5rem;\n  text-align: center;\n}\n\ninput.inputCheckbox {\n  width: 24px;\n  min-width: 24px;\n  height: 24px;\n  display: flex;\n  align-items: center;\n  border-radius: 4px;\n  cursor: pointer;\n  appearance: none;\n  background: #121212;\n  position: relative;\n  border: solid 1px #7b7b7b;\n}\ninput.inputCheckbox:checked {\n  background: #e3b82a;\n  border-color: #e3b82a;\n}\ninput.inputCheckbox:checked:before, input.inputCheckbox:checked:after {\n  content: \"\";\n  position: absolute;\n  display: inline-block;\n  background: #121212;\n  border-radius: 0.5rem;\n}\ninput.inputCheckbox:checked:before {\n  width: 3px;\n  height: 12px;\n  left: 10px;\n  top: 4px;\n  transform: rotate(41deg);\n}\ninput.inputCheckbox:checked:after {\n  width: 3px;\n  height: 6px;\n  left: 5px;\n  top: 8px;\n  transform: rotate(133deg);\n}\n\ninput:focus-visible {\n  outline: 2px solid #1b8bff;\n  outline-offset: 2px;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.card {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  box-sizing: border-box;\n  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.75);\n  border-radius: 4px;\n  padding: 16px;\n}\n.card:hover {\n  background: linear-gradient(180deg, rgba(70, 71, 77, 0.7) 0%, rgba(57, 58, 63, 0.7) 100%);\n}\n.card.rich-card {\n  padding: 16px;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ndiv.modal-root .MuiBackdrop-root {\n  background-color: hsla(231deg, 11%, 12%, 0.85);\n}\n\ndiv.modal-paper {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  width: 36rem;\n  max-width: 100%;\n  max-height: 90vh;\n  padding: 2rem;\n  box-sizing: border-box;\n  box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);\n  border-radius: 4px;\n  margin: 0 0 0 13.75rem;\n  align-items: center;\n  color: #ffffff;\n}\n@media only screen and (max-width : 1023px) {\n  div.modal-paper {\n    width: 35rem;\n    margin: 0;\n  }\n}\n@media only screen and (max-width : 768px) {\n  div.modal-paper {\n    padding: 1rem 1rem 1.5rem;\n    width: 85%;\n    max-width: 35rem;\n    margin: 0;\n  }\n}\ndiv.modal-paper.no-padding {\n  padding: 0;\n}\ndiv.modal-paper.blue-border {\n  border: 1px solid rgba(88, 255, 255, 0.2509803922);\n}\ndiv.modal-paper.blue-light-border {\n  border: 1px solid #61f0f2;\n}\ndiv.modal-paper.yellow-border {\n  border: 1px solid rgba(227, 184, 42, 0.4);\n}\ndiv.modal-paper .modal-paper-close-button {\n  position: absolute;\n  top: 0.5rem;\n  right: 0.5rem;\n  padding: 5px 5px;\n  z-index: 10;\n}\n\ndiv.modal-paper-full-screen {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  width: 100%;\n  max-width: 100%;\n  height: 100%;\n  max-height: 100%;\n  padding: 0;\n  margin: 0;\n  box-sizing: border-box;\n  box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);\n  border-radius: 4px;\n  color: #ffffff;\n  display: flex;\n  align-items: center;\n}\ndiv.modal-paper-full-screen.dark-background {\n  background: #121212;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ndiv.expansion-panel-root {\n  margin: 1.2rem 0;\n  color: #e0e0e0;\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  border-radius: 4px;\n  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.75);\n  transition: background-color 0.6s ease;\n  box-sizing: border-box;\n}\ndiv.expansion-panel-root.Mui-expanded:first-child {\n  margin: 1.2rem 0;\n}\ndiv.expansion-panel-root.Mui-expanded:last-child {\n  margin: 1.2rem 0;\n}\ndiv.expansion-panel-root.red-border {\n  border: 1px solid #d25959;\n}\n\ndiv.expansion-panel-summary {\n  padding: 0.25rem 1.2rem;\n  min-height: 4rem;\n}\ndiv.expansion-panel-summary.Mui-focused {\n  border-radius: 4px;\n  background-color: unset;\n  box-shadow: 0 0 0 1px #e0e0e0;\n}\ndiv.expansion-panel-summary:focus-visible {\n  outline: 2px solid #1b8bff;\n  outline-offset: 2px;\n}\ndiv.expansion-panel-summary.Mui-expanded {\n  min-height: 4rem;\n}\ndiv.expansion-panel-summary.Mui-expanded.small {\n  min-height: 3rem;\n}\ndiv.expansion-panel-summary.small {\n  padding: 0 1.2rem;\n  min-height: 3rem;\n}\ndiv.expansion-panel-summary.bold-text {\n  font-weight: bold;\n}\n\ndiv.expansion-panel-content {\n  display: flex;\n  align-items: center;\n}\ndiv.expansion-panel-content.Mui-expanded {\n  margin: 0.75rem 0;\n}\n\ndiv.expansion-panel-details {\n  padding: 0 1.2rem 1.2rem;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\na {\n  color: #deaf0e;\n}\na:visited {\n  color: #deaf0e;\n}\n\na:focus {\n  outline: none;\n  box-shadow: inset 0 0 0 1px #e0e0e0;\n}\na:focus > div:first-child {\n  box-shadow: 0 0 0 1px #e0e0e0;\n}\n\na:focus-visible {\n  outline: 2px solid #1b8bff;\n  outline-offset: 2px;\n}\n\na.MuiLink-underlineHover:hover {\n  text-decoration: none;\n}\n\na.MuiTypography-colorPrimary {\n  color: #e0e0e0;\n}\n\n:root {\n  white-space: pre-line;\n  --blue: #58ffff;\n  --blue40: rgba(88, 255, 255, 0.2509803922);\n  --blueBackground: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n  --blueRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n  --blueRadialGradientTrans: radial-gradient(circle, #58ffff 0%, rgba(255, 255, 255, 0) 100%);\n  --elecColor: #d87b39;\n  --elecColor40: rgba(216, 123, 57, 0.4);\n  --elecCompareColor: #e2bca1;\n  --gasColor: #45d1b8;\n  --gasColor40: rgba(69, 209, 184, 0.4);\n  --gasCompareColor: #a8f7e9;\n  --waterColor: #3a98ec;\n  --waterColor40: rgba(58, 152, 236, 0.4);\n  --waterCompareColor: #abd4fa;\n  --multiColor: #e3b82a;\n  --multiCompareColor: #ffd597;\n  --redPrimary: #d25959;\n  --greyBright: #e0e0e0;\n  --greyDark: #7b7b7b;\n  --textWhite: #ffffff;\n  --softGrey: #a0a0a0;\n  --darkLight: #25262b;\n  --darkLight2: #121212;\n  --textFont: Lato, sans-serif;\n  --greyLinearGradientBackground: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  --multiColorRadialGradientTrans: radial-gradient(circle, #e3b82a 0%, rgba(255, 255, 255, 0) 100%);\n  --elecColorRadialGradientTrans: radial-gradient(circle, #d87b39 0%, rgba(255, 255, 255, 0) 100%);\n  --waterColorRadialGradientTrans: radial-gradient(circle, #3a98ec 0%, rgba(255, 255, 255, 0) 100%);\n  --gasColorRadialGradientTrans: radial-gradient(circle, #e3b82a 0%, rgba(255, 255, 255, 0) 100%);\n  --multiColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;\n  --elecColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(158, 67, 2, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #d87b39;\n  --gasColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(4, 106, 88, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #45d1b8;\n  --waterColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(2, 93, 174, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #3a98ec;\n}\n\n.application {\n  overflow-x: hidden;\n  background-color: #121212;\n}\n\n.accordion-icon {\n  color: #ffffff;\n}\n\n.loaderContainer {\n  height: 80vh;\n  display: flex;\n  flex: 1;\n  justify-content: center;\n  align-items: center;\n}\n\n.makeStyles-fab-1 {\n  top: 12px;\n  left: 3rem !important;\n  width: 36px !important;\n  height: 36px !important;\n  background-color: #323339 !important;\n}\n\ninput:-webkit-autofill,\ninput:-webkit-autofill:hover,\ninput:-webkit-autofill:focus,\ninput:-webkit-autofill:active {\n  -webkit-box-shadow: 0 0 0 30px #1b1c22 inset !important;\n}", ""]);
 
 
 
@@ -5738,29 +5707,11 @@ var DuelService = /*#__PURE__*/function () {
      */
   }, {
     key: "unlockUserDuel",
-    value: function () {
-      var _unlockUserDuel = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(userDuel) {
-        var updatedUserDuel;
-        return _regenerator.default.wrap(function _callee6$(_context6) {
-          while (1) {
-            switch (_context6.prev = _context6.next) {
-              case 0:
-                updatedUserDuel = _objectSpread(_objectSpread({}, userDuel), {}, {
-                  state: _enums.UserDuelState.UNLOCKED
-                });
-                return _context6.abrupt("return", updatedUserDuel);
-              case 2:
-              case "end":
-                return _context6.stop();
-            }
-          }
-        }, _callee6);
-      }));
-      function unlockUserDuel(_x8) {
-        return _unlockUserDuel.apply(this, arguments);
-      }
-      return unlockUserDuel;
-    }()
+    value: function unlockUserDuel(userDuel) {
+      return _objectSpread(_objectSpread({}, userDuel), {}, {
+        state: _enums.UserDuelState.UNLOCKED
+      });
+    }
   }, {
     key: "getFluidTypesFromStatus",
     value: function getFluidTypesFromStatus(fluidStatus) {
@@ -5780,7 +5731,7 @@ var DuelService = /*#__PURE__*/function () {
   }, {
     key: "updateUserDuelThreshold",
     value: function () {
-      var _updateUserDuelThreshold = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(userDuel) {
+      var _updateUserDuelThreshold = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(userDuel) {
         var fluidStatus,
           consumptionService,
           performanceService,
@@ -5791,27 +5742,27 @@ var DuelService = /*#__PURE__*/function () {
           updatedThreshold,
           updatedUserDuel,
           _updatedUserDuel,
-          _args7 = arguments;
-        return _regenerator.default.wrap(function _callee7$(_context7) {
+          _args6 = arguments;
+        return _regenerator.default.wrap(function _callee6$(_context6) {
           while (1) {
-            switch (_context7.prev = _context7.next) {
+            switch (_context6.prev = _context6.next) {
               case 0:
-                fluidStatus = _args7.length > 1 && _args7[1] !== undefined ? _args7[1] : [];
+                fluidStatus = _args6.length > 1 && _args6[1] !== undefined ? _args6[1] : [];
                 consumptionService = new _consumption.default(this._client);
                 performanceService = new _performanceIndicator.default();
                 fluidTypes = this.getFluidTypesFromStatus(fluidStatus); // Get last period with all days known
-                _context7.next = 6;
+                _context6.next = 6;
                 return this.getValidPeriod(fluidStatus, fluidTypes, userDuel);
               case 6:
-                period = _context7.sent;
+                period = _context6.sent;
                 if (!(period !== false)) {
-                  _context7.next = 17;
+                  _context6.next = 17;
                   break;
                 }
-                _context7.next = 10;
+                _context6.next = 10;
                 return consumptionService.getPerformanceIndicators(period, _enums.TimeStep.DAY, fluidTypes);
               case 10:
-                fetchLastValidData = _context7.sent;
+                fetchLastValidData = _context6.sent;
                 maxData = performanceService.aggregatePerformanceIndicators(fetchLastValidData); // Set the threshold
                 if (maxData !== null && maxData !== void 0 && maxData.value && maxData.value > 0) {
                   updatedThreshold = (0, _math.getRoundFloat)(maxData.value);
@@ -5823,20 +5774,20 @@ var DuelService = /*#__PURE__*/function () {
                   threshold: updatedThreshold,
                   fluidTypes: fluidTypes
                 });
-                return _context7.abrupt("return", updatedUserDuel);
+                return _context6.abrupt("return", updatedUserDuel);
               case 17:
                 _updatedUserDuel = _objectSpread(_objectSpread({}, userDuel), {}, {
                   state: _enums.UserDuelState.NO_REF_PERIOD_VALID
                 });
-                return _context7.abrupt("return", _updatedUserDuel);
+                return _context6.abrupt("return", _updatedUserDuel);
               case 19:
               case "end":
-                return _context7.stop();
+                return _context6.stop();
             }
           }
-        }, _callee7, this);
+        }, _callee6, this);
       }));
-      function updateUserDuelThreshold(_x9) {
+      function updateUserDuelThreshold(_x8) {
         return _updateUserDuelThreshold.apply(this, arguments);
       }
       return updateUserDuelThreshold;
@@ -5847,91 +5798,42 @@ var DuelService = /*#__PURE__*/function () {
      */
   }, {
     key: "startUserDuel",
-    value: function () {
-      var _startUserDuel = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(userDuel) {
-        var updatedUserDuel;
-        return _regenerator.default.wrap(function _callee8$(_context8) {
-          while (1) {
-            switch (_context8.prev = _context8.next) {
-              case 0:
-                updatedUserDuel = _objectSpread(_objectSpread({}, userDuel), {}, {
-                  state: _enums.UserDuelState.ONGOING,
-                  startDate: _luxon.DateTime.local().setZone('utc', {
-                    keepLocalTime: true
-                  }).startOf('day')
-                });
-                return _context8.abrupt("return", updatedUserDuel);
-              case 2:
-              case "end":
-                return _context8.stop();
-            }
-          }
-        }, _callee8);
-      }));
-      function startUserDuel(_x10) {
-        return _startUserDuel.apply(this, arguments);
-      }
-      return startUserDuel;
-    }()
+    value: function startUserDuel(userDuel) {
+      return _objectSpread(_objectSpread({}, userDuel), {}, {
+        state: _enums.UserDuelState.ONGOING,
+        startDate: _luxon.DateTime.local().setZone('utc', {
+          keepLocalTime: true
+        }).startOf('day')
+      });
+    }
+
     /**
      * Return duel with updated state to UserDuelState.DONE
      * @param {UserDuel} userDuel - userDuel to update
      */
   }, {
     key: "endUserDuel",
-    value: function () {
-      var _endUserDuel = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(userDuel) {
-        var updatedUserDuel;
-        return _regenerator.default.wrap(function _callee9$(_context9) {
-          while (1) {
-            switch (_context9.prev = _context9.next) {
-              case 0:
-                updatedUserDuel = _objectSpread(_objectSpread({}, userDuel), {}, {
-                  state: _enums.UserDuelState.DONE
-                });
-                return _context9.abrupt("return", updatedUserDuel);
-              case 2:
-              case "end":
-                return _context9.stop();
-            }
-          }
-        }, _callee9);
-      }));
-      function endUserDuel(_x11) {
-        return _endUserDuel.apply(this, arguments);
-      }
-      return endUserDuel;
-    }()
+    value: function endUserDuel(userDuel) {
+      return _objectSpread(_objectSpread({}, userDuel), {}, {
+        state: _enums.UserDuelState.DONE
+      });
+    }
+
     /**
      * Return duel with updated state to UserDuelState.UNLOCKED
      * @param {UserDuel} userDuel - userDuel to reset
      */
   }, {
     key: "resetUserDuel",
-    value: function () {
-      var _resetUserDuel = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(userDuel) {
-        return _regenerator.default.wrap(function _callee10$(_context10) {
-          while (1) {
-            switch (_context10.prev = _context10.next) {
-              case 0:
-                return _context10.abrupt("return", _objectSpread(_objectSpread({}, userDuel), {}, {
-                  startDate: null,
-                  state: _enums.UserDuelState.UNLOCKED,
-                  threshold: 0,
-                  userConsumption: 0
-                }));
-              case 1:
-              case "end":
-                return _context10.stop();
-            }
-          }
-        }, _callee10);
-      }));
-      function resetUserDuel(_x12) {
-        return _resetUserDuel.apply(this, arguments);
-      }
-      return resetUserDuel;
-    }()
+    value: function resetUserDuel(userDuel) {
+      return _objectSpread(_objectSpread({}, userDuel), {}, {
+        startDate: null,
+        state: _enums.UserDuelState.UNLOCKED,
+        threshold: 0,
+        userConsumption: 0
+      });
+    }
+
     /**
      * Return duel created from duel entity
      * @param {DuelEntity} duel - userDuel to update
@@ -5939,7 +5841,7 @@ var DuelService = /*#__PURE__*/function () {
   }, {
     key: "parseDuelEntityToDuel",
     value: function parseDuelEntityToDuel(duel) {
-      var userDuel = {
+      return {
         id: duel.id,
         title: duel.title,
         description: duel.description,
@@ -5950,7 +5852,6 @@ var DuelService = /*#__PURE__*/function () {
         fluidTypes: [],
         userConsumption: 0
       };
-      return userDuel;
     }
 
     /**
@@ -6565,7 +6466,6 @@ var StepAddress = function StepAddress(_ref) {
     variant: "outlined",
     type: "text",
     id: "address",
-    name: "address",
     value: sgeState.address,
     onChange: function onChange(e) {
       return _onChange('address', e.target.value);
@@ -6576,7 +6476,6 @@ var StepAddress = function StepAddress(_ref) {
     variant: "outlined",
     type: "number",
     id: "zipCode",
-    name: "zipCode",
     value: (_sgeState$zipCode = sgeState.zipCode) !== null && _sgeState$zipCode !== void 0 ? _sgeState$zipCode : undefined,
     onChange: function onChange(e) {
       return _onChange('zipCode', e.target.value, 5);
@@ -6587,8 +6486,7 @@ var StepAddress = function StepAddress(_ref) {
     variant: "outlined",
     type: "text",
     id: "city",
-    name: "city",
-    value: sgeState.city,
+    value: sgeState.city || '',
     onChange: function onChange(e) {
       return _onChange('city', e.target.value);
     },
@@ -6890,21 +6788,15 @@ Object.defineProperty(exports, "__esModule", {
 exports.default = void 0;
 var _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__("UdSB"));
 var _IconButton = _interopRequireDefault(__webpack_require__("x0Kp"));
-var _styles = __webpack_require__("yrWy");
 var _StyledIcon = _interopRequireDefault(__webpack_require__("VP3k"));
 var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
 var _excluded = ["icon", "sized"];
-var IconButtonBase = (0, _styles.withStyles)({
-  root: {
-    outline: 'none !important'
-  }
-})(_IconButton.default);
 var StyledIconButton = function StyledIconButton(_ref) {
   var icon = _ref.icon,
     _ref$sized = _ref.sized,
     sized = _ref$sized === void 0 ? 16 : _ref$sized,
     props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
-  return /*#__PURE__*/_react.default.createElement(IconButtonBase, props, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
+  return /*#__PURE__*/_react.default.createElement(_IconButton.default, props, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
     icon: icon,
     size: sized
   }));
@@ -7123,6 +7015,9 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
 function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
 function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
 function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+/**
+ * http://ecolyo.cozy.tools:8080/#/ecogesture-selection
+ */
 var EcogestureSelectionView = function EcogestureSelectionView() {
   var _useI18n = (0, _I18n.useI18n)(),
     t = _useI18n.t;
@@ -7249,17 +7144,15 @@ var EcogestureSelectionView = function EcogestureSelectionView() {
                   return ecogesture.viewedInSelection === false;
                 });
                 slicedFilteredList = filteredList.slice(0, 10);
-                if (subscribed) {
-                  if (availableList.length === slicedFilteredList.length && slicedFilteredList.length > 0) {
-                    setOpenEcSelectionModal(true);
-                  }
-                  setTotalAvailable(availableList.length);
-                  setTotalViewed(availableList.length - filteredList.length);
-                  setEcogestureList(slicedFilteredList);
-                  setIndexEcogesture(0);
-                  setIsLoading(false);
+                if (availableList.length === slicedFilteredList.length && slicedFilteredList.length > 0) {
+                  setOpenEcSelectionModal(true);
                 }
-              case 7:
+                setTotalAvailable(availableList.length);
+                setTotalViewed(availableList.length - filteredList.length);
+                setEcogestureList(slicedFilteredList);
+                setIndexEcogesture(0);
+                setIsLoading(false);
+              case 12:
               case "end":
                 return _context3.stop();
             }
@@ -7268,7 +7161,7 @@ var EcogestureSelectionView = function EcogestureSelectionView() {
       }));
       return _getFilteredList.apply(this, arguments);
     }
-    getFilteredList();
+    subscribed && getFilteredList();
     return function () {
       subscribed = false;
     };
@@ -7556,6 +7449,17 @@ var QuizBegin = function QuizBegin(_ref) {
 var _default = QuizBegin;
 exports.default = _default;
 
+/***/ }),
+
+/***/ "AKpP":
+/***/ (function(module, exports, __webpack_require__) {
+
+exports = module.exports = __webpack_require__("DjJv")(false);
+// Module
+exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.skip-link {\n  position: absolute;\n  top: -40px;\n  left: 0;\n  background: #242633;\n  color: #ffffff;\n  border: #ffffff;\n  padding: 8px;\n  z-index: 1000001;\n  text-decoration: \"none\";\n  transition: top 0.3s;\n}\n.skip-link:focus {\n  top: 0;\n}", ""]);
+
+
+
 /***/ }),
 
 /***/ "AYwF":
@@ -9057,16 +8961,13 @@ var QuizQuestionContent = function QuizQuestionContent(_ref) {
               });
               setAnswerIndex(resultIndex);
               setOpenModal(true);
-              _context.next = 6;
-              return quizService.updateUserQuiz(userChallenge.quiz, result[0].isTrue, questionIndex);
-            case 6:
-              quizUpdated = _context.sent;
-              _context.next = 9;
+              quizUpdated = quizService.updateUserQuiz(userChallenge.quiz, result[0].isTrue, questionIndex);
+              _context.next = 7;
               return challengeService.updateUserChallenge(userChallenge, _enums.UserChallengeUpdateFlag.QUIZ_UPDATE, quizUpdated);
-            case 9:
+            case 7:
               userChallengeUpdated = _context.sent;
               dispatch((0, _challenge2.updateUserChallengeList)(userChallengeUpdated));
-            case 11:
+            case 9:
             case "end":
               return _context.stop();
           }
@@ -9920,16 +9821,13 @@ var QuizQuestionContentCustom = function QuizQuestionContentCustom(_ref) {
               result = customQuestion.answers.filter(function (answer) {
                 return answer.answerLabel === userChoice;
               });
-              _context.next = 6;
-              return quizService.updateUserQuiz(userChallenge.quiz, result[0].isTrue);
-            case 6:
-              quizUpdated = _context.sent;
-              _context.next = 9;
+              quizUpdated = quizService.updateUserQuiz(userChallenge.quiz, result[0].isTrue);
+              _context.next = 7;
               return challengeService.updateUserChallenge(userChallenge, _enums.UserChallengeUpdateFlag.QUIZ_UPDATE, quizUpdated);
-            case 9:
+            case 7:
               userChallengeUpdated = _context.sent;
               dispatch((0, _challenge2.updateUserChallengeList)(userChallengeUpdated));
-            case 11:
+            case 9:
             case "end":
               return _context.stop();
           }
@@ -10436,6 +10334,9 @@ var _hooks = __webpack_require__("6FOS");
 var _ActionChoose = _interopRequireDefault(__webpack_require__("zCKk"));
 var _ActionDone = _interopRequireDefault(__webpack_require__("OSxX"));
 var _ActionOnGoing = _interopRequireDefault(__webpack_require__("kVo7"));
+/**
+ * http://ecolyo.cozy.tools:8080/#/challenges/
+ */
 var ActionView = function ActionView() {
   var _useAppSelector = (0, _hooks.useAppSelector)(function (state) {
       return state.ecolyo.challenge;
@@ -11027,7 +10928,7 @@ var SplashRoot = function SplashRoot(_ref) {
                 Sentry.startSpan({
                   name: 'Initialize app'
                 }, /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {
-                  var initializationService, customPopupService, partnersInfoService, ms, _yield$Promise$all, _yield$Promise$all2, termsStatus, profile, profileType, profileEcogesture, fluidStatus, migrationsResult, _yield$Promise$all3, _yield$Promise$all4, duelHash, quizHash, challengeHash, explorationHash, analysisResult, updatedProfile, lastDataDate, _iterator, _step, fluid, userChallengeList, _filteredCurrentOngoi, _filteredCurrentOngoi2, _filteredCurrentOngoi3, _filteredCurrentDuelC, filteredCurrentOngoingChallenge, actionService, updatedUserChallenge, filteredCurrentDuelChallenge, _yield$initialization, _updatedUserChallenge, dataloads, challengeService, _yield$challengeServi, isDone;
+                  var initializationService, customPopupService, partnersInfoService, ms, _yield$Promise$all, _yield$Promise$all2, termsStatus, profile, profileType, profileEcogesture, fluidStatus, migrationsResult, _yield$Promise$all3, _yield$Promise$all4, duelHash, quizHash, challengeHash, explorationHash, analysisResult, updatedProfile, lastDataDate, _iterator, _step, fluid, userChallengeList, _filteredCurrentOngoi, _filteredCurrentOngoi2, _filteredCurrentOngoi3, _filteredCurrentDuelC, filteredCurrentOngoingChallenge, actionService, updatedUserChallenge, filteredCurrentDuelChallenge, _yield$initialization, _updatedUserChallenge, dataloads, challengeService, _challengeService$isC, isDone;
                   return _regenerator.default.wrap(function _callee7$(_context7) {
                     while (1) {
                       switch (_context7.prev = _context7.next) {
@@ -11124,7 +11025,7 @@ var SplashRoot = function SplashRoot(_ref) {
                         case 45:
                           userChallengeList = _context7.sent;
                           if (!subscribed) {
-                            _context7.next = 72;
+                            _context7.next = 65;
                             break;
                           }
                           dispatch((0, _challenge2.setUserChallengeList)(userChallengeList));
@@ -11156,7 +11057,7 @@ var SplashRoot = function SplashRoot(_ref) {
                             return challenge.state === _enums.UserChallengeState.DUEL;
                           });
                           if (!(((_filteredCurrentDuelC = filteredCurrentDuelChallenge[0]) === null || _filteredCurrentDuelC === void 0 ? void 0 : _filteredCurrentDuelC.duel.state) === _enums.UserDuelState.ONGOING)) {
-                            _context7.next = 72;
+                            _context7.next = 65;
                             break;
                           }
                           _context7.next = 61;
@@ -11165,23 +11066,17 @@ var SplashRoot = function SplashRoot(_ref) {
                           _yield$initialization = _context7.sent;
                           _updatedUserChallenge = _yield$initialization.updatedUserChallenge;
                           dataloads = _yield$initialization.dataloads;
-                          if (!subscribed) {
-                            _context7.next = 72;
-                            break;
+                          if (subscribed) {
+                            dispatch((0, _challenge2.setChallengeConsumption)({
+                              userChallenge: _updatedUserChallenge,
+                              currentDataload: dataloads
+                            }));
+                            // Check is duel is done and display notification
+                            challengeService = new _challenge.default(client);
+                            _challengeService$isC = challengeService.isChallengeDone(_updatedUserChallenge, dataloads), isDone = _challengeService$isC.isDone;
+                            dispatch((0, _global.toggleChallengeDuelNotification)(isDone));
                           }
-                          dispatch((0, _challenge2.setChallengeConsumption)({
-                            userChallenge: _updatedUserChallenge,
-                            currentDataload: dataloads
-                          }));
-                          // Check is duel is done and display notification
-                          challengeService = new _challenge.default(client);
-                          _context7.next = 69;
-                          return challengeService.isChallengeDone(_updatedUserChallenge, dataloads);
-                        case 69:
-                          _yield$challengeServi = _context7.sent;
-                          isDone = _yield$challengeServi.isDone;
-                          dispatch((0, _global.toggleChallengeDuelNotification)(isDone));
-                        case 72:
+                        case 65:
                           /**
                            * Load custom popup and partners info synchronously so these treatments don't block the loading
                            */
@@ -11242,26 +11137,26 @@ var SplashRoot = function SplashRoot(_ref) {
                               });
                             });
                           }
-                          _context7.next = 82;
+                          _context7.next = 75;
                           break;
-                        case 77:
-                          _context7.prev = 77;
+                        case 70:
+                          _context7.prev = 70;
                           _context7.t0 = _context7["catch"](4);
                           if (_context7.t0.message === 'Failed to fetch' && !initStepErrors) {
                             setInitStepErrors(_models.InitStepsErrors.UNKNOWN_ERROR);
                           }
                           _logger.default.error("[Initialization] Error : ".concat(_context7.t0));
                           Sentry.captureException(_context7.t0);
-                        case 82:
-                          _context7.prev = 82;
+                        case 75:
+                          _context7.prev = 75;
                           console.groupEnd();
-                          return _context7.finish(82);
-                        case 85:
+                          return _context7.finish(75);
+                        case 78:
                         case "end":
                           return _context7.stop();
                       }
                     }
-                  }, _callee7, null, [[4, 77, 82, 85]]);
+                  }, _callee7, null, [[4, 70, 75, 78]]);
                 })));
               case 2:
               case "end":
@@ -11340,9 +11235,7 @@ var FeedbackModal = function FeedbackModal() {
   };
   return /*#__PURE__*/_react.default.createElement(_Dialog.default, {
     open: isFeedbacksOpen,
-    onClose: function onClose() {
-      return closeModal();
-    },
+    onClose: closeModal,
     "aria-labelledby": "accessibility-title",
     classes: {
       root: 'modal-root',
@@ -11369,11 +11262,9 @@ var FeedbackModal = function FeedbackModal() {
   }, t('feedback.text2')), /*#__PURE__*/_react.default.createElement("div", {
     className: "actions"
   }, /*#__PURE__*/_react.default.createElement(_Button.default, {
-    "aria-label": t('feedback.later'),
     onClick: closeModal,
     className: "btnSecondary"
   }, t('feedback.later')), /*#__PURE__*/_react.default.createElement(_Button.default, {
-    "aria-label": t('feedback.lets_go'),
     onClick: goToSAU,
     className: "btnPrimary"
   }, t('feedback.lets_go')))));
@@ -11449,7 +11340,7 @@ exports.ECOGESTURE_DOCTYPE = ECOGESTURE_DOCTYPE;
 /***/ "Hsuv":
 /***/ (function(module) {
 
-module.exports = JSON.parse("{\"common\":{\"title_app\":\"Ecolyo\",\"title_consumption\":\"Conso\",\"title_consumption_electricity\":\"Conso électrigue\",\"title_consumption_gas\":\"Conso de gaz\",\"title_consumption_water\":\"Conso d'eau\",\"title_challenge\":\"Défis\",\"title_quiz\":\"Quiz\",\"title_exploration\":\"Exploration\",\"title_action\":\"Action\",\"title_duel\":\"Duel final\",\"title_ecogesture\":\"Astuce\",\"title_ecogestures\":\"Astuces\",\"title_ecogestures_choice\":\"Sélection des astuces\",\"title_options\":\"Options\",\"title_analysis\":\"Analyse\",\"title_profiletype\":\"Ajuster mon profil\",\"title_legal_notice\":\"Mentions légales\",\"title_gcu\":\"Conditions générales d’utilisation\",\"title_accessibility\":\"Accessibilité : non conforme\",\"title_sge_connect\":\"Connexion à l'électricité\",\"title_gas_connect\":\"Connexion au gaz\",\"accessibility\":{\"loading\":\"Chargement\"},\"funders_logo\":\"Logo des financeurs : Métropole de Lyon, Etat via la Banque des Territoires et son programme France 2030, Union Européenne\"},\"navigation\":{\"consumption\":\"Conso\",\"challenges\":\"Défis\",\"ecogestures\":\"Astuces\",\"options\":\"Options\",\"analysis\":\"Analyse\"},\"FLUID\":{\"ELECTRICITY\":{\"NAME\":\"Électricité\",\"LABEL\":\"Électricité\",\"LABEL_PREPOSITION\":\"d'électricité\",\"UNIT\":\"kWh\",\"ADD\":\"Ajouter l'électricité\",\"MEGAUNIT\":\"MWh\",\"provider\":\"Enedis\"},\"WATER\":{\"NAME\":\"Eau\",\"LABEL\":\"Eau\",\"LABEL_PREPOSITION\":\"d'eau\",\"ADD\":\"Ajouter l'eau\",\"UNIT\":\"L\",\"MEGAUNIT\":\"m³\",\"provider\":\"Eau Publique du Grand Lyon\"},\"GAS\":{\"NAME\":\"Gaz\",\"LABEL\":\"Gaz\",\"LABEL_PREPOSITION\":\"de gaz\",\"ADD\":\"Ajouter le gaz\",\"UNIT\":\"kWh\",\"MEGAUNIT\":\"MWh\",\"provider\":\"GRDF\"},\"MULTIFLUID\":{\"NAME\":\"Multi fluide\",\"LABEL\":\"Multi\",\"UNIT\":\"€\"}},\"action\":{\"duration\":\"Durée : %{smartCount} jours\",\"result\":\"Résultat\",\"finished\":\"Défi terminé !\",\"details\":\"Détail de l'astuce\",\"apply\":\"J'applique cette action\",\"other\":\"Je choisis une autre action\",\"resultText1\":\"Cela n'a pas été trop difficile ?\",\"resultText2\":\"Jetez un coup d'œil dans la page conso dans 1 à 3 jours, le temps que vos données arrivent, pour voir l'impact de votre action.\",\"resultText3\":\"Pas de baisse de significative ? Pas de panique, en maintenant cette pratique dans le temps, les économies d'énergies et d'eau seront davantage visibles.\",\"resultText4\":\"Dans tous les cas, bravo, vous remportez...\",\"ok\":\"Ok\"},\"action_modal\":{\"accept\":\"Je relève le défi\",\"refuse\":\"Je me défile\",\"accessibility\":{\"window_title\":\"Fenêtre de confirmation\",\"button_accept\":\"Accepter\",\"button_refuse\":\"Refuser\"}},\"analysis\":{\"viewTitle\":\"Analyse\",\"warning_title\":\"Analyse incomplète\",\"warning_text\":\"Ecolyo n'a pas encore reçu toutes les données %{fluidList} pour ce mois\",\"comparison\":\"Comparatif\",\"analysis_date\":\"Conso totale\",\"challenge\":\"Défis terminés en\",\"user_consumption\":\"Votre conso\",\"average_home\":\"Conso moyenne d'un profil similaire\",\"average_home_description\":\"Le comparatif ici présenté est calculé sur la base d'un profil similaire au vôtre. Il s'agit d'un calcul et non d'une comparaison avec les autres utilisateurs de l'application. Sont pris en compte l'ensemble des informations entrées dans votre profil : mode de chauffage, âge du logement et éventuels travaux de rénovation, etc. Ce modèle a été créé avec l'Agence Locale de l'Energie sur la base de chiffres issues du Schéma Directeur des Energies de la Métropole de Lyon et de Chiffres-clé publiés par l'ADEME (l'Agence de l'Environnement et de la Maîtrise de l'Energie).\",\"approximative_description\":\"Pour comparer votre consommation avec un foyer similaire ou avec une conso idéale, veuillez détailler votre profil\",\"no_data\":\"Pas de données\",\"accessibility\":{\"button_go_to_profil\":\"Détailler mon profil\",\"comparison_multifluid\":\"Vos dépenses (tous fluides confondus) vs Dépenses moyennes\",\"comparison_electricity\":\"Votre consommation d'électricité vs Consommation moyenne\",\"comparison_water\":\"Votre consommation d'eau vs Consommation moyenne\",\"comparison_gas\":\"Votre consommation de gaz vs Consommation moyenne\"},\"max_day\":\"Jour où vous avez le plus consommé\",\"compare\":{\"title\":\"Comparateur\",\"month_tab\":\"Comparer au mois dernier\",\"year_tab\":\"Comparer à l'année dernière\"},\"temperature_comparison\":{\"unit\":\"°C\",\"comparison\":\"par rapport à\",\"info_button\":\"Information sur l'indice météo\",\"modal\":{\"title\":\"Indice météo\",\"month_comparison\":\"Écart de température moyenne entre le mois observé et le mois précédent.\",\"year_comparison\":\"Écart de température moyenne entre le mois observé et le même mois de l'année précédente.\",\"data_info\":\"Données Météo France issues de la station météo Lyon Bron.\",\"close\":\"Fermer la fenêtre\"}}},\"analysis_error_modal\":{\"title\":\"Aucune analyse\",\"message\":\"Pour profiter d’une analyse de vos consommations, connectez au moins un de vos compteurs.\",\"go_to_conso\":\"Je connecte mes compteurs\",\"understood\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_understood\":\"J'ai compris\",\"button_goto_konnector\":\"Aller aux connecteurs\"}},\"analysis_pie\":{\"total\":\"Conso totale\",\"details\":\"Détail par fluide\",\"month\":\"Au mois \",\"estimation\":\"Comment sont estimés<br>les prix ?\"},\"special_elec\":{\"title\":\"Spécial Électricité\",\"average\":\"Conso moyenne\",\"weektype\":\"un jour de \",\"week\":\"semaine\",\"weekend\":\"week-end\",\"min\":\"Conso minimum\",\"percentage\":\"Part dans la facture\",\"price\":\"Soit\",\"maxPower\":\"Puissance maximum atteinte\",\"offPeakHour\":\"Consommation en heures creuses\",\"showModal\":\"Plus d'infos\"},\"elec_info_modal\":{\"accessibility\":{\"window_title\":\"Information sur les statistiques Enedis\",\"button_close\":\"Fermer la fenêtre d'information\"},\"maxPowerTitle\":\"Qu’est-ce que la puissance maximum ?\",\"maxPowerDetails-1\":\"C’est la puissance maximum délivrée par tous les appareils fonctionnant au même moment dans votre logement.\",\"maxPowerDetails-2\":\"Vous avez choisi une puissance maximum dans votre offre d’électricité (3, 6 ou 9 kVA...) que vous ne devez pas dépasser pour ne pas faire sauter votre compteur. \",\"maxPowerDetails-3\":\"Cette puissance varie d'un mois à l'autre, regardez cette valeur sur l'ensemble de l'année pour vérifier si votre puissance souscrite correspond bien à votre usage.\",\"offPeakTitle\":\"Sur quelle base est calculé mon ratio Heures Pleines / Heures Creuses ?\",\"offPeakDetails-1\":\"D'après Enedis, vos plages d'heures creuses sont les suivantes : %{offPeakHours}. Nous avons donc simplement calculé, à l'aide vos consommations à la demi-heure, quelle part de votre consommation est réalisée sur vos heures creuses.\",\"minPowerTitle\":\"Qu’est-ce que la consommation minimum ?\",\"minPowerDetails-1\":\"Elle correspond à votre plus petite consommation du mois sur un créneau d'une demi-heure.\",\"minPowerDetails-2\":\"Nous extrapolons cette consommation sur 1 mois afin vous donner un aperçu de la consommation de vos consommations électriques en veille (box, télé, chargeurs, ...) ou encore de celle, incompressible, de vos appareils de froid (frigo, congélateur).\"},\"auth\":{\"enedissgegrandlyon\":{\"title\":\"Ecolyo doit se connecter à l’électricité\",\"bill\":\"Munissez-vous d’une <span>facture d’électricité</span> pour valider la connexion\",\"connect\":\"Je me connecte à l'électricité\",\"accessibility\":{\"connect\":\"Se connecter\"},\"identityTitle\":\"Nom inscrit sur la facture\",\"firstName\":\"Prénom\",\"lastName\":\"Nom\",\"pdlTitle\":\"Numéro de votre compteur électrique (PDL)\",\"pdlLabel\":\"N° (14 chiffres)\",\"pdlModal\":{\"title\":\"Qu'est-ce qu'un PDL ?\",\"title_accessibility\":\"Modale qu'est ce qu'un PDL ?\",\"txt1\":\"Votre numéro de point de livraison (PDL) peut aussi s’appeler PRM si vous possédez un compteur Linky.\",\"txt2\":\"Ce numéro est composé de 14 chiffres.\",\"txt3\":\"Votre numéro de PDL ou PRM se trouve sur votre facture d’électricité.\",\"txt4\":\"Si vous avez un compteur Linky, appuyez sur le bouton “+” et faites défiler l’affichage jusqu’à obtenir l’affichage suivant :\",\"button\":\"J'ai compris\",\"button_accessibility\":\"Bouton valider\",\"prm_accessibility\":\"Écran d'un compteur Linky présentant le numéro PRM\"},\"addressTitle\":\"Adresse du titulaire\",\"address\":\"Numéro et voie\",\"zipCode\":\"Code postal\",\"city\":\"Ville\",\"headConsent\":\"En acceptant de partager vos données, celles-ci seront directement transférées à Ecolyo à l’intérieur de votre cloud personnel, sans que la Métropole n’y accède ni ne les visualise.\",\"textConsent\":\"Afin de vous offrir des fonctionnalités de visualisation et d'analyse, Ecolyo a besoin des données suivantes : \",\"consentLi1\":\"L'historique et le relevé de vos consommations quotidiennes en kWh\",\"consentLi2\":\"L'historique et le relevé de vos consommations au pas de temps 30 minutes\",\"consentLi3\":\"Les puissances maximales atteintes quotidiennement\",\"consentLi4\":\"Les données contractuelles (début de contrat et puissance souscrite)\",\"consentCheck1\":\"Je consens à partager les données personnelles ci-dessus pour une durée d'<span>un an</span>\",\"consentCheck2\":\"J’atteste être le titulaire du point de livraison (PDL) renseigné à l’étape précédente\"},\"grdfgrandlyon\":{\"title\":\"Ecolyo doit se connecter au gaz\",\"bill\":\"Munissez-vous d’une <span>facture de gaz</span> pour valider la connexion\",\"connect\":\"Je me connecte au gaz\",\"accessibility\":{\"connect\":\"Se connecter\"},\"identityTitle\":\"Nom inscrit sur la facture\",\"firstName\":\"Prénom\",\"lastName\":\"Nom\",\"email\":\"Email\",\"zipCode\":\"Code postal\",\"pceTitle\":\"Numéro de votre compteur de gaz (PCE)\",\"pceLabel\":\"N° (14 chiffres)\",\"pceHint\":\"Où trouver le numéro de PCE ?\",\"pceModal\":{\"title\":\"Où trouver le n° de PCE ?\",\"txt1\":\"Votre numéro de <span>PCE</span> - ou <span>Point de comptage et d'estimation</span> - se trouve sur votre facture au niveau de vos informations contractuelles (parfois en 1ère page... parfois en dernière !)<br/><br/> C'est un identifiant à 14 chiffres.\",\"button\":\"J'ai compris\",\"accessibility\":\"Titre de la modale\",\"button-accessibility\":\"Bouton valider\"},\"headConsent\":\"Vous allez partager vos données à la Métropole de Lyon. Elles seront directement transférées à Ecolyo à l'intérieur de votre cloud personnel, sans que la Métropole n'y accède ni ne les visualise.\",\"textConsent\":\"Afin de vous offrir des fonctionnalités de visualisation et d'analyse, Ecolyo a besoin des données suivantes :\",\"consentLi1\":\"L'historique de vos consommations (jusqu’à 36 mois) et le relevé quotidien de vos consommations\",\"consentLi2\":\"Les données contractuelles (type de compteur, date de début de contrat)\",\"consentCheck1\":\"Je consens à partager les données personnelles ci-dessus pour une durée d'<span>un an</span>\",\"consentCheck2\":\"J’atteste être le titulaire du point de livraison (PCE) renseigné à l’étape précédente\",\"waiting\":{\"mailSent\":\"Un mail vous a été envoyé...\",\"mailDelay\":\"La réception du mail peut prendre 15min, l'envoi des mails se faisant tous les 1/4 d'heure\",\"validate\":\"Merci de valider l'autorisation d'accès à vos données\",\"comeback\":\"Une fois ce clic effectué, revenez ici pour accéder à vos données\",\"button_done\":\"C’est fait !\"}},\"eglgrandlyon\":{\"bill\":\"Munissez-vous d’une <span>facture d'eau</span> pour valider la connexion\",\"connect\":\"Je me connecte à l'eau\",\"accessibility\":{\"connect\":\"Se connecter\"},\"connect_form\":{\"login\":\"Identifiant (7 chiffres)\",\"password\":\"Mot de passe\",\"label\":\"Je connecte Ecolyo à mon compte Eau Publique du Grand Lyon\"},\"no_account\":{\"title\":\"Ecolyo doit se connecter à l'eau\"},\"with_account\":{\"title\":\"Votre compte Eau Publique du Grand Lyon a bien été créé ?\",\"subtitle1\":\"Plus qu’à donner votre accord pour connecter votre compteur d'eau et Ecolyo !\"},\"step1\":{\"info1\":\"La connexion se fait via <span>votre compte Eau Publique du Grand Lyon</span>.\",\"info2\":\"Possédez-vous un <span>compte Eau Publique du Grand Lyon</span> ?\"},\"step2\":{\"info1\":\"Une fois votre compte créé, <span>n'oubliez pas de revenir sur Ecolyo</span> pour finaliser la connexion.\"},\"button_go_to_partner_site\":\"Aller sur EPGL\"},\"connect_oauth\":{\"loading\":\"Chargement...\"},\"accessibility\":{\"button_reveal_password\":\"Afficher le mot de passe\",\"button_connect\":\"Se connecter\",\"button_create_account\":\"Se créer un compte\",\"window_title\":\"Fenêtre d'information sur la création de compte.\",\"button_close\":\"Fermer la fenêtre.\"},\"button_previous\":\"Précédent\",\"button_connect\":\"Se connecter\",\"button_create_account\":\"Se créer un compte\",\"button_has_account\":\"J'ai déjà un compte\",\"button_validate\":\"J'ai compris\",\"button_showOfflineData\":\"Voir mes anciennes données\",\"warningOfflineData\":\"Attention, vous visualisez d’anciennes données. Pour actualiser vos données, connectez votre compteur\"},\"challenge\":{\"card\":{\"ongoing\":{\"quiz\":\"Quiz\",\"exploration\":\"Explorations\",\"action\":\"Actions\",\"duel\":\"Duel Final\",\"result\":\"Résultat\",\"duelDone\":\"du duel final\"},\"locked\":{\"desc\":\"À débloquer en terminant le défi précédent\"}},\"card_done\":{\"saving\":\"Économie de\",\"depense\":\"Dépense de\",\"win\":\"Gagné\",\"lost\":\"Perdu\",\"final_defi\":\"sur le duel final\",\"final_defi_view\":\"Revoir le duel final\",\"reset_defi\":\"Relancer le défi\"},\"card_last\":{\"title\":\"Tous les défis sont terminés\",\"message1\":\"Nous travaillons actuellement à vous proposer de nouveaux défis.\",\"button\":\"Suggérer une idée de défi\"},\"card_unlocked\":{\"button_launch\":\"Lancer le défi\"},\"accessibility\":{\"button_launch\":\"Lancer le défi\",\"button_goto_konnector\":\"Aller aux connecteurs\",\"button_slider_previous\":\"Précédent\",\"button_slider_next\":\"Suivant\"}},\"challenge_no_fluid_modal\":{\"title\":\"Oups !\",\"content\":\"Connectez au moins 1 fluide pour pouvoir jouer\",\"button_validate\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Valider\"}},\"consumption\":{\"display_last_data\":\"Voir mes dernières consos\",\"accessibility\":{\"navigation_group\":\"Choix de la période\",\"fluid_menu\":\"Choix du fluide\",\"button_previous_period\":\"Afficher la période précédente\",\"button_next_period\":\"Afficher la période suivante\",\"button_previous_value\":\"Sélectionner la valeur précédente\",\"button_next_value\":\"Sélectionner la valeur suivante\",\"checkbox_compare\":\"Afficher ou cacher la comparaison\",\"bar\":\"Consommation du %{date} : %{value} %{unit}\"},\"partner_issue_modal\":{\"title\":\"Attention !\",\"accessibility_title\":\"Modale de maintenance partenaire\",\"error_connect_gaz\":\"La connexion à vos données de <span class='gaz'>gaz</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='gaz'>GRDF</span> ou dans notre service)\",\"error_connect_elec\":\"La connexion à vos données d'<span class='elec'>électricité</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='elec'>Enedis</span> ou dans notre service)\",\"error_connect_water\":\"La connexion à vos données d'<span class='water'>eau</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='water'>Eau Publique du Grand Lyon</span> ou dans notre service)\",\"additional_text\":\"La visualisation et/ou la connexion à vos données de consommation peut s'en trouver affectée.<br /><br /><i>Merci pour votre patience en attendant un retour à la normale :)</i>\",\"ok\":\"Ok\"},\"compared\":\"Comparé\"},\"consumption_details\":{\"detail\":\"Détail par fluide\",\"connect\":\"Connecter d'autres fluides\",\"mini_cards_label\":\"AUTRES ENERGIES\"},\"consumption_visualizer\":{\"missing_data\":\"Données manquantes\",\"no_data\":\"Pas de données\",\"why_no_data\":\"Pourquoi n'ai-je pas de données ?\",\"last_valid_data\":\"Dernières données valides : %{date}\",\"last_available_data\":\"Dernières données disponibles : %{date}\",\"last_valid_data_multi\":\"Dernières données complètes : %{date}\",\"data_to_come\":\"À venir\",\"aie\":\"Aïe !\",\"data_empty\":\"Vide\",\"estimated\":\"estimés\",\"cost_per_fluid\":{\"electricity\":\"Part de l'électricité\",\"water\":\"Part de l'eau\",\"gas\":\"Part du gaz\"},\"dataModal\":{\"list_title\":\"3 raisons possibles :\",\"item1\":\"le lien entre Ecolyo et le fournisseur de données est rompu : une mise à jour de ce lien (en bas de la page) peut résoudre ce problème.\",\"item2\":\"un problème technique chez votre gestionnaire : se connecter directement chez ce gestionnaire pour vérifier que cette donnée apparaît.\",\"item3\":\"pour le gaz : vous n'avez pas autorisé Ecolyo à accéder aux données de consommation de cette période.\",\"item4\":\"vous n'aviez tout simplement pas de compteur communicant à l'époque !\"},\"modal\":{\"window_title\":\"info estimation des prix\",\"title\":\"Comment sont estimés les prix ?\",\"close\":\"Fermer la fenêtre\",\"part1\":\"Le prix de votre électricité ou de votre gaz dépend de l'offre choisie auprès de votre fournisseur. N’ayant pas accès à cette information, Ecolyo affiche un prix moyen par fluide. \",\"part2\":\"Tarifs moyens retenus :\",\"list1\":\" : 1 kWh = %{elecPrice} €TTC (il correspond au tarif réglementé d’EDF au %{elecPriceStartDate} pour une puissance souscrite de 3 ou 6 kVA et hors offre heure pleine/heure creuse)\",\"list2\":\" : 1 kWh = %{gasPrice} €TTC (Prix repère de vente de gaz publié par la Commission de Régulation de l'Energie au %{gasPriceStartDate} pour un consommateur \\\"Cuisson/Eau Chaude\\\")\",\"list3\":\" : 1 litre d’eau = %{waterPrice} € TTC (prix constaté au %{waterPriceStartDate} pour un abonnement et une consommation de 120 m3/an sur la Métropole de Lyon)\",\"part3\":\"Le coût de votre abonnement n'est pas pris en compte pour l'électricité.\"},\"release_notes_modal\":{\"title\":\"Du nouveau sur Ecolyo !\",\"message\":\"Les mises à jour suivantes ont été effectuées sur votre application :\",\"go_back\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre de notifications\",\"button_go_back\":\"J'ai compris\"}}},\"ecogestures\":{\"loading\":\"Chargement des astuces\"},\"duel\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"average_info\":\"%{average} euros étant votre moyenne actuelle, relevez-vous le défi ?\",\"button_start\":\"Allons-y !\",\"goal1\":\"Faites moins que votre moyenne actuelle sur %{durationInDays} jours\",\"goal2\":\"pour gagner le badge %{title}\",\"goal_done\":\"Duel remporté\",\"goal_failed\":\"Duel perdu\",\"caption_average\":\"Votre moyenne à titre indicatif\",\"caption_consumption\":\"Votre consommation\",\"caption_incoming\":\"Données à venir\",\"accessibility\":{\"button_go_back\":\"Retour\",\"button_start_duel\":\"Lancer le duel\",\"button_start_quiz\":\"Lancer le quiz\"}},\"duel_result_modal\":{\"success\":{\"title\":\"Félicitations\",\"message1\":\"Vous avez économisé %{value} €\",\"message2\":\"et gagné le badge %{title} !\",\"button_validate\":\"Youpi\"},\"lost\":{\"title\":\"Presque\",\"message1\":\"Vous avez dépassé de %{value} €\",\"message2\":\"et manqué le badge %{title}\",\"button_validate\":\"Zut alors\"},\"accessibility\":{\"window_title\":\"Fenêtre de résultat\",\"button_validate\":\"Valider\"}},\"last_duel_modal\":{\"title\":\"Félicitations !\",\"subtitle\":\"Vous avez terminé tous les défis !\",\"message1\":\"Nous travaillons actuellement à vous proposer de nouveaux défis.\",\"message2\":\"Vous pouvez donner votre avis sur ce que vous aimeriez en cliquant sur la bulle d'aide.\",\"close\":\"Fermer la fenêtre\"},\"duel_empty_value_modal\":{\"title\":\"Oups !\",\"message\":\"Impossible de lancer le duel. Il nous manque en effet certaines de vos données de consommation pour vous proposer un duel à votre hauteur.\",\"button\":\"Je retourne au menu des défis\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Retourner au menu des défis\"}},\"ecogesture\":{\"title_tab_0\":\"Objectifs\",\"title_tab_1\":\"Je fais déjà\",\"title_tab_2\":\"Toutes\",\"MENU_TITLE\":\"Filtrer\",\"ALL\":\"Tous les usages\",\"HEATING\":\"Chauffage\",\"AIR_CONDITIONING\":\"Climatisation\",\"ECS\":\"Eau chaude\",\"COLD_WATER\":\"Eau froide\",\"ELECTRICITY_SPECIFIC\":\"Électricité courante\",\"COOKING\":\"Cuisson\",\"selection\":\"Sélectionner les astuces les plus adaptées à votre consommation\",\"selection_2\":\"vues sur\",\"button_selection\":\"Continuer ma sélection\",\"no_ecogesture\":\"Aucune astuce ne correspond à votre filtrage\",\"no_ecogesture_filter\":{\"text1\":\"Nous n'avons pas trouvé d'astuces adaptées à votre profil dans cette catégorie.\",\"text2\":\"En effet, de par votre profil et vos modes de chauffage, d'eau ou d'eau chaude sanitaire, nous n'avons pas identifié d’astuces vous permettant de diminuer vos factures à titre individuel. Toutefois, vous pouvez toujours agir pour préserver les ressources en appliquant et diffusant autour de vous les autres bonnes pratiques présentées dans la partie \\\"Toutes les astuces\\\".\"},\"adjust_profil\":{\"description\":\"Pour une sélection d’astuces adaptée à votre consommation, vous pouvez ajuster votre profil.\",\"button_go_to_profil\":\"Ajuster mon profil\"},\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_close\":\"Fermer la fenêtre\",\"button_selection\":\"Aller à la page de sélection\"},\"doing\":\"Je fais déjà\",\"objective\":\"Objectif\",\"emptyList\":{\"obj1\":\"Les astuces présentées sont des actions qui vous permettent de réduire vos consommations et donc vos factures. On parle parfois d’écogestes.\",\"obj1_done\":\"Aucune astuce n’a été sélectionnée comme objectif actuellement.\",\"obj2\":\"Vous pouvez sélectionner ceux à mettre en objectifs et ceux que vous appliquez déjà.\",\"obj2_done\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous souhaitez garder en objectif dans cette section.\",\"doing1\":\"Aucune astuce n’a été sélectionnée dans la catégorie appliquée actuellement.\",\"doing1_done\":\"Aucune astuce n’est indiquée comme déjà appliquée actuellement.\",\"doing2\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous mettez déjà en pratique dans cette section.\",\"doing2_done\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous mettez déjà en pratique dans cette section.\",\"btn1\":\"Voir toutes les astuces\",\"btn2\":\"Sélectionner\"},\"initModal\":{\"title\":\"Sélectionner mes astuces\",\"text1\":\"Les astuces présentées dans cette page sont des actions qui vous permettent de réduire vos consommations. Elles sont appelées parfois aussi écogestes.\",\"text2\":\"Répondez à un court questionnaire pour générer une liste d'astuces adaptée à votre profil puis sélectionnez celles que vous suivez déjà et celles que vous voulez vous mettre en objectif !\",\"btn1\":\"Plus tard\",\"btn2\":\"C'est parti !\"},\"reset\":\"Réinitialiser ma sélection\",\"resetModal\":{\"title_part1\":\"Cette action\",\"title_part2\":\"supprimera votre liste d’astuces\",\"title_part3\":\"sélectionnées dans\",\"title_part4\":\"“Objectifs”\",\"title_part5\":\"et\",\"title_part6\":\"“Je fais déjà”\",\"text1\":\"Vous pourrez ensuite faire une nouvelle sélection adaptée à votre consommation.\",\"text2\":\"Souhaitez-vous réinitialiser votre sélection d’astuces ?\",\"btn1\":\"Non\",\"btn2\":\"Réinitialiser\"}},\"ecogesture_modal\":{\"title_ecogesture\":\"Astuce\",\"title_action\":\"Action\",\"efficiency\":\"Efficacité\",\"show_less\":\"Voir moins\",\"show_more\":\"Voir plus\",\"select_action\":\"Je choisis cette action\",\"accessibility\":{\"window_title_ecogesture\":\"Fenêtre astuce\",\"window_title_action\":\"Fenêtre action\",\"button_close\":\"Fermer la fenêtre\",\"button_select_action\":\"Sélectionner cette action\",\"button_see_more_detail\":\"Afficher plus de détails\"}},\"ecogesture_info_modal\":{\"header\":\"Comment sont choisis les astuces adaptées à mon profil ?\",\"text\":\"Les astuces adaptés à votre profil sont aujourd’hui choisies en fonction des compteurs individuels que vous possédez (communicants ou non). Ceux présentés ici vous permettent d'agir sur vos consommations individuelles. Des modes de tri plus personnalisables seront proposés à l'avenir.\",\"button_close\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre d'information\",\"button_close\":\"Fermer la fenêtre\"}},\"ecogesture_form\":{\"heating_type\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"5\":\"Autre\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour vous chauffer ?\",\"no_fluid_text\":\"Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel\",\"0_text\":\"Produit grâce à de l'électricité\",\"2_text\":\"Produit grâce au gaz\",\"3_text\":\"Produit grâce au bois\",\"4_text\":\"Produit grâce au fioul\",\"5_text\":\"Produit grâce à un autre moyen\"},\"hot_water\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"}},\"ecogesture_profile\":{\"equipments\":{\"question\":\"Quels équipements possédez-vous ?\",\"hint\":\"Plusieurs réponses possibles\",\"air_conditioning\":\"Climatisation\",\"computer\":\"Ordinateur\",\"microwave\":\"Micro-ondes\",\"oven\":\"Four\",\"washing_machine\":\"Lave-linge\",\"dishwasher\":\"Lave-vaisselle\",\"cooking_plates\":\"Plaques électriques\",\"outside\":\"Extérieur\",\"dryer\":\"Sèche-linge\",\"refregirator\":\"Réfrigérateur\",\"fan\":\"Ventilateur\",\"water_heater\":\"Chauffe-eau\",\"curtain\":\"Rideaux\",\"internet_box\":\"Box internet\",\"ventilation\":\"VMC\",\"freezer\":\"Congélateur\",\"boiler\":\"Chaudière\",\"hydraulic_heating\":\"Chauffage hydraulique\",\"accessible_label\":\"Liste des équipements\"}},\"ecogesture_selection\":{\"header\":\"Sélection des astuces\",\"title\":\"Vous avez parcouru un groupe de %{smartCount} astuces\",\"text\":\"Voulez-vous continuer sur votre lancée ou remettre cette sélection à plus tard ?\",\"title_final\":\"Félicitations !\",\"text_final_1\":\"Vous avez terminé la sélection des astuces adaptées à votre consommation.\",\"text_final_2\":\"Vous pouvez les retrouver dans les sections “Objectifs” et “Je fais déjà” selon que vous les pratiquiez déjà ou non.\",\"button_go_to_ecogesture\":\"Plus tard\",\"button_ok\":\"J'ai compris\",\"button_continue\":\"Poursuivre\",\"button_objective\":\"Objectif\",\"button_doing\":\"Je fais déjà\",\"button_skip\":\"Pas intéressé\",\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_close\":\"Fermer la fenêtre\",\"button_go_to_ecogesture\":\"Retourner aux astuces\",\"button_continue\":\"Poursuivre\",\"button_ok\":\"Fermer la sélection\"},\"selectionModal\":{\"title\":\"Des astuces correspondant à votre profil ont été trouvées !\",\"text\":\"À vous de choisir celles que vous souhaitez mettre en objectif et celles que vous faites déjà.\",\"button_close\":\"C'est parti !\"}},\"exploration\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"button_already_done\":\"C’est déjà fait !\",\"button_come_back\":\"Je reviens quand cela sera fait\",\"button_start\":\"C'est parti !\",\"watch_consumption\":\"Je fonce\",\"congratulation\":\"Bravo !\",\"earn\":\"Vous remportez\",\"button_confirm\":\"Ok\",\"interval\":{\"explanation\":\"Vous pouvez vérifier cette informations sur l'écran Conso.\"},\"accessibility\":{\"button_already_done\":\"Marquer l'exploration comme déjà réalisée\",\"button_confirm\":\"Valider\",\"button_come_back\":\"Fermer l'exploration\",\"button_go_back\":\"Retour\",\"button_start\":\"Lancer l'exploration\"}},\"error_page\":{\"main\":\"Erreur\",\"back\":\"Retour\",\"no_ecogesture\":\"Oups ! Nous n'avons pas trouvé l'astuce demandée.\"},\"help\":{\"title_help\":\"une question ? un problème ? une suggestion ?\",\"read_help\":\"Nous écrire via le Service d'Assistance Utilisateur\"},\"feedback\":{\"title\":\"Vous allez contacter le Service Assistance Utilisateur du Grand Lyon.\",\"text1\":\"Vous pourrez nous remonter un problème, chercher de l'aide pour vous connecter plus facilement, ou encore nous partager une bonne idée d'évolution.\",\"text2\":\"N'hésitez pas à nous écrire ! L'équipe Ecolyo vous répondra avec plaisir :)\",\"later\":\"Plus tard\",\"lets_go\":\"J'y vais\",\"accessibility\":{\"window_title\":\"Fenêtre de partage de retours\",\"button_close\":\"Fermer la fenêtre de partage de retours\"}},\"dataShare\":{\"title1\":\"Bienvenue !\",\"title1Update\":\"Ecolyo évolue !\",\"title2Update\":\"Pour continuer à utiliser Ecolyo, merci d’accepter les modalités de traitement des données ci-dessous.\",\"part1\":\"Nous avons besoin de l’adresse email utilisée lors de la création de votre Cozy Métropole de Lyon, ci-après nommé cloud personnel.\",\"part2\":\"Cette donnée de compte est conservée dans Ecolyo le temps de l’utilisation de ce service.\",\"part3\":\"La Métropole de Lyon utilisera cet email afin de vous tenir informé·e :\",\"item1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter.\",\"item2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"item3\":\"De l’évolution de vos consommations, des nouveautés et  de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part4\":\"Vos données privées de consommation d’énergie et d’eau sont récupérées, sauvegardées et stockées dans votre cloud personnel à votre initiative sans visibilité de la Métropole  de Lyon sur leur contenu.\",\"part5\":\"Il en est de même pour les données privées de composition du logement et du foyer, fournies par vos soins. Elles restent également sans visibilité de la Métropole de Lyon sur leur contenu.\\nLes données d’identification entrées lors de la connexion aux données de consommations d’électricité sont quant à elles conservées dans un espace sécurisé de la Métropole de Lyon et sont utilisées uniquement à des fins de contrôle du consentement par des organismes extérieurs.\",\"part6\":\"Dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées et pseudonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation, d’évaluer globalement l’usage de l’application via des mesures d’audience ainsi que d’évaluer à terme l’impact global en termes de baisse des consommations énergétiques de notre service.\",\"part7\":\"Au sein de votre cloud personnel, vous pouvez à tout moment exercer vos droits d’accès, de rectification, de portabilité, de limitation et d’opposition en consultant notamment la page Options.\",\"part8\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part9\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Assemblées, des Affaires Juridiques et des Assurances - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 \",\"part10\":\"ou en ligne, au moyen du formulaire disponible à l'adresse suivante : \",\"link1\":\"<a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/</a>\",\"validDataConsent\":\"Je consens au traitement de mes données tel que décrit ci-dessus.\",\"validCGU\":\"Je valide les \",\"validCGU_button\":\"Conditions Générales d’Utilisation\",\"validLegal\":\" du service et ai pris connaissance des \",\"validLegal_button\":\"Mentions Légales\",\"validLegal2\":\"de celui-ci.\",\"button_accept\":\"C'est parti !\",\"accessibility\":{\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"minorUpdate\":{\"title\":\"Ecolyo évolue !\",\"button\":\"J'ai compris\"},\"gcu\":{\"title\":\"Conditions générales d’utilisation du service\",\"version\":\"Version du 12.12.2022\",\"content\":{\"title1\":\"Ecolyo, késako ?\",\"part1_1\":\"Ecolyo est un service proposé par la Métropole de Lyon vous permettant de suivre au même endroit vos consommations d’électricité, de gaz et d’eau, en kWh, en litres, en euros et à différentes échelles de temps. Ce service vous permet également de participer à des défis individuels et vous offre une analyse de vos consommations. Des astuces vous sont aussi proposées afin de vous permettre de réduire vos consommations.\",\"part1_2\":\"C’est un service gratuit qui prend la forme d’un site web dit « responsive », c’est-à-dire qu’il peut être consulté sur ordinateur ou sur mobile. Sur mobile, c’est une application que l’on a souhaitée ergonomique, réactive et esthétique pour votre plaisir de navigation et d’utilisation au quotidien.\",\"part1_3\":\"Tous les termes « techniques » sont définis en bas de page.\",\"title2\":\"Quelles fonctionnalités le service propose-t-il ?\",\"part2_1\":\"La fonctionnalité principale d’Ecolyo est la visualisation, au même endroit, de vos consommations d’électricité, de gaz et d’eau et ce, à différents pas de temps (de la demi-heure – uniquement pour l’électricité, à plusieurs années, en passant par les pas de temps journaliers et mensuels). La visualisation des consommations se fait en kWh pour l’énergie et en L pour l’eau ainsi qu’en euros (euros résultant d’un prix moyenné).\",\"part2_2\":\"Au-delà de la visualisation de vos consommations et parce que nous souhaitons vous aider à diminuer ces consommations vous retrouverez plusieurs autres pages : \",\"part2_2_list1\":\"Défis : Des quiz, et actions à mettre en place vous seront proposés pour vous pousser à réduire vos consommations.\",\"part2_2_list2\":\"Astuces : Une liste d’astuces pour maîtriser ses consommations d’énergie et d’eau à trier par usage, et avec une possibilité de les adapter plus précisément à votre profil.\",\"part2_2_list3\":\"Analyse : Une analyse de vos consommations réelles en comparaison à celle d’un foyer étant proche d’une vôtre.\",\"part2_3\":\"Pour la page Analyse ainsi que pour la partie personnalisation des astuces, des éléments supplémentaires sur votre profil vous seront demandés. L’ensemble de ces informations récoltées à l’aide du formulaire peuvent être modifiées par la suite.\",\"part2_4\":\"Dernière page : la page Options dans laquelle vous pourrez vous abonner à un service d’alerte sur vos consommations d’eau, de quoi ajuster votre profil ou encore vous désabonner de la lettre mensuelle.\",\"title3\":\"Comment ai-je accès à mes données d’électricité, de gaz et d’eau ?\",\"part3_1\":\"Pour visualiser vos consommations réelles et profiter pleinement du potentiel de notre service, il vous faut au minimum un des trois compteurs communicants suivants : Linky (pour l’électricité), Gazpar (pour le gaz), Téléo (pour l’eau).\",\"part3_2\":\"Ces compteurs sont opérés par les gestionnaires de réseaux. Pour Linky, c’est Enedis, le gestionnaire de réseau de distribution d’électricité. Pour Gazpar, GRDF est responsable de cette gestion. Et pour Téléo, c’est Eau Publique du Grand Lyon.\",\"part3_3\":\"Ces acteurs sont responsables de la relève de vos données. Ces données servent notamment à votre fournisseur d’électricité, de gaz ou d’eau pour permettre la facturation de vos consommations d’énergie. Des fournisseurs d’électricité ou de gaz il y en a des dizaines. Les gestionnaires de réseaux (… et de votre compteur) ne sont qu’au nombre de trois. Nous avons donc décidé de travailler avec eux, au plus près de la donnée brute issue de vos compteurs.\",\"part3_4\":\"Il vous faudra donc avoir un compte chez GRDF et Eau Publique du Grand Lyon pour accéder à vos données. Si vous n’en avez pas, il suffira de vous en créer un. Ceci ne sera à faire qu’une fois, au début.\",\"title4\":\"Ecolyo se trouve dans un cloud personnel Métropole de Lyon, qu’est-ce que cela signifie ?\",\"part4_1\":\"Comme vous avez dû le remarquer, lors de votre première connexion à Ecolyo vous avez dû vous créer un compte Cozy Métropole de Lyon. Ce cloud personnel est un espace sécurisé porté par l’ambition de vous apporter visibilité, transparence et maîtrise sur l’usage de vos données personnelles, et dont les fonctionnalités vous permettant de récupérer, synchroniser, stocker et partager vos données avec les destinataires de votre choix.  Le service Ecolyo se déploie  à l’intérieur de cet espace protégé. Dans ce cloud personnel, vous pourrez accéder également à d’autres services. Toutes les données traitées par Ecolyo, mais aussi les autres services que vous seriez amenés à utiliser dans ce cloud personnel restent dans ce Cloud Personnel Grand Lyon et n’en sortent pas, sauf si vous décidez vous-même de partager vos données avec des tiers.\",\"part4_2\":\"Pour en savoir plus sur ce cloud et son utilisation, ainsi que la durée de conservation de vos données, vous pouvez lire les conditions générales d’utilisation du service <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">ici</a>.\",\"title5\":\"Et donc concrètement pour Ecolyo, quelles données sont collectées et qui y a accès ?\",\"part5_1\":\"Pour qu’Ecolyo ait accès à vos données de consommations, vous devrez activer vos différents connecteurs. À ce moment-là, pour la connexion aux données de gaz et d’eau à travers un parcours qui vous conduira de manière intuitive sur le site de chacun des gestionnaires de réseaux concerné, vous pourrez donner votre consentement à partager ces données avec le Service Ecolyo, et ce pour une durée limitée dans le temps. Pour l’électricité, le don du consentement et la connexion aux données se fait directement dans notre service. Quid de la durée de ce consentement ? Pour les données électriques, elle est par défaut d'un an. Pour les données gaz, cela sera à vous de la définir (nous vous recommandons 1 an pour une expérience optimale). Les données utilisées pour vérifier la bonne connexion de vos données d’électricité sont stockées du côté de la Métropole de Lyon sur des serveurs sécurisés.\",\"part5_2\":\"Vos connecteurs, une fois configurés, permettent le transfert de vos données de consommations au service Ecolyo. Le transfert de ces données de consommation se fait sans que personne n’accède à leur contenu, pas même la Métropole de Lyon. En effet, ces données sont stockées et traitées directement dans votre cloud personnel qui en assure la protection. Tous les calculs, analyses et traitements sur ces données sont faites DANS votre espace personnel sans visibilité sur le contenu des données par la Métropole de Lyon.\",\"part5_3\":\"Vous pouvez bien sûr mettre fin à la récupération/ au transfert de vos données de consommation sur votre espace cloud personnel à tout moment et  à plusieurs niveaux : \",\"part5_3_list1\":\"Vous pouvez supprimer le transfert quotidien de vos données en supprimant tout simplement le connecteur dans la page Consos (en bas).\",\"part5_3_list2\":\"Pour supprimer l’ensemble de vos données ainsi que votre cloud personnel Métropole de Lyon, vous devez demander la suppression de votre cloud. Pour faire cela, rendez-vous dans les paramètres de votre cloud personnel via la barre blanche en haut d’Ecolyo et appuyez sur le bouton « Supprimer mon compte » dans la partie paramètres.\",\"part5_4\":\"Des données sur le profil de votre foyer peuvent être également remplies au sein de l’application. Ces données s’enrichiront au fur et à mesure de votre utilisation du service avec d’autres informations : défis réalisés, étoiles gagnées, etc. L’ensemble de ces données restent à l’intérieur de votre cloud personnel, sans que personne n’y ait accès.\",\"part5_5\":\"Enfin, afin de permettre une mise à jour quotidienne de vos données de consommations, vos identifiants Eau Publique du Grand Lyon, un jeton d’identification GRDF ainsi que vos numéros de compteurs sont stockés.\",\"title6\":\"Personne n’a donc accès à mes données, pas même la Métropole de Lyon, vraiment ?\",\"part6_1\":\"Conformément aux indications du paragraphe précédent, la Métropole de Lyon n’accède ni à vos données de consommations ni aux données utilisées via certaines fonctionnalités du service comme le formulaire (celui-là même qui permet l’analyse de vos consommations personnalisée ainsi qu’une sélection d’éco-gestes personnalisés). Toutes ces informations sont bien gardées au chaud dans votre cloud personnel Métropole de Lyon\",\"part6_2\":\"Seul vous pouvez accepter de partager vos données, documents ou fichiers privés avec la Métropole de Lyon, ses partenaires ou d’autres utilisateurs ou acteurs (publics ou privés) après recueil de votre consentement éclairé et par une action expresse de votre part.\",\"part6_3\":\"La Métropole de Lyon n'a cependant accès qu’à l’adresse email utilisée lors la création de votre cloud personnel Métropole de Lyon. Elle utilise cet email afin de vous tenir informé·e :\",\"part6_3_list1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter. \",\"part6_3_list2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"part6_3_list3\":\"De l’évolution de vos consommations, des nouveautés et  de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part6_4\":\"Elle stocke également les informations transmises lors de la connexion à l’électricité (nom, adresse postale). Ces informations doivent être stockées car la Métropole de Lyon est régulièrement contrôlée par Enedis et doit prouver détenir le consentement des personnes pour lesquelles elle va chercher la donnée.\",\"part6_5\":\"Par ailleurs, et dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques anonymisées nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation ainsi que d’évaluer l’impact global en termes de baisse des consommations énergétiques de notre service. Parmi ces statistiques, des mesures d’audience de la fréquentation des différentes pages du service sont réalisées. Vous pouvez, via la page Options, à tout instant, décider de vous opposer à la récupération de ces données d’utilisation.\",\"title8\":\"Encore des questions ?\",\"part8_1\":\"N’hésitez pas à consulter la FAQ ou à nous contacter via le formulaire de contact présente sur l’ensemble des pages.\",\"part8_2\":\"Dernière option, contactez-nous directement à <a href=\\\"mailto:ecolyo@grandlyon.com\\\">ecolyo(at)grandlyon.com</a>.\",\"title9\":\"LEXIQUE\",\"part9_1_title\":\"Cloud personnel Métropole de Lyon : \",\"part9_1_content\":\"Cloud personnel : appelé aussi le « domicile numérique », le cloud personnel est souvent réduit à un simple espace de stockage de documents mais il est bien plus que ça. C'est un espace individuel et sécurisé où vous pouvez accéder à des services sans exposer aucune donnée à l’extérieur. Vous seul pouvez y accéder, personne d'autre.\",\"part9_2_title\":\"Connecteur : \",\"part9_2_content\":\"Un connecteur est un service, installé dans votre cloud personnel également, qui a pour but uniquement d’aller récupérer les données auprès de différents partenaires/sources de données. Dans le cadre d’Ecolyo, trois connecteurs sont pré-installés dans votre cloud personnel : celui d’Enedis, celui de GRDF et celui d’Eau Publique du Grand Lyon.\",\"part9_3_title\":\"Compteur communicant : \",\"part9_3_content\":\"Un compteur communicant est un compteur qui mesure de manière précise et détaillée vos consommations et peut transmettre ces données  au gestionnaire de réseau via une technologie radio (c'est le cas pour Gazpar et Téléo par exemple) ou via les réseaux électriques (via Courant Porteur en ligne, c'est le cas pour Linky par exemple).\",\"part9_4_title\":\"Fournisseur : \",\"part9_4_content\":\"Votre fournisseur d’électricité, de gaz ou d’eau est l’entreprise qui vous facture votre électricité, gaz ou eau. Côté électricité il en existe <a href=\\\"https://www.enedis.fr/liste-des-fournisseurs-delectricite\\\">aujourd’hui plus de 50</a>, chacun proposant des tarifs différents.\",\"part9_5_title\":\"Gestionnaire de réseau de distribution : \",\"part9_5_content\":\"Appelé aussi parfois distributeur, il est en charge de la livraison de votre électricité, gaz ou eau jusqu’à votre domicile. Il est aussi en charge du compteur qui relève vos consommations. Il transmet vos données de consommations à votre fournisseur afin qu’il effectue la facturation de vos consommations d’énergie. Il peut également les transmettre à tout acteur avec qui vous avez décidé de partager ces données.\"}},\"gcu_modal\":{\"button_accept\":\"J'accepte\",\"accessibility\":{\"window_title\":\"Conditions générales d’utilisation\",\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"matomo\":{\"matomo_title\":\"Suivi statistiques d'usage Matomo\"},\"header\":{\"accessibility\":{\"button_back\":\"Retour à la page précédente\",\"button_open_feedbacks\":\"Ouvrir le partage de retours\"}},\"konnector_form\":{\"label_updated_at\":\"Dernière mise-à-jour le\",\"button_update\":\"Mettre à jour\",\"loading\":\"Chargement...\",\"wait_end_issue\":\"Attendre la fin de la maintenance avant de mettre à jour.\",\"button_disconnect\":\"Déconnecter\",\"issue\":\"Le problème semble venir de \",\"resolve\":\"Une mise à jour peut résoudre ce problème.\",\"login_failed\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"not_installed\":\"Le connecteur n'est pas installé. Veuillez l'installer en cliquant sur le bouton ci-dessous.\",\"button_install\":\"Installer\",\"error_account_creation\":\"Une erreur est survenue, veuillez essayer de nouveau.\",\"error_no_login_password\":\"Identifiant et mot de passe requis\",\"error_login_failed\":\"Identifiants invalides\",\"error_update\":\"Un problème est survenu lors du rapatriement de vos données.\",\"error_update_oauth\":\"Votre autorisation pour afficher vos données %{fluid} a expiré.\",\"button_oauth_reload\":\"Redonner mon consentement\",\"OK\":\"Ok\",\"konnector_delta\":{\"ELECTRICITY\":\"La donnée de consommation électrique arrive normalement à J+1. Un retard d'un ou deux jours est parfois constaté.\",\"GAS\":\"La donnée de consommation de gaz arrive normalement à J+3. Un retard d'un ou deux jours est parfois constaté.\",\"WATER\":\"La donnée de consommation d'eau arrive normalement à J+3. Un retard d'un ou deux jours est parfois constaté.\"},\"accessibility\":{\"button_install\":\"Installer le connecteur\",\"button_update\":\"Mettre à jour votre connexion\",\"button_disconnect\":\"Déconnecter votre connecteur\"}},\"konnector_options\":{\"label_connect_to_electricity\":\"Se connecter à l'électricité\",\"label_connect_to_water\":\"Se connecter à l'eau\",\"label_connect_to_gas\":\"Se connecter au gaz\",\"label_offline_electricity\":\"Électricité déconnectée\",\"label_offline_water\":\"Eau déconnectée\",\"label_offline_gas\":\"Gaz déconnecté\",\"partner_issue\":\"En maintenance\",\"outdated\":\"Données manquantes depuis %{isOutdatedData} jours\",\"accessibility\":{\"label_ko_status\":\"Connecteur en erreur\",\"button_toggle_detail_electricity\":\"Afficher ou masquer le détail de la connexion à l'électricité\",\"button_toggle_detail_water\":\"Afficher ou masquer le détail de la connexion à l'eau\",\"button_toggle_detail_gas\":\"Afficher ou masquer le détail de la connexion au gaz\"}},\"konnector_modal\":{\"loading_data\":\"Veuillez patienter, vos données sont en cours de chargement.\",\"loading_data_update\":\"Veuillez patienter, vos données sont en cours de mise à jour.\",\"logging_txt\":\"Nous vérifions vos informations d'identité\",\"success_txt\":\"Félicitations !\",\"success_data_electricity\":\"Vos données de consommation d'électricité sont maintenant connectées à Ecolyo.\",\"success_data_water\":\"Vos données de consommation d'eau sont maintenant connectées à Ecolyo.\",\"success_data_gas\":\"Vos données de consommation de gaz sont maintenant connectées à Ecolyo.\",\"success_data_additional_electricity\":\"Les données de consommations mettent entre un et deux jours pour arriver.\",\"success_data_additional_water\":\"Les données de consommations mettent entre trois et cinq jours pour arriver.\",\"success_data_additional_gas\":\"Les données de consommations mettent entre trois et cinq jours pour arriver.\",\"success_update_txt\":\"Connexion réussie !\",\"success_data_update_electricity\":\"Ecolyo est bien connecté à votre compteur d'électricité.\",\"success_data_update_water\":\"Ecolyo est bien connecté à votre compteur d'eau.\",\"success_data_update_gas\":\"Ecolyo est bien connecté à votre compteur de gaz.\",\"success_data_additional_update_electricity\":\"Sachez que la donnée de consommation d'électricité arrive entre J+1 et J+2.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"success_data_additional_update_water\":\"Sachez que la donnée de consommation d'eau arrive entre J+3 et J+5.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"success_data_additional_update_gas\":\"Sachez que la donnée de consommation de gaz arrive entre J+3 et J+5.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"error_txt\":\"Aïe !\",\"mismatch\":{\"title\":\"Vos données n'ont pas pu être récupérées.\",\"text1\":\"Vos nom et numéro de compteur ne correspondent plus. Merci de reconfigurer votre connecteur.\",\"text2\":\"Reconfigurer mon connecteur ?\",\"text3\":\"La reconfiguration de votre connecteur passe par sa suppression et sa nouvelle installation. Vos données seront conservées.\"},\"error_credentials_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter. L'identifiant est un numéro à 7 chiffres (différent de votre numéro de contrat).\",\"error_credentials_electricity\":\"Il semblerait que les nom(s) et adresse ne concordent pas avec le numéro de votre compteur.\",\"error_credentials_electricity_2\":\"Nous ne pouvons vous donner accès aux données de consommation.\",\"error_credentials_update_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter.\",\"error_credentials_update_electricity\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"error_credentials_update_gas\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"error_consent_form_gas_title\":\"L'accès à vos données a été bloqué par GRDF suite à un consentement précédemment supprimé par vos soins.\",\"error_consent_form_gas_report\":\"Merci de nous signaler le problème.\",\"error_data_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité ne seront pas chargées.\",\"error_data_water\":\"Un problème est survenu. Vos données de consommation d’eau ne seront pas chargées.\",\"error_data_gas\":\"Il semblerait que le service de connexion à vos données de gaz soit momentanément en panne.\",\"error_data_update_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité n’ont pas été mises à jour.\",\"error_data_update_water\":\"Un problème est survenu. Vos données de consommation d’eau n’ont pas été mises à jour.\",\"error_data_update_gas\":\"Un problème est survenu. Vos données de consommation de gaz n’ont pas été mises à jour.\",\"error_data_2\":\"Merci de réessayer plus tard.\",\"button_validate\":\"Ok\",\"button_understood\":\"J'ai compris\",\"button_try_again\":\"Réessayer\",\"button_contact\":\"Nous contacter\",\"button_check_info\":\"Vérifier les infos\",\"button_go\":\"J'y vais\",\"button_later\":\"Plus tard\",\"show_common_error\":\"Voir les erreurs récurrentes\",\"show_common_error_list\":\"<span>Le problème peut provenir des cas suivants :</span><ul><li>Vous avez un co-titulaire sur votre contrat. Veillez à bien entrer le nom du <span class=\\\"gold\\\">titulaire du contrat</span> et non le co-titulaire.</li><li>  Votre nom comporte un tiret ? Tentez sans le tiret.</li><li>Entrez bien le nom de votre commune de résidence en entier (tirets et accents inclus)</li><li>Avez-vous bien entré le <span class=\\\"gold\\\">numéro de votre compteur</span> (PDL) ? Tout autre numéro (de contrat, de client) ne fonctionne pas.</li></ul><p>Si vous rencontrez toujours des difficultés, contactez notre service d'aide </p><div class=\\\"center\\\">Avez-vous pensez à vérifier ces informations ?</div>\",\"accessibility\":{\"window_title\":\"Fenêtre d'attente de connexion\",\"button_close\":\"Fermer la fenêtre\"}},\"consent_outdated\":{\"title\":{\"0\":\"Votre autorisation pour afficher vos données d’électricité a expiré\",\"2\":\"Aïe !\"},\"text1\":{\"0\":\"Veuillez re-donner votre consentement pour la transmission et la reconnexion de vos données ENEDIS à Ecolyo.\",\"2\":\"L'accès à vos données de consommation de gaz a expiré.\"},\"text2\":{\"0\":\"Souhaitez-vous renouveler votre accord dès maintenant pour un an ?\",\"2\":\"Merci de redonner votre consentement pour y accéder.\"},\"later\":\"Plus tard\",\"go\":\"J'y vais\",\"no\":\"Non\",\"yes\":\"Oui\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur, consentement expiré\",\"button_close\":\"Fermer la fenêtre\"}},\"legal\":{\"read_legal\":\"Lire les mentions légales\",\"title_legal\":\"Mentions légales & CGU\",\"version\":\"Version du 12.12.2022\",\"site\":\"Site du service Ecolyo : <a href=\\\"https://ecolyo.com/\\\"> https://ecolyo.com/</a>\",\"adress\":\"Métropole de Lyon - 20, rue du Lac – CS 33569 - 69505 Lyon cedex 03\",\"phone\":\"Tél : (33) 4 78 63 40 40\",\"mail\":\"<a href=\\\"mailto:ecolyo@grandlyon.com\\\"> ecolyo(at)grandlyon.com</a>\",\"p1b\":\"Directrice de publication : \",\"p1\":\"Blandine MELAY, Responsable du Service Transition Énergétique\",\"p2b\":\"Animation éditoriale, gestion et mise à jour : \",\"p2\":\"Marion BERTHOLON, Chargée de services numériques pour la transition énergétique\",\"p3b\":\"Photographies : \",\"p3\":\"sauf mention contraire, les photos sont la propriété de la Métropole de Lyon\",\"p4b\":\"Conception et Charte graphique : \",\"p4\":\"Florent Dufier\",\"p5b\":\"Réalisation technique : \",\"p5\":\"Métropole de Lyon, Sopra Steria\",\"p6b\":\"Maintenance technique : \",\"p6\":\"Délégation Développement économique, emploi & savoirs - Innovation numérique & systèmes d’information - Usages et services numériques - Développement des services numériques\",\"title1\":\"Crédits\",\"part1\":\"Ce site est le résultat de développements spécifiques réalisés dans les langages Go, TypeScript, HTML et Sass. Les développements s’appuient sur plusieurs bibliothèques et frameworks libres : axios, cozy-bar, cozy-client, cozy-harvest-lib, cozy-scripts, cozy-ui, d3, global, lodash, luxon, node-sass, object-hash, react, react-dom, react-redux, react-router-dom, react-swipeable-views, redux-devtools-extension, sass-loader. Les tests de l’application s’appuient sur les bibliothèques et frameworks libres suivants: jest-junit, react-test-renderer, redux-mock-store. La pile technique intègre également les applications Cozy stack, Yarn, Docker, ACH. Les déploiements sont réalisés sur le registre hébergé chez Cozy. L’équipe de réalisation utilise au quotidien les applications GitLab, IceScrum, RocketChat, SonarQube.\",\"title2\":\"Traitement des données personnelles et droit d’accès, de modification et de suppression\",\"part2\":\"Conformément à la réglementation en vigueur en matière de protection des données personnelles, le service Ecolyo a fait l’objet d’une inscription au registre des traitements de la Métropole de Lyon. Ecolyo fait partie de l’écosystème de services orientés « self data » déployés par la Métropole de Lyon avec l’ambition d’offrir aux usagers métropolitains les outils et les services leur permettant d’exercer directement leur droit à la portabilité, dans un cadre apte à garantir aussi bien la transparence et le contrôle sur l’usage de leurs données personnelles que l’exploitation directe du contenu de ces données selon leurs libres choix. Le self data est en effet selon la Fondation Internet Nouvelle Génération (FING) « la production, l’exploitation et le partage de données personnelles par les individus, sous leur contrôle et à leurs propres fins ». Au sein de cet environnement self data, la gestion des données s’appuie sur l’organisation suivante des rôles et responsabilités associées : \",\"part2-1\":\"Les partenaires du service GRDF et Eau Publique du Grand Lyon sont responsables exclusivement des seuls traitements de Données Personnelles relatifs à la collecte des données de consommation de gaz et d’eau de l’utilisateur et à leur transmission sur la plateforme de cloud personnel, après consentement de l’utilisateur.\",\"part2-2\":\"Enedis est responsable de la collecte des données de consommation d’électricité et de leur mise à disposition à la Métropole de Lyon qui, elle en gère la transmission sur la plateforme du cloud personnel de l’utilisateur, après avoir récupéré le consentement de l’utilisateur.\",\"part2-3\":\"La Métropole de Lyon est responsable de traitement sur le périmètre du service Ecolyo qu’elle propose à l’usager, ainsi que des traitements nécessaires à la fourniture de la plateforme de cloud personnel qu’elle met à disposition de l’usager pour accéder au service Ecolyo. En sa qualité de responsable de ces traitements, elle collecte et traite : \",\"part2-3-1\":\"Les données de compte de l’usager renseignées par l’usager au sein de son espace de cloud personnel Grand Lyon à des fins de gestion du compte et de communication avec l’usager ;\",\"part2-3-2\":\"Les données de compte de l’utilisateur lui permettant de connecter ses données d’électricité à Ecolyo ;\",\"part2-3-3\":\"Les données privées de consommation d’énergie et d’eau dont la récupération, la sauvegarde, le stockage, la synchronisation et le partage sur la plateforme de cloud personnel sont initiés par l’usager sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-3-4\":\"Les données privées sur la composition du logement et du foyer de l’utilisateur, fournies par l’utilisateur lui-même au sein du service, sont traitées par le service sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-3-5\":\"Des métriques d’usage du service anonymisées et remontées périodiquement afin d’améliorer la qualité du service et d’évaluer son impact (Plus d’informations sur la manière dont votre anonymat est bien préservé dans ce processus <a href=\\\"https://ecolyo.com/cloud_statistiques.html\\\">ici</a>).\",\"part2-4\":\"La Métropole réalise également des mesures d’audience à l’aide de la solution Matomo. Afin de vous fournir un meilleur service et d’améliorer votre expérience d'utilisateur, nous utilisons des solutions de mesure d’audience qui utilisent la technologie des « cookies », des fichiers texte qui sont enregistrés sur votre ordinateur et qui permettent de générer des informations envoyées aux serveurs de mesure d’audience. Sur ces serveurs, l’adresse IP est anonymisée. Les données recueillies ont uniquement pour finalité de permettre d'analyser la fréquentation de nos pages afin d'en améliorer le contenu. Il s'agit de statistiques agrégées permettant de connaître le nombre de visites et de visiteurs différents, les pages les plus populaires, les chemins préférés, les niveaux d'activité par jour de la semaine et par heure de la journée, les principales erreurs etc. Vous avez cependant le droit de vous opposer à l’utilisation de ces cookies, et donc au traitement de vos données personnelles de navigation, en vous rendant dans la page Options de notre service.\",\"part2-5\":\"L’usager est seul décisionnaire des finalités d’utilisation qu’il souhaite définir pour le traitement de ses données personnelles de consommation, à la suite de leur transmission par les partenaires du service Ecolyo sur son cloud personnel. Ainsi, dans le cadre de l’utilisation d’Ecolyo, l’usager ne recevra les données des partenaires du service : Enedis, GRDF et Eau Publique du Grand Lyon seulement qu’à sa demande expresse après la saisie de ses identifiants.\",\"part2-6\":\"L’utilisateur est donc le seul à accéder :\",\"part2-6-1\":\"À ses données de consommation d’électricité horaires, journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-6-2\":\"À ses données de consommation de gaz journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-6-3\":\"À ses données de consommation eau journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-7\":\"Les engagements et responsabilités de la Métropole de Lyon concernant la protection des données et la confidentialité des données Ecolyo sont précisés dans les Mentions légales et les conditions d’utilisation du cloud personnel Grand Lyon qui accueille aujourd’hui le service Ecolyo et sans lequel le service ne peut pas fonctionner. Pour plus d’informations sur les engagements et responsabilités de la Métropole de Lyon concernant la protection et la confidentialité dans le cloud personnel, nous vous invitons à vous référer <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">aux mentions légales et CGU du cloud personnel métropolitain.</a> \",\"part2-8\":\"Conformément à la loi 78-17 du 6 janvier 1978 modifiée relative à l’information, aux fichiers et aux libertés, vous disposez d’un droit d’accès, de rectification et d’opposition au traitement de vos données à caractère personnel. Votre cloud personnel vous permet d’exercer ces droits directement dans cet espace sur vos données de compte. S’agissant des données de consommations d’électricité et de gaz, l’utilisateur peut supprimer son consentement à partager ses données en supprimant son connecteur dans la page Consos.\",\"part2-9\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part2-10\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Assemblées, des Affaires Juridiques et des Assurances - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou en ligne, au moyen du formulaire disponible à l'adresse suivante : <a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/.</a>\",\"part2-11\":\"L’exercice de ces droits sur vos données personnelles auprès de la Métropole de Lyon concerne exclusivement les données traitées dans le cadre du service  « Ecolyo ».\",\"title3\":\"Dispositions légales\",\"part3-1\":\"Les divers éléments du site web (la forme, la mise en page, le fonds, la structure …) sont protégés par le droit des dessins et modèles, le droit d’auteur, le droit des marques ainsi que le droit à l’image et ils ne peuvent être copiés ou imités en tout ou partie sauf autorisation expresse de la Métropole de Lyon.\",\"part3-2\":\"Toute personne ne respectant pas les dispositions légales applicables se rend coupable du délit de contrefaçon et est passible des sanctions pénales prévues par la loi.\",\"title4\":\"Droits d’auteurs\",\"part4-1\":\"Les photographies, textes, logos, pictogrammes, ainsi que toutes œuvres intégrées dans le site sont la propriété de la \\\"Métropole de Lyon\\\" ou de tiers ayant autorisé la \\\"Métropole de Lyon\\\" à les utiliser.\",\"part4-2\":\"Les reproductions, les transmissions, les modifications, les réutilisations, sur un support papier ou informatique, dudit site et des œuvres qui y sont reproduites ne sont autorisées que pour un usage personnel et privé conforme aux dispositions de l’article L 122-5 du Code de la Propriété Intellectuelle. Ces reproductions devront ainsi notamment indiquer clairement la source et l’auteur du site et/ou de ces œuvres multimédias. En aucun cas ces reproductions ne sauraient porter préjudice aux droits des tiers. Les reproductions, les transmissions, les modifications, les réutilisations à des fins publicitaires, commerciales ou d’information, de tout ou partie du site, sont totalement interdites.\",\"title5\":\"Logo de la Métropole de Lyon et d’Ecolyo\",\"part5\":\"Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent pas être modifiés – proportions, couleurs, éléments, constituants – et ne peuvent pas être sujet à aucune transformation, animation ou tout autre processus. Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent être utilisés et associés qu’aux seules informations vérifiables. Ils ne peuvent être notamment utilisés que pour illustrer des relations avec la Métropole de Lyon ou des actions de sponsorings dûment établies. Quel que soit le cas d’espèce, la Métropole de Lyon se réserve le droit d’approuver ou de désapprouver toute utilisation des logos de la Métropole de Lyon et d’Ecolyo, pour assurer son utilisation correcte, conformément à l’éthique, la morale et aux intérêts de la Métropole de Lyon. Les conditions susmentionnées s’appliquent dans le cadre de pages web, elles ne font pas référence à l’utilisation des logos dans tout autre document. La Métropole de Lyon se réserve le droit de modifier les conditions d’utilisation des logos de la Métropole de Lyon et d’Ecolyo à tout moment et sans préavis.\",\"title6\":\"Droit des bases de données\",\"part6\":\"Les bases de données sont protégées par la loi du 1er juillet 1998 et le régime français du droit d’auteur.\",\"title7\":\"Établissements de liens vers le site Ecolyo\",\"part7-1\":\"La Métropole de Lyon autorise la mise en place d’un lien hypertexte vers son service Ecolyo pour tous les sites internet, à l’exclusion de ceux diffusant des informations à caractère polémique, pornographique, xénophobe ou pouvant, dans une plus large mesure porter atteinte à la sensibilité du plus grand nombre.\",\"part7-2\":\"Le lien doit aboutir à la page d’accueil du service (<a href=\\\"https://ecolyo.com\\\">https://ecolyo.com</a>), cette page devant apparaître dans une nouvelle fenêtre. Les pages du service Ecolyo ne doivent en aucun cas être intégrées à l’intérieur des pages d’un autre site (iframe).\",\"part7-3\":\"Dans tous les cas d’espèce, La Métropole de Lyon se réserve le droit de demander la suppression d’un lien si elle estime que le site cible ne respecte pas les règles ainsi définies.\",\"title8\":\"Liens vers des sites tiers depuis le site Ecolyo\",\"part8\":\"Les liens hypertextes mis en œuvre au sein du site en direction d’autres sites et/ou de pages personnelles et d’une manière générale vers toutes ressources existantes sur internet ne sauraient engager la responsabilité de la Métropole de Lyon quant aux liens qu’ils contiennent ou aux changements ou mises à jour qui leur sont apportés.\",\"title9\":\"Mise en garde générale\",\"part9-1\":\"Nos services mettent tout en œuvre pour offrir aux visiteurs de ce site web des informations fiables et vérifiées. Cependant, malgré tous les soins apportés, le site peut comporter des inexactitudes, des défauts de mise à jour ou des erreurs.\",\"part9-2\":\"Nous remercions les utilisateurs du site de nous faire part d’éventuelles omissions, erreurs ou corrections par mail sur la boite aux lettres du webmestre ou directement via le formulaire proposé dans le service.\",\"accessibility\":{\"button_close\":\"Fermer la fenêtre\"}},\"oauth\":{\"window\":{\"title\":\"OAuth\"}},\"onboarding\":{\"welcomeModal\":{\"title\":\"Vous êtes à mi-chemin !\",\"part1\":\"Votre cloud personnel a bien été créé.\",\"part2\":\"Il vous faut maintenant donner votre accord pour connecter vos compteurs au service.\",\"button_valid\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre de bienvenue\",\"button_valid\":\"Valider\"}}},\"performance_indicator\":{\"bilan\":{\"text1\":\"Par rapport à \",\"text2\":\"soit une différence de : \"},\"error_no_compare\":\"comparaison impossible\",\"error_no_compare_reason\":\"(manque de données)\",\"error_no_compare_no_data\":\"Vos consommations pour cette période sont incomplètes à cause d’un problème technique concernant :\",\"fpi\":{\"no_data\":\"Données non disponibles\",\"no_comparison\":\"Pas de comparaison possible\"}},\"profile\":{\"report\":{\"title_bilan\":\"Inscription à la lettre mensuelle\",\"switch_label_bilan\":\"Recevoir mon bilan de consommation et des conseils\",\"title_alert\":\"Alerte Consommation Excessive d'Eau\",\"switch_label_alert\":\"Être prévenu d’un dépassement anormal de ma consommation d’eau\",\"input_label_alert\":\"Si ma consommation d’eau quotidienne dépasse :\",\"input_label_subtext_alert\":\"Votre consommation quotidienne maximum sur les 6 derniers mois : \"},\"accessibility\":{\"button_toggle_mail_report\":\"Recevoir mon bilan mensuel par mail\",\"button_toggle_consumption_alert\":\"Recevoir des alertes sur mes consommations journalières\",\"input_water_alert_report\":\"Indiquer une limite de consommation d'eau journalière\"}},\"profile_type\":{\"title_profile\":\"Mes données\",\"read_profile\":\"Ajuster mon profil\",\"button_update_profile\":\"J'ajuste mon profil\",\"your_profile\":\"Mon profil\",\"multi_choices\":\"Plusieurs réponses possibles\",\"housing_type\":{\"title\":\"Logement\",\"question\":\"De quel type de logement disposez-vous ?\",\"individual_house\":\"Maison individuelle\",\"apartment\":\"Appartement\"},\"construction_year\":{\"title\":\"Construction\",\"question\":\"Quelle est son année de construction ?\",\"text_before_1948\":\"Construit avant 1948\",\"text_between_1948_and_1974\":\"Construit entre 1948 et 1974\",\"text_between_1975_and_1989\":\"Construit entre 1975 et 1989\",\"text_between_1990_and_1998\":\"Construit entre 1990 et 1998\",\"text_after_1998\":\"Construit après 1998\",\"text_unknown\":\"Construit après 1998\",\"before_1948\":\"Avant 1948\",\"between_1948_and_1974\":\"Entre 1948 et 1974\",\"between_1975_and_1989\":\"Entre 1975 et 1989\",\"between_1990_and_1998\":\"Entre 1990 et 1998\",\"after_1998\":\"Après 1998\",\"unknown\":\"Je ne sais pas\"},\"occupantsNumber\":{\"single\":\" occupant\",\"multi\":\" occupants\"},\"area\":{\"title\":\"Surface\",\"question\":\"Quelle est sa surface en m² ?\",\"name\":\" m²\"},\"occupants_number\":{\"title\":\"Nombre d'occupants\",\"question\":\"Combien il y a-t-il d'occupants ?\"},\"outside_facing_walls\":{\"1\":\"1 façade\",\"2\":\"2 façades\",\"3\":\"3 façades\",\"4\":\"4 façades\",\"title\":\"Murs extérieurs\",\"question\":\"Combien de façades donnent sur l'extérieur ?\",\"text\":{\"single\":\" façade donne sur l'extérieur\",\"multi\":\" façades donnent sur l'extérieur\"}},\"floor\":{\"title\":\"Étage\",\"question\":\"À quel étage est votre appartement ?\",\"ground_floor\":\"Au rez-de-chaussée\",\"intermediate_floor\":\"Étage intermédiaire\",\"last_floor\":\"Dernier étage\",\"not_applicable\":\"Sans objet\"},\"heating\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"individual_insulation_work\":{\"title\":\"Travaux de rénovation\",\"question\":\"Quels travaux de rénovation avez-vous réalisés ces 10 dernières années ?\",\"none\":\"Aucun\",\"roof_insulation\":\"Isolation toiture\",\"window_replacement\":\"Remplacement fenêtres\",\"wall_insulation\":\"Isolation des murs\",\"window_replacement_and_wall_insulation\":\"Remplacement fenêtres et isolation des murs\",\"window_replacement_and_roof_insulation\":\"Remplacement fenêtres et isolation toiture\",\"roof_and_wall_insulation\":\"Isolation toiture et murs\",\"window_replacement_and_roof_and_wall_insulation\":\"Remplacement fenêtre et isolation des murs et isolation toiture\",\"built_after_1998\":\"construit après 1998\"},\"facilities_installation\":{\"title\":\"Équipement\"},\"ventilation\":{\"title\":\"Ventilation double flux\",\"question\":\"Êtes-vous équipé d'une ventilation double flux ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une ventilation double flux\"},\"heater_replacement\":{\"title\":\"Pompe à chaleur ou poêle à bois\",\"question\":\"Au cours de ces 10 dernières années, avez-vous remplacé votre chaudière ou vous êtes-vous équipé d'une pompe à chaleur ou d'un poêle à bois ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une pompe à chaleur ou poêle à bois\"},\"cold_water\":{\"title\":\"Eau\",\"question\":\"Votre eau est-elle comprise dans vos charges collectives ?\",\"individual\":\"Non\",\"collective\":\"Oui\",\"individual_text\":\"Individuelle\",\"collective_text\":\"Collective\"},\"hot_water\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"},\"hot_water_equipment\":{\"title\":\"Eau chaude\",\"question\":\"Utilisez-vous l’un de ces équipements pour produire votre eau chaude ?\",\"solar\":\"Chauffe-eau solaire\",\"thermodynamic\":\"Chauffe-eau thermodynamique\",\"other\":\"Aucun des deux\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"5\":\"Autre\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour vous chauffer ?\",\"no_fluid_text\":\"Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel\",\"0_text\":\"Produit grâce à de l'électricité\",\"2_text\":\"Produit grâce au gaz\",\"3_text\":\"Produit grâce au bois\",\"4_text\":\"Produit grâce au fioul\",\"5_text\":\"Produit grâce à un autre moyen\"},\"hot_water_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Autre (Fioul, Bois)\",\"title\":\"Source eau chaude\",\"question\":\"Avec quelle source d’énergie votre eau chaude est-elle produite ?\",\"no_fluid_text\":\"Produite ni par de l'électricité, ni par du gaz\",\"0_text\":\"Produite grâce à de l'électricité\",\"2_text\":\"Produite grâce au gaz\",\"3_text\":\"Produite à partir d'un autre moyen que l'électricité ou le gaz\"},\"cooking_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"title\":\"Source cuisson\",\"question\":\"Quel mode de cuisson principal utilisez-vous ?\"},\"update_date\":{\"title\":\"Date de prise d'effet\",\"question\":\"A partir de quelle date souhaitez-vous que ce nouveau profil soit pris en compte dans l'analyse de vos données ?\"},\"fluidType\":{\"0\":\"Électricité\",\"1\":\"Eau\",\"2\":\"Gaz\"},\"form\":{\"button_previous\":\"Précédent\",\"button_next\":\"Suivant\",\"button_end\":\"Terminer\",\"button_loading\":\"Chargement...\"},\"finished\":{\"title\":\"Terminé !\",\"label1\":\"Grâce à ces informations, vous pourrez comparer votre consommation avec celle d'un foyer vous ressemblant davantage !\",\"label2\":\"Nous pourrons aussi vous proposer des astuces pour maîtriser vos consommations adaptées à votre profil.\",\"button_validate\":\"OK\"},\"accessibility\":{\"button_end\":\"Terminer la mise à jour du profil\",\"button_next\":\"Aller à la section suivante\",\"button_previous\":\"Retour à la section précédente\",\"button_update_profile\":\"Ouvrir la page de mise à jour du profil\",\"button_toggle_detail_profile\":\"Afficher ou masquer le détail du profil\",\"button_toggle_export\":\"Afficher ou masquer l'export des données'\",\"button_toggle_average_home\":\"Afficher ou masquer les informations sur le comparatif'\",\"button_validate\":\"Valider\",\"button_export_data\":\"Télécharger les données\"}},\"export\":{\"title_export\":\"Télécharger mes données\",\"text1\":\"Vous allez télécharger l'historique mensuel de vos fluides sélectionnés\",\"fluid_select\":\"Pour quel(s) fluide(s) souhaitez vous exporter vos données ?\",\"no_data\":\"Vous n'avez aucune donnée de fluide...\",\"button_download\":\"Télécharger\",\"month\":\"Mois\",\"year\":\"Année\",\"consumption\":\"Consommation\",\"maxpower\":\"Puissance max (kVA)\",\"button_close\":\"Fermer la fenêtre\",\"modal_start\":{\"accessibility_title\":\"Commencer le téléchargement\",\"text1\":\"Vous allez télécharger des données personnelles, Ecolyo n’est plus responsable de celles-ci une fois téléchargées\",\"text2\":\"Les données seront téléchargées sous forme de document excel (.xls)\",\"text3\":\"Lancer le téléchargement ?\",\"button_cancel\":\"Annuler\"},\"modal_loading\":{\"accessibility_title\":\"Téléchargement en cours\",\"text1\":\"Données en cours de téléchargement\",\"text2\":\"Veuillez ne pas quitter l’application pendant la récupération et le téléchargement de vos données\",\"button_cancel\":\"Annuler le téléchargement\"},\"modal_done\":{\"accessibility_title\":\"Téléchargement terminé\",\"text1\":\"Vos données ont bien été téléchargées !\",\"text2\":\"Vous pouvez maintenant retrouver l’historique de vos données sur votre appareil\",\"error1\":\"Aïe !\",\"error2\":\"Il semblerait qu’une erreur se soit produite lors du téléchargement de vos données.\",\"button_close\":\"Fermer\",\"button_close_error\":\"Revenir plus tard\"}},\"quiz\":{\"explanation\":\"Répondez correctement aux 5 questions et remportez 5 des 15 étoiles nécessaires pour débloquer le duel final\",\"score_final\":\"SCORE FINAL\",\"correct\":\"Bravo !\",\"wrong\":\"Raté !\",\"rightAnswer\":\"Bonne réponse :\",\"earn\":\"Vous remportez\",\"button_go_back\":\"Retour\",\"button_end_quiz\":\"Youpi !\",\"button_try_again\":\"Réessayer\",\"button_validate\":\"Valider\",\"next\":\"Suivant\",\"consumption_question\":\"Question sur votre consommation\",\"accessibility\":{\"window_quit\":\"Quitter la fenêtre\",\"window_title\":\"Fenêtre de résultat\",\"button_end_quiz\":\"Terminer le quiz\",\"button_go_back\":\"Retour\",\"button_go_next\":\"Suivant\",\"button_try_again\":\"Relancer le quiz\",\"button_validate\":\"Valider\"}},\"splashscreen\":{\"error_loading\":\"Une erreur est survenue\",\"button_reload\":\"Réessayer\",\"accessibility\":{\"button_reload\":\"Recharger la page\"},\"migration_error\":\"Mise à jour de l'application\",\"consent_error\":\"Vérification de vos consentements pour partager vos données avec Ecolyo\",\"profile_error\":\"Chargement de votre profil utilisateur\",\"profileType_error\":\"Chargement de votre profil de consommation.\",\"challenges_error\":\"Actualisation de votre progression dans les défis\",\"analysis_error\":\"Chargement de votre analyse mensuelle\",\"index_error\":\"Chargement des index\",\"prices_error\":\"Mise à jour des prix\",\"consos_error\":\"Connexion à vos données de consommation\",\"partners_error\":\"Récupération de l'état des services partenaires\",\"unknown_error\":\"Veuillez vérifier votre connexion internet\",\"network_error\":\"Erreur de réseau\",\"step\":{\"migration\":\"Mise à jour de l'application\",\"profile\":\"Chargement de votre profil\",\"challenges\":\"Actualisation de votre progression dans les défis\"}},\"timestep\":{\"today\":\"Aujourd'hui\",\"year\":{\"period\":\"5 ans\",\"comparelabel\":\"Comparer à l'année précédente\"},\"month\":{\"period\":\"Année\",\"comparelabel\":\"Comparer à l'année précédente\",\"current\":\"année actuelle\",\"last\":\"année précédente\"},\"day\":{\"period\":\"Mois\",\"comparelabel\":\"Comparer au mois précédent\",\"current\":\"mois actuel\",\"last\":\"mois précédent\"},\"week\":{\"period\":\"Semaine\",\"comparelabel\":\"Comparer à la semaine précédente\",\"current\":\"semaine actuelle\",\"last\":\"semaine précédente\"},\"half_an_hour\":{\"period\":\"Jour\",\"comparelabel\":\"Comparer à la journée précédente\",\"gather_data_title\":\"La récupération de vos données demi-horaires prend environ 24h.\",\"current\":\"jour actuel\",\"last\":\"jour précédent\",\"gather_data_subtitle\":\"Votre connexion a bien été prise en compte mais un délai de 24h est en général nécessaire à l’obtention de vos données.\\nÀ demain !\",\"gather_data_failure\":\"Il semblerait que votre compteur ne nous permette pas d'accéder à des données de consommation plus fines.\",\"analysis_waiting_data\":\"Pour bénéficier d'une analyse approfondie de votre consommation électrique, il nous faut récupérer vos données de consommation horaires. La récupération de ces données prend environ 24h. A bientôt !\"},\"accessibility\":{\"button_zoom_in\":\"Sélectionner le pas de temps précédent\",\"button_zoom_out\":\"Sélectionner le pas de temps suivant\"}},\"unsubscribe\":{\"error\":\"Une erreur est survenue lors de votre désinscription, merci de ré-essayer plus tard.\",\"unsubscribed\":\"Vous êtes désormais désabonné de la newsletter Ecolyo\",\"subscribed\":\"Vous êtes désormais à nouveau abonné à la newsletter Ecolyo\",\"content\":\"Vous ne recevrez plus la notification de votre bilan ainsi que les conseils associés au mois en cours.\",\"button_subscribe\":\"Me ré-abonner\",\"button_home\":\"Me connecter à Ecolyo\",\"button_accessibility\":\"Bouton de désinscription\"},\"welcome_modal\":{\"title\":\"Félicitations\",\"perso\":\"Votre espace personnel a bien été créé.\",\"connect\":\"Vous pouvez maintenant connecter vos compteurs d’énergie à Ecolyo en toute sécurité.\",\"button_valid\":\"Ok\",\"accessibility\":{\"title\":\"Fenêtre de félicitations\",\"button_valid\":\"Valider\"}}}");
+module.exports = JSON.parse("{\"common\":{\"title_app\":\"Ecolyo\",\"title_consumption\":\"Cons0\",\"title_consumption_electricity\":\"Conso électrique\",\"title_consumption_gas\":\"Conso de gaz\",\"title_consumption_water\":\"Conso d'eau\",\"title_challenge\":\"Défis\",\"title_quiz\":\"Quiz\",\"title_exploration\":\"Exploration\",\"title_action\":\"Action\",\"title_duel\":\"Duel final\",\"title_ecogesture\":\"Astuce\",\"title_ecogestures\":\"Astuces\",\"title_ecogestures_choice\":\"Sélection des astuces\",\"title_options\":\"Options\",\"title_analysis\":\"Analyse\",\"title_profiletype\":\"Ajuster mon profil\",\"title_legal_notice\":\"Mentions légales\",\"title_gcu\":\"Conditions générales d’utilisation\",\"title_accessibility\":\"Accessibilité : non conforme\",\"title_sge_connect\":\"Connexion à l'électricité\",\"title_gas_connect\":\"Connexion au gaz\",\"accessibility\":{\"loading\":\"Chargement\",\"skip_link\":\"Aller au contenu\"},\"funders_logo\":\"Logo des financeurs : Métropole de Lyon, Etat via la Banque des Territoires et son programme France 2030, Union Européenne\"},\"navigation\":{\"consumption\":\"Conso\",\"challenges\":\"Défis\",\"ecogestures\":\"Astuces\",\"options\":\"Options\",\"analysis\":\"Analyse\"},\"FLUID\":{\"ELECTRICITY\":{\"NAME\":\"Électricité\",\"LABEL\":\"Électricité\",\"LABEL_PREPOSITION\":\"d'électricité\",\"UNIT\":\"kWh\",\"ADD\":\"Ajouter l'électricité\",\"MEGAUNIT\":\"MWh\",\"provider\":\"Enedis\"},\"WATER\":{\"NAME\":\"Eau\",\"LABEL\":\"Eau\",\"LABEL_PREPOSITION\":\"d'eau\",\"ADD\":\"Ajouter l'eau\",\"UNIT\":\"L\",\"MEGAUNIT\":\"m³\",\"provider\":\"Eau Publique du Grand Lyon\"},\"GAS\":{\"NAME\":\"Gaz\",\"LABEL\":\"Gaz\",\"LABEL_PREPOSITION\":\"de gaz\",\"ADD\":\"Ajouter le gaz\",\"UNIT\":\"kWh\",\"MEGAUNIT\":\"MWh\",\"provider\":\"GRDF\"},\"MULTIFLUID\":{\"NAME\":\"Multi fluide\",\"LABEL\":\"Multi\",\"UNIT\":\"€\"}},\"action\":{\"duration\":\"Durée : %{smartCount} jours\",\"result\":\"Résultat\",\"finished\":\"Défi terminé !\",\"details\":\"Détail de l'astuce\",\"apply\":\"J'applique cette action\",\"other\":\"Je choisis une autre action\",\"resultText1\":\"Cela n'a pas été trop difficile ?\",\"resultText2\":\"Jetez un coup d'œil dans la page conso dans 1 à 3 jours, le temps que vos données arrivent, pour voir l'impact de votre action.\",\"resultText3\":\"Pas de baisse de significative ? Pas de panique, en maintenant cette pratique dans le temps, les économies d'énergies et d'eau seront davantage visibles.\",\"resultText4\":\"Dans tous les cas, bravo, vous remportez...\",\"ok\":\"Ok\"},\"action_modal\":{\"accept\":\"Je relève le défi\",\"refuse\":\"Je me défile\",\"accessibility\":{\"window_title\":\"Fenêtre de confirmation\",\"button_accept\":\"Accepter\",\"button_refuse\":\"Refuser\"}},\"analysis\":{\"viewTitle\":\"Analyse\",\"warning_title\":\"Analyse incomplète\",\"warning_text\":\"Ecolyo n'a pas encore reçu toutes les données %{fluidList} pour ce mois\",\"comparison\":\"Comparatif\",\"analysis_date\":\"Conso totale\",\"challenge\":\"Défis terminés en\",\"user_consumption\":\"Votre conso\",\"average_home\":\"Conso moyenne d'un profil similaire\",\"average_home_description\":\"Le comparatif ici présenté est calculé sur la base d'un profil similaire au vôtre. Il s'agit d'un calcul et non d'une comparaison avec les autres utilisateurs de l'application. Sont pris en compte l'ensemble des informations entrées dans votre profil : mode de chauffage, âge du logement et éventuels travaux de rénovation, etc. Ce modèle a été créé avec l'Agence Locale de l'Energie sur la base de chiffres issues du Schéma Directeur des Energies de la Métropole de Lyon et de Chiffres-clé publiés par l'ADEME (l'Agence de l'Environnement et de la Maîtrise de l'Energie).\",\"approximative_description\":\"Pour comparer votre consommation avec un foyer similaire ou avec une conso idéale, veuillez détailler votre profil\",\"no_data\":\"Pas de données\",\"accessibility\":{\"button_go_to_profil\":\"Détailler mon profil\",\"comparison_multifluid\":\"Vos dépenses (tous fluides confondus) vs Dépenses moyennes\",\"comparison_electricity\":\"Votre consommation d'électricité vs Consommation moyenne\",\"comparison_water\":\"Votre consommation d'eau vs Consommation moyenne\",\"comparison_gas\":\"Votre consommation de gaz vs Consommation moyenne\"},\"max_day\":\"Jour où vous avez le plus consommé\",\"compare\":{\"title\":\"Comparateur\",\"month_tab\":\"Comparer au mois dernier\",\"year_tab\":\"Comparer à l'année dernière\"},\"temperature_comparison\":{\"unit\":\"°C\",\"comparison\":\"par rapport à\",\"info_button\":\"Information sur l'indice météo\",\"modal\":{\"title\":\"Indice météo\",\"month_comparison\":\"Écart de température moyenne entre le mois observé et le mois précédent.\",\"year_comparison\":\"Écart de température moyenne entre le mois observé et le même mois de l'année précédente.\",\"data_info\":\"Données Météo France issues de la station météo Lyon Bron.\",\"close\":\"Fermer la fenêtre\"}}},\"analysis_error_modal\":{\"title\":\"Aucune analyse\",\"message\":\"Pour profiter d’une analyse de vos consommations, connectez au moins un de vos compteurs.\",\"go_to_conso\":\"Je connecte mes compteurs\",\"understood\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_understood\":\"J'ai compris\",\"button_goto_konnector\":\"Aller aux connecteurs\"}},\"analysis_pie\":{\"total\":\"Conso totale\",\"details\":\"Détail par fluide\",\"month\":\"Au mois \",\"estimation\":\"Comment sont estimés<br>les prix ?\"},\"special_elec\":{\"title\":\"Spécial Électricité\",\"average\":\"Conso moyenne\",\"weektype\":\"un jour de \",\"week\":\"semaine\",\"weekend\":\"week-end\",\"min\":\"Conso minimum\",\"percentage\":\"Part dans la facture\",\"price\":\"Soit\",\"maxPower\":\"Puissance maximum atteinte\",\"offPeakHour\":\"Consommation en heures creuses\",\"showModal\":\"Plus d'infos\"},\"elec_info_modal\":{\"accessibility\":{\"window_title\":\"Information sur les statistiques Enedis\",\"button_close\":\"Fermer la fenêtre d'information\"},\"maxPowerTitle\":\"Qu’est-ce que la puissance maximum ?\",\"maxPowerDetails-1\":\"C’est la puissance maximum délivrée par tous les appareils fonctionnant au même moment dans votre logement.\",\"maxPowerDetails-2\":\"Vous avez choisi une puissance maximum dans votre offre d’électricité (3, 6 ou 9 kVA...) que vous ne devez pas dépasser pour ne pas faire sauter votre compteur. \",\"maxPowerDetails-3\":\"Cette puissance varie d'un mois à l'autre, regardez cette valeur sur l'ensemble de l'année pour vérifier si votre puissance souscrite correspond bien à votre usage.\",\"offPeakTitle\":\"Sur quelle base est calculé mon ratio Heures Pleines / Heures Creuses ?\",\"offPeakDetails-1\":\"D'après Enedis, vos plages d'heures creuses sont les suivantes : %{offPeakHours}. Nous avons donc simplement calculé, à l'aide vos consommations à la demi-heure, quelle part de votre consommation est réalisée sur vos heures creuses.\",\"minPowerTitle\":\"Qu’est-ce que la consommation minimum ?\",\"minPowerDetails-1\":\"Elle correspond à votre plus petite consommation du mois sur un créneau d'une demi-heure.\",\"minPowerDetails-2\":\"Nous extrapolons cette consommation sur 1 mois afin vous donner un aperçu de la consommation de vos consommations électriques en veille (box, télé, chargeurs, ...) ou encore de celle, incompressible, de vos appareils de froid (frigo, congélateur).\"},\"auth\":{\"enedissgegrandlyon\":{\"title\":\"Ecolyo doit se connecter à l’électricité\",\"bill\":\"Munissez-vous d’une <span>facture d’électricité</span> pour valider la connexion\",\"connect\":\"Je me connecte à l'électricité\",\"accessibility\":{\"connect\":\"Se connecter\"},\"identityTitle\":\"Nom inscrit sur la facture\",\"firstName\":\"Prénom\",\"lastName\":\"Nom\",\"pdlTitle\":\"Numéro de votre compteur électrique (PDL)\",\"pdlLabel\":\"N° (14 chiffres)\",\"pdlModal\":{\"title\":\"Qu'est-ce qu'un PDL ?\",\"title_accessibility\":\"Modale qu'est ce qu'un PDL ?\",\"txt1\":\"Votre numéro de point de livraison (PDL) peut aussi s’appeler PRM si vous possédez un compteur Linky.\",\"txt2\":\"Ce numéro est composé de 14 chiffres.\",\"txt3\":\"Votre numéro de PDL ou PRM se trouve sur votre facture d’électricité.\",\"txt4\":\"Si vous avez un compteur Linky, appuyez sur le bouton “+” et faites défiler l’affichage jusqu’à obtenir l’affichage suivant :\",\"button\":\"J'ai compris\",\"button_accessibility\":\"Bouton valider\",\"prm_accessibility\":\"Écran d'un compteur Linky présentant le numéro PRM\"},\"addressTitle\":\"Adresse du titulaire\",\"address\":\"Numéro et voie\",\"zipCode\":\"Code postal\",\"city\":\"Ville\",\"headConsent\":\"En acceptant de partager vos données, celles-ci seront directement transférées à Ecolyo à l’intérieur de votre cloud personnel, sans que la Métropole n’y accède ni ne les visualise.\",\"textConsent\":\"Afin de vous offrir des fonctionnalités de visualisation et d'analyse, Ecolyo a besoin des données suivantes : \",\"consentLi1\":\"L'historique et le relevé de vos consommations quotidiennes en kWh\",\"consentLi2\":\"L'historique et le relevé de vos consommations au pas de temps 30 minutes\",\"consentLi3\":\"Les puissances maximales atteintes quotidiennement\",\"consentLi4\":\"Les données contractuelles (début de contrat et puissance souscrite)\",\"consentCheck1\":\"Je consens à partager les données personnelles ci-dessus pour une durée d'<span>un an</span> *\",\"consentCheck2\":\"J’atteste être le titulaire du point de livraison (PDL) renseigné à l’étape précédente *\"},\"grdfgrandlyon\":{\"title\":\"Ecolyo doit se connecter au gaz\",\"bill\":\"Munissez-vous d’une <span>facture de gaz</span> pour valider la connexion\",\"connect\":\"Je me connecte au gaz\",\"accessibility\":{\"connect\":\"Se connecter\"},\"identityTitle\":\"Nom inscrit sur la facture\",\"firstName\":\"Prénom\",\"lastName\":\"Nom\",\"email\":\"Email\",\"zipCode\":\"Code postal\",\"pceTitle\":\"Numéro de votre compteur de gaz (PCE)\",\"pceLabel\":\"N° (14 chiffres)\",\"pceHint\":\"Où trouver le numéro de PCE ?\",\"pceModal\":{\"title\":\"Où trouver le n° de PCE ?\",\"txt1\":\"Votre numéro de <span>PCE</span> - ou <span>Point de comptage et d'estimation</span> - se trouve sur votre facture au niveau de vos informations contractuelles (parfois en 1ère page... parfois en dernière !)<br/><br/> C'est un identifiant à 14 chiffres.\",\"button\":\"J'ai compris\",\"accessibility\":\"Titre de la modale\",\"button-accessibility\":\"Bouton valider\"},\"headConsent\":\"Vous allez partager vos données à la Métropole de Lyon. Elles seront directement transférées à Ecolyo à l'intérieur de votre cloud personnel, sans que la Métropole n'y accède ni ne les visualise.\",\"textConsent\":\"Afin de vous offrir des fonctionnalités de visualisation et d'analyse, Ecolyo a besoin des données suivantes :\",\"consentLi1\":\"L'historique de vos consommations (jusqu’à 36 mois) et le relevé quotidien de vos consommations\",\"consentLi2\":\"Les données contractuelles (type de compteur, date de début de contrat)\",\"consentCheck1\":\"Je consens à partager les données personnelles ci-dessus pour une durée d'<span>un an</span> *\",\"consentCheck2\":\"J’atteste être le titulaire du point de livraison (PCE) renseigné à l’étape précédente *\",\"waiting\":{\"mailSent\":\"Un mail vous a été envoyé...\",\"mailDelay\":\"La réception du mail peut prendre 15min, l'envoi des mails se faisant tous les 1/4 d'heure\",\"validate\":\"Merci de valider l'autorisation d'accès à vos données\",\"comeback\":\"Une fois ce clic effectué, revenez ici pour accéder à vos données\",\"button_done\":\"C’est fait !\"}},\"eglgrandlyon\":{\"bill\":\"Munissez-vous d’une <span>facture d'eau</span> pour valider la connexion\",\"connect\":\"Je me connecte à l'eau\",\"accessibility\":{\"connect\":\"Se connecter\"},\"connect_form\":{\"login\":\"Identifiant (7 chiffres)\",\"password\":\"Mot de passe\",\"label\":\"Je connecte Ecolyo à mon compte Eau Publique du Grand Lyon\"},\"no_account\":{\"title\":\"Ecolyo doit se connecter à l'eau\"},\"with_account\":{\"title\":\"Votre compte Eau Publique du Grand Lyon a bien été créé ?\",\"subtitle1\":\"Plus qu’à donner votre accord pour connecter votre compteur d'eau et Ecolyo !\"},\"step1\":{\"info1\":\"La connexion se fait via <span>votre compte Eau Publique du Grand Lyon</span>.\",\"info2\":\"Possédez-vous un <span>compte Eau Publique du Grand Lyon</span> ?\"},\"step2\":{\"info1\":\"Une fois votre compte créé, <span>n'oubliez pas de revenir sur Ecolyo</span> pour finaliser la connexion.\"},\"button_go_to_partner_site\":\"Aller sur EPGL\"},\"connect_oauth\":{\"loading\":\"Chargement...\"},\"accessibility\":{\"button_reveal_password\":\"Afficher le mot de passe\",\"button_hide_password\":\"Masquer le mot de passe\",\"button_connect\":\"Se connecter\",\"button_create_account\":\"Se créer un compte\",\"window_title\":\"Fenêtre d'information sur la création de compte.\",\"button_close\":\"Fermer la fenêtre.\"},\"button_previous\":\"Précédent\",\"button_connect\":\"Se connecter\",\"button_create_account\":\"Se créer un compte\",\"button_has_account\":\"J'ai déjà un compte\",\"button_validate\":\"J'ai compris\",\"button_showOfflineData\":\"Voir mes anciennes données\",\"warningOfflineData\":\"Attention, vous visualisez d’anciennes données. Pour actualiser vos données, connectez votre compteur\"},\"challenge\":{\"card\":{\"ongoing\":{\"quiz\":\"Quiz\",\"exploration\":\"Explorations\",\"action\":\"Actions\",\"duel\":\"Duel Final\",\"result\":\"Résultat\",\"duelDone\":\"du duel final\"},\"locked\":{\"desc\":\"À débloquer en terminant le défi précédent\"},\"goto\":\"Aller vers le challenge\"},\"card_done\":{\"saving\":\"Économie de\",\"depense\":\"Dépense de\",\"win\":\"Gagné\",\"lost\":\"Perdu\",\"final_defi\":\"sur le duel final\",\"final_defi_view\":\"Revoir le duel final\",\"reset_defi\":\"Relancer le défi\"},\"card_last\":{\"title\":\"Tous les défis sont terminés\",\"message1\":\"Nous travaillons actuellement à vous proposer de nouveaux défis.\",\"button\":\"Suggérer une idée de défi\"},\"card_unlocked\":{\"button_launch\":\"Lancer le défi\"},\"accessibility\":{\"button_launch\":\"Lancer le défi\",\"button_goto_konnector\":\"Aller aux connecteurs\",\"button_slider_previous\":\"Précédent\",\"button_slider_next\":\"Suivant\"}},\"challenge_no_fluid_modal\":{\"title\":\"Oups !\",\"content\":\"Connectez au moins 1 fluide pour pouvoir jouer\",\"button_validate\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Valider\"}},\"consumption\":{\"display_last_data\":\"Voir mes dernières consos\",\"accessibility\":{\"navigation_group\":\"Choix de la période\",\"fluid_menu\":\"Choix du fluide\",\"button_previous_period\":\"Afficher la période précédente\",\"button_next_period\":\"Afficher la période suivante\",\"button_previous_value\":\"Sélectionner la valeur précédente\",\"button_next_value\":\"Sélectionner la valeur suivante\",\"checkbox_compare\":\"Afficher ou cacher la comparaison\",\"bar\":\"Consommation du %{date} : %{value} %{unit}\"},\"partner_issue_modal\":{\"title\":\"Attention !\",\"accessibility_title\":\"Modale de maintenance partenaire\",\"error_connect_gaz\":\"La connexion à vos données de <span class='gaz'>gaz</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='gaz'>GRDF</span> ou dans notre service)\",\"error_connect_elec\":\"La connexion à vos données d'<span class='elec'>électricité</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='elec'>Enedis</span> ou dans notre service)\",\"error_connect_water\":\"La connexion à vos données d'<span class='water'>eau</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='water'>Eau Publique du Grand Lyon</span> ou dans notre service)\",\"additional_text\":\"La visualisation et/ou la connexion à vos données de consommation peut s'en trouver affectée.<br /><br /><i>Merci pour votre patience en attendant un retour à la normale :)</i>\",\"ok\":\"Ok\"},\"compared\":\"Comparé\",\"water_pricing\":{\"year\":\"Année %{year}\",\"consumption\":\"Consommation : <span>%{consumption}m³</span>\",\"free\":\"Gratuit\",\"regular\":\"Tarif normal\",\"double\":\"Tarif double\",\"more\":\"En savoir plus\",\"modal\":{\"title\":\"A partir du 1er janvier 2025, une tarification solidaire environnementale de l’eau est mise en place.\",\"details\":\"Cette jauge vous permet de garder un œil tout au long de l’année sur votre consommation d’eau afin de voir dans quelle tranche vous vous situez en tant que particulier.<br><br> Cette information vous est donnée à titre informatif, l'application définitive des tranches sera assurée par Eau Publique du Grand Lyon sur vos factures d'eau à compter du 01/01/2025 en fonction de vos consommations.\",\"understood\":\"J'ai compris\"}}},\"consumption_details\":{\"detail\":\"Détail par fluide\",\"connect\":\"Connecter d'autres fluides\",\"mini_cards_label\":\"AUTRES ENERGIES\"},\"consumption_visualizer\":{\"missing_data\":\"Données manquantes\",\"no_data\":\"Pas de données\",\"why_no_data\":\"Pourquoi n'ai-je pas de données ?\",\"last_valid_data\":\"Dernières données valides : %{date}\",\"last_available_data\":\"Dernières données disponibles : %{date}\",\"last_valid_data_multi\":\"Dernières données complètes : %{date}\",\"data_to_come\":\"À venir\",\"aie\":\"Aïe !\",\"data_empty\":\"Vide\",\"estimated\":\"estimés\",\"cost_per_fluid\":{\"electricity\":\"Part de l'électricité\",\"water\":\"Part de l'eau\",\"gas\":\"Part du gaz\"},\"dataModal\":{\"list_title\":\"3 raisons possibles :\",\"item1\":\"le lien entre Ecolyo et le fournisseur de données est rompu : une mise à jour de ce lien (en bas de la page) peut résoudre ce problème.\",\"item2\":\"un problème technique chez votre gestionnaire : se connecter directement chez ce gestionnaire pour vérifier que cette donnée apparaît.\",\"item3\":\"pour le gaz : vous n'avez pas autorisé Ecolyo à accéder aux données de consommation de cette période.\",\"item4\":\"vous n'aviez tout simplement pas de compteur communicant à l'époque !\"},\"modal\":{\"window_title\":\"info estimation des prix\",\"title\":\"Comment sont estimés les prix ?\",\"close\":\"Fermer la fenêtre\",\"part1\":\"Le prix de votre électricité ou de votre gaz dépend de l'offre choisie auprès de votre fournisseur. N’ayant pas accès à cette information, Ecolyo affiche un prix moyen par fluide. \",\"part2\":\"Tarifs moyens retenus :\",\"list1\":\" : 1 kWh = %{elecPrice} €TTC (il correspond au tarif réglementé d’EDF au %{elecPriceStartDate} pour une puissance souscrite de 3 ou 6 kVA et hors offre heure pleine/heure creuse)\",\"list2\":\" : 1 kWh = %{gasPrice} €TTC (Prix repère de vente de gaz publié par la Commission de Régulation de l'Energie au %{gasPriceStartDate} pour un consommateur \\\"Cuisson/Eau Chaude\\\")\",\"list3\":\" : 1 litre d’eau = %{waterPrice} € TTC (prix constaté au %{waterPriceStartDate} pour un abonnement et une consommation de 120 m3/an sur la Métropole de Lyon)\",\"part3\":\"Le coût de votre abonnement n'est pas pris en compte pour l'électricité.\"},\"release_notes_modal\":{\"title\":\"Du nouveau sur Ecolyo !\",\"message\":\"Les mises à jour suivantes ont été effectuées sur votre application :\",\"go_back\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre de notifications\",\"button_go_back\":\"J'ai compris\"}}},\"ecogestures\":{\"loading\":\"Chargement des astuces\"},\"duel\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"average_info\":\"%{average} euros étant votre moyenne actuelle, relevez-vous le défi ?\",\"button_start\":\"Allons-y !\",\"goal1\":\"Faites moins que votre moyenne actuelle sur %{durationInDays} jours\",\"goal2\":\"pour gagner le badge %{title}\",\"goal_done\":\"Duel remporté\",\"goal_failed\":\"Duel perdu\",\"caption_average\":\"Votre moyenne à titre indicatif\",\"caption_consumption\":\"Votre consommation\",\"caption_incoming\":\"Données à venir\",\"accessibility\":{\"button_go_back\":\"Retour\",\"button_start_duel\":\"Lancer le duel\",\"button_start_quiz\":\"Lancer le quiz\"}},\"duel_result_modal\":{\"success\":{\"title\":\"Félicitations\",\"message1\":\"Vous avez économisé %{value} €\",\"message2\":\"et gagné le badge %{title} !\",\"button_validate\":\"Youpi\"},\"lost\":{\"title\":\"Presque\",\"message1\":\"Vous avez dépassé de %{value} €\",\"message2\":\"et manqué le badge %{title}\",\"button_validate\":\"Zut alors\"},\"accessibility\":{\"window_title\":\"Fenêtre de résultat\",\"button_validate\":\"Valider\"}},\"last_duel_modal\":{\"title\":\"Félicitations !\",\"subtitle\":\"Vous avez terminé tous les défis !\",\"message1\":\"Nous travaillons actuellement à vous proposer de nouveaux défis.\",\"message2\":\"Vous pouvez donner votre avis sur ce que vous aimeriez en cliquant sur la bulle d'aide.\",\"close\":\"Fermer la fenêtre\"},\"duel_empty_value_modal\":{\"title\":\"Oups !\",\"message\":\"Impossible de lancer le duel. Il nous manque en effet certaines de vos données de consommation pour vous proposer un duel à votre hauteur.\",\"button\":\"Je retourne au menu des défis\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Retourner au menu des défis\"}},\"ecogesture\":{\"title_tab_0\":\"Objectifs\",\"title_tab_1\":\"Je fais déjà\",\"title_tab_2\":\"Toutes\",\"MENU_TITLE\":\"Filtrer\",\"ALL\":\"Tous les usages\",\"HEATING\":\"Chauffage\",\"AIR_CONDITIONING\":\"Climatisation\",\"ECS\":\"Eau chaude\",\"COLD_WATER\":\"Eau froide\",\"ELECTRICITY_SPECIFIC\":\"Électricité courante\",\"COOKING\":\"Cuisson\",\"selection\":\"Sélectionner les astuces les plus adaptées à votre consommation\",\"selection_2\":\"vues sur\",\"button_selection\":\"Continuer ma sélection\",\"no_ecogesture\":\"Aucune astuce ne correspond à votre filtrage\",\"no_ecogesture_filter\":{\"text1\":\"Nous n'avons pas trouvé d'astuces adaptées à votre profil dans cette catégorie.\",\"text2\":\"En effet, de par votre profil et vos modes de chauffage, d'eau ou d'eau chaude sanitaire, nous n'avons pas identifié d’astuces vous permettant de diminuer vos factures à titre individuel. Toutefois, vous pouvez toujours agir pour préserver les ressources en appliquant et diffusant autour de vous les autres bonnes pratiques présentées dans la partie \\\"Toutes les astuces\\\".\"},\"adjust_profil\":{\"description\":\"Pour une sélection d’astuces adaptée à votre consommation, vous pouvez ajuster votre profil.\",\"button_go_to_profil\":\"Ajuster mon profil\"},\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_close\":\"Fermer la fenêtre\",\"button_selection\":\"Aller à la page de sélection\"},\"doing\":\"Je fais déjà\",\"objective\":\"Objectif\",\"emptyList\":{\"obj1\":\"Les astuces présentées sont des actions qui vous permettent de réduire vos consommations et donc vos factures. On parle parfois d’écogestes.\",\"obj1_done\":\"Aucune astuce n’a été sélectionnée comme objectif actuellement.\",\"obj2\":\"Vous pouvez sélectionner ceux à mettre en objectifs et ceux que vous appliquez déjà.\",\"obj2_done\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous souhaitez garder en objectif dans cette section.\",\"doing1\":\"Aucune astuce n’a été sélectionnée dans la catégorie appliquée actuellement.\",\"doing1_done\":\"Aucune astuce n’est indiquée comme déjà appliquée actuellement.\",\"doing2\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous mettez déjà en pratique dans cette section.\",\"doing2_done\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous mettez déjà en pratique dans cette section.\",\"btn1\":\"Voir toutes les astuces\",\"btn2\":\"Sélectionner\"},\"initModal\":{\"title\":\"Sélectionner mes astuces\",\"text1\":\"Les astuces présentées dans cette page sont des actions qui vous permettent de réduire vos consommations. Elles sont appelées parfois aussi écogestes.\",\"text2\":\"Répondez à un court questionnaire pour générer une liste d'astuces adaptée à votre profil puis sélectionnez celles que vous suivez déjà et celles que vous voulez vous mettre en objectif !\",\"btn1\":\"Plus tard\",\"btn2\":\"C'est parti !\"},\"reset\":\"Réinitialiser ma sélection\",\"resetModal\":{\"title_part1\":\"Cette action\",\"title_part2\":\"supprimera votre liste d’astuces\",\"title_part3\":\"sélectionnées dans\",\"title_part4\":\"“Objectifs”\",\"title_part5\":\"et\",\"title_part6\":\"“Je fais déjà”\",\"text1\":\"Vous pourrez ensuite faire une nouvelle sélection adaptée à votre consommation.\",\"text2\":\"Souhaitez-vous réinitialiser votre sélection d’astuces ?\",\"btn1\":\"Non\",\"btn2\":\"Réinitialiser\"}},\"ecogesture_modal\":{\"title_ecogesture\":\"Astuce\",\"title_action\":\"Action\",\"efficiency\":\"Efficacité\",\"show_less\":\"Voir moins\",\"show_more\":\"Voir plus\",\"select_action\":\"Je choisis cette action\",\"accessibility\":{\"window_title_ecogesture\":\"Fenêtre astuce\",\"window_title_action\":\"Fenêtre action\",\"button_close\":\"Fermer la fenêtre\",\"button_select_action\":\"Sélectionner cette action\",\"button_see_more_detail\":\"Afficher plus de détails\"}},\"ecogesture_info_modal\":{\"header\":\"Comment sont choisis les astuces adaptées à mon profil ?\",\"text\":\"Les astuces adaptés à votre profil sont aujourd’hui choisies en fonction des compteurs individuels que vous possédez (communicants ou non). Ceux présentés ici vous permettent d'agir sur vos consommations individuelles. Des modes de tri plus personnalisables seront proposés à l'avenir.\",\"button_close\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre d'information\",\"button_close\":\"Fermer la fenêtre\"}},\"ecogesture_form\":{\"heating_type\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"5\":\"Autre\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour vous chauffer ?\",\"no_fluid_text\":\"Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel\",\"0_text\":\"Produit grâce à de l'électricité\",\"2_text\":\"Produit grâce au gaz\",\"3_text\":\"Produit grâce au bois\",\"4_text\":\"Produit grâce au fioul\",\"5_text\":\"Produit grâce à un autre moyen\"},\"hot_water\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"}},\"ecogesture_profile\":{\"equipments\":{\"question\":\"Quels équipements possédez-vous ?\",\"hint\":\"Plusieurs réponses possibles\",\"air_conditioning\":\"Climatisation\",\"computer\":\"Ordinateur\",\"microwave\":\"Micro-ondes\",\"oven\":\"Four\",\"washing_machine\":\"Lave-linge\",\"dishwasher\":\"Lave-vaisselle\",\"cooking_plates\":\"Plaques électriques\",\"outside\":\"Extérieur\",\"dryer\":\"Sèche-linge\",\"refregirator\":\"Réfrigérateur\",\"fan\":\"Ventilateur\",\"water_heater\":\"Chauffe-eau\",\"curtain\":\"Rideaux\",\"internet_box\":\"Box internet\",\"ventilation\":\"VMC\",\"freezer\":\"Congélateur\",\"boiler\":\"Chaudière\",\"hydraulic_heating\":\"Chauffage hydraulique\",\"accessible_label\":\"Liste des équipements\"}},\"ecogesture_selection\":{\"header\":\"Sélection des astuces\",\"title\":\"Vous avez parcouru un groupe de %{smartCount} astuces\",\"text\":\"Voulez-vous continuer sur votre lancée ou remettre cette sélection à plus tard ?\",\"title_final\":\"Félicitations !\",\"text_final_1\":\"Vous avez terminé la sélection des astuces adaptées à votre consommation.\",\"text_final_2\":\"Vous pouvez les retrouver dans les sections “Objectifs” et “Je fais déjà” selon que vous les pratiquiez déjà ou non.\",\"button_go_to_ecogesture\":\"Plus tard\",\"button_ok\":\"J'ai compris\",\"button_continue\":\"Poursuivre\",\"button_objective\":\"Objectif\",\"button_doing\":\"Je fais déjà\",\"button_skip\":\"Pas intéressé\",\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_close\":\"Fermer la fenêtre\",\"button_go_to_ecogesture\":\"Retourner aux astuces\",\"button_continue\":\"Poursuivre\",\"button_ok\":\"Fermer la sélection\"},\"selectionModal\":{\"title\":\"Des astuces correspondant à votre profil ont été trouvées !\",\"text\":\"À vous de choisir celles que vous souhaitez mettre en objectif et celles que vous faites déjà.\",\"button_close\":\"C'est parti !\"}},\"exploration\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"button_already_done\":\"C’est déjà fait !\",\"button_come_back\":\"Je reviens quand cela sera fait\",\"button_start\":\"C'est parti !\",\"watch_consumption\":\"Je fonce\",\"congratulation\":\"Bravo !\",\"earn\":\"Vous remportez\",\"button_confirm\":\"Ok\",\"interval\":{\"explanation\":\"Vous pouvez vérifier cette informations sur l'écran Conso.\"},\"accessibility\":{\"button_already_done\":\"Marquer l'exploration comme déjà réalisée\",\"button_confirm\":\"Valider\",\"button_come_back\":\"Fermer l'exploration\",\"button_go_back\":\"Retour\",\"button_start\":\"Lancer l'exploration\"}},\"error_page\":{\"main\":\"Erreur\",\"back\":\"Retour\",\"no_ecogesture\":\"Oups ! Nous n'avons pas trouvé l'astuce demandée.\"},\"help\":{\"title_help\":\"une question ? un problème ? une suggestion ?\",\"read_help\":\"Nous écrire via le Service d'Assistance Utilisateur\"},\"feedback\":{\"title\":\"Vous allez contacter le Service Assistance Utilisateur du Grand Lyon.\",\"text1\":\"Vous pourrez nous remonter un problème, chercher de l'aide pour vous connecter plus facilement, ou encore nous partager une bonne idée d'évolution.\",\"text2\":\"N'hésitez pas à nous écrire ! L'équipe Ecolyo vous répondra avec plaisir :)\",\"later\":\"Plus tard\",\"lets_go\":\"J'y vais\",\"accessibility\":{\"window_title\":\"Fenêtre de partage de retours\",\"button_close\":\"Fermer la fenêtre de partage de retours\"}},\"dataShare\":{\"title1\":\"Bienvenue !\",\"title1Update\":\"Ecolyo évolue !\",\"title2Update\":\"Pour continuer à utiliser Ecolyo, merci d’accepter les modalités de traitement des données ci-dessous.\",\"part1\":\"Nous avons besoin de l’adresse email utilisée lors de la création de votre Cozy Métropole de Lyon, ci-après nommé cloud personnel.\",\"part2\":\"Cette donnée de compte est conservée dans Ecolyo le temps de l’utilisation de ce service.\",\"part3\":\"La Métropole de Lyon utilisera cet email afin de vous tenir informé·e :\",\"item1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter.\",\"item2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"item3\":\"De l’évolution de vos consommations, des nouveautés et  de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part4\":\"Vos données privées de consommation d’énergie et d’eau sont récupérées, sauvegardées et stockées dans votre cloud personnel à votre initiative sans visibilité de la Métropole  de Lyon sur leur contenu.\",\"part5\":\"Il en est de même pour les données privées de composition du logement et du foyer, fournies par vos soins. Elles restent également sans visibilité de la Métropole de Lyon sur leur contenu.\\nLes données d’identification entrées lors de la connexion aux données de consommations d’électricité sont quant à elles conservées dans un espace sécurisé de la Métropole de Lyon et sont utilisées uniquement à des fins de contrôle du consentement par des organismes extérieurs.\",\"part6\":\"Dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées et pseudonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation, d’évaluer globalement l’usage de l’application via des mesures d’audience ainsi que d’évaluer à terme l’impact global en termes de baisse des consommations énergétiques de notre service.\",\"part7\":\"Au sein de votre cloud personnel, vous pouvez à tout moment exercer vos droits d’accès, de rectification, de portabilité, de limitation et d’opposition en consultant notamment la page Options.\",\"part8\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part9\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Assemblées, des Affaires Juridiques et des Assurances - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 \",\"part10\":\"ou en ligne, au moyen du formulaire disponible à l'adresse suivante : \",\"link1\":\"<a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/</a>\",\"validDataConsent\":\"Je consens au traitement de mes données tel que décrit ci-dessus. *\",\"validCGU\":\"Je valide les \",\"validCGU_button\":\"Conditions Générales d’Utilisation\",\"validLegal\":\" du service et ai pris connaissance des \",\"validLegal_button\":\"Mentions Légales\",\"validLegal2\":\"de celui-ci. *\",\"button_accept\":\"C'est parti !\",\"accessibility\":{\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"minorUpdate\":{\"title\":\"Ecolyo évolue !\",\"button\":\"J'ai compris\"},\"gcu\":{\"title\":\"Conditions générales d’utilisation du service\",\"version\":\"Version du 12.12.2022\",\"content\":{\"title1\":\"Ecolyo, késako ?\",\"part1_1\":\"Ecolyo est un service proposé par la Métropole de Lyon vous permettant de suivre au même endroit vos consommations d’électricité, de gaz et d’eau, en kWh, en litres, en euros et à différentes échelles de temps. Ce service vous permet également de participer à des défis individuels et vous offre une analyse de vos consommations. Des astuces vous sont aussi proposées afin de vous permettre de réduire vos consommations.\",\"part1_2\":\"C’est un service gratuit qui prend la forme d’un site web dit « responsive », c’est-à-dire qu’il peut être consulté sur ordinateur ou sur mobile. Sur mobile, c’est une application que l’on a souhaitée ergonomique, réactive et esthétique pour votre plaisir de navigation et d’utilisation au quotidien.\",\"part1_3\":\"Tous les termes « techniques » sont définis en bas de page.\",\"title2\":\"Quelles fonctionnalités le service propose-t-il ?\",\"part2_1\":\"La fonctionnalité principale d’Ecolyo est la visualisation, au même endroit, de vos consommations d’électricité, de gaz et d’eau et ce, à différents pas de temps (de la demi-heure – uniquement pour l’électricité, à plusieurs années, en passant par les pas de temps journaliers et mensuels). La visualisation des consommations se fait en kWh pour l’énergie et en L pour l’eau ainsi qu’en euros (euros résultant d’un prix moyenné).\",\"part2_2\":\"Au-delà de la visualisation de vos consommations et parce que nous souhaitons vous aider à diminuer ces consommations vous retrouverez plusieurs autres pages : \",\"part2_2_list1\":\"Défis : Des quiz, et actions à mettre en place vous seront proposés pour vous pousser à réduire vos consommations.\",\"part2_2_list2\":\"Astuces : Une liste d’astuces pour maîtriser ses consommations d’énergie et d’eau à trier par usage, et avec une possibilité de les adapter plus précisément à votre profil.\",\"part2_2_list3\":\"Analyse : Une analyse de vos consommations réelles en comparaison à celle d’un foyer étant proche d’une vôtre.\",\"part2_3\":\"Pour la page Analyse ainsi que pour la partie personnalisation des astuces, des éléments supplémentaires sur votre profil vous seront demandés. L’ensemble de ces informations récoltées à l’aide du formulaire peuvent être modifiées par la suite.\",\"part2_4\":\"Dernière page : la page Options dans laquelle vous pourrez vous abonner à un service d’alerte sur vos consommations d’eau, de quoi ajuster votre profil ou encore vous désabonner de la lettre mensuelle.\",\"title3\":\"Comment ai-je accès à mes données d’électricité, de gaz et d’eau ?\",\"part3_1\":\"Pour visualiser vos consommations réelles et profiter pleinement du potentiel de notre service, il vous faut au minimum un des trois compteurs communicants suivants : Linky (pour l’électricité), Gazpar (pour le gaz), Téléo (pour l’eau).\",\"part3_2\":\"Ces compteurs sont opérés par les gestionnaires de réseaux. Pour Linky, c’est Enedis, le gestionnaire de réseau de distribution d’électricité. Pour Gazpar, GRDF est responsable de cette gestion. Et pour Téléo, c’est Eau Publique du Grand Lyon.\",\"part3_3\":\"Ces acteurs sont responsables de la relève de vos données. Ces données servent notamment à votre fournisseur d’électricité, de gaz ou d’eau pour permettre la facturation de vos consommations d’énergie. Des fournisseurs d’électricité ou de gaz il y en a des dizaines. Les gestionnaires de réseaux (… et de votre compteur) ne sont qu’au nombre de trois. Nous avons donc décidé de travailler avec eux, au plus près de la donnée brute issue de vos compteurs.\",\"part3_4\":\"Il vous faudra donc avoir un compte chez GRDF et Eau Publique du Grand Lyon pour accéder à vos données. Si vous n’en avez pas, il suffira de vous en créer un. Ceci ne sera à faire qu’une fois, au début.\",\"title4\":\"Ecolyo se trouve dans un cloud personnel Métropole de Lyon, qu’est-ce que cela signifie ?\",\"part4_1\":\"Comme vous avez dû le remarquer, lors de votre première connexion à Ecolyo vous avez dû vous créer un compte Cozy Métropole de Lyon. Ce cloud personnel est un espace sécurisé porté par l’ambition de vous apporter visibilité, transparence et maîtrise sur l’usage de vos données personnelles, et dont les fonctionnalités vous permettant de récupérer, synchroniser, stocker et partager vos données avec les destinataires de votre choix.  Le service Ecolyo se déploie  à l’intérieur de cet espace protégé. Dans ce cloud personnel, vous pourrez accéder également à d’autres services. Toutes les données traitées par Ecolyo, mais aussi les autres services que vous seriez amenés à utiliser dans ce cloud personnel restent dans ce Cloud Personnel Grand Lyon et n’en sortent pas, sauf si vous décidez vous-même de partager vos données avec des tiers.\",\"part4_2\":\"Pour en savoir plus sur ce cloud et son utilisation, ainsi que la durée de conservation de vos données, vous pouvez lire les conditions générales d’utilisation du service <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">ici</a>.\",\"title5\":\"Et donc concrètement pour Ecolyo, quelles données sont collectées et qui y a accès ?\",\"part5_1\":\"Pour qu’Ecolyo ait accès à vos données de consommations, vous devrez activer vos différents connecteurs. À ce moment-là, pour la connexion aux données de gaz et d’eau à travers un parcours qui vous conduira de manière intuitive sur le site de chacun des gestionnaires de réseaux concerné, vous pourrez donner votre consentement à partager ces données avec le Service Ecolyo, et ce pour une durée limitée dans le temps. Pour l’électricité, le don du consentement et la connexion aux données se fait directement dans notre service. Quid de la durée de ce consentement ? Pour les données électriques, elle est par défaut d'un an. Pour les données gaz, cela sera à vous de la définir (nous vous recommandons 1 an pour une expérience optimale). Les données utilisées pour vérifier la bonne connexion de vos données d’électricité sont stockées du côté de la Métropole de Lyon sur des serveurs sécurisés.\",\"part5_2\":\"Vos connecteurs, une fois configurés, permettent le transfert de vos données de consommations au service Ecolyo. Le transfert de ces données de consommation se fait sans que personne n’accède à leur contenu, pas même la Métropole de Lyon. En effet, ces données sont stockées et traitées directement dans votre cloud personnel qui en assure la protection. Tous les calculs, analyses et traitements sur ces données sont faites DANS votre espace personnel sans visibilité sur le contenu des données par la Métropole de Lyon.\",\"part5_3\":\"Vous pouvez bien sûr mettre fin à la récupération/ au transfert de vos données de consommation sur votre espace cloud personnel à tout moment et  à plusieurs niveaux : \",\"part5_3_list1\":\"Vous pouvez supprimer le transfert quotidien de vos données en supprimant tout simplement le connecteur dans la page Consos (en bas).\",\"part5_3_list2\":\"Pour supprimer l’ensemble de vos données ainsi que votre cloud personnel Métropole de Lyon, vous devez demander la suppression de votre cloud. Pour faire cela, rendez-vous dans les paramètres de votre cloud personnel via la barre blanche en haut d’Ecolyo et appuyez sur le bouton « Supprimer mon compte » dans la partie paramètres.\",\"part5_4\":\"Des données sur le profil de votre foyer peuvent être également remplies au sein de l’application. Ces données s’enrichiront au fur et à mesure de votre utilisation du service avec d’autres informations : défis réalisés, étoiles gagnées, etc. L’ensemble de ces données restent à l’intérieur de votre cloud personnel, sans que personne n’y ait accès.\",\"part5_5\":\"Enfin, afin de permettre une mise à jour quotidienne de vos données de consommations, vos identifiants Eau Publique du Grand Lyon, un jeton d’identification GRDF ainsi que vos numéros de compteurs sont stockés.\",\"title6\":\"Personne n’a donc accès à mes données, pas même la Métropole de Lyon, vraiment ?\",\"part6_1\":\"Conformément aux indications du paragraphe précédent, la Métropole de Lyon n’accède ni à vos données de consommations ni aux données utilisées via certaines fonctionnalités du service comme le formulaire (celui-là même qui permet l’analyse de vos consommations personnalisée ainsi qu’une sélection d’éco-gestes personnalisés). Toutes ces informations sont bien gardées au chaud dans votre cloud personnel Métropole de Lyon\",\"part6_2\":\"Seul vous pouvez accepter de partager vos données, documents ou fichiers privés avec la Métropole de Lyon, ses partenaires ou d’autres utilisateurs ou acteurs (publics ou privés) après recueil de votre consentement éclairé et par une action expresse de votre part.\",\"part6_3\":\"La Métropole de Lyon n'a cependant accès qu’à l’adresse email utilisée lors la création de votre cloud personnel Métropole de Lyon. Elle utilise cet email afin de vous tenir informé·e :\",\"part6_3_list1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter. \",\"part6_3_list2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"part6_3_list3\":\"De l’évolution de vos consommations, des nouveautés et  de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part6_4\":\"Elle stocke également les informations transmises lors de la connexion à l’électricité (nom, adresse postale). Ces informations doivent être stockées car la Métropole de Lyon est régulièrement contrôlée par Enedis et doit prouver détenir le consentement des personnes pour lesquelles elle va chercher la donnée.\",\"part6_5\":\"Par ailleurs, et dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques anonymisées nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation ainsi que d’évaluer l’impact global en termes de baisse des consommations énergétiques de notre service. Parmi ces statistiques, des mesures d’audience de la fréquentation des différentes pages du service sont réalisées. Vous pouvez, via la page Options, à tout instant, décider de vous opposer à la récupération de ces données d’utilisation.\",\"title8\":\"Encore des questions ?\",\"part8_1\":\"N’hésitez pas à consulter la FAQ ou à nous contacter via le formulaire de contact présente sur l’ensemble des pages.\",\"part8_2\":\"Dernière option, contactez-nous directement à <a href=\\\"mailto:ecolyo@grandlyon.com\\\">ecolyo(at)grandlyon.com</a>.\",\"title9\":\"LEXIQUE\",\"part9_1_title\":\"Cloud personnel Métropole de Lyon : \",\"part9_1_content\":\"Cloud personnel : appelé aussi le « domicile numérique », le cloud personnel est souvent réduit à un simple espace de stockage de documents mais il est bien plus que ça. C'est un espace individuel et sécurisé où vous pouvez accéder à des services sans exposer aucune donnée à l’extérieur. Vous seul pouvez y accéder, personne d'autre.\",\"part9_2_title\":\"Connecteur : \",\"part9_2_content\":\"Un connecteur est un service, installé dans votre cloud personnel également, qui a pour but uniquement d’aller récupérer les données auprès de différents partenaires/sources de données. Dans le cadre d’Ecolyo, trois connecteurs sont pré-installés dans votre cloud personnel : celui d’Enedis, celui de GRDF et celui d’Eau Publique du Grand Lyon.\",\"part9_3_title\":\"Compteur communicant : \",\"part9_3_content\":\"Un compteur communicant est un compteur qui mesure de manière précise et détaillée vos consommations et peut transmettre ces données  au gestionnaire de réseau via une technologie radio (c'est le cas pour Gazpar et Téléo par exemple) ou via les réseaux électriques (via Courant Porteur en ligne, c'est le cas pour Linky par exemple).\",\"part9_4_title\":\"Fournisseur : \",\"part9_4_content\":\"Votre fournisseur d’électricité, de gaz ou d’eau est l’entreprise qui vous facture votre électricité, gaz ou eau. Côté électricité il en existe <a href=\\\"https://www.enedis.fr/liste-des-fournisseurs-delectricite\\\">aujourd’hui plus de 50</a>, chacun proposant des tarifs différents.\",\"part9_5_title\":\"Gestionnaire de réseau de distribution : \",\"part9_5_content\":\"Appelé aussi parfois distributeur, il est en charge de la livraison de votre électricité, gaz ou eau jusqu’à votre domicile. Il est aussi en charge du compteur qui relève vos consommations. Il transmet vos données de consommations à votre fournisseur afin qu’il effectue la facturation de vos consommations d’énergie. Il peut également les transmettre à tout acteur avec qui vous avez décidé de partager ces données.\"}},\"gcu_modal\":{\"button_accept\":\"J'accepte\",\"accessibility\":{\"window_title\":\"Conditions générales d’utilisation\",\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"matomo\":{\"matomo_title\":\"Suivi statistiques d'usage Matomo\"},\"header\":{\"accessibility\":{\"button_back\":\"Retour à la page précédente\",\"button_open_feedbacks\":\"Ouvrir le partage de retours\"}},\"konnector_form\":{\"label_updated_at\":\"Dernière mise-à-jour le\",\"button_update\":\"Mettre à jour\",\"loading\":\"Chargement...\",\"wait_end_issue\":\"Attendre la fin de la maintenance avant de mettre à jour.\",\"button_disconnect\":\"Déconnecter\",\"issue\":\"Le problème semble venir de \",\"resolve\":\"Une mise à jour peut résoudre ce problème.\",\"login_failed\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"not_installed\":\"Le connecteur n'est pas installé. Veuillez l'installer en cliquant sur le bouton ci-dessous.\",\"button_install\":\"Installer\",\"error_account_creation\":\"Une erreur est survenue, veuillez essayer de nouveau.\",\"error_no_login_password\":\"Identifiant et mot de passe requis\",\"error_login_failed\":\"Identifiants invalides\",\"error_update\":\"Un problème est survenu lors du rapatriement de vos données.\",\"error_update_oauth\":\"Votre autorisation pour afficher vos données %{fluid} a expiré.\",\"button_oauth_reload\":\"Redonner mon consentement\",\"OK\":\"Ok\",\"konnector_delta\":{\"ELECTRICITY\":\"La donnée de consommation électrique arrive normalement à J+1. Un retard d'un ou deux jours est parfois constaté.\",\"GAS\":\"La donnée de consommation de gaz arrive normalement à J+3. Un retard d'un ou deux jours est parfois constaté.\",\"WATER\":\"La donnée de consommation d'eau arrive normalement à J+3. Un retard d'un ou deux jours est parfois constaté.\"},\"accessibility\":{\"button_install\":\"Installer le connecteur\",\"button_update\":\"Mettre à jour votre connexion\",\"button_disconnect\":\"Déconnecter votre connecteur\"}},\"konnector_options\":{\"label_connect_to_electricity\":\"Se connecter à l'électricité\",\"label_connect_to_water\":\"Se connecter à l'eau\",\"label_connect_to_gas\":\"Se connecter au gaz\",\"label_offline_electricity\":\"Électricité déconnectée\",\"label_offline_water\":\"Eau déconnectée\",\"label_offline_gas\":\"Gaz déconnecté\",\"partner_issue\":\"En maintenance\",\"outdated\":\"Données manquantes depuis %{isOutdatedData} jours\",\"accessibility\":{\"label_ko_status\":\"Connecteur en erreur\",\"button_toggle_detail_electricity\":\"Afficher ou masquer le détail de la connexion à l'électricité\",\"button_toggle_detail_water\":\"Afficher ou masquer le détail de la connexion à l'eau\",\"button_toggle_detail_gas\":\"Afficher ou masquer le détail de la connexion au gaz\"}},\"konnector_modal\":{\"loading_data\":\"Veuillez patienter, vos données sont en cours de chargement.\",\"loading_data_update\":\"Veuillez patienter, vos données sont en cours de mise à jour.\",\"logging_txt\":\"Nous vérifions vos informations d'identité\",\"success_txt\":\"Félicitations !\",\"success_data_electricity\":\"Vos données de consommation d'électricité sont maintenant connectées à Ecolyo.\",\"success_data_water\":\"Vos données de consommation d'eau sont maintenant connectées à Ecolyo.\",\"success_data_gas\":\"Vos données de consommation de gaz sont maintenant connectées à Ecolyo.\",\"success_data_additional_electricity\":\"Les données de consommations mettent entre un et deux jours pour arriver.\",\"success_data_additional_water\":\"Les données de consommations mettent entre trois et cinq jours pour arriver.\",\"success_data_additional_gas\":\"Les données de consommations mettent entre trois et cinq jours pour arriver.\",\"success_update_txt\":\"Connexion réussie !\",\"success_data_update_electricity\":\"Ecolyo est bien connecté à votre compteur d'électricité.\",\"success_data_update_water\":\"Ecolyo est bien connecté à votre compteur d'eau.\",\"success_data_update_gas\":\"Ecolyo est bien connecté à votre compteur de gaz.\",\"success_data_additional_update_electricity\":\"Sachez que la donnée de consommation d'électricité arrive entre J+1 et J+2.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"success_data_additional_update_water\":\"Sachez que la donnée de consommation d'eau arrive entre J+3 et J+5.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"success_data_additional_update_gas\":\"Sachez que la donnée de consommation de gaz arrive entre J+3 et J+5.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"error_txt\":\"Aïe !\",\"mismatch\":{\"title\":\"Vos données n'ont pas pu être récupérées.\",\"text1\":\"Vos nom et numéro de compteur ne correspondent plus. Merci de reconfigurer votre connecteur.\",\"text2\":\"Reconfigurer mon connecteur ?\",\"text3\":\"La reconfiguration de votre connecteur passe par sa suppression et sa nouvelle installation. Vos données seront conservées.\"},\"error_credentials_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter. L'identifiant est un numéro à 7 chiffres (différent de votre numéro de contrat).\",\"error_credentials_electricity\":\"Il semblerait que les nom(s) et adresse ne concordent pas avec le numéro de votre compteur.\",\"error_credentials_electricity_2\":\"Nous ne pouvons vous donner accès aux données de consommation.\",\"error_credentials_update_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter.\",\"error_credentials_update_electricity\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"error_credentials_update_gas\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"error_consent_form_gas_title\":\"L'accès à vos données a été bloqué par GRDF suite à un consentement précédemment supprimé par vos soins.\",\"error_consent_form_gas_report\":\"Merci de nous signaler le problème.\",\"error_data_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité ne seront pas chargées.\",\"error_data_water\":\"Un problème est survenu. Vos données de consommation d’eau ne seront pas chargées.\",\"error_data_gas\":\"Il semblerait que le service de connexion à vos données de gaz soit momentanément en panne.\",\"error_data_update_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité n’ont pas été mises à jour.\",\"error_data_update_water\":\"Un problème est survenu. Vos données de consommation d’eau n’ont pas été mises à jour.\",\"error_data_update_gas\":\"Un problème est survenu. Vos données de consommation de gaz n’ont pas été mises à jour.\",\"error_data_2\":\"Merci de réessayer plus tard.\",\"button_validate\":\"Ok\",\"button_understood\":\"J'ai compris\",\"button_try_again\":\"Réessayer\",\"button_contact\":\"Nous contacter\",\"button_check_info\":\"Vérifier les infos\",\"button_go\":\"J'y vais\",\"button_later\":\"Plus tard\",\"show_common_error\":\"Voir les erreurs récurrentes\",\"show_common_error_list\":\"<span>Le problème peut provenir des cas suivants :</span><ul><li>Vous avez un co-titulaire sur votre contrat. Veillez à bien entrer le nom du <span class=\\\"gold\\\">titulaire du contrat</span> et non le co-titulaire.</li><li>  Votre nom comporte un tiret ? Tentez sans le tiret.</li><li>Entrez bien le nom de votre commune de résidence en entier (tirets et accents inclus)</li><li>Avez-vous bien entré le <span class=\\\"gold\\\">numéro de votre compteur</span> (PDL) ? Tout autre numéro (de contrat, de client) ne fonctionne pas.</li></ul><p>Si vous rencontrez toujours des difficultés, contactez notre service d'aide </p><div class=\\\"center\\\">Avez-vous pensez à vérifier ces informations ?</div>\",\"accessibility\":{\"window_title\":\"Fenêtre d'attente de connexion\",\"button_close\":\"Fermer la fenêtre\"}},\"consent_outdated\":{\"title\":{\"0\":\"Votre autorisation pour afficher vos données d’électricité a expiré\",\"2\":\"Aïe !\"},\"text1\":{\"0\":\"Veuillez re-donner votre consentement pour la transmission et la reconnexion de vos données ENEDIS à Ecolyo.\",\"2\":\"L'accès à vos données de consommation de gaz a expiré.\"},\"text2\":{\"0\":\"Souhaitez-vous renouveler votre accord dès maintenant pour un an ?\",\"2\":\"Merci de redonner votre consentement pour y accéder.\"},\"later\":\"Plus tard\",\"go\":\"J'y vais\",\"no\":\"Non\",\"yes\":\"Oui\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur, consentement expiré\",\"button_close\":\"Fermer la fenêtre\"}},\"legal\":{\"read_legal\":\"Lire les mentions légales\",\"title_legal\":\"Mentions légales & CGU\",\"version\":\"Version du 12.12.2022\",\"site\":\"Site du service Ecolyo : <a href=\\\"https://ecolyo.com/\\\"> https://ecolyo.com/</a>\",\"adress\":\"Métropole de Lyon - 20, rue du Lac – CS 33569 - 69505 Lyon cedex 03\",\"phone\":\"Tél : (33) 4 78 63 40 40\",\"mail\":\"<a href=\\\"mailto:ecolyo@grandlyon.com\\\"> ecolyo(at)grandlyon.com</a>\",\"p1b\":\"Directrice de publication : \",\"p1\":\"Blandine MELAY, Responsable du Service Transition Énergétique\",\"p2b\":\"Animation éditoriale, gestion et mise à jour : \",\"p2\":\"Marion BERTHOLON, Chargée de services numériques pour la transition énergétique\",\"p3b\":\"Photographies : \",\"p3\":\"sauf mention contraire, les photos sont la propriété de la Métropole de Lyon\",\"p4b\":\"Conception et Charte graphique : \",\"p4\":\"Florent Dufier\",\"p5b\":\"Réalisation technique : \",\"p5\":\"Métropole de Lyon, Sopra Steria\",\"p6b\":\"Maintenance technique : \",\"p6\":\"Délégation Développement économique, emploi & savoirs - Innovation numérique & systèmes d’information - Usages et services numériques - Développement des services numériques\",\"title1\":\"Crédits\",\"part1\":\"Ce site est le résultat de développements spécifiques réalisés dans les langages Go, TypeScript, HTML et Sass. Les développements s’appuient sur plusieurs bibliothèques et frameworks libres : axios, cozy-bar, cozy-client, cozy-harvest-lib, cozy-scripts, cozy-ui, d3, global, lodash, luxon, node-sass, object-hash, react, react-dom, react-redux, react-router-dom, react-swipeable-views, redux-devtools-extension, sass-loader. Les tests de l’application s’appuient sur les bibliothèques et frameworks libres suivants: jest-junit, react-test-renderer, redux-mock-store. La pile technique intègre également les applications Cozy stack, Yarn, Docker, ACH. Les déploiements sont réalisés sur le registre hébergé chez Cozy. L’équipe de réalisation utilise au quotidien les applications GitLab, IceScrum, RocketChat, SonarQube.\",\"title2\":\"Traitement des données personnelles et droit d’accès, de modification et de suppression\",\"part2\":\"Conformément à la réglementation en vigueur en matière de protection des données personnelles, le service Ecolyo a fait l’objet d’une inscription au registre des traitements de la Métropole de Lyon. Ecolyo fait partie de l’écosystème de services orientés « self data » déployés par la Métropole de Lyon avec l’ambition d’offrir aux usagers métropolitains les outils et les services leur permettant d’exercer directement leur droit à la portabilité, dans un cadre apte à garantir aussi bien la transparence et le contrôle sur l’usage de leurs données personnelles que l’exploitation directe du contenu de ces données selon leurs libres choix. Le self data est en effet selon la Fondation Internet Nouvelle Génération (FING) « la production, l’exploitation et le partage de données personnelles par les individus, sous leur contrôle et à leurs propres fins ». Au sein de cet environnement self data, la gestion des données s’appuie sur l’organisation suivante des rôles et responsabilités associées : \",\"part2-1\":\"Les partenaires du service GRDF et Eau Publique du Grand Lyon sont responsables exclusivement des seuls traitements de Données Personnelles relatifs à la collecte des données de consommation de gaz et d’eau de l’utilisateur et à leur transmission sur la plateforme de cloud personnel, après consentement de l’utilisateur.\",\"part2-2\":\"Enedis est responsable de la collecte des données de consommation d’électricité et de leur mise à disposition à la Métropole de Lyon qui, elle en gère la transmission sur la plateforme du cloud personnel de l’utilisateur, après avoir récupéré le consentement de l’utilisateur.\",\"part2-3\":\"La Métropole de Lyon est responsable de traitement sur le périmètre du service Ecolyo qu’elle propose à l’usager, ainsi que des traitements nécessaires à la fourniture de la plateforme de cloud personnel qu’elle met à disposition de l’usager pour accéder au service Ecolyo. En sa qualité de responsable de ces traitements, elle collecte et traite : \",\"part2-3-1\":\"Les données de compte de l’usager renseignées par l’usager au sein de son espace de cloud personnel Grand Lyon à des fins de gestion du compte et de communication avec l’usager ;\",\"part2-3-2\":\"Les données de compte de l’utilisateur lui permettant de connecter ses données d’électricité à Ecolyo ;\",\"part2-3-3\":\"Les données privées de consommation d’énergie et d’eau dont la récupération, la sauvegarde, le stockage, la synchronisation et le partage sur la plateforme de cloud personnel sont initiés par l’usager sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-3-4\":\"Les données privées sur la composition du logement et du foyer de l’utilisateur, fournies par l’utilisateur lui-même au sein du service, sont traitées par le service sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-3-5\":\"Des métriques d’usage du service anonymisées et remontées périodiquement afin d’améliorer la qualité du service et d’évaluer son impact (Plus d’informations sur la manière dont votre anonymat est bien préservé dans ce processus <a href=\\\"https://ecolyo.com/cloud_statistiques.html\\\">ici</a>).\",\"part2-4\":\"La Métropole réalise également des mesures d’audience à l’aide de la solution Matomo. Afin de vous fournir un meilleur service et d’améliorer votre expérience d'utilisateur, nous utilisons des solutions de mesure d’audience qui utilisent la technologie des « cookies », des fichiers texte qui sont enregistrés sur votre ordinateur et qui permettent de générer des informations envoyées aux serveurs de mesure d’audience. Sur ces serveurs, l’adresse IP est anonymisée. Les données recueillies ont uniquement pour finalité de permettre d'analyser la fréquentation de nos pages afin d'en améliorer le contenu. Il s'agit de statistiques agrégées permettant de connaître le nombre de visites et de visiteurs différents, les pages les plus populaires, les chemins préférés, les niveaux d'activité par jour de la semaine et par heure de la journée, les principales erreurs etc. Vous avez cependant le droit de vous opposer à l’utilisation de ces cookies, et donc au traitement de vos données personnelles de navigation, en vous rendant dans la page Options de notre service.\",\"part2-5\":\"L’usager est seul décisionnaire des finalités d’utilisation qu’il souhaite définir pour le traitement de ses données personnelles de consommation, à la suite de leur transmission par les partenaires du service Ecolyo sur son cloud personnel. Ainsi, dans le cadre de l’utilisation d’Ecolyo, l’usager ne recevra les données des partenaires du service : Enedis, GRDF et Eau Publique du Grand Lyon seulement qu’à sa demande expresse après la saisie de ses identifiants.\",\"part2-6\":\"L’utilisateur est donc le seul à accéder :\",\"part2-6-1\":\"À ses données de consommation d’électricité horaires, journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-6-2\":\"À ses données de consommation de gaz journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-6-3\":\"À ses données de consommation eau journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-7\":\"Les engagements et responsabilités de la Métropole de Lyon concernant la protection des données et la confidentialité des données Ecolyo sont précisés dans les Mentions légales et les conditions d’utilisation du cloud personnel Grand Lyon qui accueille aujourd’hui le service Ecolyo et sans lequel le service ne peut pas fonctionner. Pour plus d’informations sur les engagements et responsabilités de la Métropole de Lyon concernant la protection et la confidentialité dans le cloud personnel, nous vous invitons à vous référer <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">aux mentions légales et CGU du cloud personnel métropolitain.</a> \",\"part2-8\":\"Conformément à la loi 78-17 du 6 janvier 1978 modifiée relative à l’information, aux fichiers et aux libertés, vous disposez d’un droit d’accès, de rectification et d’opposition au traitement de vos données à caractère personnel. Votre cloud personnel vous permet d’exercer ces droits directement dans cet espace sur vos données de compte. S’agissant des données de consommations d’électricité et de gaz, l’utilisateur peut supprimer son consentement à partager ses données en supprimant son connecteur dans la page Consos.\",\"part2-9\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part2-10\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Assemblées, des Affaires Juridiques et des Assurances - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou en ligne, au moyen du formulaire disponible à l'adresse suivante : <a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/.</a>\",\"part2-11\":\"L’exercice de ces droits sur vos données personnelles auprès de la Métropole de Lyon concerne exclusivement les données traitées dans le cadre du service  « Ecolyo ».\",\"title3\":\"Dispositions légales\",\"part3-1\":\"Les divers éléments du site web (la forme, la mise en page, le fonds, la structure …) sont protégés par le droit des dessins et modèles, le droit d’auteur, le droit des marques ainsi que le droit à l’image et ils ne peuvent être copiés ou imités en tout ou partie sauf autorisation expresse de la Métropole de Lyon.\",\"part3-2\":\"Toute personne ne respectant pas les dispositions légales applicables se rend coupable du délit de contrefaçon et est passible des sanctions pénales prévues par la loi.\",\"title4\":\"Droits d’auteurs\",\"part4-1\":\"Les photographies, textes, logos, pictogrammes, ainsi que toutes œuvres intégrées dans le site sont la propriété de la \\\"Métropole de Lyon\\\" ou de tiers ayant autorisé la \\\"Métropole de Lyon\\\" à les utiliser.\",\"part4-2\":\"Les reproductions, les transmissions, les modifications, les réutilisations, sur un support papier ou informatique, dudit site et des œuvres qui y sont reproduites ne sont autorisées que pour un usage personnel et privé conforme aux dispositions de l’article L 122-5 du Code de la Propriété Intellectuelle. Ces reproductions devront ainsi notamment indiquer clairement la source et l’auteur du site et/ou de ces œuvres multimédias. En aucun cas ces reproductions ne sauraient porter préjudice aux droits des tiers. Les reproductions, les transmissions, les modifications, les réutilisations à des fins publicitaires, commerciales ou d’information, de tout ou partie du site, sont totalement interdites.\",\"title5\":\"Logo de la Métropole de Lyon et d’Ecolyo\",\"part5\":\"Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent pas être modifiés – proportions, couleurs, éléments, constituants – et ne peuvent pas être sujet à aucune transformation, animation ou tout autre processus. Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent être utilisés et associés qu’aux seules informations vérifiables. Ils ne peuvent être notamment utilisés que pour illustrer des relations avec la Métropole de Lyon ou des actions de sponsorings dûment établies. Quel que soit le cas d’espèce, la Métropole de Lyon se réserve le droit d’approuver ou de désapprouver toute utilisation des logos de la Métropole de Lyon et d’Ecolyo, pour assurer son utilisation correcte, conformément à l’éthique, la morale et aux intérêts de la Métropole de Lyon. Les conditions susmentionnées s’appliquent dans le cadre de pages web, elles ne font pas référence à l’utilisation des logos dans tout autre document. La Métropole de Lyon se réserve le droit de modifier les conditions d’utilisation des logos de la Métropole de Lyon et d’Ecolyo à tout moment et sans préavis.\",\"title6\":\"Droit des bases de données\",\"part6\":\"Les bases de données sont protégées par la loi du 1er juillet 1998 et le régime français du droit d’auteur.\",\"title7\":\"Établissements de liens vers le site Ecolyo\",\"part7-1\":\"La Métropole de Lyon autorise la mise en place d’un lien hypertexte vers son service Ecolyo pour tous les sites internet, à l’exclusion de ceux diffusant des informations à caractère polémique, pornographique, xénophobe ou pouvant, dans une plus large mesure porter atteinte à la sensibilité du plus grand nombre.\",\"part7-2\":\"Le lien doit aboutir à la page d’accueil du service (<a href=\\\"https://ecolyo.com\\\">https://ecolyo.com</a>), cette page devant apparaître dans une nouvelle fenêtre. Les pages du service Ecolyo ne doivent en aucun cas être intégrées à l’intérieur des pages d’un autre site (iframe).\",\"part7-3\":\"Dans tous les cas d’espèce, La Métropole de Lyon se réserve le droit de demander la suppression d’un lien si elle estime que le site cible ne respecte pas les règles ainsi définies.\",\"title8\":\"Liens vers des sites tiers depuis le site Ecolyo\",\"part8\":\"Les liens hypertextes mis en œuvre au sein du site en direction d’autres sites et/ou de pages personnelles et d’une manière générale vers toutes ressources existantes sur internet ne sauraient engager la responsabilité de la Métropole de Lyon quant aux liens qu’ils contiennent ou aux changements ou mises à jour qui leur sont apportés.\",\"title9\":\"Mise en garde générale\",\"part9-1\":\"Nos services mettent tout en œuvre pour offrir aux visiteurs de ce site web des informations fiables et vérifiées. Cependant, malgré tous les soins apportés, le site peut comporter des inexactitudes, des défauts de mise à jour ou des erreurs.\",\"part9-2\":\"Nous remercions les utilisateurs du site de nous faire part d’éventuelles omissions, erreurs ou corrections par mail sur la boite aux lettres du webmestre ou directement via le formulaire proposé dans le service.\",\"accessibility\":{\"button_close\":\"Fermer la fenêtre\"}},\"oauth\":{\"window\":{\"title\":\"OAuth\"}},\"onboarding\":{\"welcomeModal\":{\"title\":\"Vous êtes à mi-chemin !\",\"part1\":\"Votre cloud personnel a bien été créé.\",\"part2\":\"Il vous faut maintenant donner votre accord pour connecter vos compteurs au service.\",\"button_valid\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre de bienvenue\",\"button_valid\":\"Valider\"}}},\"performance_indicator\":{\"bilan\":{\"text1\":\"Par rapport à \",\"text2\":\"soit une différence de : \"},\"error_no_compare\":\"comparaison impossible\",\"error_no_compare_reason\":\"(manque de données)\",\"error_no_compare_no_data\":\"Vos consommations pour cette période sont incomplètes à cause d’un problème technique concernant :\",\"fpi\":{\"no_data\":\"Données non disponibles\",\"no_comparison\":\"Pas de comparaison possible\"}},\"profile\":{\"report\":{\"title_bilan\":\"Inscription à la lettre mensuelle\",\"switch_label_bilan\":\"Recevoir mon bilan de consommation et des conseils\",\"title_alert\":\"Alerte Consommation Excessive d'Eau\",\"switch_label_alert\":\"Être prévenu d’un dépassement anormal de ma consommation d’eau\",\"input_label_alert\":\"Si ma consommation d’eau quotidienne dépasse :\",\"input_label_subtext_alert\":\"Votre consommation quotidienne maximum sur les 6 derniers mois : \"},\"accessibility\":{\"button_toggle_mail_report\":\"Recevoir mon bilan mensuel par mail\",\"button_toggle_consumption_alert\":\"Recevoir des alertes sur mes consommations journalières\",\"input_water_alert_report\":\"Indiquer une limite de consommation d'eau journalière\"}},\"profile_type\":{\"title_profile\":\"Mes données\",\"read_profile\":\"Ajuster mon profil\",\"button_update_profile\":\"J'ajuste mon profil\",\"your_profile\":\"Mon profil\",\"multi_choices\":\"Plusieurs réponses possibles\",\"housing_type\":{\"title\":\"Logement\",\"question\":\"De quel type de logement disposez-vous ?\",\"individual_house\":\"Maison individuelle\",\"apartment\":\"Appartement\"},\"construction_year\":{\"title\":\"Construction\",\"question\":\"Quelle est son année de construction ?\",\"text_before_1948\":\"Construit avant 1948\",\"text_between_1948_and_1974\":\"Construit entre 1948 et 1974\",\"text_between_1975_and_1989\":\"Construit entre 1975 et 1989\",\"text_between_1990_and_1998\":\"Construit entre 1990 et 1998\",\"text_after_1998\":\"Construit après 1998\",\"text_unknown\":\"Construit après 1998\",\"before_1948\":\"Avant 1948\",\"between_1948_and_1974\":\"Entre 1948 et 1974\",\"between_1975_and_1989\":\"Entre 1975 et 1989\",\"between_1990_and_1998\":\"Entre 1990 et 1998\",\"after_1998\":\"Après 1998\",\"unknown\":\"Je ne sais pas\"},\"occupantsNumber\":{\"single\":\" occupant\",\"multi\":\" occupants\"},\"area\":{\"title\":\"Surface\",\"question\":\"Quelle est sa surface en m² ?\",\"name\":\" m²\"},\"occupants_number\":{\"title\":\"Nombre d'occupants\",\"question\":\"Combien il y a-t-il d'occupants ?\"},\"outside_facing_walls\":{\"1\":\"1 façade\",\"2\":\"2 façades\",\"3\":\"3 façades\",\"4\":\"4 façades\",\"title\":\"Murs extérieurs\",\"question\":\"Combien de façades donnent sur l'extérieur ?\",\"text\":{\"single\":\" façade donne sur l'extérieur\",\"multi\":\" façades donnent sur l'extérieur\"}},\"floor\":{\"title\":\"Étage\",\"question\":\"À quel étage est votre appartement ?\",\"ground_floor\":\"Au rez-de-chaussée\",\"intermediate_floor\":\"Étage intermédiaire\",\"last_floor\":\"Dernier étage\",\"not_applicable\":\"Sans objet\"},\"heating\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"individual_insulation_work\":{\"title\":\"Travaux de rénovation\",\"question\":\"Quels travaux de rénovation avez-vous réalisés ces 10 dernières années ?\",\"none\":\"Aucun\",\"roof_insulation\":\"Isolation toiture\",\"window_replacement\":\"Remplacement fenêtres\",\"wall_insulation\":\"Isolation des murs\",\"window_replacement_and_wall_insulation\":\"Remplacement fenêtres et isolation des murs\",\"window_replacement_and_roof_insulation\":\"Remplacement fenêtres et isolation toiture\",\"roof_and_wall_insulation\":\"Isolation toiture et murs\",\"window_replacement_and_roof_and_wall_insulation\":\"Remplacement fenêtre et isolation des murs et isolation toiture\",\"built_after_1998\":\"construit après 1998\"},\"facilities_installation\":{\"title\":\"Équipement\"},\"ventilation\":{\"title\":\"Ventilation double flux\",\"question\":\"Êtes-vous équipé d'une ventilation double flux ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une ventilation double flux\"},\"heater_replacement\":{\"title\":\"Pompe à chaleur ou poêle à bois\",\"question\":\"Au cours de ces 10 dernières années, avez-vous remplacé votre chaudière ou vous êtes-vous équipé d'une pompe à chaleur ou d'un poêle à bois ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une pompe à chaleur ou poêle à bois\"},\"cold_water\":{\"title\":\"Eau\",\"question\":\"Votre eau est-elle comprise dans vos charges collectives ?\",\"individual\":\"Non\",\"collective\":\"Oui\",\"individual_text\":\"Individuelle\",\"collective_text\":\"Collective\"},\"hot_water\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"},\"hot_water_equipment\":{\"title\":\"Eau chaude\",\"question\":\"Utilisez-vous l’un de ces équipements pour produire votre eau chaude ?\",\"solar\":\"Chauffe-eau solaire\",\"thermodynamic\":\"Chauffe-eau thermodynamique\",\"other\":\"Aucun des deux\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"5\":\"Autre\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour vous chauffer ?\",\"no_fluid_text\":\"Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel\",\"0_text\":\"Produit grâce à de l'électricité\",\"2_text\":\"Produit grâce au gaz\",\"3_text\":\"Produit grâce au bois\",\"4_text\":\"Produit grâce au fioul\",\"5_text\":\"Produit grâce à un autre moyen\"},\"hot_water_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Autre (Fioul, Bois)\",\"title\":\"Source eau chaude\",\"question\":\"Avec quelle source d’énergie votre eau chaude est-elle produite ?\",\"no_fluid_text\":\"Produite ni par de l'électricité, ni par du gaz\",\"0_text\":\"Produite grâce à de l'électricité\",\"2_text\":\"Produite grâce au gaz\",\"3_text\":\"Produite à partir d'un autre moyen que l'électricité ou le gaz\"},\"cooking_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"title\":\"Source cuisson\",\"question\":\"Quel mode de cuisson principal utilisez-vous ?\"},\"update_date\":{\"title\":\"Date de prise d'effet\",\"question\":\"A partir de quelle date souhaitez-vous que ce nouveau profil soit pris en compte dans l'analyse de vos données ?\"},\"fluidType\":{\"0\":\"Électricité\",\"1\":\"Eau\",\"2\":\"Gaz\"},\"form\":{\"button_previous\":\"Précédent\",\"button_next\":\"Suivant\",\"button_end\":\"Terminer\",\"button_loading\":\"Chargement...\"},\"finished\":{\"title\":\"Terminé !\",\"label1\":\"Grâce à ces informations, vous pourrez comparer votre consommation avec celle d'un foyer vous ressemblant davantage !\",\"label2\":\"Nous pourrons aussi vous proposer des astuces pour maîtriser vos consommations adaptées à votre profil.\",\"button_validate\":\"OK\"},\"accessibility\":{\"button_end\":\"Terminer la mise à jour du profil\",\"button_next\":\"Aller à la section suivante\",\"button_previous\":\"Retour à la section précédente\",\"button_update_profile\":\"Ouvrir la page de mise à jour du profil\",\"button_toggle_detail_profile\":\"Afficher ou masquer le détail du profil\",\"button_toggle_export\":\"Afficher ou masquer l'export des données'\",\"button_toggle_average_home\":\"Afficher ou masquer les informations sur le comparatif'\",\"button_validate\":\"Valider\",\"button_export_data\":\"Télécharger les données\"}},\"export\":{\"title_export\":\"Télécharger mes données\",\"text1\":\"Vous allez télécharger l'historique mensuel de vos fluides sélectionnés\",\"fluid_select\":\"Pour quel(s) fluide(s) souhaitez vous exporter vos données ?\",\"no_data\":\"Vous n'avez aucune donnée de fluide...\",\"button_download\":\"Télécharger\",\"month\":\"Mois\",\"year\":\"Année\",\"consumption\":\"Consommation\",\"maxpower\":\"Puissance max (kVA)\",\"button_close\":\"Fermer la fenêtre\",\"modal_start\":{\"accessibility_title\":\"Commencer le téléchargement\",\"text1\":\"Vous allez télécharger des données personnelles, Ecolyo n’est plus responsable de celles-ci une fois téléchargées\",\"text2\":\"Les données seront téléchargées sous forme de document excel (.xls)\",\"text3\":\"Lancer le téléchargement ?\",\"button_cancel\":\"Annuler\"},\"modal_loading\":{\"accessibility_title\":\"Téléchargement en cours\",\"text1\":\"Données en cours de téléchargement\",\"text2\":\"Veuillez ne pas quitter l’application pendant la récupération et le téléchargement de vos données\",\"button_cancel\":\"Annuler le téléchargement\"},\"modal_done\":{\"accessibility_title\":\"Téléchargement terminé\",\"text1\":\"Vos données ont bien été téléchargées !\",\"text2\":\"Vous pouvez maintenant retrouver l’historique de vos données sur votre appareil\",\"error1\":\"Aïe !\",\"error2\":\"Il semblerait qu’une erreur se soit produite lors du téléchargement de vos données.\",\"button_close\":\"Fermer\",\"button_close_error\":\"Revenir plus tard\"}},\"quiz\":{\"explanation\":\"Répondez correctement aux 5 questions et remportez 5 des 15 étoiles nécessaires pour débloquer le duel final\",\"score_final\":\"SCORE FINAL\",\"correct\":\"Bravo !\",\"wrong\":\"Raté !\",\"rightAnswer\":\"Bonne réponse :\",\"earn\":\"Vous remportez\",\"button_go_back\":\"Retour\",\"button_end_quiz\":\"Youpi !\",\"button_try_again\":\"Réessayer\",\"button_validate\":\"Valider\",\"next\":\"Suivant\",\"consumption_question\":\"Question sur votre consommation\",\"accessibility\":{\"window_quit\":\"Quitter la fenêtre\",\"window_title\":\"Fenêtre de résultat\",\"button_end_quiz\":\"Terminer le quiz\",\"button_go_back\":\"Retour\",\"button_go_next\":\"Suivant\",\"button_try_again\":\"Relancer le quiz\",\"button_validate\":\"Valider\"}},\"splashscreen\":{\"error_loading\":\"Une erreur est survenue\",\"button_reload\":\"Réessayer\",\"accessibility\":{\"button_reload\":\"Recharger la page\"},\"migration_error\":\"Mise à jour de l'application\",\"consent_error\":\"Vérification de vos consentements pour partager vos données avec Ecolyo\",\"profile_error\":\"Chargement de votre profil utilisateur\",\"profileType_error\":\"Chargement de votre profil de consommation.\",\"challenges_error\":\"Actualisation de votre progression dans les défis\",\"analysis_error\":\"Chargement de votre analyse mensuelle\",\"index_error\":\"Chargement des index\",\"prices_error\":\"Mise à jour des prix\",\"consos_error\":\"Connexion à vos données de consommation\",\"partners_error\":\"Récupération de l'état des services partenaires\",\"unknown_error\":\"Veuillez vérifier votre connexion internet\",\"network_error\":\"Erreur de réseau\",\"step\":{\"migration\":\"Mise à jour de l'application\",\"profile\":\"Chargement de votre profil\",\"challenges\":\"Actualisation de votre progression dans les défis\"}},\"timestep\":{\"today\":\"Aujourd'hui\",\"year\":{\"period\":\"5 ans\",\"comparelabel\":\"Comparer à l'année précédente\"},\"month\":{\"period\":\"Année\",\"comparelabel\":\"Comparer à l'année précédente\",\"current\":\"année actuelle\",\"last\":\"année précédente\"},\"day\":{\"period\":\"Mois\",\"comparelabel\":\"Comparer au mois précédent\",\"current\":\"mois actuel\",\"last\":\"mois précédent\"},\"week\":{\"period\":\"Semaine\",\"comparelabel\":\"Comparer à la semaine précédente\",\"current\":\"semaine actuelle\",\"last\":\"semaine précédente\"},\"half_an_hour\":{\"period\":\"Jour\",\"comparelabel\":\"Comparer à la journée précédente\",\"gather_data_title\":\"La récupération de vos données demi-horaires prend environ 24h.\",\"current\":\"jour actuel\",\"last\":\"jour précédent\",\"gather_data_subtitle\":\"Votre connexion a bien été prise en compte mais un délai de 24h est en général nécessaire à l’obtention de vos données.\\nÀ demain !\",\"gather_data_failure\":\"Il semblerait que votre compteur ne nous permette pas d'accéder à des données de consommation plus fines.\",\"analysis_waiting_data\":\"Pour bénéficier d'une analyse approfondie de votre consommation électrique, il nous faut récupérer vos données de consommation horaires. La récupération de ces données prend environ 24h. A bientôt !\"},\"accessibility\":{\"button_zoom_in\":\"Sélectionner le pas de temps précédent\",\"button_zoom_out\":\"Sélectionner le pas de temps suivant\"}},\"unsubscribe\":{\"error\":\"Une erreur est survenue lors de votre désinscription, merci de ré-essayer plus tard.\",\"unsubscribed\":\"Vous êtes désormais désabonné de la newsletter Ecolyo\",\"subscribed\":\"Vous êtes désormais à nouveau abonné à la newsletter Ecolyo\",\"content\":\"Vous ne recevrez plus la notification de votre bilan ainsi que les conseils associés au mois en cours.\",\"button_subscribe\":\"Me ré-abonner\",\"button_home\":\"Me connecter à Ecolyo\",\"button_accessibility\":\"Bouton de désinscription\"},\"welcome_modal\":{\"title\":\"Félicitations\",\"perso\":\"Votre espace personnel a bien été créé.\",\"connect\":\"Vous pouvez maintenant connecter vos compteurs d’énergie à Ecolyo en toute sécurité.\",\"button_valid\":\"Ok\",\"accessibility\":{\"title\":\"Fenêtre de félicitations\",\"button_valid\":\"Valider\"}}}");
 
 /***/ }),
 
@@ -11560,6 +11451,7 @@ Object.defineProperty(exports, "__esModule", {
   value: true
 });
 exports.default = void 0;
+var _I18n = __webpack_require__("nUfk");
 var _enums = __webpack_require__("j0hM");
 var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
 var _ChallengeCardDone = _interopRequireDefault(__webpack_require__("3omG"));
@@ -11575,6 +11467,8 @@ var ChallengeCard = function ChallengeCard(_ref) {
     cardWidth = _ref.cardWidth,
     cardHeight = _ref.cardHeight,
     moveToSlide = _ref.moveToSlide;
+  var _useI18n = (0, _I18n.useI18n)(),
+    t = _useI18n.t;
   var renderCard = function renderCard(userChallenge) {
     switch (userChallenge === null || userChallenge === void 0 ? void 0 : userChallenge.state) {
       case _enums.UserChallengeState.LOCKED:
@@ -11599,6 +11493,7 @@ var ChallengeCard = function ChallengeCard(_ref) {
     }
   };
   return /*#__PURE__*/_react.default.createElement("button", {
+    "aria-label": t('challenge.card.goto'),
     onClick: function onClick() {
       return moveToSlide(index);
     },
@@ -11992,12 +11887,8 @@ var DuelResultModal = function DuelResultModal(_ref) {
     t = _useI18n.t;
   var _useState = (0, _react.useState)(_default2.default),
     _useState2 = (0, _slicedToArray2.default)(_useState, 2),
-    winIcon = _useState2[0],
-    setWinIcon = _useState2[1];
-  var _useState3 = (0, _react.useState)(_default2.default),
-    _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
-    lossIcon = _useState4[0],
-    setLossIcon = _useState4[1];
+    resultIcon = _useState2[0],
+    setResultIcon = _useState2[1];
   var result = (0, _utils.formatNumberValues)(Math.abs(userChallenge.duel.threshold - userChallenge.duel.userConsumption));
   var statusKey = win ? 'success' : 'lost';
   (0, _react.useEffect)(function () {
@@ -12006,22 +11897,17 @@ var DuelResultModal = function DuelResultModal(_ref) {
     }
     function _handleEcogestureIcon() {
       _handleEcogestureIcon = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
-        var icon, icon2;
+        var icon;
         return _regenerator.default.wrap(function _callee$(_context) {
           while (1) {
             switch (_context.prev = _context.next) {
               case 0:
                 _context.next = 2;
-                return (0, _utils.importIconById)(userChallenge.id + '-1', 'duelResult');
+                return (0, _utils.importIconById)(userChallenge.id + '-' + Number(win), 'duelResult');
               case 2:
                 icon = _context.sent;
-                setWinIcon(icon || _default2.default);
-                _context.next = 6;
-                return (0, _utils.importIconById)(userChallenge.id + '-0', 'duelResult');
-              case 6:
-                icon2 = _context.sent;
-                setLossIcon(icon2 || _default2.default);
-              case 8:
+                setResultIcon(icon || _default2.default);
+              case 4:
               case "end":
                 return _context.stop();
             }
@@ -12031,7 +11917,7 @@ var DuelResultModal = function DuelResultModal(_ref) {
       return _handleEcogestureIcon.apply(this, arguments);
     }
     handleEcogestureIcon();
-  }, [userChallenge]);
+  }, [userChallenge, win]);
   return /*#__PURE__*/_react.default.createElement(_Dialog.default, {
     open: open,
     onClose: handleCloseClick,
@@ -12052,7 +11938,7 @@ var DuelResultModal = function DuelResultModal(_ref) {
     size: 300
   }), /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
     className: "imgResult",
-    icon: win ? winIcon : lossIcon,
+    icon: resultIcon,
     size: 180
   })), /*#__PURE__*/_react.default.createElement("div", {
     className: "text-28-normal-uppercase title"
@@ -12255,31 +12141,16 @@ var ChallengeService = /*#__PURE__*/function () {
      */
   }, {
     key: "isExplorationConditionVerified",
-    value: function () {
-      var _isExplorationConditionVerified = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(exploration, fluidStatus) {
-        var isValid, fluidCondition;
-        return _regenerator.default.wrap(function _callee$(_context) {
-          while (1) {
-            switch (_context.prev = _context.next) {
-              case 0:
-                isValid = false;
-                fluidCondition = exploration.fluid_condition; // check if the fluid is connected
-                if (fluidStatus[fluidCondition[0]].status !== _enums.FluidState.KONNECTOR_NOT_FOUND && fluidStatus[fluidCondition[0]].status !== _enums.FluidState.NOT_CONNECTED) {
-                  isValid = true;
-                }
-                return _context.abrupt("return", isValid);
-              case 4:
-              case "end":
-                return _context.stop();
-            }
-          }
-        }, _callee);
-      }));
-      function isExplorationConditionVerified(_x, _x2) {
-        return _isExplorationConditionVerified.apply(this, arguments);
+    value: function isExplorationConditionVerified(exploration, fluidStatus) {
+      var isValid = false;
+      var fluidCondition = exploration.fluid_condition;
+      // check if the fluid is connected
+      if (fluidStatus[fluidCondition[0]].status !== _enums.FluidState.KONNECTOR_NOT_FOUND && fluidStatus[fluidCondition[0]].status !== _enums.FluidState.NOT_CONNECTED) {
+        isValid = true;
       }
-      return isExplorationConditionVerified;
-    }()
+      return isValid;
+    }
+
     /**
      *
      * @param {ChallengeEntity} challenge - get all relations entities of a challenge
@@ -12287,11 +12158,11 @@ var ChallengeService = /*#__PURE__*/function () {
   }, {
     key: "getRelationEntities",
     value: function () {
-      var _getRelationEntities = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(challenge) {
+      var _getRelationEntities = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(challenge) {
         var duelEntityRelation, quizEntityRelation, explorationEntityRelation, result;
-        return _regenerator.default.wrap(function _callee2$(_context2) {
+        return _regenerator.default.wrap(function _callee$(_context) {
           while (1) {
-            switch (_context2.prev = _context2.next) {
+            switch (_context.prev = _context.next) {
               case 0:
                 duelEntityRelation = (0, _utils.getRelationship)(challenge, 'duel');
                 quizEntityRelation = (0, _utils.getRelationship)(challenge, 'quiz');
@@ -12301,15 +12172,15 @@ var ChallengeService = /*#__PURE__*/function () {
                   quizEntityRelation: quizEntityRelation,
                   explorationEntityRelation: explorationEntityRelation
                 };
-                return _context2.abrupt("return", result);
+                return _context.abrupt("return", result);
               case 5:
               case "end":
-                return _context2.stop();
+                return _context.stop();
             }
           }
-        }, _callee2);
+        }, _callee);
       }));
-      function getRelationEntities(_x3) {
+      function getRelationEntities(_x) {
         return _getRelationEntities.apply(this, arguments);
       }
       return getRelationEntities;
@@ -12319,46 +12190,22 @@ var ChallengeService = /*#__PURE__*/function () {
      */
   }, {
     key: "getUpdatedUserChallengeIfExplorationConditionIsValid",
-    value: function () {
-      var _getUpdatedUserChallengeIfExplorationConditionIsValid = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(exploration, challenge, duel, quiz, fluidStatus) {
-        var userChallenge, isConditionVerified;
-        return _regenerator.default.wrap(function _callee3$(_context3) {
-          while (1) {
-            switch (_context3.prev = _context3.next) {
-              case 0:
-                userChallenge = null; // Check if it's a conditional exploration
-                if (!(exploration.fluid_condition.length > 0)) {
-                  _context3.next = 10;
-                  break;
-                }
-                _context3.next = 4;
-                return this.isExplorationConditionVerified(exploration, fluidStatus);
-              case 4:
-                isConditionVerified = _context3.sent;
-                if (!isConditionVerified) {
-                  _context3.next = 8;
-                  break;
-                }
-                userChallenge = this.parseChallengeEntityToUserChallenge(challenge, duel, quiz, exploration);
-                return _context3.abrupt("return", userChallenge);
-              case 8:
-                _context3.next = 12;
-                break;
-              case 10:
-                userChallenge = this.parseChallengeEntityToUserChallenge(challenge, duel, quiz, exploration);
-                return _context3.abrupt("return", userChallenge);
-              case 12:
-              case "end":
-                return _context3.stop();
-            }
-          }
-        }, _callee3, this);
-      }));
-      function getUpdatedUserChallengeIfExplorationConditionIsValid(_x4, _x5, _x6, _x7, _x8) {
-        return _getUpdatedUserChallengeIfExplorationConditionIsValid.apply(this, arguments);
+    value: function getUpdatedUserChallengeIfExplorationConditionIsValid(exploration, challenge, duel, quiz, fluidStatus) {
+      var userChallenge = null;
+      // Check if it's a conditional exploration
+      if (exploration.fluid_condition.length > 0) {
+        var isConditionVerified = this.isExplorationConditionVerified(exploration, fluidStatus);
+        // if condition is verified, add exploration to UserChallenge and return it
+        if (isConditionVerified) {
+          userChallenge = this.parseChallengeEntityToUserChallenge(challenge, duel, quiz, exploration);
+          return userChallenge;
+        }
+      } // if there is no condition, add the exploration
+      else {
+        userChallenge = this.parseChallengeEntityToUserChallenge(challenge, duel, quiz, exploration);
+        return userChallenge;
       }
-      return getUpdatedUserChallengeIfExplorationConditionIsValid;
-    }()
+    }
     /**
      * The whole exploration process, checks if the exploration fluid condition exists and is valid for each existing
      * Exploration related to given challenge
@@ -12366,76 +12213,41 @@ var ChallengeService = /*#__PURE__*/function () {
      */
   }, {
     key: "processExploration",
-    value: function () {
-      var _processExploration = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(explorationEntities, explorationEntityRelation, challenge, duel, quiz, buildList, fluidStatus) {
-        var explorationService, _iterator, _step, explorationRelation, exploration, userChallenge;
-        return _regenerator.default.wrap(function _callee4$(_context4) {
-          while (1) {
-            switch (_context4.prev = _context4.next) {
-              case 0:
-                explorationService = new _exploration.default(this._client);
-                _iterator = _createForOfIteratorHelper(explorationEntityRelation);
-                _context4.prev = 2;
-                _iterator.s();
-              case 4:
-                if ((_step = _iterator.n()).done) {
-                  _context4.next = 15;
-                  break;
-                }
-                explorationRelation = _step.value;
-                exploration = explorationService.getUserExplorationFromExplorationEntities(explorationEntities || [], explorationRelation._id);
-                _context4.next = 9;
-                return this.getUpdatedUserChallengeIfExplorationConditionIsValid(exploration, challenge, duel, quiz, fluidStatus);
-              case 9:
-                userChallenge = _context4.sent;
-                if (!userChallenge) {
-                  _context4.next = 13;
-                  break;
-                }
-                buildList.push(userChallenge);
-                return _context4.abrupt("break", 15);
-              case 13:
-                _context4.next = 4;
-                break;
-              case 15:
-                _context4.next = 20;
-                break;
-              case 17:
-                _context4.prev = 17;
-                _context4.t0 = _context4["catch"](2);
-                _iterator.e(_context4.t0);
-              case 20:
-                _context4.prev = 20;
-                _iterator.f();
-                return _context4.finish(20);
-              case 23:
-                return _context4.abrupt("return", buildList);
-              case 24:
-              case "end":
-                return _context4.stop();
-            }
+    value: function processExploration(explorationEntities, explorationEntityRelation, challenge, duel, quiz, buildList, fluidStatus) {
+      var explorationService = new _exploration.default(this._client);
+      var _iterator = _createForOfIteratorHelper(explorationEntityRelation),
+        _step;
+      try {
+        for (_iterator.s(); !(_step = _iterator.n()).done;) {
+          var explorationRelation = _step.value;
+          var exploration = explorationService.getUserExplorationFromExplorationEntities(explorationEntities || [], explorationRelation._id);
+          var userChallenge = this.getUpdatedUserChallengeIfExplorationConditionIsValid(exploration, challenge, duel, quiz, fluidStatus);
+          if (userChallenge) {
+            buildList.push(userChallenge);
+            break;
           }
-        }, _callee4, this, [[2, 17, 20, 23]]);
-      }));
-      function processExploration(_x9, _x10, _x11, _x12, _x13, _x14, _x15) {
-        return _processExploration.apply(this, arguments);
+        }
+      } catch (err) {
+        _iterator.e(err);
+      } finally {
+        _iterator.f();
       }
-      return processExploration;
-    }()
+      return buildList;
+    }
     /**
      * Checks if the exploration condition exists and is valid when updating the buildList
      */
   }, {
     key: "loopVerificationExplorationCondition",
     value: function () {
-      var _loopVerificationExplorationCondition = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(userChallenge, challengeEntityList, fluidStatus) {
+      var _loopVerificationExplorationCondition = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(userChallenge, challengeEntityList, fluidStatus) {
         var currentEntity, relationsArray, explorationService, updatedUserChallenge, _iterator2, _step2, relation, newExploEntity, newUserExplo, isConditionValid;
-        return _regenerator.default.wrap(function _callee5$(_context5) {
+        return _regenerator.default.wrap(function _callee2$(_context2) {
           while (1) {
-            switch (_context5.prev = _context5.next) {
+            switch (_context2.prev = _context2.next) {
               case 0:
                 if (!(userChallenge.exploration.state === _enums.UserExplorationState.UNLOCKED)) {
-                  _context5.next = 36;
+                  _context2.next = 34;
                   break;
                 }
                 currentEntity = challengeEntityList.filter(function (challenge) {
@@ -12445,69 +12257,66 @@ var ChallengeService = /*#__PURE__*/function () {
                 explorationService = new _exploration.default(this._client);
                 updatedUserChallenge = _objectSpread({}, userChallenge);
                 _iterator2 = _createForOfIteratorHelper(relationsArray.data);
-                _context5.prev = 6;
+                _context2.prev = 6;
                 _iterator2.s();
               case 8:
                 if ((_step2 = _iterator2.n()).done) {
-                  _context5.next = 27;
+                  _context2.next = 25;
                   break;
                 }
                 relation = _step2.value;
-                _context5.next = 12;
+                _context2.next = 12;
                 return explorationService.getExplorationEntityById(relation._id);
               case 12:
-                newExploEntity = _context5.sent;
+                newExploEntity = _context2.sent;
                 newUserExplo = explorationService.parseExplorationEntityToUserExploration(newExploEntity);
                 if (!(newExploEntity.fluid_condition.length > 0)) {
-                  _context5.next = 23;
+                  _context2.next = 21;
                   break;
                 }
-                _context5.next = 17;
-                return this.isExplorationConditionVerified(newExploEntity, fluidStatus);
-              case 17:
-                isConditionValid = _context5.sent;
+                isConditionValid = this.isExplorationConditionVerified(newExploEntity, fluidStatus);
                 if (!isConditionValid) {
-                  _context5.next = 21;
+                  _context2.next = 19;
                   break;
                 }
                 updatedUserChallenge = _objectSpread(_objectSpread({}, updatedUserChallenge), {}, {
                   exploration: newUserExplo
                 });
-                return _context5.abrupt("break", 27);
-              case 21:
-                _context5.next = 25;
+                return _context2.abrupt("break", 25);
+              case 19:
+                _context2.next = 23;
                 break;
-              case 23:
+              case 21:
                 updatedUserChallenge = _objectSpread(_objectSpread({}, updatedUserChallenge), {}, {
                   exploration: newUserExplo
                 });
-                return _context5.abrupt("break", 27);
+                return _context2.abrupt("break", 25);
+              case 23:
+                _context2.next = 8;
+                break;
               case 25:
-                _context5.next = 8;
+                _context2.next = 30;
                 break;
               case 27:
-                _context5.next = 32;
-                break;
-              case 29:
-                _context5.prev = 29;
-                _context5.t0 = _context5["catch"](6);
-                _iterator2.e(_context5.t0);
-              case 32:
-                _context5.prev = 32;
+                _context2.prev = 27;
+                _context2.t0 = _context2["catch"](6);
+                _iterator2.e(_context2.t0);
+              case 30:
+                _context2.prev = 30;
                 _iterator2.f();
-                return _context5.finish(32);
+                return _context2.finish(30);
+              case 33:
+                return _context2.abrupt("return", updatedUserChallenge);
+              case 34:
+                return _context2.abrupt("return", userChallenge);
               case 35:
-                return _context5.abrupt("return", updatedUserChallenge);
-              case 36:
-                return _context5.abrupt("return", userChallenge);
-              case 37:
               case "end":
-                return _context5.stop();
+                return _context2.stop();
             }
           }
-        }, _callee5, this, [[6, 29, 32, 35]]);
+        }, _callee2, this, [[6, 27, 30, 33]]);
       }));
-      function loopVerificationExplorationCondition(_x16, _x17, _x18) {
+      function loopVerificationExplorationCondition(_x2, _x3, _x4) {
         return _loopVerificationExplorationCondition.apply(this, arguments);
       }
       return loopVerificationExplorationCondition;
@@ -12518,167 +12327,163 @@ var ChallengeService = /*#__PURE__*/function () {
   }, {
     key: "buildUserChallengeList",
     value: function () {
-      var _buildUserChallengeList = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(fluidStatus) {
+      var _buildUserChallengeList = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(fluidStatus) {
         var _this = this;
         var queryChallengeEntity, querySeasonEntityIncludeQuiz, querySeasonEntityIncludeExploration, _yield$this$_client$q, challengeEntityList, duelEntities, _yield$this$_client$q2, explorationEntities, _yield$this$_client$q3, quizEntities, userChallengeList, duelService, quizService, explorationService, buildList, _iterator3, _step3, challenge, relationEntities, duel, quiz, exploration, userChallenge, _iterator4, _step4, _loop;
-        return _regenerator.default.wrap(function _callee6$(_context7) {
+        return _regenerator.default.wrap(function _callee3$(_context4) {
           while (1) {
-            switch (_context7.prev = _context7.next) {
+            switch (_context4.prev = _context4.next) {
               case 0:
                 queryChallengeEntity = (0, _cozyClient.Q)(_doctypes.CHALLENGE_DOCTYPE).include(['duel']);
                 querySeasonEntityIncludeQuiz = (0, _cozyClient.Q)(_doctypes.CHALLENGE_DOCTYPE).include(['quiz']);
                 querySeasonEntityIncludeExploration = (0, _cozyClient.Q)(_doctypes.CHALLENGE_DOCTYPE).include(['exploration']);
-                _context7.next = 5;
+                _context4.next = 5;
                 return this._client.query(queryChallengeEntity);
               case 5:
-                _yield$this$_client$q = _context7.sent;
+                _yield$this$_client$q = _context4.sent;
                 challengeEntityList = _yield$this$_client$q.data;
                 duelEntities = _yield$this$_client$q.included;
-                _context7.next = 10;
+                _context4.next = 10;
                 return this._client.query(querySeasonEntityIncludeExploration);
               case 10:
-                _yield$this$_client$q2 = _context7.sent;
+                _yield$this$_client$q2 = _context4.sent;
                 explorationEntities = _yield$this$_client$q2.included;
-                _context7.next = 14;
+                _context4.next = 14;
                 return this._client.query(querySeasonEntityIncludeQuiz);
               case 14:
-                _yield$this$_client$q3 = _context7.sent;
+                _yield$this$_client$q3 = _context4.sent;
                 quizEntities = _yield$this$_client$q3.included;
-                _context7.next = 18;
+                _context4.next = 18;
                 return this.getAllUserChallengeEntities();
               case 18:
-                userChallengeList = _context7.sent;
+                userChallengeList = _context4.sent;
                 duelService = new _duel2.default(this._client);
                 quizService = new _quiz2.default(this._client);
                 explorationService = new _exploration.default(this._client);
                 buildList = []; // Case UserChallengeList is empty
                 if (!(challengeEntityList.length > 0 && userChallengeList.length === 0)) {
-                  _context7.next = 55;
+                  _context4.next = 48;
                   break;
                 }
                 _iterator3 = _createForOfIteratorHelper(challengeEntityList);
-                _context7.prev = 25;
+                _context4.prev = 25;
                 _iterator3.s();
               case 27:
                 if ((_step3 = _iterator3.n()).done) {
-                  _context7.next = 44;
+                  _context4.next = 37;
                   break;
                 }
                 challenge = _step3.value;
-                _context7.next = 31;
+                _context4.next = 31;
                 return this.getRelationEntities(challenge);
               case 31:
-                relationEntities = _context7.sent;
+                relationEntities = _context4.sent;
                 duel = duelService.getDuelFromDuelEntities(duelEntities || [], relationEntities.duelEntityRelation._id);
                 quiz = quizService.getUserQuizFromQuizEntities(quizEntities || [], relationEntities.quizEntityRelation._id); // Only one exploration relation
-                if (!(relationEntities.explorationEntityRelation.length === 1)) {
-                  _context7.next = 40;
-                  break;
+                if (relationEntities.explorationEntityRelation.length === 1) {
+                  exploration = explorationService.getUserExplorationFromExplorationEntities(explorationEntities || [], relationEntities.explorationEntityRelation[0]._id);
+                  userChallenge = this.parseChallengeEntityToUserChallenge(challenge, duel, quiz, exploration);
+                  buildList.push(userChallenge);
                 }
-                exploration = explorationService.getUserExplorationFromExplorationEntities(explorationEntities || [], relationEntities.explorationEntityRelation[0]._id);
-                userChallenge = this.parseChallengeEntityToUserChallenge(challenge, duel, quiz, exploration);
-                buildList.push(userChallenge);
-                _context7.next = 42;
-                break;
-              case 40:
-                _context7.next = 42;
-                return this.processExploration(explorationEntities, relationEntities.explorationEntityRelation, challenge, duel, quiz, buildList, fluidStatus);
-              case 42:
-                _context7.next = 27;
+                // Several explorations with fluid condition
+                else {
+                  this.processExploration(explorationEntities, relationEntities.explorationEntityRelation, challenge, duel, quiz, buildList, fluidStatus);
+                }
+              case 35:
+                _context4.next = 27;
                 break;
-              case 44:
-                _context7.next = 49;
+              case 37:
+                _context4.next = 42;
                 break;
-              case 46:
-                _context7.prev = 46;
-                _context7.t0 = _context7["catch"](25);
-                _iterator3.e(_context7.t0);
-              case 49:
-                _context7.prev = 49;
+              case 39:
+                _context4.prev = 39;
+                _context4.t0 = _context4["catch"](25);
+                _iterator3.e(_context4.t0);
+              case 42:
+                _context4.prev = 42;
                 _iterator3.f();
-                return _context7.finish(49);
-              case 52:
+                return _context4.finish(42);
+              case 45:
                 buildList = this.unLockCurrentUserChallenge(buildList);
-                _context7.next = 73;
+                _context4.next = 66;
                 break;
-              case 55:
+              case 48:
                 if (!(challengeEntityList.length > 0 && userChallengeList.length > 0)) {
-                  _context7.next = 73;
+                  _context4.next = 66;
                   break;
                 }
                 _iterator4 = _createForOfIteratorHelper(challengeEntityList);
-                _context7.prev = 57;
+                _context4.prev = 50;
                 _loop = /*#__PURE__*/_regenerator.default.mark(function _loop() {
                   var challenge, userChallengeIndex, _userChallenge2, _relationEntities, _duel, _quiz;
-                  return _regenerator.default.wrap(function _loop$(_context6) {
+                  return _regenerator.default.wrap(function _loop$(_context3) {
                     while (1) {
-                      switch (_context6.prev = _context6.next) {
+                      switch (_context3.prev = _context3.next) {
                         case 0:
                           challenge = _step4.value;
                           userChallengeIndex = userChallengeList.findIndex(function (entity) {
                             return entity.id === challenge.id;
                           });
                           if (!(userChallengeIndex >= 0)) {
-                            _context6.next = 10;
+                            _context3.next = 10;
                             break;
                           }
                           _userChallenge2 = userChallengeList[userChallengeIndex];
-                          _context6.next = 6;
+                          _context3.next = 6;
                           return _this.loopVerificationExplorationCondition(_userChallenge2, challengeEntityList, fluidStatus);
                         case 6:
-                          _userChallenge2 = _context6.sent;
+                          _userChallenge2 = _context3.sent;
                           buildList.push(_userChallenge2);
-                          _context6.next = 17;
+                          _context3.next = 16;
                           break;
                         case 10:
-                          _context6.next = 12;
+                          _context3.next = 12;
                           return _this.getRelationEntities(challenge);
                         case 12:
-                          _relationEntities = _context6.sent;
+                          _relationEntities = _context3.sent;
                           _duel = duelService.getDuelFromDuelEntities(duelEntities || [], _relationEntities.duelEntityRelation._id);
                           _quiz = quizService.getUserQuizFromQuizEntities(quizEntities || [], _relationEntities.quizEntityRelation._id);
-                          _context6.next = 17;
-                          return _this.processExploration(explorationEntities, _relationEntities.explorationEntityRelation, challenge, _duel, _quiz, buildList, fluidStatus);
-                        case 17:
+                          _this.processExploration(explorationEntities, _relationEntities.explorationEntityRelation, challenge, _duel, _quiz, buildList, fluidStatus);
+                        case 16:
                         case "end":
-                          return _context6.stop();
+                          return _context3.stop();
                       }
                     }
                   }, _loop);
                 });
                 _iterator4.s();
-              case 60:
+              case 53:
                 if ((_step4 = _iterator4.n()).done) {
-                  _context7.next = 64;
+                  _context4.next = 57;
                   break;
                 }
-                return _context7.delegateYield(_loop(), "t1", 62);
-              case 62:
-                _context7.next = 60;
+                return _context4.delegateYield(_loop(), "t1", 55);
+              case 55:
+                _context4.next = 53;
                 break;
-              case 64:
-                _context7.next = 69;
+              case 57:
+                _context4.next = 62;
                 break;
-              case 66:
-                _context7.prev = 66;
-                _context7.t2 = _context7["catch"](57);
-                _iterator4.e(_context7.t2);
-              case 69:
-                _context7.prev = 69;
+              case 59:
+                _context4.prev = 59;
+                _context4.t2 = _context4["catch"](50);
+                _iterator4.e(_context4.t2);
+              case 62:
+                _context4.prev = 62;
                 _iterator4.f();
-                return _context7.finish(69);
-              case 72:
+                return _context4.finish(62);
+              case 65:
                 buildList = this.unLockCurrentUserChallenge(buildList);
-              case 73:
-                return _context7.abrupt("return", buildList);
-              case 74:
+              case 66:
+                return _context4.abrupt("return", buildList);
+              case 67:
               case "end":
-                return _context7.stop();
+                return _context4.stop();
             }
           }
-        }, _callee6, this, [[25, 46, 49, 52], [57, 66, 69, 72]]);
+        }, _callee3, this, [[25, 39, 42, 45], [50, 59, 62, 65]]);
       }));
-      function buildUserChallengeList(_x19) {
+      function buildUserChallengeList(_x5) {
         return _buildUserChallengeList.apply(this, arguments);
       }
       return buildUserChallengeList;
@@ -12689,25 +12494,25 @@ var ChallengeService = /*#__PURE__*/function () {
   }, {
     key: "getAllChallengeEntities",
     value: function () {
-      var _getAllChallengeEntities = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {
+      var _getAllChallengeEntities = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
         var query, _yield$this$_client$q4, challenges;
-        return _regenerator.default.wrap(function _callee7$(_context8) {
+        return _regenerator.default.wrap(function _callee4$(_context5) {
           while (1) {
-            switch (_context8.prev = _context8.next) {
+            switch (_context5.prev = _context5.next) {
               case 0:
                 query = (0, _cozyClient.Q)(_doctypes.CHALLENGE_DOCTYPE);
-                _context8.next = 3;
+                _context5.next = 3;
                 return this._client.query(query);
               case 3:
-                _yield$this$_client$q4 = _context8.sent;
+                _yield$this$_client$q4 = _context5.sent;
                 challenges = _yield$this$_client$q4.data;
-                return _context8.abrupt("return", challenges);
+                return _context5.abrupt("return", challenges);
               case 6:
               case "end":
-                return _context8.stop();
+                return _context5.stop();
             }
           }
-        }, _callee7, this);
+        }, _callee4, this);
       }));
       function getAllChallengeEntities() {
         return _getAllChallengeEntities.apply(this, arguments);
@@ -12721,64 +12526,64 @@ var ChallengeService = /*#__PURE__*/function () {
   }, {
     key: "deleteAllChallengeEntities",
     value: function () {
-      var _deleteAllChallengeEntities = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8() {
+      var _deleteAllChallengeEntities = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
         var challengeEntity, _iterator5, _step5, entity, errorMessage;
-        return _regenerator.default.wrap(function _callee8$(_context9) {
+        return _regenerator.default.wrap(function _callee5$(_context6) {
           while (1) {
-            switch (_context9.prev = _context9.next) {
+            switch (_context6.prev = _context6.next) {
               case 0:
-                _context9.prev = 0;
-                _context9.next = 3;
+                _context6.prev = 0;
+                _context6.next = 3;
                 return this.getAllChallengeEntities();
               case 3:
-                challengeEntity = _context9.sent;
+                challengeEntity = _context6.sent;
                 if (challengeEntity) {
-                  _context9.next = 6;
+                  _context6.next = 6;
                   break;
                 }
-                return _context9.abrupt("return", true);
+                return _context6.abrupt("return", true);
               case 6:
                 _iterator5 = _createForOfIteratorHelper(challengeEntity);
-                _context9.prev = 7;
+                _context6.prev = 7;
                 _iterator5.s();
               case 9:
                 if ((_step5 = _iterator5.n()).done) {
-                  _context9.next = 15;
+                  _context6.next = 15;
                   break;
                 }
                 entity = _step5.value;
-                _context9.next = 13;
+                _context6.next = 13;
                 return this._client.destroy(entity);
               case 13:
-                _context9.next = 9;
+                _context6.next = 9;
                 break;
               case 15:
-                _context9.next = 20;
+                _context6.next = 20;
                 break;
               case 17:
-                _context9.prev = 17;
-                _context9.t0 = _context9["catch"](7);
-                _iterator5.e(_context9.t0);
+                _context6.prev = 17;
+                _context6.t0 = _context6["catch"](7);
+                _iterator5.e(_context6.t0);
               case 20:
-                _context9.prev = 20;
+                _context6.prev = 20;
                 _iterator5.f();
-                return _context9.finish(20);
+                return _context6.finish(20);
               case 23:
-                return _context9.abrupt("return", true);
+                return _context6.abrupt("return", true);
               case 26:
-                _context9.prev = 26;
-                _context9.t1 = _context9["catch"](0);
-                errorMessage = "deleteAllChallengeEntities :".concat(JSON.stringify(_context9.t1));
+                _context6.prev = 26;
+                _context6.t1 = _context6["catch"](0);
+                errorMessage = "deleteAllChallengeEntities :".concat(JSON.stringify(_context6.t1));
                 logStack('error', errorMessage);
                 _logger.default.error(errorMessage);
-                Sentry.captureException(_context9.t1);
-                throw _context9.t1;
+                Sentry.captureException(_context6.t1);
+                throw _context6.t1;
               case 33:
               case "end":
-                return _context9.stop();
+                return _context6.stop();
             }
           }
-        }, _callee8, this, [[0, 26], [7, 17, 20, 23]]);
+        }, _callee5, this, [[0, 26], [7, 17, 20, 23]]);
       }));
       function deleteAllChallengeEntities() {
         return _deleteAllChallengeEntities.apply(this, arguments);
@@ -12791,29 +12596,29 @@ var ChallengeService = /*#__PURE__*/function () {
   }, {
     key: "getAllUserChallengeEntities",
     value: function () {
-      var _getAllUserChallengeEntities = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9() {
+      var _getAllUserChallengeEntities = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
         var _this2 = this;
         var query, _yield$this$_client$q5, userChallengeEntities, userChallenges;
-        return _regenerator.default.wrap(function _callee9$(_context10) {
+        return _regenerator.default.wrap(function _callee6$(_context7) {
           while (1) {
-            switch (_context10.prev = _context10.next) {
+            switch (_context7.prev = _context7.next) {
               case 0:
                 query = (0, _cozyClient.Q)(_doctypes.USERCHALLENGE_DOCTYPE);
-                _context10.next = 3;
+                _context7.next = 3;
                 return this._client.query(query);
               case 3:
-                _yield$this$_client$q5 = _context10.sent;
+                _yield$this$_client$q5 = _context7.sent;
                 userChallengeEntities = _yield$this$_client$q5.data;
                 userChallenges = userChallengeEntities.map(function (userChallengeEntity) {
                   return _this2.parseUserChallengeEntityToUserChallenge(userChallengeEntity);
                 });
-                return _context10.abrupt("return", userChallenges);
+                return _context7.abrupt("return", userChallenges);
               case 7:
               case "end":
-                return _context10.stop();
+                return _context7.stop();
             }
           }
-        }, _callee9, this);
+        }, _callee6, this);
       }));
       function getAllUserChallengeEntities() {
         return _getAllUserChallengeEntities.apply(this, arguments);
@@ -12828,48 +12633,48 @@ var ChallengeService = /*#__PURE__*/function () {
   }, {
     key: "initChallengeDuelProgress",
     value: function () {
-      var _initChallengeDuelProgress = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(userChallenge) {
+      var _initChallengeDuelProgress = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(userChallenge) {
         var consumptionService, dataloads, userConsumption, _userChallenge, updatedUserChallenge, errorMessage;
-        return _regenerator.default.wrap(function _callee10$(_context11) {
+        return _regenerator.default.wrap(function _callee7$(_context8) {
           while (1) {
-            switch (_context11.prev = _context11.next) {
+            switch (_context8.prev = _context8.next) {
               case 0:
                 consumptionService = new _consumption.default(this._client);
-                _context11.prev = 1;
-                _context11.next = 4;
+                _context8.prev = 1;
+                _context8.next = 4;
                 return this.getUserChallengeDataload(userChallenge);
               case 4:
-                dataloads = _context11.sent;
+                dataloads = _context8.sent;
                 userConsumption = (0, _math.getRoundFloat)(consumptionService.calculatePerformanceIndicatorValue(dataloads));
                 _userChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   duel: _objectSpread(_objectSpread({}, userChallenge.duel), {}, {
                     userConsumption: userConsumption
                   })
                 });
-                _context11.next = 9;
+                _context8.next = 9;
                 return this.updateUserChallenge(_userChallenge, _enums.UserChallengeUpdateFlag.DUEL_CONSUMPTION);
               case 9:
-                updatedUserChallenge = _context11.sent;
-                return _context11.abrupt("return", {
+                updatedUserChallenge = _context8.sent;
+                return _context8.abrupt("return", {
                   updatedUserChallenge: updatedUserChallenge,
                   dataloads: dataloads
                 });
               case 13:
-                _context11.prev = 13;
-                _context11.t0 = _context11["catch"](1);
-                errorMessage = "Challenge service error on initChallengeDuelProgress: ".concat(JSON.stringify(_context11.t0));
+                _context8.prev = 13;
+                _context8.t0 = _context8["catch"](1);
+                errorMessage = "Challenge service error on initChallengeDuelProgress: ".concat(JSON.stringify(_context8.t0));
                 logStack('error', errorMessage);
                 _logger.default.error(errorMessage);
-                Sentry.captureException(_context11.t0);
-                throw _context11.t0;
+                Sentry.captureException(_context8.t0);
+                throw _context8.t0;
               case 20:
               case "end":
-                return _context11.stop();
+                return _context8.stop();
             }
           }
-        }, _callee10, this, [[1, 13]]);
+        }, _callee7, this, [[1, 13]]);
       }));
-      function initChallengeDuelProgress(_x20) {
+      function initChallengeDuelProgress(_x6) {
         return _initChallengeDuelProgress.apply(this, arguments);
       }
       return initChallengeDuelProgress;
@@ -12881,11 +12686,11 @@ var ChallengeService = /*#__PURE__*/function () {
   }, {
     key: "startUserChallenge",
     value: function () {
-      var _startUserChallenge = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(userChallenge) {
+      var _startUserChallenge = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(userChallenge) {
         var newChallenge, _yield$this$_client$c, updatedUserChallengeEntity, updatedUserChallenge, errorMessage;
-        return _regenerator.default.wrap(function _callee11$(_context12) {
+        return _regenerator.default.wrap(function _callee8$(_context9) {
           while (1) {
-            switch (_context12.prev = _context12.next) {
+            switch (_context9.prev = _context9.next) {
               case 0:
                 newChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   state: _enums.UserChallengeState.ONGOING,
@@ -12899,30 +12704,30 @@ var ChallengeService = /*#__PURE__*/function () {
                   }).startOf('day'),
                   success: _enums.UserChallengeSuccess.ONGOING
                 });
-                _context12.prev = 1;
-                _context12.next = 4;
+                _context9.prev = 1;
+                _context9.next = 4;
                 return this._client.create(_doctypes.USERCHALLENGE_DOCTYPE, newChallenge);
               case 4:
-                _yield$this$_client$c = _context12.sent;
+                _yield$this$_client$c = _context9.sent;
                 updatedUserChallengeEntity = _yield$this$_client$c.data;
                 updatedUserChallenge = this.parseUserChallengeEntityToUserChallenge(updatedUserChallengeEntity);
-                return _context12.abrupt("return", updatedUserChallenge);
+                return _context9.abrupt("return", updatedUserChallenge);
               case 10:
-                _context12.prev = 10;
-                _context12.t0 = _context12["catch"](1);
-                errorMessage = "Challenge service error on startUserChallenge: ".concat(JSON.stringify(_context12.t0));
+                _context9.prev = 10;
+                _context9.t0 = _context9["catch"](1);
+                errorMessage = "Challenge service error on startUserChallenge: ".concat(JSON.stringify(_context9.t0));
                 logStack('error', errorMessage);
                 _logger.default.error(errorMessage);
-                Sentry.captureException(_context12.t0);
-                throw _context12.t0;
+                Sentry.captureException(_context9.t0);
+                throw _context9.t0;
               case 17:
               case "end":
-                return _context12.stop();
+                return _context9.stop();
             }
           }
-        }, _callee11, this, [[1, 10]]);
+        }, _callee8, this, [[1, 10]]);
       }));
-      function startUserChallenge(_x21) {
+      function startUserChallenge(_x7) {
         return _startUserChallenge.apply(this, arguments);
       }
       return startUserChallenge;
@@ -12937,11 +12742,11 @@ var ChallengeService = /*#__PURE__*/function () {
   }, {
     key: "updateUserChallenge",
     value: function () {
-      var _updateUserChallenge = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(userChallenge, flag, quizWithUpdatedQuestions, fluidStatus, action) {
+      var _updateUserChallenge = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(userChallenge, flag, quizWithUpdatedQuestions, fluidStatus, action) {
         var updatedUserChallenge, updatedDuel, updatedQuiz, updatedExploration, updatedAction, duelService, quizService, explorationService, actionService, updateQuizProgress, userAction, _yield$this$_client$s, userChallengeEntity, result, errorMessage;
-        return _regenerator.default.wrap(function _callee12$(_context13) {
+        return _regenerator.default.wrap(function _callee9$(_context10) {
           while (1) {
-            switch (_context13.prev = _context13.next) {
+            switch (_context10.prev = _context10.next) {
               case 0:
                 updatedDuel = userChallenge.duel;
                 updatedQuiz = userChallenge.quiz;
@@ -12951,47 +12756,38 @@ var ChallengeService = /*#__PURE__*/function () {
                 quizService = new _quiz2.default(this._client);
                 explorationService = new _exploration.default(this._client);
                 actionService = new _action.default(this._client);
-                _context13.t0 = flag;
-                _context13.next = _context13.t0 === _enums.UserChallengeUpdateFlag.CHALLENGE ? 11 : _context13.t0 === _enums.UserChallengeUpdateFlag.DUEL_CONSUMPTION ? 11 : _context13.t0 === _enums.UserChallengeUpdateFlag.DUEL_UNLOCK ? 13 : _context13.t0 === _enums.UserChallengeUpdateFlag.DUEL_UPDATE_THRESHOLD ? 18 : _context13.t0 === _enums.UserChallengeUpdateFlag.DUEL_START ? 23 : _context13.t0 === _enums.UserChallengeUpdateFlag.DUEL_WIN ? 28 : _context13.t0 === _enums.UserChallengeUpdateFlag.DUEL_LOSS ? 33 : _context13.t0 === _enums.UserChallengeUpdateFlag.DUEL_RESET ? 38 : _context13.t0 === _enums.UserChallengeUpdateFlag.QUIZ_START ? 43 : _context13.t0 === _enums.UserChallengeUpdateFlag.QUIZ_DONE ? 48 : _context13.t0 === _enums.UserChallengeUpdateFlag.QUIZ_UPDATE ? 54 : _context13.t0 === _enums.UserChallengeUpdateFlag.QUIZ_RESET ? 56 : _context13.t0 === _enums.UserChallengeUpdateFlag.EXPLORATION_START ? 61 : _context13.t0 === _enums.UserChallengeUpdateFlag.EXPLORATION_UPDATE ? 66 : _context13.t0 === _enums.UserChallengeUpdateFlag.EXPLORATION_NOTIFICATION ? 71 : _context13.t0 === _enums.UserChallengeUpdateFlag.EXPLORATION_DONE ? 76 : _context13.t0 === _enums.UserChallengeUpdateFlag.ACTION_START ? 79 : _context13.t0 === _enums.UserChallengeUpdateFlag.ACTION_NOTIFICATION ? 83 : _context13.t0 === _enums.UserChallengeUpdateFlag.ACTION_DONE ? 86 : 89;
+                _context10.t0 = flag;
+                _context10.next = _context10.t0 === _enums.UserChallengeUpdateFlag.CHALLENGE ? 11 : _context10.t0 === _enums.UserChallengeUpdateFlag.DUEL_CONSUMPTION ? 11 : _context10.t0 === _enums.UserChallengeUpdateFlag.DUEL_UNLOCK ? 13 : _context10.t0 === _enums.UserChallengeUpdateFlag.DUEL_UPDATE_THRESHOLD ? 16 : _context10.t0 === _enums.UserChallengeUpdateFlag.DUEL_START ? 21 : _context10.t0 === _enums.UserChallengeUpdateFlag.DUEL_WIN ? 24 : _context10.t0 === _enums.UserChallengeUpdateFlag.DUEL_LOSS ? 27 : _context10.t0 === _enums.UserChallengeUpdateFlag.DUEL_RESET ? 30 : _context10.t0 === _enums.UserChallengeUpdateFlag.QUIZ_START ? 33 : _context10.t0 === _enums.UserChallengeUpdateFlag.QUIZ_DONE ? 36 : _context10.t0 === _enums.UserChallengeUpdateFlag.QUIZ_UPDATE ? 40 : _context10.t0 === _enums.UserChallengeUpdateFlag.QUIZ_RESET ? 42 : _context10.t0 === _enums.UserChallengeUpdateFlag.EXPLORATION_START ? 45 : _context10.t0 === _enums.UserChallengeUpdateFlag.EXPLORATION_UPDATE ? 48 : _context10.t0 === _enums.UserChallengeUpdateFlag.EXPLORATION_NOTIFICATION ? 51 : _context10.t0 === _enums.UserChallengeUpdateFlag.EXPLORATION_DONE ? 54 : _context10.t0 === _enums.UserChallengeUpdateFlag.ACTION_START ? 57 : _context10.t0 === _enums.UserChallengeUpdateFlag.ACTION_NOTIFICATION ? 61 : _context10.t0 === _enums.UserChallengeUpdateFlag.ACTION_DONE ? 64 : 67;
                 break;
               case 11:
                 updatedUserChallenge = userChallenge;
-                return _context13.abrupt("break", 91);
+                return _context10.abrupt("break", 69);
               case 13:
-                _context13.next = 15;
-                return duelService.unlockUserDuel(userChallenge.duel);
-              case 15:
-                updatedDuel = _context13.sent;
+                updatedDuel = duelService.unlockUserDuel(userChallenge.duel);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   state: _enums.UserChallengeState.DUEL,
                   duel: updatedDuel
                 });
-                return _context13.abrupt("break", 91);
-              case 18:
-                _context13.next = 20;
+                return _context10.abrupt("break", 69);
+              case 16:
+                _context10.next = 18;
                 return duelService.updateUserDuelThreshold(userChallenge.duel, fluidStatus);
-              case 20:
-                updatedDuel = _context13.sent;
+              case 18:
+                updatedDuel = _context10.sent;
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   state: _enums.UserChallengeState.DUEL,
                   duel: updatedDuel
                 });
-                return _context13.abrupt("break", 91);
-              case 23:
-                _context13.next = 25;
-                return duelService.startUserDuel(userChallenge.duel);
-              case 25:
-                updatedDuel = _context13.sent;
+                return _context10.abrupt("break", 69);
+              case 21:
+                updatedDuel = duelService.startUserDuel(userChallenge.duel);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   state: _enums.UserChallengeState.DUEL,
                   duel: updatedDuel
                 });
-                return _context13.abrupt("break", 91);
-              case 28:
-                _context13.next = 30;
-                return duelService.endUserDuel(userChallenge.duel);
-              case 30:
-                updatedDuel = _context13.sent;
+                return _context10.abrupt("break", 69);
+              case 24:
+                updatedDuel = duelService.endUserDuel(userChallenge.duel);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   state: _enums.UserChallengeState.DONE,
                   duel: updatedDuel,
@@ -13000,12 +12796,9 @@ var ChallengeService = /*#__PURE__*/function () {
                   }).startOf('day'),
                   success: _enums.UserChallengeSuccess.WIN
                 });
-                return _context13.abrupt("break", 91);
-              case 33:
-                _context13.next = 35;
-                return duelService.endUserDuel(userChallenge.duel);
-              case 35:
-                updatedDuel = _context13.sent;
+                return _context10.abrupt("break", 69);
+              case 27:
+                updatedDuel = duelService.endUserDuel(userChallenge.duel);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   state: _enums.UserChallengeState.DONE,
                   duel: updatedDuel,
@@ -13014,82 +12807,61 @@ var ChallengeService = /*#__PURE__*/function () {
                   }).startOf('day'),
                   success: _enums.UserChallengeSuccess.LOST
                 });
-                return _context13.abrupt("break", 91);
-              case 38:
-                _context13.next = 40;
-                return duelService.resetUserDuel(userChallenge.duel);
-              case 40:
-                updatedDuel = _context13.sent;
+                return _context10.abrupt("break", 69);
+              case 30:
+                updatedDuel = duelService.resetUserDuel(userChallenge.duel);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   state: _enums.UserChallengeState.DUEL,
                   duel: updatedDuel,
                   success: _enums.UserChallengeSuccess.ONGOING
                 });
-                return _context13.abrupt("break", 91);
-              case 43:
-                _context13.next = 45;
-                return quizService.startUserQuiz(userChallenge.quiz);
-              case 45:
-                updatedQuiz = _context13.sent;
+                return _context10.abrupt("break", 69);
+              case 33:
+                updatedQuiz = quizService.startUserQuiz(userChallenge.quiz);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   quiz: updatedQuiz
                 });
-                return _context13.abrupt("break", 91);
-              case 48:
+                return _context10.abrupt("break", 69);
+              case 36:
                 updateQuizProgress = Math.min(userChallenge.quiz.result, 5);
-                _context13.next = 51;
-                return quizService.endUserQuiz(userChallenge.quiz);
-              case 51:
-                updatedQuiz = _context13.sent;
+                updatedQuiz = quizService.endUserQuiz(userChallenge.quiz);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   quiz: updatedQuiz,
                   progress: _objectSpread(_objectSpread({}, userChallenge.progress), {}, {
                     quizProgress: updateQuizProgress
                   })
                 });
-                return _context13.abrupt("break", 91);
-              case 54:
+                return _context10.abrupt("break", 69);
+              case 40:
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   quiz: quizWithUpdatedQuestions ? quizWithUpdatedQuestions : userChallenge.quiz
                 });
-                return _context13.abrupt("break", 91);
-              case 56:
-                _context13.next = 58;
-                return quizService.resetUserQuiz(userChallenge.quiz);
-              case 58:
-                updatedQuiz = _context13.sent;
+                return _context10.abrupt("break", 69);
+              case 42:
+                updatedQuiz = quizService.resetUserQuiz(userChallenge.quiz);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   quiz: updatedQuiz
                 });
-                return _context13.abrupt("break", 91);
-              case 61:
-                _context13.next = 63;
-                return explorationService.startUserExploration(userChallenge.exploration);
-              case 63:
-                updatedExploration = _context13.sent;
+                return _context10.abrupt("break", 69);
+              case 45:
+                updatedExploration = explorationService.startUserExploration(userChallenge.exploration);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   exploration: updatedExploration
                 });
-                return _context13.abrupt("break", 91);
-              case 66:
-                _context13.next = 68;
-                return explorationService.updateUserExploration(userChallenge.exploration);
-              case 68:
-                updatedExploration = _context13.sent;
+                return _context10.abrupt("break", 69);
+              case 48:
+                updatedExploration = explorationService.updateUserExploration(userChallenge.exploration);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   exploration: updatedExploration
                 });
-                return _context13.abrupt("break", 91);
-              case 71:
-                _context13.next = 73;
-                return explorationService.setNotificationUserExploration(userChallenge.exploration);
-              case 73:
-                updatedExploration = _context13.sent;
+                return _context10.abrupt("break", 69);
+              case 51:
+                updatedExploration = explorationService.setNotificationUserExploration(userChallenge.exploration);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   exploration: updatedExploration
                 });
-                return _context13.abrupt("break", 91);
-              case 76:
+                return _context10.abrupt("break", 69);
+              case 54:
                 updatedExploration = explorationService.endUserExploration(userChallenge.exploration);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   exploration: updatedExploration,
@@ -13097,8 +12869,8 @@ var ChallengeService = /*#__PURE__*/function () {
                     explorationProgress: updatedExploration.progress
                   })
                 });
-                return _context13.abrupt("break", 91);
-              case 79:
+                return _context10.abrupt("break", 69);
+              case 57:
                 userAction = userChallenge.action;
                 if (action) {
                   userAction = actionService.launchAction(action);
@@ -13106,14 +12878,14 @@ var ChallengeService = /*#__PURE__*/function () {
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   action: userAction
                 });
-                return _context13.abrupt("break", 91);
-              case 83:
+                return _context10.abrupt("break", 69);
+              case 61:
                 updatedAction = actionService.setNotificationAction(userChallenge.action);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   action: updatedAction
                 });
-                return _context13.abrupt("break", 91);
-              case 86:
+                return _context10.abrupt("break", 69);
+              case 64:
                 updatedAction = actionService.endAction(userChallenge.action);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   action: updatedAction,
@@ -13121,35 +12893,35 @@ var ChallengeService = /*#__PURE__*/function () {
                     actionProgress: 5
                   })
                 });
-                return _context13.abrupt("break", 91);
-              case 89:
+                return _context10.abrupt("break", 69);
+              case 67:
                 updatedUserChallenge = userChallenge;
-                return _context13.abrupt("break", 91);
-              case 91:
-                _context13.prev = 91;
-                _context13.next = 94;
+                return _context10.abrupt("break", 69);
+              case 69:
+                _context10.prev = 69;
+                _context10.next = 72;
                 return this._client.save(updatedUserChallenge);
-              case 94:
-                _yield$this$_client$s = _context13.sent;
+              case 72:
+                _yield$this$_client$s = _context10.sent;
                 userChallengeEntity = _yield$this$_client$s.data;
                 result = this.parseUserChallengeEntityToUserChallenge(userChallengeEntity);
-                return _context13.abrupt("return", result);
-              case 100:
-                _context13.prev = 100;
-                _context13.t1 = _context13["catch"](91);
-                errorMessage = "Update user challenge error: ".concat(JSON.stringify(_context13.t1));
+                return _context10.abrupt("return", result);
+              case 78:
+                _context10.prev = 78;
+                _context10.t1 = _context10["catch"](69);
+                errorMessage = "Update user challenge error: ".concat(JSON.stringify(_context10.t1));
                 logStack('error', errorMessage);
                 _logger.default.error(errorMessage);
-                Sentry.captureException(_context13.t1);
-                throw _context13.t1;
-              case 107:
+                Sentry.captureException(_context10.t1);
+                throw _context10.t1;
+              case 85:
               case "end":
-                return _context13.stop();
+                return _context10.stop();
             }
           }
-        }, _callee12, this, [[91, 100]]);
+        }, _callee9, this, [[69, 78]]);
       }));
-      function updateUserChallenge(_x22, _x23, _x24, _x25, _x26) {
+      function updateUserChallenge(_x8, _x9, _x10, _x11, _x12) {
         return _updateUserChallenge.apply(this, arguments);
       }
       return updateUserChallenge;
@@ -13161,14 +12933,14 @@ var ChallengeService = /*#__PURE__*/function () {
   }, {
     key: "getUserChallengeDataload",
     value: function () {
-      var _getUserChallengeDataload = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13(userChallenge) {
+      var _getUserChallengeDataload = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(userChallenge) {
         var consumptionService, timePeriod, dataChart;
-        return _regenerator.default.wrap(function _callee13$(_context14) {
+        return _regenerator.default.wrap(function _callee10$(_context11) {
           while (1) {
-            switch (_context14.prev = _context14.next) {
+            switch (_context11.prev = _context11.next) {
               case 0:
                 if (!userChallenge.duel.startDate) {
-                  _context14.next = 8;
+                  _context11.next = 8;
                   break;
                 }
                 consumptionService = new _consumption.default(this._client);
@@ -13178,7 +12950,7 @@ var ChallengeService = /*#__PURE__*/function () {
                     day: userChallenge.duel.duration.days - 1
                   })
                 };
-                _context14.next = 5;
+                _context11.next = 5;
                 return consumptionService.getGraphData({
                   timePeriod: timePeriod,
                   timeStep: _enums.TimeStep.DAY,
@@ -13186,22 +12958,22 @@ var ChallengeService = /*#__PURE__*/function () {
                   isHome: true
                 });
               case 5:
-                dataChart = _context14.sent;
+                dataChart = _context11.sent;
                 if (!dataChart) {
-                  _context14.next = 8;
+                  _context11.next = 8;
                   break;
                 }
-                return _context14.abrupt("return", dataChart.actualData);
+                return _context11.abrupt("return", dataChart.actualData);
               case 8:
-                return _context14.abrupt("return", []);
+                return _context11.abrupt("return", []);
               case 9:
               case "end":
-                return _context14.stop();
+                return _context11.stop();
             }
           }
-        }, _callee13, this);
+        }, _callee10, this);
       }));
-      function getUserChallengeDataload(_x27) {
+      function getUserChallengeDataload(_x13) {
         return _getUserChallengeDataload.apply(this, arguments);
       }
       return getUserChallengeDataload;
@@ -13213,59 +12985,42 @@ var ChallengeService = /*#__PURE__*/function () {
      */
   }, {
     key: "isChallengeDone",
-    value: function () {
-      var _isChallengeDone = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14(userChallenge, dataloads) {
-        var isDone, isWin, fullDuration, diffFromNow, duration;
-        return _regenerator.default.wrap(function _callee14$(_context15) {
-          while (1) {
-            switch (_context15.prev = _context15.next) {
-              case 0:
+    value: function isChallengeDone(userChallenge, dataloads) {
+      var isDone = false;
+      var isWin = false;
+      if (userChallenge.state === _enums.UserChallengeState.DUEL && userChallenge.duel.state === _enums.UserDuelState.ONGOING && userChallenge.duel.duration) {
+        var fullDuration = userChallenge.duel.duration.days + (0, _date.getLagDays)(userChallenge.duel.fluidTypes) + 1;
+        var diffFromNow = userChallenge.duel.startDate ? userChallenge.duel.startDate.diff(_luxon.DateTime.local().setZone('utc', {
+          keepLocalTime: true
+        }), 'days').toObject().days : 0;
+        diffFromNow = diffFromNow ? Math.abs(diffFromNow) : 0;
+        if (diffFromNow >= fullDuration) {
+          isDone = true;
+          if (isDone && userChallenge.duel.userConsumption < userChallenge.duel.threshold) {
+            isWin = true;
+          }
+        } else {
+          var duration = userChallenge.duel.duration.days;
+          if (dataloads.length === duration && dataloads[duration - 1].value !== -1) {
+            isDone = true;
+            dataloads.forEach(function (d) {
+              if (d.value === -1 || d.valueDetail && d.valueDetail.filter(function (data) {
+                return data.value === -1;
+              }).length > 0) {
                 isDone = false;
-                isWin = false;
-                if (userChallenge.state === _enums.UserChallengeState.DUEL && userChallenge.duel.state === _enums.UserDuelState.ONGOING && userChallenge.duel.duration) {
-                  fullDuration = userChallenge.duel.duration.days + (0, _date.getLagDays)(userChallenge.duel.fluidTypes) + 1;
-                  diffFromNow = userChallenge.duel.startDate ? userChallenge.duel.startDate.diff(_luxon.DateTime.local().setZone('utc', {
-                    keepLocalTime: true
-                  }), 'days').toObject().days : 0;
-                  diffFromNow = diffFromNow ? Math.abs(diffFromNow) : 0;
-                  if (diffFromNow >= fullDuration) {
-                    isDone = true;
-                    if (isDone && userChallenge.duel.userConsumption < userChallenge.duel.threshold) {
-                      isWin = true;
-                    }
-                  } else {
-                    duration = userChallenge.duel.duration.days;
-                    if (dataloads.length === duration && dataloads[duration - 1].value !== -1) {
-                      isDone = true;
-                      dataloads.forEach(function (d) {
-                        if (d.value === -1 || d.valueDetail && d.valueDetail.filter(function (data) {
-                          return data.value === -1;
-                        }).length > 0) {
-                          isDone = false;
-                        }
-                      });
-                      if (isDone && userChallenge.duel.userConsumption < userChallenge.duel.threshold) {
-                        isWin = true;
-                      }
-                    }
-                  }
-                }
-                return _context15.abrupt("return", {
-                  isDone: isDone,
-                  isWin: isWin
-                });
-              case 4:
-              case "end":
-                return _context15.stop();
+              }
+            });
+            if (isDone && userChallenge.duel.userConsumption < userChallenge.duel.threshold) {
+              isWin = true;
             }
           }
-        }, _callee14);
-      }));
-      function isChallengeDone(_x28, _x29) {
-        return _isChallengeDone.apply(this, arguments);
+        }
       }
-      return isChallengeDone;
-    }()
+      return {
+        isDone: isDone,
+        isWin: isWin
+      };
+    }
   }]);
   return ChallengeService;
 }();
@@ -13313,6 +13068,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
 /* eslint-disable jsx-a11y/no-static-element-interactions */
 /* eslint-disable jsx-a11y/click-events-have-key-events */
 
+/**
+ * http://ecolyo.cozy.tools:8080/#/challenges/
+ */
 var ChallengeView = function ChallengeView() {
   var _useI18n = (0, _I18n.useI18n)(),
     t = _useI18n.t;
@@ -14952,11 +14710,11 @@ exports.default = void 0;
 var _core = __webpack_require__("rMFn");
 var _Dialog = _interopRequireDefault(__webpack_require__("L/1U"));
 var _close = _interopRequireDefault(__webpack_require__("lCJQ"));
+var _StyledIconButton = _interopRequireDefault(__webpack_require__("90PE"));
 var _GCUContent = _interopRequireDefault(__webpack_require__("Tsab"));
 var _I18n = __webpack_require__("nUfk");
 var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
 __webpack_require__("3nih");
-var _StyledIconButton = _interopRequireDefault(__webpack_require__("90PE"));
 var CGUModal = function CGUModal(_ref) {
   var open = _ref.open,
     handleCloseClick = _ref.handleCloseClick;
@@ -15370,6 +15128,32 @@ var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WE
 
 /***/ }),
 
+/***/ "Qrc9":
+/***/ (function(module, exports, __webpack_require__) {
+
+
+var content = __webpack_require__("AKpP");
+
+if(typeof content === 'string') content = [[module.i, content, '']];
+
+var transform;
+var insertInto;
+
+
+
+var options = {"hmr":true}
+
+options.transform = transform
+options.insertInto = undefined;
+
+var update = __webpack_require__("HkU0")(content, options);
+
+if(content.locals) module.exports = content.locals;
+
+if(false) {}
+
+/***/ }),
+
 /***/ "RQds":
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
@@ -15668,158 +15452,92 @@ var QuizService = /*#__PURE__*/function () {
      */
   }, {
     key: "startUserQuiz",
-    value: function () {
-      var _startUserQuiz = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(userQuiz) {
-        var questions;
-        return _regenerator.default.wrap(function _callee4$(_context4) {
-          while (1) {
-            switch (_context4.prev = _context4.next) {
-              case 0:
-                questions = userQuiz.questions.map(function (question) {
-                  return _objectSpread(_objectSpread({}, question), {}, {
-                    answers: (0, _lodash.shuffle)(question.answers)
-                  });
-                });
-                return _context4.abrupt("return", _objectSpread(_objectSpread({}, userQuiz), {}, {
-                  questions: (0, _lodash.shuffle)(questions),
-                  state: _enums.UserQuizState.ONGOING,
-                  startDate: _luxon.DateTime.local().setZone('utc', {
-                    keepLocalTime: true
-                  })
-                }));
-              case 2:
-              case "end":
-                return _context4.stop();
-            }
-          }
-        }, _callee4);
-      }));
-      function startUserQuiz(_x2) {
-        return _startUserQuiz.apply(this, arguments);
-      }
-      return startUserQuiz;
-    }()
+    value: function startUserQuiz(userQuiz) {
+      var questions = userQuiz.questions.map(function (question) {
+        return _objectSpread(_objectSpread({}, question), {}, {
+          answers: (0, _lodash.shuffle)(question.answers)
+        });
+      });
+      return _objectSpread(_objectSpread({}, userQuiz), {}, {
+        questions: (0, _lodash.shuffle)(questions),
+        state: _enums.UserQuizState.ONGOING,
+        startDate: _luxon.DateTime.local().setZone('utc', {
+          keepLocalTime: true
+        })
+      });
+    }
     /**
      * Return quiz with updated state to UserQuizState.UNLOCKED and updated questions with false result
      * @param {UserQuiz} userQuiz - userQuiz to update
      */
   }, {
     key: "resetUserQuiz",
-    value: function () {
-      var _resetUserQuiz = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(userQuiz) {
-        var updatedQuestions, updatedCustomQuestion;
-        return _regenerator.default.wrap(function _callee5$(_context5) {
-          while (1) {
-            switch (_context5.prev = _context5.next) {
-              case 0:
-                updatedQuestions = userQuiz.questions.map(function (question) {
-                  return _objectSpread(_objectSpread({}, question), {}, {
-                    result: _enums.UserQuestionState.UNLOCKED
-                  });
-                });
-                updatedCustomQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
-                  result: _enums.UserQuestionState.UNLOCKED
-                });
-                return _context5.abrupt("return", _objectSpread(_objectSpread({}, userQuiz), {}, {
-                  customQuestion: updatedCustomQuestion,
-                  questions: updatedQuestions,
-                  result: 0,
-                  state: _enums.UserQuizState.UNLOCKED
-                }));
-              case 3:
-              case "end":
-                return _context5.stop();
-            }
-          }
-        }, _callee5);
-      }));
-      function resetUserQuiz(_x3) {
-        return _resetUserQuiz.apply(this, arguments);
-      }
-      return resetUserQuiz;
-    }()
+    value: function resetUserQuiz(userQuiz) {
+      var updatedQuestions = userQuiz.questions.map(function (question) {
+        return _objectSpread(_objectSpread({}, question), {}, {
+          result: _enums.UserQuestionState.UNLOCKED
+        });
+      });
+      var updatedCustomQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
+        result: _enums.UserQuestionState.UNLOCKED
+      });
+      return _objectSpread(_objectSpread({}, userQuiz), {}, {
+        customQuestion: updatedCustomQuestion,
+        questions: updatedQuestions,
+        result: 0,
+        state: _enums.UserQuizState.UNLOCKED
+      });
+    }
+
     /**
      * Return quiz with updated state to UserQuizState.DONE
      * @param {UserQuiz} userQuiz - userQuiz to update
      */
   }, {
     key: "endUserQuiz",
-    value: function () {
-      var _endUserQuiz = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(userQuiz) {
-        var updatedUserQuiz;
-        return _regenerator.default.wrap(function _callee6$(_context6) {
-          while (1) {
-            switch (_context6.prev = _context6.next) {
-              case 0:
-                updatedUserQuiz = _objectSpread(_objectSpread({}, userQuiz), {}, {
-                  state: _enums.UserQuizState.DONE
-                });
-                return _context6.abrupt("return", updatedUserQuiz);
-              case 2:
-              case "end":
-                return _context6.stop();
-            }
-          }
-        }, _callee6);
-      }));
-      function endUserQuiz(_x4) {
-        return _endUserQuiz.apply(this, arguments);
-      }
-      return endUserQuiz;
-    }()
+    value: function endUserQuiz(userQuiz) {
+      return _objectSpread(_objectSpread({}, userQuiz), {}, {
+        state: _enums.UserQuizState.DONE
+      });
+    }
+
     /**
      * Return quiz with result and updated question or customQuestion if no index is passed
      * @param {UserQuiz} userQuiz - userQuiz to update
      */
   }, {
     key: "updateUserQuiz",
-    value: function () {
-      var _updateUserQuiz = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(userQuiz, questionResult, questionIndex) {
-        var result, updatedQuestions, updatedCustomQuestion;
-        return _regenerator.default.wrap(function _callee7$(_context7) {
-          while (1) {
-            switch (_context7.prev = _context7.next) {
-              case 0:
-                result = questionResult ? _enums.UserQuestionState.CORRECT : _enums.UserQuestionState.INCORRECT;
-                updatedQuestions = userQuiz.questions.map(function (question, index) {
-                  if (index === questionIndex) {
-                    return _objectSpread(_objectSpread({}, question), {}, {
-                      result: result
-                    });
-                  }
-                  return question;
-                });
-                updatedCustomQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
-                  result: result
-                });
-                return _context7.abrupt("return", _objectSpread(_objectSpread({}, userQuiz), {}, {
-                  questions: updatedQuestions,
-                  customQuestion: questionIndex === undefined ? updatedCustomQuestion : userQuiz.customQuestion,
-                  result: questionResult ? Math.min(userQuiz.result + 1, 5) : userQuiz.result
-                }));
-              case 4:
-              case "end":
-                return _context7.stop();
-            }
-          }
-        }, _callee7);
-      }));
-      function updateUserQuiz(_x5, _x6, _x7) {
-        return _updateUserQuiz.apply(this, arguments);
-      }
-      return updateUserQuiz;
-    }()
+    value: function updateUserQuiz(userQuiz, questionResult, questionIndex) {
+      var result = questionResult ? _enums.UserQuestionState.CORRECT : _enums.UserQuestionState.INCORRECT;
+      var updatedQuestions = userQuiz.questions.map(function (question, index) {
+        if (index === questionIndex) {
+          return _objectSpread(_objectSpread({}, question), {}, {
+            result: result
+          });
+        }
+        return question;
+      });
+      var updatedCustomQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
+        result: result
+      });
+      return _objectSpread(_objectSpread({}, userQuiz), {}, {
+        questions: updatedQuestions,
+        customQuestion: questionIndex === undefined ? updatedCustomQuestion : userQuiz.customQuestion,
+        result: questionResult ? Math.min(userQuiz.result + 1, 5) : userQuiz.result
+      });
+    }
+
     /**
      * Build a custom question with the customQuestionEntity
      */
   }, {
     key: "getCustomQuestion",
     value: function () {
-      var _getCustomQuestion = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(customQuestionEntity, fluidTypes) {
+      var _getCustomQuestion = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(customQuestionEntity, fluidTypes) {
         var answers, explanation, finalInterval, useFluidTypes, questionLabel, unit, unitLabel, fluidLabel, intervalAnswer, _maxLoad, consumptionService, maxLoad, averageLoad, finalQuestion;
-        return _regenerator.default.wrap(function _callee8$(_context8) {
+        return _regenerator.default.wrap(function _callee4$(_context4) {
           while (1) {
-            switch (_context8.prev = _context8.next) {
+            switch (_context4.prev = _context4.next) {
               case 0:
                 explanation = 'Vous pouvez vérifier cette information sur l’écran Conso.';
                 finalInterval = this.getTimePeriodFromInterval(customQuestionEntity.interval, customQuestionEntity.period.weekday ? {} : customQuestionEntity.period);
@@ -15847,24 +15565,24 @@ var QuizService = /*#__PURE__*/function () {
                   questionLabel = questionLabel.replace('#fluid', fluidLabel);
                 }
                 if (!(customQuestionEntity.type === _enums.CustomQuestionType.DATE)) {
-                  _context8.next = 13;
+                  _context4.next = 13;
                   break;
                 }
-                _context8.next = 9;
+                _context4.next = 9;
                 return this.getMaxLoadOnLastInterval(customQuestionEntity.timeStep, finalInterval, useFluidTypes);
               case 9:
-                intervalAnswer = _context8.sent;
+                intervalAnswer = _context4.sent;
                 answers = this.getAnswersForInterval(intervalAnswer.date, customQuestionEntity.timeStep, finalInterval);
-                _context8.next = 26;
+                _context4.next = 26;
                 break;
               case 13:
                 if (!(customQuestionEntity.type === _enums.CustomQuestionType.MAXDATA)) {
-                  _context8.next = 22;
+                  _context4.next = 22;
                   break;
                 }
                 // Max data
                 consumptionService = new _consumption.default(this._client);
-                _context8.next = 17;
+                _context4.next = 17;
                 return consumptionService.getMaxLoad({
                   maxTimePeriod: finalInterval,
                   timeStep: customQuestionEntity.timeStep,
@@ -15872,16 +15590,16 @@ var QuizService = /*#__PURE__*/function () {
                   isHome: !customQuestionEntity.singleFluid
                 });
               case 17:
-                maxLoad = _context8.sent;
+                maxLoad = _context4.sent;
                 maxLoad = (_maxLoad = maxLoad) !== null && _maxLoad !== void 0 ? _maxLoad : 0;
                 answers = this.getAnswersForNumberValue(maxLoad, unit);
-                _context8.next = 26;
+                _context4.next = 26;
                 break;
               case 22:
-                _context8.next = 24;
+                _context4.next = 24;
                 return this.getAverageOnGivenPeriod(customQuestionEntity.timeStep, finalInterval, useFluidTypes, customQuestionEntity.period.weekday ? customQuestionEntity.period.weekday : undefined, customQuestionEntity.singleFluid);
               case 24:
-                averageLoad = _context8.sent;
+                averageLoad = _context4.sent;
                 answers = this.getAnswersForNumberValue(averageLoad, unit);
               case 26:
                 finalQuestion = {
@@ -15890,15 +15608,15 @@ var QuizService = /*#__PURE__*/function () {
                   explanation: explanation,
                   source: ''
                 };
-                return _context8.abrupt("return", finalQuestion);
+                return _context4.abrupt("return", finalQuestion);
               case 28:
               case "end":
-                return _context8.stop();
+                return _context4.stop();
             }
           }
-        }, _callee8, this);
+        }, _callee4, this);
       }));
-      function getCustomQuestion(_x8, _x9) {
+      function getCustomQuestion(_x2, _x3) {
         return _getCustomQuestion.apply(this, arguments);
       }
       return getCustomQuestion;
@@ -15956,12 +15674,12 @@ var QuizService = /*#__PURE__*/function () {
   }, {
     key: "getMaxLoadOnLastInterval",
     value: function () {
-      var _getMaxLoadOnLastInterval = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(timeStep, interval, fluidTypes) {
+      var _getMaxLoadOnLastInterval = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(timeStep, interval, fluidTypes) {
         var _graphData;
         var dateMax, max, consumptionService, limit, graphData, _graphData4, newInterval, objectTimeStep, _graphData2, _graphData3, _newInterval;
-        return _regenerator.default.wrap(function _callee9$(_context9) {
+        return _regenerator.default.wrap(function _callee5$(_context5) {
           while (1) {
-            switch (_context9.prev = _context9.next) {
+            switch (_context5.prev = _context5.next) {
               case 0:
                 dateMax = _luxon.DateTime.local().setZone('utc', {
                   keepLocalTime: true
@@ -15972,39 +15690,39 @@ var QuizService = /*#__PURE__*/function () {
                   date: interval.startDate,
                   reached: false
                 };
-                _context9.next = 6;
+                _context5.next = 6;
                 return consumptionService.getGraphData({
                   timePeriod: interval,
                   timeStep: timeStep,
                   fluidTypes: fluidTypes
                 });
               case 6:
-                graphData = _context9.sent;
+                graphData = _context5.sent;
                 if (!((_graphData = graphData) !== null && _graphData !== void 0 && _graphData.actualData)) {
-                  _context9.next = 34;
+                  _context5.next = 34;
                   break;
                 }
                 max = Math.max.apply(Math, (0, _toConsumableArray2.default)(graphData.actualData.map(function (d) {
                   return d.value;
                 })));
                 if (!(max == -1)) {
-                  _context9.next = 28;
+                  _context5.next = 28;
                   break;
                 }
                 newInterval = _objectSpread({}, interval);
-                _context9.t0 = timeStep;
-                _context9.next = _context9.t0 === _enums.TimeStep.MONTH ? 14 : _context9.t0 === _enums.TimeStep.YEAR ? 16 : 18;
+                _context5.t0 = timeStep;
+                _context5.next = _context5.t0 === _enums.TimeStep.MONTH ? 14 : _context5.t0 === _enums.TimeStep.YEAR ? 16 : 18;
                 break;
               case 14:
                 objectTimeStep = {
                   month: 1
                 };
-                return _context9.abrupt("break", 19);
+                return _context5.abrupt("break", 19);
               case 16:
                 objectTimeStep = {
                   year: 1
                 };
-                return _context9.abrupt("break", 19);
+                return _context5.abrupt("break", 19);
               case 18:
                 objectTimeStep = {
                   week: 1
@@ -16013,14 +15731,14 @@ var QuizService = /*#__PURE__*/function () {
                 newInterval.startDate = newInterval.startDate.minus(objectTimeStep);
                 newInterval.endDate = newInterval.endDate.minus(objectTimeStep);
                 limit.date = newInterval.startDate;
-                _context9.next = 24;
+                _context5.next = 24;
                 return consumptionService.getGraphData({
                   timePeriod: newInterval,
                   timeStep: timeStep,
                   fluidTypes: fluidTypes
                 });
               case 24:
-                graphData = _context9.sent;
+                graphData = _context5.sent;
                 if (limit.date < _luxon.DateTime.now().minus({
                   year: 5
                 })) {
@@ -16033,12 +15751,12 @@ var QuizService = /*#__PURE__*/function () {
                 }
               case 27:
                 if (max == -1 && (_graphData2 = graphData) !== null && _graphData2 !== void 0 && _graphData2.actualData && !limit.reached) {
-                  _context9.next = 19;
+                  _context5.next = 19;
                   break;
                 }
               case 28:
                 if (!limit.reached) {
-                  _context9.next = 33;
+                  _context5.next = 33;
                   break;
                 }
                 _newInterval = {
@@ -16051,14 +15769,14 @@ var QuizService = /*#__PURE__*/function () {
                     keepLocalTime: true
                   }).startOf('month')
                 };
-                _context9.next = 32;
+                _context5.next = 32;
                 return consumptionService.getGraphData({
                   timePeriod: _newInterval,
                   timeStep: timeStep,
                   fluidTypes: fluidTypes
                 });
               case 32:
-                graphData = _context9.sent;
+                graphData = _context5.sent;
               case 33:
                 if ((_graphData4 = graphData) !== null && _graphData4 !== void 0 && _graphData4.actualData) {
                   max = Math.max.apply(Math, (0, _toConsumableArray2.default)(graphData.actualData.map(function (d) {
@@ -16069,18 +15787,18 @@ var QuizService = /*#__PURE__*/function () {
                   });
                 }
               case 34:
-                return _context9.abrupt("return", {
+                return _context5.abrupt("return", {
                   date: dateMax,
                   value: max
                 });
               case 35:
               case "end":
-                return _context9.stop();
+                return _context5.stop();
             }
           }
-        }, _callee9, this);
+        }, _callee5, this);
       }));
-      function getMaxLoadOnLastInterval(_x10, _x11, _x12) {
+      function getMaxLoadOnLastInterval(_x4, _x5, _x6) {
         return _getMaxLoadOnLastInterval.apply(this, arguments);
       }
       return getMaxLoadOnLastInterval;
@@ -16091,15 +15809,15 @@ var QuizService = /*#__PURE__*/function () {
   }, {
     key: "getAverageOnGivenPeriod",
     value: function () {
-      var _getAverageOnGivenPeriod = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(timeStep, interval, fluidTypes, weekday, singleFluid) {
+      var _getAverageOnGivenPeriod = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(timeStep, interval, fluidTypes, weekday, singleFluid) {
         var consumptionService, graphData, average, total, length;
-        return _regenerator.default.wrap(function _callee10$(_context10) {
+        return _regenerator.default.wrap(function _callee6$(_context6) {
           while (1) {
-            switch (_context10.prev = _context10.next) {
+            switch (_context6.prev = _context6.next) {
               case 0:
                 consumptionService = new _consumption.default(this._client);
                 _logger.default.info('GetAverageOnGivenPeriod is about to call getGraphData');
-                _context10.next = 4;
+                _context6.next = 4;
                 return consumptionService.getGraphData({
                   timePeriod: interval,
                   timeStep: timeStep,
@@ -16107,7 +15825,7 @@ var QuizService = /*#__PURE__*/function () {
                   isHome: !singleFluid
                 });
               case 4:
-                graphData = _context10.sent;
+                graphData = _context6.sent;
                 average = 0;
                 if (graphData !== null && graphData !== void 0 && graphData.actualData) {
                   total = 0;
@@ -16129,15 +15847,15 @@ var QuizService = /*#__PURE__*/function () {
                   });
                   average = total / length;
                 }
-                return _context10.abrupt("return", average);
+                return _context6.abrupt("return", average);
               case 8:
               case "end":
-                return _context10.stop();
+                return _context6.stop();
             }
           }
-        }, _callee10, this);
+        }, _callee6, this);
       }));
-      function getAverageOnGivenPeriod(_x13, _x14, _x15, _x16, _x17) {
+      function getAverageOnGivenPeriod(_x7, _x8, _x9, _x10, _x11) {
         return _getAverageOnGivenPeriod.apply(this, arguments);
       }
       return getAverageOnGivenPeriod;
@@ -17478,6 +17196,7 @@ var _react = _interopRequireWildcard(__webpack_require__("ivGQ"));
 var _reactRouterDom = __webpack_require__("Iyno");
 var _hooks = __webpack_require__("6FOS");
 var _usePageTitle = _interopRequireDefault(__webpack_require__("hmgo"));
+var _SkipLink = _interopRequireDefault(__webpack_require__("a1IZ"));
 function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
 function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
 var App = function App(_ref) {
@@ -17501,13 +17220,15 @@ var App = function App(_ref) {
       topTheme: 'light'
     });
   }, [webviewIntent]);
-  return /*#__PURE__*/_react.default.createElement(_Layout.Layout, null, /*#__PURE__*/_react.default.createElement(_SplashRoot.default, null, termsStatus.accepted && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_WelcomeModal.default, {
+  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_SkipLink.default, null), /*#__PURE__*/_react.default.createElement(_Layout.Layout, null, /*#__PURE__*/_react.default.createElement(_SplashRoot.default, null, termsStatus.accepted && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_WelcomeModal.default, {
     open: !onboarding.isWelcomeSeen
   }), /*#__PURE__*/_react.default.createElement(_Navbar.default, null)), /*#__PURE__*/_react.default.createElement("main", {
-    className: "app-content"
+    id: "app-content",
+    className: "app-content",
+    tabIndex: -1
   }, /*#__PURE__*/_react.default.createElement(_Routes.default, {
     termsStatus: termsStatus
-  }))),  false ? /*#__PURE__*/undefined : null);
+  }))),  false ? /*#__PURE__*/undefined : null));
 };
 exports.App = App;
 var _default = App;
@@ -17621,7 +17342,7 @@ var EquipmentIcon = function EquipmentIcon(_ref) {
                 return (0, _utils.importIconById)(equipment, 'equipments');
               case 2:
                 svg = _context.sent;
-                if (subscribed && svg) {
+                if (svg) {
                   setIcon(svg);
                 }
               case 4:
@@ -17633,7 +17354,7 @@ var EquipmentIcon = function EquipmentIcon(_ref) {
       }));
       return _getIcon.apply(this, arguments);
     }
-    getIcon();
+    subscribed && getIcon();
     return function () {
       subscribed = false;
     };
@@ -18158,20 +17879,12 @@ var DuelOngoing = function DuelOngoing(_ref) {
     userChallengeList = _useAppSelector.userChallengeList;
   var _useState = (0, _react.useState)(false),
     _useState2 = (0, _slicedToArray2.default)(_useState, 2),
-    resultModal = _useState2[0],
-    setResultModal = _useState2[1];
-  var _useState3 = (0, _react.useState)(false),
+    showLastDuelModal = _useState2[0],
+    setShowLastDuelModal = _useState2[1];
+  var _useState3 = (0, _react.useState)(),
     _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
-    winChallenge = _useState4[0],
-    setWinChallenge = _useState4[1];
-  var _useState5 = (0, _react.useState)(false),
-    _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
-    showLastDuelModal = _useState6[0],
-    setShowLastDuelModal = _useState6[1];
-  var _useState7 = (0, _react.useState)(),
-    _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
-    finishedDataLoad = _useState8[0],
-    setFinishedDataLoad = _useState8[1];
+    finishedDataLoad = _useState4[0],
+    setFinishedDataLoad = _useState4[1];
   var chartContainer = (0, _react.useRef)(null);
   var _useChartResize = (0, _useChartResize2.useChartResize)(chartContainer, false),
     height = _useChartResize.height,
@@ -18179,6 +17892,9 @@ var DuelOngoing = function DuelOngoing(_ref) {
   var challengeService = (0, _react.useMemo)(function () {
     return new _challenge.default(client);
   }, [client]);
+  var _challengeService$isC = challengeService.isChallengeDone(userChallenge, currentDataload),
+    isDone = _challengeService$isC.isDone,
+    isWin = _challengeService$isC.isWin;
   var duel = userChallenge.duel;
   var isLastDuel = userChallenge.id == ((_userChallengeList = userChallengeList[userChallengeList.length - 1]) === null || _userChallengeList === void 0 ? void 0 : _userChallengeList.id);
   var userConsumption = (0, _utils.formatNumberValues)(userChallenge.duel.userConsumption).toString();
@@ -18190,7 +17906,7 @@ var DuelOngoing = function DuelOngoing(_ref) {
         switch (_context.prev = _context.next) {
           case 0:
             _context.next = 2;
-            return challengeService.updateUserChallenge(userChallenge, winChallenge ? _enums.UserChallengeUpdateFlag.DUEL_WIN : _enums.UserChallengeUpdateFlag.DUEL_LOSS);
+            return challengeService.updateUserChallenge(userChallenge, isWin ? _enums.UserChallengeUpdateFlag.DUEL_WIN : _enums.UserChallengeUpdateFlag.DUEL_LOSS);
           case 2:
             updatedChallenge = _context.sent;
             dispatch((0, _challenge2.updateUserChallengeList)(updatedChallenge));
@@ -18207,76 +17923,38 @@ var DuelOngoing = function DuelOngoing(_ref) {
         }
       }
     }, _callee);
-  })), [challengeService, userChallenge, winChallenge, dispatch, isLastDuel, navigate]);
-  (0, _react.useEffect)(function () {
-    var subscribed = true;
-    function setChallengeResult() {
-      return _setChallengeResult.apply(this, arguments);
-    }
-    function _setChallengeResult() {
-      _setChallengeResult = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
-        var _yield$challengeServi, isDone, isWin;
-        return _regenerator.default.wrap(function _callee2$(_context2) {
-          while (1) {
-            switch (_context2.prev = _context2.next) {
-              case 0:
-                _context2.next = 2;
-                return challengeService.isChallengeDone(userChallenge, currentDataload);
-              case 2:
-                _yield$challengeServi = _context2.sent;
-                isDone = _yield$challengeServi.isDone;
-                isWin = _yield$challengeServi.isWin;
-                if (subscribed) {
-                  setResultModal(isDone);
-                  setWinChallenge(isWin);
-                }
-              case 6:
-              case "end":
-                return _context2.stop();
-            }
-          }
-        }, _callee2);
-      }));
-      return _setChallengeResult.apply(this, arguments);
-    }
-    setChallengeResult();
-    return function () {
-      subscribed = false;
-    };
-  }, [challengeService, client, currentDataload, userChallenge]);
+  })), [challengeService, userChallenge, isWin, dispatch, isLastDuel, navigate]);
   (0, _react.useEffect)(function () {
     var subscribed = true;
     function populateData() {
       return _populateData.apply(this, arguments);
     }
     function _populateData() {
-      _populateData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
+      _populateData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
         var dataloads;
-        return _regenerator.default.wrap(function _callee3$(_context3) {
+        return _regenerator.default.wrap(function _callee2$(_context2) {
           while (1) {
-            switch (_context3.prev = _context3.next) {
+            switch (_context2.prev = _context2.next) {
               case 0:
                 if (!isFinished) {
-                  _context3.next = 5;
+                  _context2.next = 5;
                   break;
                 }
-                _context3.next = 3;
+                _context2.next = 3;
                 return challengeService.getUserChallengeDataload(userChallenge);
               case 3:
-                dataloads = _context3.sent;
-                if (subscribed) {
-                  setFinishedDataLoad(dataloads);
-                }
+                dataloads = _context2.sent;
+                setFinishedDataLoad(dataloads);
               case 5:
               case "end":
-                return _context3.stop();
+                return _context2.stop();
             }
           }
-        }, _callee3);
+        }, _callee2);
       }));
       return _populateData.apply(this, arguments);
     }
-    populateData();
+    subscribed && populateData();
     return function () {
       subscribed = false;
     };
@@ -18326,9 +18004,9 @@ var DuelOngoing = function DuelOngoing(_ref) {
     icon: _captionIncoming.default,
     size: 25
   }), /*#__PURE__*/_react.default.createElement("span", null, t('duel.caption_incoming'))))), /*#__PURE__*/_react.default.createElement(_DuelResultModal.default, {
-    open: resultModal,
+    open: isDone,
     userChallenge: userChallenge,
-    win: winChallenge,
+    win: isWin,
     handleCloseClick: setResult
   }), /*#__PURE__*/_react.default.createElement(_lastDuelModal.default, {
     open: showLastDuelModal,
@@ -18935,7 +18613,7 @@ exports.default = _default;
 
 exports = module.exports = __webpack_require__("DjJv")(false);
 // Module
-exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.konnector-form {\n  width: 100%;\n  margin: 0;\n}\n@media only screen and (min-width: 768px) {\n  .konnector-form {\n    padding-top: 1rem;\n    margin: 1rem 1.5rem 2rem 1.5rem;\n    padding-bottom: 1rem;\n  }\n}\n\n.connection-form {\n  text-align: center;\n}\n.connection-form span {\n  color: #e3b82a;\n  font-weight: bold;\n}\n.connection-form .connection-form-title {\n  margin: 0;\n}\n.connection-form .connection-form-title.enedissgegrandlyon {\n  color: #d87b39;\n}\n.connection-form .connection-form-title.grdfgrandlyon {\n  color: #45d1b8;\n}\n.connection-form .connection-form-title.eglgrandlyon {\n  color: #3a98ec;\n}\n.connection-form .connection-form-subtitle {\n  margin: 0 auto 0.5rem auto;\n  color: #ffffff;\n}\n.connection-form .connection-form-button {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 0.5rem;\n}\n.connection-form .connection-form-button button {\n  height: 2.5rem;\n  max-width: 22.5rem;\n  margin: 0;\n}\n.connection-form .connection-form-connect-button button {\n  height: auto;\n}\n.connection-form .connection-form-connect-button.grdf {\n  margin-top: 2rem;\n}\n.connection-form .connection-form-connect-button .connection-form-connect-button-content {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 100%;\n}\n@media only screen and (max-width : 768px) {\n  .connection-form .connection-form-connect-button .connection-form-connect-button-content {\n    justify-content: left;\n  }\n}\n.connection-form .connection-form-connect-button .connection-form-connect-button-content .connection-form-connect-button-content-icon {\n  margin: 0 0.5rem 0 0;\n}\n.connection-form .connection-form-connect-button .connection-form-connect-button-content .connection-form-connect-button-text {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  text-align: left;\n  max-width: 19.5rem;\n}\n\n.connectView {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  justify-content: space-between;\n}\n.connectView .stepContainer {\n  padding: 1rem;\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n}\n.connectView .stepContainer .stepDetails {\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  /* Chrome, Safari, Edge, Opera */\n  /* Firefox */\n}\n.connectView .stepContainer .stepDetails h2 {\n  color: #e0e0e0;\n  margin: 0;\n}\n.connectView .stepContainer .stepDetails label.inline {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 10px;\n  cursor: pointer;\n}\n.connectView .stepContainer .stepDetails label.inline.inline {\n  flex-direction: row;\n  align-items: center;\n  gap: 0.5rem;\n}\n.connectView .stepContainer .stepDetails label.inline span span {\n  color: #e3b82a;\n}\n.connectView .stepContainer .stepDetails #zipCode {\n  max-width: 115px;\n}\n.connectView .stepContainer .stepDetails .MuiInputBase-root {\n  max-width: 300px;\n}\n.connectView .stepContainer .stepDetails input::-webkit-outer-spin-button,\n.connectView .stepContainer .stepDetails input::-webkit-inner-spin-button {\n  -webkit-appearance: none;\n}\n.connectView .stepContainer .stepDetails input[type=number] {\n  appearance: textfield;\n  -moz-appearance: textfield;\n}\n.connectView .stepContainer .stepDetails .btnText {\n  max-width: 280px;\n}\n.connectView .stepContainer .stepDetails ul {\n  margin: 0;\n  padding: 0 1rem 1rem;\n  line-height: 130%;\n  border-bottom: 1px solid #7b7b7b;\n}\n.connectView .stepContainer .stepDetails ul li {\n  margin: 0.5rem 0;\n}\n\n.hintModal {\n  display: flex;\n  flex-direction: column;\n  text-align: left;\n}\n.hintModal h1 {\n  text-align: center;\n  color: #e3b82a;\n  margin: 1rem 0;\n}\n.hintModal .content {\n  display: flex;\n  flex-direction: column;\n  gap: 1.5rem;\n}\n.hintModal .content p {\n  text-align: center;\n  color: #e0e0e0;\n  margin: 0;\n  text-wrap: pretty;\n}\n.hintModal .content .grdfText {\n  color: #e0e0e0;\n}\n.hintModal .content .grdfText span {\n  color: #e3b82a;\n  font-weight: 700;\n}\n.hintModal .content .bill {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n.hintModal .content .bill.grdf {\n  justify-content: center;\n}\n.hintModal .content .bill p {\n  color: #e3b82a;\n}\n.hintModal .content svg.prm {\n  width: 100%;\n  height: 180px;\n}", ""]);
+exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.konnector-form {\n  width: 100%;\n  margin: 0;\n}\n@media only screen and (min-width: 768px) {\n  .konnector-form {\n    padding-top: 1rem;\n    margin: 1rem 1.5rem 2rem 1.5rem;\n    padding-bottom: 1rem;\n  }\n}\n\n.connection-form {\n  text-align: center;\n}\n.connection-form span {\n  color: #e3b82a;\n  font-weight: bold;\n}\n.connection-form .connection-form-title {\n  margin: 0;\n}\n.connection-form .connection-form-title.enedissgegrandlyon {\n  color: #d87b39;\n}\n.connection-form .connection-form-title.grdfgrandlyon {\n  color: #45d1b8;\n}\n.connection-form .connection-form-title.eglgrandlyon {\n  color: #3a98ec;\n}\n.connection-form .connection-form-subtitle {\n  margin: 0 auto 0.5rem auto;\n  color: #ffffff;\n}\n\n.connection-form-button {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 0.5rem;\n}\n.connection-form-button button {\n  height: 2.5rem;\n  max-width: 22.5rem;\n  margin: 0;\n}\n\n.connection-form-connect-button button {\n  height: auto;\n}\n.connection-form-connect-button.grdf {\n  margin-top: 2rem;\n}\n.connection-form-connect-button .connection-form-connect-button-content {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 100%;\n}\n@media only screen and (max-width : 768px) {\n  .connection-form-connect-button .connection-form-connect-button-content {\n    justify-content: left;\n  }\n}\n.connection-form-connect-button .connection-form-connect-button-content .connection-form-connect-button-content-icon {\n  margin: 0 0.5rem 0 0;\n}\n.connection-form-connect-button .connection-form-connect-button-content .connection-form-connect-button-text {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  text-align: left;\n  max-width: 19.5rem;\n}\n\n.connectView {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  justify-content: space-between;\n}\n.connectView .stepContainer {\n  padding: 1rem;\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n}\n.connectView .stepContainer .stepDetails {\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n  /* Chrome, Safari, Edge, Opera */\n  /* Firefox */\n}\n.connectView .stepContainer .stepDetails h2 {\n  color: #e0e0e0;\n  margin: 0;\n}\n.connectView .stepContainer .stepDetails label.inline {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 10px;\n  cursor: pointer;\n}\n.connectView .stepContainer .stepDetails label.inline.inline {\n  flex-direction: row;\n  align-items: center;\n  gap: 0.5rem;\n}\n.connectView .stepContainer .stepDetails label.inline span span {\n  color: #e3b82a;\n}\n.connectView .stepContainer .stepDetails #zipCode {\n  max-width: 115px;\n}\n.connectView .stepContainer .stepDetails .MuiInputBase-root {\n  max-width: 300px;\n}\n.connectView .stepContainer .stepDetails input::-webkit-outer-spin-button,\n.connectView .stepContainer .stepDetails input::-webkit-inner-spin-button {\n  -webkit-appearance: none;\n}\n.connectView .stepContainer .stepDetails input[type=number] {\n  appearance: textfield;\n  -moz-appearance: textfield;\n}\n.connectView .stepContainer .stepDetails .btnText {\n  max-width: 280px;\n}\n.connectView .stepContainer .stepDetails ul {\n  margin: 0;\n  padding: 0 1rem 1rem;\n  line-height: 130%;\n  border-bottom: 1px solid #7b7b7b;\n}\n.connectView .stepContainer .stepDetails ul li {\n  margin: 0.5rem 0;\n}\n\n.hintModal {\n  display: flex;\n  flex-direction: column;\n  text-align: left;\n}\n.hintModal h1 {\n  text-align: center;\n  color: #e3b82a;\n  margin: 1rem 0;\n}\n.hintModal .content {\n  display: flex;\n  flex-direction: column;\n  gap: 1.5rem;\n}\n.hintModal .content p {\n  text-align: center;\n  color: #e0e0e0;\n  margin: 0;\n  text-wrap: pretty;\n}\n.hintModal .content .grdfText {\n  color: #e0e0e0;\n}\n.hintModal .content .grdfText span {\n  color: #e3b82a;\n  font-weight: 700;\n}\n.hintModal .content .bill {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n.hintModal .content .bill.grdf {\n  justify-content: center;\n}\n.hintModal .content .bill p {\n  color: #e3b82a;\n}\n.hintModal .content svg.prm {\n  width: 100%;\n  height: 180px;\n}", ""]);
 
 
 
@@ -19031,7 +18709,7 @@ exports.default = _default;
 
 exports = module.exports = __webpack_require__("DjJv")(false);
 // Module
-exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.cardContent {\n  background: transparent;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  gap: 1rem;\n}\n.cardContent.onGoing {\n  border: 1px solid #e0e0e0;\n  background: inherit !important;\n}\n.cardContent.onGoing .challengeTitle {\n  margin-top: 0;\n}\n.cardContent button {\n  height: unset;\n}\n\n.titleBlock {\n  position: absolute;\n  left: 0;\n  right: 0;\n  margin: auto;\n  top: -1.5rem;\n  background: #121212;\n  width: fit-content;\n  padding: 0 1rem;\n  max-width: 235px;\n}\n\n.notifChallenge {\n  position: absolute;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  right: 4px;\n  top: 4px;\n  width: 1.25rem;\n  height: 1.25rem;\n  color: #25262b;\n  border-radius: 50%;\n  border: 1px solid #25262b;\n  z-index: 1;\n  background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n  font-size: 12px;\n}\n\n.smallCard {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  max-height: 90px;\n}\n@media all and (max-height: 800px) {\n  .smallCard {\n    max-height: 85px;\n  }\n}\n@media all and (max-height: 730px) {\n  .smallCard {\n    max-height: 70px;\n  }\n}\n.smallCard.finished {\n  border: 1px solid #7b7b7b;\n  background: #121212;\n}\n.smallCard.finished > * {\n  color: #7b7b7b !important;\n}\n.smallCard.duelCard {\n  background: #181819;\n  border: solid 1px rgba(97, 240, 242, 0.5);\n}\n.smallCard.duelCard.active {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n}\n.smallCard.duelCard span {\n  justify-content: space-between !important;\n}\n.smallCard.goDuel {\n  background: linear-gradient(180deg, #61f0f2 0%, #48c2c4 100%);\n}\n.smallCard.goDuel span {\n  color: #121212 !important;\n  justify-content: space-between !important;\n  font-weight: 700;\n}\n.smallCard span.MuiButton-label {\n  display: flex;\n  justify-content: flex-start;\n  padding: 1rem 0.5rem;\n  color: #e0e0e0;\n  transition: all 300ms ease;\n  text-transform: capitalize;\n}\n.smallCard span.MuiButton-label .content {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  text-transform: capitalize;\n}\n.smallCard span.MuiButton-label .content .stars {\n  display: flex;\n  gap: 2px;\n}\n.smallCard span.MuiButton-label .spinner-container {\n  height: 3.75rem;\n  width: 3.75rem;\n  margin: auto;\n}\n.smallCard span.MuiButton-label .cardIcon {\n  margin-right: 1rem;\n}\n.smallCard span.MuiButton-label span {\n  font-size: 1.1rem;\n  font-weight: 700;\n}\n@media all and (max-height: 700px) {\n  .smallCard span.MuiButton-label span {\n    font-size: 1rem;\n  }\n}\n.smallCard span.MuiButton-label .challengeminIcon {\n  filter: drop-shadow(0px 2px 2px rgba(0, 0, 0, 0.55));\n}\n.smallCard span.MuiButton-label .starCount {\n  display: flex;\n  align-items: center;\n  margin: 0;\n}\n.smallCard span.MuiButton-label .starCount span {\n  margin: 0;\n}\n.smallCard span.MuiButton-label .starCount .blueNumber {\n  font-weight: 900;\n  color: #61f0f2;\n  margin: 0 0.3rem 0 0.7rem;\n}\n.smallCard span.MuiButton-label .finalDuel {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n}\n.smallCard span.MuiButton-label .finalDuel .starCount span {\n  font-size: 1rem;\n  font-weight: 500;\n}\n.smallCard span.MuiButton-label .finalDuel .starCount .blueNumber {\n  margin-left: 0;\n}\n.smallCard span.MuiButton-label .finalDuel.result span {\n  margin-bottom: 0.2rem;\n  font-weight: 600;\n  font-size: 1rem;\n}", ""]);
+exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.cardContent {\n  background: transparent;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  gap: 1rem;\n}\n.cardContent.onGoing {\n  border: 1px solid #e0e0e0;\n  background: inherit !important;\n}\n.cardContent.onGoing .challengeTitle {\n  margin-top: 0;\n}\n.cardContent button {\n  height: unset;\n}\n\n.titleBlock {\n  position: absolute;\n  left: 0;\n  right: 0;\n  margin: auto;\n  top: -1.5rem;\n  background: #121212;\n  width: fit-content;\n  padding: 0 1rem;\n  max-width: 235px;\n}\n\n.notifChallenge {\n  position: absolute;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  right: 4px;\n  top: 4px;\n  width: 1.25rem;\n  height: 1.25rem;\n  color: #25262b;\n  border-radius: 50%;\n  border: 1px solid #25262b;\n  z-index: 1;\n  background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n  font-size: 12px;\n}\n\n.smallCard {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  max-height: 90px;\n}\n@media all and (max-height: 800px) {\n  .smallCard {\n    max-height: 85px;\n  }\n}\n@media all and (max-height: 730px) {\n  .smallCard {\n    max-height: 70px;\n  }\n}\n.smallCard.finished {\n  border: 1px solid #7b7b7b;\n  background: #121212;\n}\n.smallCard.finished > * {\n  color: #7b7b7b !important;\n}\n.smallCard.duelCard {\n  background: #181819;\n  border: solid 1px rgba(97, 240, 242, 0.5);\n}\n.smallCard.duelCard.active {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n}\n.smallCard.duelCard span {\n  justify-content: space-between !important;\n}\n.smallCard.goDuel {\n  background: linear-gradient(180deg, #61f0f2 0%, #48c2c4 100%);\n}\n.smallCard.goDuel span {\n  color: #121212 !important;\n  justify-content: space-between !important;\n  font-weight: 700;\n}\n.smallCard span.MuiButton-label {\n  display: flex;\n  justify-content: flex-start;\n  padding: 1rem 0.5rem;\n  color: #e0e0e0;\n  transition: all 300ms ease;\n  text-transform: capitalize;\n}\n.smallCard span.MuiButton-label .content {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  text-transform: capitalize;\n}\n.smallCard span.MuiButton-label .content .stars {\n  display: flex;\n  gap: 2px;\n}\n.smallCard span.MuiButton-label .spinner-container {\n  height: 3.75rem;\n  width: 3.75rem;\n  margin: auto;\n}\n.smallCard span.MuiButton-label .cardIcon {\n  margin-right: 1rem;\n}\n.smallCard span.MuiButton-label span {\n  font-size: 1.1rem;\n  font-weight: 700;\n}\n@media all and (max-height: 700px) {\n  .smallCard span.MuiButton-label span {\n    font-size: 1rem;\n  }\n}\n.smallCard span.MuiButton-label .challengeminIcon {\n  filter: drop-shadow(0px 2px 2px rgba(0, 0, 0, 0.55));\n}\n.smallCard span.MuiButton-label .starCount {\n  display: flex;\n  align-items: center;\n  margin: 0;\n}\n.smallCard span.MuiButton-label .starCount span {\n  margin: 0;\n}\n.smallCard span.MuiButton-label .starCount .blueNumber {\n  font-weight: 900;\n  color: #61f0f2;\n  margin: 0 0.3rem 0 0.7rem;\n}\n.smallCard span.MuiButton-label .finalDuel {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n}\n.smallCard span.MuiButton-label .finalDuel .starCount span {\n  font-size: 1rem;\n  font-weight: 500;\n}\n.smallCard span.MuiButton-label .finalDuel .starCount .blueNumber {\n  margin-left: 0;\n}\n.smallCard span.MuiButton-label .finalDuel.result span {\n  margin-bottom: 0.2rem;\n  font-weight: 600;\n  font-size: 1rem;\n}\n.smallCard span.MuiButton-label .finalDuel .lowercase {\n  text-transform: lowercase;\n}", ""]);
 
 
 
@@ -19635,9 +19313,7 @@ var ActionList = function ActionList(_ref) {
               case 10:
                 actionList = _context.sent;
               case 11:
-                if (subscribed) {
-                  setActions(actionList);
-                }
+                setActions(actionList);
               case 12:
               case "end":
                 return _context.stop();
@@ -19649,7 +19325,7 @@ var ActionList = function ActionList(_ref) {
         return _ref2.apply(this, arguments);
       };
     }();
-    getActions();
+    subscribed && getActions();
     return function () {
       subscribed = false;
     };
@@ -20375,16 +20051,16 @@ var _reactRouterDom = __webpack_require__("Iyno");
 function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
 function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
 var ConsumptionView = /*#__PURE__*/(0, _react.lazy)(function () {
-  return Promise.all(/* import() */[__webpack_require__.e(0), __webpack_require__.e(7), __webpack_require__.e(4)]).then(__webpack_require__.t.bind(null, "pMGC", 7));
+  return Promise.all(/* import() */[__webpack_require__.e(0), __webpack_require__.e(7), __webpack_require__.e(5)]).then(__webpack_require__.t.bind(null, "pMGC", 7));
 });
 var EcogestureTabsView = /*#__PURE__*/(0, _react.lazy)(function () {
-  return __webpack_require__.e(/* import() */ 5).then(__webpack_require__.t.bind(null, "duvQ", 7));
+  return __webpack_require__.e(/* import() */ 6).then(__webpack_require__.t.bind(null, "duvQ", 7));
 });
 var SingleEcogestureView = /*#__PURE__*/(0, _react.lazy)(function () {
   return __webpack_require__.e(/* import() */ 8).then(__webpack_require__.t.bind(null, "Xpq3", 7));
 });
 var OptionsView = /*#__PURE__*/(0, _react.lazy)(function () {
-  return Promise.all(/* import() */[__webpack_require__.e(0), __webpack_require__.e(11), __webpack_require__.e(6)]).then(__webpack_require__.t.bind(null, "tqkp", 7));
+  return Promise.all(/* import() */[__webpack_require__.e(0), __webpack_require__.e(11), __webpack_require__.e(3)]).then(__webpack_require__.t.bind(null, "tqkp", 7));
 });
 var LegalNoticeView = /*#__PURE__*/(0, _react.lazy)(function () {
   return __webpack_require__.e(/* import() */ 10).then(__webpack_require__.t.bind(null, "khfY", 7));
@@ -20393,7 +20069,7 @@ var GCUView = /*#__PURE__*/(0, _react.lazy)(function () {
   return __webpack_require__.e(/* import() */ 9).then(__webpack_require__.t.bind(null, "7qbG", 7));
 });
 var AnalysisView = /*#__PURE__*/(0, _react.lazy)(function () {
-  return Promise.all(/* import() */[__webpack_require__.e(0), __webpack_require__.e(7), __webpack_require__.e(11), __webpack_require__.e(3)]).then(__webpack_require__.t.bind(null, "iP2k", 7));
+  return Promise.all(/* import() */[__webpack_require__.e(0), __webpack_require__.e(7), __webpack_require__.e(11), __webpack_require__.e(4)]).then(__webpack_require__.t.bind(null, "iP2k", 7));
 });
 var ProfileTypeView = /*#__PURE__*/(0, _react.lazy)(function () {
   return Promise.resolve(/* import() */).then(__webpack_require__.t.bind(null, "biw3", 7));
@@ -20472,9 +20148,6 @@ var AppRoutes = function AppRoutes(_ref) {
   }), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
     path: "/options/gcu",
     element: /*#__PURE__*/_react.default.createElement(GCUView, null)
-  }), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
-    path: "/options/:connectParam",
-    element: /*#__PURE__*/_react.default.createElement(OptionsView, null)
   }), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
     path: "/options",
     element: /*#__PURE__*/_react.default.createElement(OptionsView, null)
@@ -20999,6 +20672,40 @@ var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WE
 
 /***/ }),
 
+/***/ "a1IZ":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _interopRequireDefault = __webpack_require__("jm00");
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _I18n = __webpack_require__("nUfk");
+var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
+__webpack_require__("Qrc9");
+var SkipLink = function SkipLink() {
+  var _useI18n = (0, _I18n.useI18n)(),
+    t = _useI18n.t;
+  var handleSkip = function handleSkip(event) {
+    event.preventDefault();
+    var mainContent = document.getElementById('app-content');
+    if (mainContent) {
+      mainContent.focus();
+    }
+  };
+  return /*#__PURE__*/_react.default.createElement("button", {
+    className: "skip-link",
+    onClick: handleSkip
+  }, t('common.accessibility.skip_link'));
+};
+var _default = SkipLink;
+exports.default = _default;
+
+/***/ }),
+
 /***/ "aHUY":
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
@@ -21510,6 +21217,9 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
 function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
 function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
 function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+/**
+ * http://ecolyo.cozy.tools:8080/#/profileType
+ */
 var ProfileTypeView = function ProfileTypeView() {
   var _useAppSelector = (0, _hooks.useAppSelector)(function (state) {
       return state.ecolyo;
@@ -22584,59 +22294,24 @@ var ExplorationService = /*#__PURE__*/function () {
      */
   }, {
     key: "startUserExploration",
-    value: function () {
-      var _startUserExploration = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(userExploration) {
-        var updatedUserExploration;
-        return _regenerator.default.wrap(function _callee4$(_context4) {
-          while (1) {
-            switch (_context4.prev = _context4.next) {
-              case 0:
-                updatedUserExploration = _objectSpread(_objectSpread({}, userExploration), {}, {
-                  state: _enums.UserExplorationState.ONGOING
-                });
-                return _context4.abrupt("return", updatedUserExploration);
-              case 2:
-              case "end":
-                return _context4.stop();
-            }
-          }
-        }, _callee4);
-      }));
-      function startUserExploration(_x2) {
-        return _startUserExploration.apply(this, arguments);
-      }
-      return startUserExploration;
-    }()
+    value: function startUserExploration(userExploration) {
+      return _objectSpread(_objectSpread({}, userExploration), {}, {
+        state: _enums.UserExplorationState.ONGOING
+      });
+    }
+
     /**
      * Return exploration with updated state to UserExplorationState.NOTIFICATION
      * @param {UserExploration} userExploration - userExploration to update
      */
   }, {
     key: "setNotificationUserExploration",
-    value: function () {
-      var _setNotificationUserExploration = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(userExploration) {
-        var updatedUserExploration;
-        return _regenerator.default.wrap(function _callee5$(_context5) {
-          while (1) {
-            switch (_context5.prev = _context5.next) {
-              case 0:
-                updatedUserExploration = _objectSpread(_objectSpread({}, userExploration), {}, {
-                  state: _enums.UserExplorationState.NOTIFICATION,
-                  progress: 5 // userExploration.type === UserExplorationType.ACTION ? 3 : 1,
-                });
-                return _context5.abrupt("return", updatedUserExploration);
-              case 2:
-              case "end":
-                return _context5.stop();
-            }
-          }
-        }, _callee5);
-      }));
-      function setNotificationUserExploration(_x3) {
-        return _setNotificationUserExploration.apply(this, arguments);
-      }
-      return setNotificationUserExploration;
-    }()
+    value: function setNotificationUserExploration(userExploration) {
+      return _objectSpread(_objectSpread({}, userExploration), {}, {
+        state: _enums.UserExplorationState.NOTIFICATION,
+        progress: 5 // userExploration.type === UserExplorationType.ACTION ? 3 : 1,
+      });
+    }
     /**
      * Return exploration with updated state to UserExplorationState.DONE
      * @param {UserExploration} userExploration - userExploration to update
@@ -22644,12 +22319,10 @@ var ExplorationService = /*#__PURE__*/function () {
   }, {
     key: "endUserExploration",
     value: function endUserExploration(userExploration) {
-      var updatedUserExploration = _objectSpread(_objectSpread({}, userExploration), {}, {
+      return _objectSpread(_objectSpread({}, userExploration), {}, {
         state: _enums.UserExplorationState.DONE,
         progress: 5 // userExploration.type === UserExplorationType.ACTION ? 3 : 1,
       });
-
-      return updatedUserExploration;
     }
 
     /**
@@ -22658,30 +22331,12 @@ var ExplorationService = /*#__PURE__*/function () {
      */
   }, {
     key: "updateUserExploration",
-    value: function () {
-      var _updateUserExploration = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(userExploration) {
-        var updatedProgress, updatedUserExploration;
-        return _regenerator.default.wrap(function _callee6$(_context6) {
-          while (1) {
-            switch (_context6.prev = _context6.next) {
-              case 0:
-                updatedProgress = userExploration.progress + 1;
-                updatedUserExploration = _objectSpread(_objectSpread({}, userExploration), {}, {
-                  progress: updatedProgress
-                });
-                return _context6.abrupt("return", updatedUserExploration);
-              case 3:
-              case "end":
-                return _context6.stop();
-            }
-          }
-        }, _callee6);
-      }));
-      function updateUserExploration(_x4) {
-        return _updateUserExploration.apply(this, arguments);
-      }
-      return updateUserExploration;
-    }()
+    value: function updateUserExploration(userExploration) {
+      return _objectSpread(_objectSpread({}, userExploration), {}, {
+        progress: userExploration.progress + 1
+      });
+    }
+
     /**
      * Return updated UserChallenge with updated UserExploration
      * @param {UserChallenge} currentChallenge - currentUserChallenge ongoing
@@ -22690,36 +22345,36 @@ var ExplorationService = /*#__PURE__*/function () {
   }, {
     key: "checkExploration",
     value: function () {
-      var _checkExploration = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(currentChallenge, explorationID) {
+      var _checkExploration = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(currentChallenge, explorationID) {
         var challengeService;
-        return _regenerator.default.wrap(function _callee7$(_context7) {
+        return _regenerator.default.wrap(function _callee4$(_context4) {
           while (1) {
-            switch (_context7.prev = _context7.next) {
+            switch (_context4.prev = _context4.next) {
               case 0:
                 challengeService = new _challenge.default(this._client);
-                _context7.t0 = explorationID;
-                _context7.next = _context7.t0 === _enums.UserExplorationID.EXPLORATION007 ? 4 : _context7.t0 === _enums.UserExplorationID.EXPLORATION002 ? 9 : _context7.t0 === _enums.UserExplorationID.EXPLORATION004_0 ? 9 : _context7.t0 === _enums.UserExplorationID.EXPLORATION005 ? 9 : _context7.t0 === _enums.UserExplorationID.EXPLORATION004 ? 9 : _context7.t0 === _enums.UserExplorationID.EXPLORATION003 ? 9 : _context7.t0 === _enums.UserExplorationID.EXPLORATION008 ? 9 : _context7.t0 === _enums.UserExplorationID.EXPLORATION001 ? 9 : 10;
+                _context4.t0 = explorationID;
+                _context4.next = _context4.t0 === _enums.UserExplorationID.EXPLORATION007 ? 4 : _context4.t0 === _enums.UserExplorationID.EXPLORATION002 ? 9 : _context4.t0 === _enums.UserExplorationID.EXPLORATION004_0 ? 9 : _context4.t0 === _enums.UserExplorationID.EXPLORATION005 ? 9 : _context4.t0 === _enums.UserExplorationID.EXPLORATION004 ? 9 : _context4.t0 === _enums.UserExplorationID.EXPLORATION003 ? 9 : _context4.t0 === _enums.UserExplorationID.EXPLORATION008 ? 9 : _context4.t0 === _enums.UserExplorationID.EXPLORATION001 ? 9 : 10;
                 break;
               case 4:
                 if (!(currentChallenge.exploration.progress + 1 < currentChallenge.exploration.target)) {
-                  _context7.next = 8;
+                  _context4.next = 8;
                   break;
                 }
-                return _context7.abrupt("return", challengeService.updateUserChallenge(currentChallenge, _enums.UserChallengeUpdateFlag.EXPLORATION_UPDATE));
+                return _context4.abrupt("return", challengeService.updateUserChallenge(currentChallenge, _enums.UserChallengeUpdateFlag.EXPLORATION_UPDATE));
               case 8:
-                return _context7.abrupt("return", challengeService.updateUserChallenge(currentChallenge, _enums.UserChallengeUpdateFlag.EXPLORATION_NOTIFICATION));
+                return _context4.abrupt("return", challengeService.updateUserChallenge(currentChallenge, _enums.UserChallengeUpdateFlag.EXPLORATION_NOTIFICATION));
               case 9:
-                return _context7.abrupt("return", challengeService.updateUserChallenge(currentChallenge, _enums.UserChallengeUpdateFlag.EXPLORATION_NOTIFICATION));
+                return _context4.abrupt("return", challengeService.updateUserChallenge(currentChallenge, _enums.UserChallengeUpdateFlag.EXPLORATION_NOTIFICATION));
               case 10:
-                return _context7.abrupt("return", currentChallenge);
+                return _context4.abrupt("return", currentChallenge);
               case 11:
               case "end":
-                return _context7.stop();
+                return _context4.stop();
             }
           }
-        }, _callee7, this);
+        }, _callee4, this);
       }));
-      function checkExploration(_x5, _x6) {
+      function checkExploration(_x2, _x3) {
         return _checkExploration.apply(this, arguments);
       }
       return checkExploration;
@@ -24699,10 +24354,10 @@ exports.default = void 0;
 var _core = __webpack_require__("rMFn");
 var _Dialog = _interopRequireDefault(__webpack_require__("L/1U"));
 var _close = _interopRequireDefault(__webpack_require__("lCJQ"));
+var _StyledIconButton = _interopRequireDefault(__webpack_require__("90PE"));
 var _I18n = __webpack_require__("nUfk");
 var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
 __webpack_require__("g6YI");
-var _StyledIconButton = _interopRequireDefault(__webpack_require__("90PE"));
 var EcogestureSelectionModal = function EcogestureSelectionModal(_ref) {
   var open = _ref.open,
     handleCloseClick = _ref.handleCloseClick;
@@ -24730,7 +24385,6 @@ var EcogestureSelectionModal = function EcogestureSelectionModal(_ref) {
   }, t('ecogesture_selection.selectionModal.title')), /*#__PURE__*/_react.default.createElement("div", {
     className: "text text-16-normal"
   }, t('ecogesture_selection.selectionModal.text')), /*#__PURE__*/_react.default.createElement(_core.Button, {
-    "aria-label": t('ecogesture_selection.selectionModal.button_close'),
     onClick: handleCloseClick,
     className: "btnPrimary"
   }, t('ecogesture_selection.selectionModal.button_close'))));
@@ -25363,12 +25017,13 @@ var ProfileTypeFormMultiChoice = function ProfileTypeFormMultiChoice(_ref) {
     if (!value) return null;
     var stringValue = value.toString();
     return /*#__PURE__*/_react.default.createElement("label", {
+      htmlFor: "answer".concat(index),
       key: index,
       className: (0, _classnames.default)('checkbox', (0, _defineProperty2.default)({}, 'answer-checked', answer.includes(stringValue)))
     }, /*#__PURE__*/_react.default.createElement("input", {
+      id: "answer".concat(index),
       type: "checkbox",
       value: stringValue,
-      name: stringValue,
       onChange: function onChange() {
         return handleChange(stringValue);
       },
@@ -25482,7 +25137,7 @@ var ExplorationOngoing = function ExplorationOngoing(_ref) {
           onClick: validExploration,
           className: "btnSecondary"
         }, t('exploration.button_already_done')), /*#__PURE__*/_react.default.createElement(_Button.default, {
-          "aria-label": t('exploration.accessibility.button_already_done'),
+          "aria-label": t('exploration.accessibility.button_come_back'),
           onClick: function onClick() {
             return navigate(-1);
           },
@@ -25890,6 +25545,9 @@ var _DuelEmptyValueModal = _interopRequireDefault(__webpack_require__("UtoS"));
 var _DuelError = _interopRequireDefault(__webpack_require__("Od67"));
 var _DuelOngoing = _interopRequireDefault(__webpack_require__("UM1s"));
 var _DuelUnlocked = _interopRequireDefault(__webpack_require__("hV6o"));
+/**
+ * http://ecolyo.cozy.tools:8080/#/challenges/
+ */
 var DuelView = function DuelView() {
   var navigate = (0, _reactRouterDom.useNavigate)();
   var _useAppSelector = (0, _hooks.useAppSelector)(function (state) {
@@ -27264,104 +26922,82 @@ var InitializationService = /*#__PURE__*/function () {
     }()
   }, {
     key: "initAnalysis",
-    value: function () {
-      var _initAnalysis = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(profile) {
-        var startTime, actualAnalysisDate, errorMessage;
-        return _regenerator.default.wrap(function _callee9$(_context9) {
-          while (1) {
-            switch (_context9.prev = _context9.next) {
-              case 0:
-                startTime = performance.now();
-                _context9.prev = 1;
-                actualAnalysisDate = (0, _date.getActualAnalysisDate)();
-                if (!(profile.monthlyAnalysisDate && actualAnalysisDate <= profile.monthlyAnalysisDate)) {
-                  _context9.next = 8;
-                  break;
-                }
-                (0, _duration.logDuration)('[Initialization] Analysis information from profile loaded', startTime);
-                return _context9.abrupt("return", {
-                  monthlyAnalysisDate: profile.monthlyAnalysisDate,
-                  haveSeenLastAnalysis: profile.haveSeenLastAnalysis
-                });
-              case 8:
-                (0, _duration.logDuration)('[Initialization] Analysis information from profile updated', startTime);
-                return _context9.abrupt("return", {
-                  monthlyAnalysisDate: actualAnalysisDate,
-                  haveSeenLastAnalysis: profile.isFirstConnection
-                });
-              case 10:
-                _context9.next = 20;
-                break;
-              case 12:
-                _context9.prev = 12;
-                _context9.t0 = _context9["catch"](1);
-                this._setInitStepError(_models.InitStepsErrors.ANALYSIS_ERROR);
-                errorMessage = "Initialization error - initAnalysis: ".concat(JSON.stringify(_context9.t0));
-                logStack('error', errorMessage);
-                _logger.default.error(errorMessage);
-                Sentry.captureException(_context9.t0);
-                throw _context9.t0;
-              case 20:
-              case "end":
-                return _context9.stop();
-            }
-          }
-        }, _callee9, this, [[1, 12]]);
-      }));
-      function initAnalysis(_x5) {
-        return _initAnalysis.apply(this, arguments);
+    value: function initAnalysis(profile) {
+      var startTime = performance.now();
+      try {
+        var actualAnalysisDate = (0, _date.getActualAnalysisDate)();
+        if (profile.monthlyAnalysisDate && actualAnalysisDate <= profile.monthlyAnalysisDate) {
+          (0, _duration.logDuration)('[Initialization] Analysis information from profile loaded', startTime);
+          return {
+            monthlyAnalysisDate: profile.monthlyAnalysisDate,
+            haveSeenLastAnalysis: profile.haveSeenLastAnalysis
+          };
+        } else {
+          (0, _duration.logDuration)('[Initialization] Analysis information from profile updated', startTime);
+          return {
+            monthlyAnalysisDate: actualAnalysisDate,
+            haveSeenLastAnalysis: profile.isFirstConnection
+          };
+        }
+      } catch (error) {
+        this._setInitStepError(_models.InitStepsErrors.ANALYSIS_ERROR);
+        var errorMessage = "Initialization error - initAnalysis: ".concat(JSON.stringify(error));
+        logStack('error', errorMessage);
+        _logger.default.error(errorMessage);
+        Sentry.captureException(error);
+        throw error;
       }
-      return initAnalysis;
-    }()
+    }
+
     /**
      * Check if FluidTypes exist
-     * success return: FluidType[]
-     * failure throw error
+     * - success return: FluidType[]
+     * - failure throw error
      */
   }, {
     key: "initFluidTypes",
     value: function () {
-      var _initFluidTypes = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {
+      var _initFluidTypes = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9() {
         var startTime, kss, fluidTypes, errorMessage;
-        return _regenerator.default.wrap(function _callee10$(_context10) {
+        return _regenerator.default.wrap(function _callee9$(_context9) {
           while (1) {
-            switch (_context10.prev = _context10.next) {
+            switch (_context9.prev = _context9.next) {
               case 0:
                 startTime = performance.now();
                 kss = new _konnectorStatus.default(this._client);
-                _context10.prev = 2;
-                _context10.next = 5;
+                _context9.prev = 2;
+                _context9.next = 5;
                 return kss.getKonnectorAccountStatus();
               case 5:
-                fluidTypes = _context10.sent;
+                fluidTypes = _context9.sent;
                 if (!fluidTypes) {
-                  _context10.next = 11;
+                  _context9.next = 11;
                   break;
                 }
                 (0, _duration.logDuration)('[Initialization] Fluid Types loaded', startTime);
-                return _context10.abrupt("return", fluidTypes);
+                return _context9.abrupt("return", fluidTypes);
               case 11:
                 this._setInitStepError(_models.InitStepsErrors.CONSOS_ERROR);
                 throw new Error('initFluidTypes: FluidTypes not found');
               case 13:
-                _context10.next = 24;
+                _context9.next = 24;
                 break;
               case 15:
-                _context10.prev = 15;
-                _context10.t0 = _context10["catch"](2);
+                _context9.prev = 15;
+                _context9.t0 = _context9["catch"](2);
                 this._setInitStepError(_models.InitStepsErrors.CONSOS_ERROR);
-                _logger.default.error('Initialization error - : ', _context10.t0);
-                errorMessage = "Initialization error - initFluidTypes: ".concat(JSON.stringify(_context10.t0));
+                _logger.default.error('Initialization error - : ', _context9.t0);
+                errorMessage = "Initialization error - initFluidTypes: ".concat(JSON.stringify(_context9.t0));
                 logStack('error', errorMessage);
                 _logger.default.error(errorMessage);
-                Sentry.captureException(_context10.t0);
-                throw _context10.t0;
+                Sentry.captureException(_context9.t0);
+                throw _context9.t0;
               case 24:
               case "end":
-                return _context10.stop();
+                return _context9.stop();
             }
           }
-        }, _callee10, this, [[2, 15]]);
+        }, _callee9, this, [[2, 15]]);
       }));
       function initFluidTypes() {
         return _initFluidTypes.apply(this, arguments);
@@ -27370,52 +27006,52 @@ var InitializationService = /*#__PURE__*/function () {
     }()
     /**
      * For each fluid get the trigger status and the last data date
-     * success return: FluidStatus[]
-     * failure throw error
+     * - success return: FluidStatus[]
+     * - failure throw error
      */
   }, {
     key: "initFluidStatus",
     value: function () {
-      var _initFluidStatus = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {
+      var _initFluidStatus = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {
         var startTime, fs, fluidStatus, errorMessage;
-        return _regenerator.default.wrap(function _callee11$(_context11) {
+        return _regenerator.default.wrap(function _callee10$(_context10) {
           while (1) {
-            switch (_context11.prev = _context11.next) {
+            switch (_context10.prev = _context10.next) {
               case 0:
                 startTime = performance.now();
                 fs = new _fluid.default(this._client);
-                _context11.prev = 2;
-                _context11.next = 5;
+                _context10.prev = 2;
+                _context10.next = 5;
                 return fs.getFluidStatus();
               case 5:
-                fluidStatus = _context11.sent;
+                fluidStatus = _context10.sent;
                 if (!fluidStatus) {
-                  _context11.next = 11;
+                  _context10.next = 11;
                   break;
                 }
                 (0, _duration.logDuration)('[Initialization] Fluid Status loaded', startTime);
-                return _context11.abrupt("return", fluidStatus);
+                return _context10.abrupt("return", fluidStatus);
               case 11:
                 this._setInitStepError(_models.InitStepsErrors.CONSOS_ERROR);
                 throw new Error('initFluidStatus: fluidStatus not found');
               case 13:
-                _context11.next = 23;
+                _context10.next = 23;
                 break;
               case 15:
-                _context11.prev = 15;
-                _context11.t0 = _context11["catch"](2);
+                _context10.prev = 15;
+                _context10.t0 = _context10["catch"](2);
                 this._setInitStepError(_models.InitStepsErrors.CONSOS_ERROR);
-                errorMessage = "Initialization error - initFluidStatus: ".concat(JSON.stringify(_context11.t0));
+                errorMessage = "Initialization error - initFluidStatus: ".concat(JSON.stringify(_context10.t0));
                 logStack('error', errorMessage);
                 _logger.default.error(errorMessage);
-                Sentry.captureException(_context11.t0);
-                throw _context11.t0;
+                Sentry.captureException(_context10.t0);
+                throw _context10.t0;
               case 23:
               case "end":
-                return _context11.stop();
+                return _context10.stop();
             }
           }
-        }, _callee11, this, [[2, 15]]);
+        }, _callee10, this, [[2, 15]]);
       }));
       function initFluidStatus() {
         return _initFluidStatus.apply(this, arguments);
@@ -27430,48 +27066,48 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initUserChallenges",
     value: function () {
-      var _initUserChallenges = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(fluidStatus) {
+      var _initUserChallenges = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(fluidStatus) {
         var startTime, challengeService, userChallengeList, errorMessage;
-        return _regenerator.default.wrap(function _callee12$(_context12) {
+        return _regenerator.default.wrap(function _callee11$(_context11) {
           while (1) {
-            switch (_context12.prev = _context12.next) {
+            switch (_context11.prev = _context11.next) {
               case 0:
                 startTime = performance.now();
                 challengeService = new _challenge.default(this._client);
-                _context12.prev = 2;
-                _context12.next = 5;
+                _context11.prev = 2;
+                _context11.next = 5;
                 return challengeService.buildUserChallengeList(fluidStatus);
               case 5:
-                userChallengeList = _context12.sent;
+                userChallengeList = _context11.sent;
                 if (!userChallengeList) {
-                  _context12.next = 11;
+                  _context11.next = 11;
                   break;
                 }
                 (0, _duration.logDuration)('[Initialization] initUserChallenges', startTime);
-                return _context12.abrupt("return", userChallengeList);
+                return _context11.abrupt("return", userChallengeList);
               case 11:
                 this._setInitStepError(_models.InitStepsErrors.CHALLENGES_ERROR);
                 throw new Error('initUserChallenges: userChallengeList not found');
               case 13:
-                _context12.next = 23;
+                _context11.next = 23;
                 break;
               case 15:
-                _context12.prev = 15;
-                _context12.t0 = _context12["catch"](2);
+                _context11.prev = 15;
+                _context11.t0 = _context11["catch"](2);
                 this._setInitStepError(_models.InitStepsErrors.CHALLENGES_ERROR);
-                errorMessage = "Initialization error - initUserChallenges: ".concat(JSON.stringify(_context12.t0));
+                errorMessage = "Initialization error - initUserChallenges: ".concat(JSON.stringify(_context11.t0));
                 logStack('error', errorMessage);
                 _logger.default.error(errorMessage);
-                Sentry.captureException(_context12.t0);
-                throw _context12.t0;
+                Sentry.captureException(_context11.t0);
+                throw _context11.t0;
               case 23:
               case "end":
-                return _context12.stop();
+                return _context11.stop();
             }
           }
-        }, _callee12, this, [[2, 15]]);
+        }, _callee11, this, [[2, 15]]);
       }));
-      function initUserChallenges(_x6) {
+      function initUserChallenges(_x5) {
         return _initUserChallenges.apply(this, arguments);
       }
       return initUserChallenges;
@@ -27484,43 +27120,43 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initDuelProgress",
     value: function () {
-      var _initDuelProgress = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13(userChallenge) {
+      var _initDuelProgress = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(userChallenge) {
         var startTime, challengeService, _yield$challengeServi, updatedUserChallenge, dataloads, errorMessage;
-        return _regenerator.default.wrap(function _callee13$(_context13) {
+        return _regenerator.default.wrap(function _callee12$(_context12) {
           while (1) {
-            switch (_context13.prev = _context13.next) {
+            switch (_context12.prev = _context12.next) {
               case 0:
                 startTime = performance.now();
                 challengeService = new _challenge.default(this._client);
-                _context13.prev = 2;
-                _context13.next = 5;
+                _context12.prev = 2;
+                _context12.next = 5;
                 return challengeService.initChallengeDuelProgress(userChallenge);
               case 5:
-                _yield$challengeServi = _context13.sent;
+                _yield$challengeServi = _context12.sent;
                 updatedUserChallenge = _yield$challengeServi.updatedUserChallenge;
                 dataloads = _yield$challengeServi.dataloads;
                 (0, _duration.logDuration)('[Initialization] initDuelProgress finished', startTime);
-                return _context13.abrupt("return", {
+                return _context12.abrupt("return", {
                   updatedUserChallenge: updatedUserChallenge,
                   dataloads: dataloads
                 });
               case 12:
-                _context13.prev = 12;
-                _context13.t0 = _context13["catch"](2);
+                _context12.prev = 12;
+                _context12.t0 = _context12["catch"](2);
                 this._setInitStepError(_models.InitStepsErrors.CHALLENGES_ERROR);
-                errorMessage = "Initialization error - : ".concat(JSON.stringify(_context13.t0));
+                errorMessage = "Initialization error - : ".concat(JSON.stringify(_context12.t0));
                 logStack('error', errorMessage);
                 _logger.default.error(errorMessage);
-                Sentry.captureException(_context13.t0);
-                throw _context13.t0;
+                Sentry.captureException(_context12.t0);
+                throw _context12.t0;
               case 20:
               case "end":
-                return _context13.stop();
+                return _context12.stop();
             }
           }
-        }, _callee13, this, [[2, 12]]);
+        }, _callee12, this, [[2, 12]]);
       }));
-      function initDuelProgress(_x7) {
+      function initDuelProgress(_x6) {
         return _initDuelProgress.apply(this, arguments);
       }
       return initDuelProgress;
@@ -27528,95 +27164,95 @@ var InitializationService = /*#__PURE__*/function () {
   }, {
     key: "initConsent",
     value: function () {
-      var _initConsent = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14() {
+      var _initConsent = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13() {
         var startTime, termService, isUpToDate, lastTerm, isLastConsentValidated, versionType, errorMessage;
-        return _regenerator.default.wrap(function _callee14$(_context14) {
+        return _regenerator.default.wrap(function _callee13$(_context13) {
           while (1) {
-            switch (_context14.prev = _context14.next) {
+            switch (_context13.prev = _context13.next) {
               case 0:
                 startTime = performance.now();
-                _context14.prev = 1;
+                _context13.prev = 1;
                 termService = new _terms.default(this._client);
-                _context14.next = 5;
+                _context13.next = 5;
                 return termService.isConsentVersionUpToDate();
               case 5:
-                isUpToDate = _context14.sent;
-                _context14.next = 8;
+                isUpToDate = _context13.sent;
+                _context13.next = 8;
                 return termService.getLastTerm();
               case 8:
-                lastTerm = _context14.sent;
+                lastTerm = _context13.sent;
                 if (lastTerm) {
-                  _context14.next = 12;
+                  _context13.next = 12;
                   break;
                 }
                 _logger.default.info('[Initialization] Init first terms');
-                return _context14.abrupt("return", {
+                return _context13.abrupt("return", {
                   accepted: false,
                   versionType: 'init'
                 });
               case 12:
                 if (!isUpToDate) {
-                  _context14.next = 21;
+                  _context13.next = 21;
                   break;
                 }
-                _context14.next = 15;
+                _context13.next = 15;
                 return termService.isLastTermValidated();
               case 15:
-                isLastConsentValidated = _context14.sent;
+                isLastConsentValidated = _context13.sent;
                 if (!isLastConsentValidated) {
-                  _context14.next = 19;
+                  _context13.next = 19;
                   break;
                 }
                 _logger.default.info('[Initialization] Last Consent successfully loaded and valid');
-                return _context14.abrupt("return", {
+                return _context13.abrupt("return", {
                   accepted: true,
                   versionType: 'init'
                 });
               case 19:
                 _logger.default.info('[Initialization] Consent not up-to-date');
-                return _context14.abrupt("return", {
+                return _context13.abrupt("return", {
                   accepted: false,
                   versionType: 'init'
                 });
               case 21:
-                _context14.next = 23;
+                _context13.next = 23;
                 return termService.getTermsVersionType();
               case 23:
-                versionType = _context14.sent;
+                versionType = _context13.sent;
                 if (!(versionType === 'minor')) {
-                  _context14.next = 27;
+                  _context13.next = 27;
                   break;
                 }
                 _logger.default.info('[Initialization] Minor Terms update detected');
-                return _context14.abrupt("return", {
+                return _context13.abrupt("return", {
                   accepted: false,
                   versionType: 'minor'
                 });
               case 27:
                 _logger.default.info('[Initialization] Major Terms update detected');
-                return _context14.abrupt("return", {
+                return _context13.abrupt("return", {
                   accepted: false,
                   versionType: 'major'
                 });
               case 31:
-                _context14.prev = 31;
-                _context14.t0 = _context14["catch"](1);
+                _context13.prev = 31;
+                _context13.t0 = _context13["catch"](1);
                 this._setInitStepError(_models.InitStepsErrors.CONSENT_ERROR);
-                errorMessage = "Initialization error - initConsent: ".concat(JSON.stringify(_context14.t0));
+                errorMessage = "Initialization error - initConsent: ".concat(JSON.stringify(_context13.t0));
                 logStack('error', errorMessage);
                 _logger.default.error(errorMessage);
-                Sentry.captureException(_context14.t0);
-                throw _context14.t0;
+                Sentry.captureException(_context13.t0);
+                throw _context13.t0;
               case 39:
-                _context14.prev = 39;
+                _context13.prev = 39;
                 (0, _duration.logDuration)('[Initialization] initConsent finished', startTime);
-                return _context14.finish(39);
+                return _context13.finish(39);
               case 42:
               case "end":
-                return _context14.stop();
+                return _context13.stop();
             }
           }
-        }, _callee14, this, [[1, 31, 39, 42]]);
+        }, _callee13, this, [[1, 31, 39, 42]]);
       }));
       function initConsent() {
         return _initConsent.apply(this, arguments);
@@ -28886,7 +28522,6 @@ var ChallengeCardLast = function ChallengeCardLast() {
   }, t('challenge.card_last.title')), /*#__PURE__*/_react.default.createElement("div", {
     className: "text-18-normal"
   }, t('challenge.card_last.message1')), /*#__PURE__*/_react.default.createElement(_core.Button, {
-    "aria-label": t('challenge.card_last.button'),
     onClick: handleClickFeedbacks,
     className: "btnSecondary"
   }, t('challenge.card_last.button')));
@@ -29805,16 +29440,17 @@ var EcogestureFormSingleChoice = function EcogestureFormSingleChoice(_ref) {
     className: "profile-form-container ecogesture-form-single"
   }, /*#__PURE__*/_react.default.createElement("div", {
     className: "profile-question-label"
-  }, t("ecogesture_form.".concat(_enums.EcogestureStepForm[step].toLowerCase(), ".question"))), answerType.choices.map(function (value) {
+  }, t("ecogesture_form.".concat(_enums.EcogestureStepForm[step].toLowerCase(), ".question"))), answerType.choices.map(function (value, index) {
     var _classNames;
     if (value === null) return null;
     return /*#__PURE__*/_react.default.createElement("label", {
+      htmlFor: "answer-".concat(index),
       key: value.toString(),
       className: (0, _classnames.default)((_classNames = {}, (0, _defineProperty2.default)(_classNames, 'radio_short', answerType.choices.length < 5), (0, _defineProperty2.default)(_classNames, 'radio_long', answerType.choices.length > 4), (0, _defineProperty2.default)(_classNames, 'answer-checked', answer === value), _classNames))
     }, /*#__PURE__*/_react.default.createElement("input", {
+      id: "answer-".concat(index),
       type: "radio",
       value: value,
-      name: value.toString(),
       onChange: function onChange() {
         return setAnswer(value);
       },
@@ -30045,26 +29681,29 @@ var TermsView = function TermsView() {
   }, termsStatus.versionType === 'major' || termsStatus.versionType === 'init' ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
     className: "terms-content"
   }, /*#__PURE__*/_react.default.createElement(_DataShareConsentContent.default, null), /*#__PURE__*/_react.default.createElement("label", {
+    htmlFor: "dataConsent",
     className: "inline"
   }, /*#__PURE__*/_react.default.createElement("input", {
+    id: "dataConsent",
     type: "checkbox",
-    name: "Data-consent-validation",
     className: "inputCheckbox",
     onChange: function onChange(e) {
       return setDataConsentValidation(e.target.checked);
     },
-    checked: dataConsentValidation
+    checked: dataConsentValidation,
+    required: true
   }), t('dataShare.validDataConsent')), /*#__PURE__*/_react.default.createElement("label", {
+    htmlFor: "gcu",
     className: "inline"
   }, /*#__PURE__*/_react.default.createElement("input", {
     id: "gcu",
     type: "checkbox",
-    name: "GCU-validation",
     className: "inputCheckbox",
     onChange: function onChange(e) {
       return setGCUValidation(e.target.checked);
     },
-    checked: GCUValidation
+    checked: GCUValidation,
+    required: true
   }), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("span", null, t('dataShare.validCGU')), /*#__PURE__*/_react.default.createElement(_core.Button, {
     size: "small",
     className: "btnText",
@@ -30089,7 +29728,6 @@ var TermsView = function TermsView() {
   }, /*#__PURE__*/_react.default.createElement(_MinorUpdateContent.default, null)), /*#__PURE__*/_react.default.createElement("div", {
     className: "terms-footer"
   }, /*#__PURE__*/_react.default.createElement(_core.Button, {
-    "aria-label": t('minorUpdate.button'),
     onClick: handleTermValidate,
     className: "btnPrimary"
   }, t('minorUpdate.button')))), /*#__PURE__*/_react.default.createElement(_CGUModal.default, {
@@ -31209,8 +30847,8 @@ var ProfileTypeFormNumberSelection = function ProfileTypeFormNumberSelection(_re
     type: "tel",
     className: "inputNumberIncrements",
     value: answer.toString(),
-    name: answerType.attribute,
-    size: "small"
+    size: "small",
+    disabled: true
   }), /*#__PURE__*/_react.default.createElement(_core.Button, {
     onClick: function onClick() {
       return increment();
@@ -31363,12 +31001,13 @@ var ProfileTypeFormSingleChoice = function ProfileTypeFormSingleChoice(_ref) {
     var _classNames;
     if (value === null) return null;
     return /*#__PURE__*/_react.default.createElement("label", {
+      htmlFor: "answer-".concat(index),
       key: index,
       className: (0, _classnames.default)((_classNames = {}, (0, _defineProperty2.default)(_classNames, 'radio_short', answerType.choices.length < 5), (0, _defineProperty2.default)(_classNames, 'radio_long', answerType.choices.length > 4), (0, _defineProperty2.default)(_classNames, 'answer-checked', answer === value), _classNames))
     }, /*#__PURE__*/_react.default.createElement("input", {
+      id: "answer-".concat(index),
       type: "radio",
       value: value.toString(),
-      name: value.toString(),
       onChange: function onChange() {
         return setAnswer(value);
       },
@@ -31465,9 +31104,7 @@ var EcogestureSelectionDetail = function EcogestureSelectionDetail(_ref) {
                 return (0, _utils.importIconById)(ecogesture.id, 'ecogesture');
               case 2:
                 icon = _context.sent;
-                if (subscribed) {
-                  setEcogestureIcon(icon || _default2.default);
-                }
+                setEcogestureIcon(icon || _default2.default);
               case 4:
               case "end":
                 return _context.stop();
@@ -31477,7 +31114,7 @@ var EcogestureSelectionDetail = function EcogestureSelectionDetail(_ref) {
       }));
       return _getIcon.apply(this, arguments);
     }
-    getIcon();
+    subscribed && getIcon();
     setShowDetails(false);
     return function () {
       subscribed = false;
@@ -31518,7 +31155,6 @@ var EcogestureSelectionDetail = function EcogestureSelectionDetail(_ref) {
   }, ecogesture.longDescription))), /*#__PURE__*/_react.default.createElement("div", {
     className: "buttons"
   }, /*#__PURE__*/_react.default.createElement(_core.Button, {
-    "aria-label": t('ecogesture_selection.button_objective'),
     classes: {
       root: 'btnSecondary',
       label: 'text-14-bold'
@@ -31530,7 +31166,6 @@ var EcogestureSelectionDetail = function EcogestureSelectionDetail(_ref) {
     icon: _objectiveEnabled.default,
     size: 60
   }), t('ecogesture_selection.button_objective')), /*#__PURE__*/_react.default.createElement(_core.Button, {
-    "aria-label": t('ecogesture_selection.button_doing'),
     classes: {
       root: 'btnSecondary',
       label: 'text-14-bold'
@@ -31542,7 +31177,6 @@ var EcogestureSelectionDetail = function EcogestureSelectionDetail(_ref) {
     icon: _doingEnabled.default,
     size: 60
   }), t('ecogesture_selection.button_doing')), /*#__PURE__*/_react.default.createElement(_core.Button, {
-    "aria-label": t('ecogesture_selection.button_skip'),
     classes: {
       root: 'btnSecondary',
       label: 'text-14-bold'
@@ -31726,6 +31360,9 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
 function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
 function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
 function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+/**
+ * http://ecolyo.cozy.tools:8080/#/connect/electricity
+ */
 var SgeConnectView = function SgeConnectView() {
   var navigate = (0, _reactRouterDom.useNavigate)();
   var dispatch = (0, _hooks.useAppDispatch)();
@@ -32337,11 +31974,14 @@ var _profileEcogestureForm = _interopRequireDefault(__webpack_require__("rjSv"))
 var _hooks = __webpack_require__("6FOS");
 var _profile = __webpack_require__("quVB");
 var _profileEcogesture2 = __webpack_require__("eumI");
+var _EcogestureInitModal = _interopRequireDefault(__webpack_require__("mEyn"));
 var _EcogestureFormEquipment = _interopRequireDefault(__webpack_require__("ZKcy"));
 var _EcogestureFormSingleChoice = _interopRequireDefault(__webpack_require__("pmKQ"));
-var _EcogestureInitModal = _interopRequireDefault(__webpack_require__("mEyn"));
 function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
 function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
+/**
+ * http://ecolyo.cozy.tools:8080/#/ecogesture-form
+ */
 var EcogestureFormView = function EcogestureFormView() {
   var navigate = (0, _reactRouterDom.useNavigate)();
   var dispatch = (0, _hooks.useAppDispatch)();
@@ -32553,31 +32193,33 @@ var StepConsent = function StepConsent(_ref) {
   }, t('auth.enedissgegrandlyon.textConsent')), /*#__PURE__*/_react.default.createElement("ul", {
     className: "text-16-normal"
   }, /*#__PURE__*/_react.default.createElement("li", null, t('auth.enedissgegrandlyon.consentLi1')), /*#__PURE__*/_react.default.createElement("li", null, t('auth.enedissgegrandlyon.consentLi2')), /*#__PURE__*/_react.default.createElement("li", null, t('auth.enedissgegrandlyon.consentLi3')), /*#__PURE__*/_react.default.createElement("li", null, t('auth.enedissgegrandlyon.consentLi4'))), /*#__PURE__*/_react.default.createElement("label", {
+    htmlFor: "dataConsentSge",
     className: "inline"
   }, /*#__PURE__*/_react.default.createElement("input", {
-    id: "dataConsent",
+    id: "dataConsentSge",
     type: "checkbox",
-    name: "Data-consent-validation",
     className: "inputCheckbox",
     onChange: function onChange(e) {
       return _onChange('dataConsent', e.target.checked);
     },
-    checked: sgeState.dataConsent
+    checked: sgeState.dataConsent,
+    required: true
   }), /*#__PURE__*/_react.default.createElement("span", {
     dangerouslySetInnerHTML: {
       __html: t('auth.enedissgegrandlyon.consentCheck1')
     }
   })), /*#__PURE__*/_react.default.createElement("label", {
+    htmlFor: "pdlConfirm",
     className: "inline"
   }, /*#__PURE__*/_react.default.createElement("input", {
     id: "pdlConfirm",
     type: "checkbox",
-    name: "Data-consent-validation",
     className: "inputCheckbox",
     onChange: function onChange(e) {
       return _onChange('pdlConfirm', e.target.checked);
     },
-    checked: sgeState.pdlConfirm
+    checked: sgeState.pdlConfirm,
+    required: true
   }), /*#__PURE__*/_react.default.createElement("span", {
     dangerouslySetInnerHTML: {
       __html: t('auth.enedissgegrandlyon.consentCheck2')
@@ -32655,32 +32297,31 @@ var StepIdentityAndPdl = function StepIdentityAndPdl(_ref) {
     variant: "outlined",
     type: "text",
     id: "firstName",
-    name: "firstName",
     value: sgeState.firstName,
     onChange: function onChange(e) {
       return _onChange('firstName', e.target.value);
     },
-    required: true
+    required: true,
+    autoComplete: "given-name"
   }), /*#__PURE__*/_react.default.createElement(_core.TextField, {
     label: t('auth.enedissgegrandlyon.lastName'),
     variant: "outlined",
     type: "text",
     id: "lastName",
-    name: "lastName",
     value: sgeState.lastName,
     onChange: function onChange(e) {
       return _onChange('lastName', e.target.value);
     },
-    required: true
+    required: true,
+    autoComplete: "family-name"
   }), /*#__PURE__*/_react.default.createElement("h2", {
     className: "text-22-bold"
   }, t('auth.enedissgegrandlyon.pdlTitle')), /*#__PURE__*/_react.default.createElement(_core.TextField, {
     label: t('auth.enedissgegrandlyon.pdlLabel'),
     variant: "outlined",
     id: "pdl",
-    name: "pdl",
     type: "number",
-    value: sgeState.pdl ? sgeState.pdl : undefined,
+    value: sgeState.pdl || '',
     onChange: function onChange(e) {
       return _onChange('pdl', e.target.value, 14);
     },
@@ -33655,6 +33296,9 @@ var _hooks = __webpack_require__("6FOS");
 var _QuizBegin = _interopRequireDefault(__webpack_require__("A8Td"));
 var _QuizFinish = _interopRequireDefault(__webpack_require__("hK4p"));
 var _QuizQuestion = _interopRequireDefault(__webpack_require__("21CV"));
+/**
+ * http://ecolyo.cozy.tools:8080/#/challenges/
+ */
 var QuizView = function QuizView() {
   var _useAppSelector = (0, _hooks.useAppSelector)(function (state) {
       return state.ecolyo.challenge;
diff --git a/index.html b/index.html
index b6e1f4ee30fe9d191395092d45e8b170be5a70b9..7cf7139d34f592894e49efe8fca1f045e4ed497f 100644
--- a/index.html
+++ b/index.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="vendors/ecolyo.9cebad5ae7ea932ed345.js"></script><script src="app/ecolyo.0a6a4a1b5956baae2a4c.js"></script></div></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="vendors/ecolyo.9cebad5ae7ea932ed345.js"></script><script src="app/ecolyo.4a6c58cfe16dca53ce12.js"></script></div></body></html>
\ No newline at end of file
diff --git a/public/ecolyo.5dd25a0699626960a7a3.js b/public/ecolyo.13e8a89ac26ff8c8b5e8.js
similarity index 98%
rename from public/ecolyo.5dd25a0699626960a7a3.js
rename to public/ecolyo.13e8a89ac26ff8c8b5e8.js
index 4c1b272248bbf574304815917adf71d40b678cbe..f008f317217d86f1027553da77eb0d8b69119722 100644
--- a/public/ecolyo.5dd25a0699626960a7a3.js
+++ b/public/ecolyo.13e8a89ac26ff8c8b5e8.js
@@ -21284,7 +21284,7 @@ exports.i(__webpack_require__("/O3k"), "");
 exports.push([module.i, "@import url(https://fonts.googleapis.com/css2?family=Lato:wght@400;700&display=swap);", ""]);
 
 // Module
-exports.push([module.i, "/* Cozy UI utilities classes */\n/* Cozy UI React components styles */\n/* App styles */\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\nhtml {\n  background: #121212;\n}\n\nbody {\n  background: #121212;\n  overflow: unset !important;\n  color: #e0e0e0;\n}\n\n.column {\n  display: flex;\n  flex-direction: column;\n}\n\n.row {\n  display: flex;\n  flex-direction: row;\n}\n\n.cozy-bar {\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-left: 0;\n}\n\n[role=banner] .coz-bar-container {\n  background-color: #ffffff;\n}\n@media only screen and (max-width : 768px) {\n  [role=banner] .coz-bar-container {\n    padding: 0.6rem 0 0 0;\n    background-color: unset;\n  }\n}\n\n.coz-bar-wrapper {\n  box-shadow: unset !important;\n  background: unset !important;\n}\n\n.coz-label {\n  color: #32363f;\n}\n\n.content-view-loading {\n  height: 80vh;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  color: #e0e0e0;\n}\n.content-view-loading .content-view-loading-text {\n  padding-top: 1rem;\n  margin: 0 2rem;\n  text-align: center;\n}\n.content-view-loading .content-view-loading-button {\n  max-width: 50vw;\n  margin-top: 1rem;\n}\n\n[role=main] {\n  /* width */\n  /* Track */\n  /* Handle */\n}\n[role=main]::-webkit-scrollbar {\n  width: 10px;\n}\n[role=main]::-webkit-scrollbar-track {\n  background: #3e4045;\n}\n[role=main]::-webkit-scrollbar-thumb {\n  background: #6f7074;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n* {\n  font-family: Lato, sans-serif;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np {\n  color: #a0a0a0;\n  font-family: Lato, sans-serif;\n}\n\n.home-title {\n  font-size: 1rem;\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 120%;\n  text-transform: uppercase;\n}\n\n.app-title {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: bold;\n  font-size: 21px;\n  line-height: 24px;\n  text-align: center;\n  letter-spacing: 0.15px;\n  color: #e0e0e0;\n  text-shadow: 0px -1px 0px #060609, 0px 1px 0px rgba(255, 255, 255, 0.07);\n}\n\n.text-10, .text-10-italic, .text-10-bold, .text-10-bold-capitalize, .text-10-bold-uppercase, .text-10-normal, .text-10-normal-150, .text-10-normal-uppercase {\n  font-style: normal;\n  font-size: 0.625rem;\n  line-height: 120%;\n}\n.text-10-normal, .text-10-normal-150, .text-10-normal-uppercase {\n  font-weight: normal;\n}\n.text-10-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-10-normal-150 {\n  line-height: 150%;\n}\n.text-10-bold, .text-10-bold-capitalize, .text-10-bold-uppercase {\n  font-weight: 700;\n}\n.text-10-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-10-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-10-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-12, .text-12-italic, .text-12-bold, .text-12-bold-capitalize, .text-12-bold-uppercase, .text-12-normal, .text-12-normal-150, .text-12-normal-uppercase {\n  font-style: normal;\n  font-size: 0.75rem;\n  line-height: 120%;\n}\n.text-12-normal, .text-12-normal-150, .text-12-normal-uppercase {\n  font-weight: normal;\n}\n.text-12-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-12-normal-150 {\n  line-height: 150%;\n}\n.text-12-bold, .text-12-bold-capitalize, .text-12-bold-uppercase {\n  font-weight: 700;\n}\n.text-12-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-12-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-12-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-13, .text-13-italic, .text-13-bold, .text-13-bold-capitalize, .text-13-bold-uppercase, .text-13-normal, .text-13-normal-150, .text-13-normal-uppercase {\n  font-style: normal;\n  font-size: 0.8125rem;\n  line-height: 120%;\n}\n.text-13-normal, .text-13-normal-150, .text-13-normal-uppercase {\n  font-weight: normal;\n}\n.text-13-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-13-normal-150 {\n  line-height: 150%;\n}\n.text-13-bold, .text-13-bold-capitalize, .text-13-bold-uppercase {\n  font-weight: 700;\n}\n.text-13-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-13-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-13-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-14, .text-14-italic, .text-14-bold, .text-14-bold-capitalize, .text-14-bold-uppercase, .text-14-normal, .text-14-normal-150, .text-14-normal-uppercase {\n  font-style: normal;\n  font-size: 0.875rem;\n  line-height: 120%;\n}\n.text-14-normal, .text-14-normal-150, .text-14-normal-uppercase {\n  font-weight: normal;\n}\n.text-14-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-14-normal-150 {\n  line-height: 150%;\n}\n.text-14-bold, .text-14-bold-capitalize, .text-14-bold-uppercase {\n  font-weight: 700;\n}\n.text-14-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-14-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-14-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-15, .text-15-italic, .text-15-bold, .text-15-bold-capitalize, .text-15-bold-uppercase, .text-15-normal, .text-15-normal-150, .text-15-normal-uppercase {\n  font-style: normal;\n  font-size: 0.938rem;\n  line-height: 120%;\n}\n.text-15-normal, .text-15-normal-150, .text-15-normal-uppercase {\n  font-weight: normal;\n}\n.text-15-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-15-normal-150 {\n  line-height: 150%;\n}\n.text-15-bold, .text-15-bold-capitalize, .text-15-bold-uppercase {\n  font-weight: 700;\n}\n.text-15-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-15-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-15-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-16, .text-16-italic, .text-16-bold, .text-16-bold-capitalize, .text-16-bold-uppercase, .text-16-normal, .text-16-normal-150, .text-16-normal-uppercase {\n  font-style: normal;\n  font-size: 1rem;\n  line-height: 120%;\n}\n.text-16-normal, .text-16-normal-150, .text-16-normal-uppercase {\n  font-weight: normal;\n}\n.text-16-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-16-normal-150 {\n  line-height: 150%;\n}\n.text-16-bold, .text-16-bold-capitalize, .text-16-bold-uppercase {\n  font-weight: 700;\n}\n.text-16-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-16-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-16-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-18, .text-18-italic, .text-18-bold, .text-18-bold-capitalize, .text-18-bold-uppercase, .text-18-normal, .text-18-normal-150, .text-18-normal-uppercase {\n  font-style: normal;\n  font-size: 1.125rem;\n  line-height: 120%;\n}\n.text-18-normal, .text-18-normal-150, .text-18-normal-uppercase {\n  font-weight: normal;\n}\n.text-18-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-18-normal-150 {\n  line-height: 150%;\n}\n.text-18-bold, .text-18-bold-capitalize, .text-18-bold-uppercase {\n  font-weight: 700;\n}\n.text-18-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-18-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-18-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-19, .text-19-italic, .text-19-bold, .text-19-bold-capitalize, .text-19-bold-uppercase, .text-19-normal, .text-19-normal-150, .text-19-normal-uppercase {\n  font-style: normal;\n  font-size: 1.188rem;\n  line-height: 120%;\n}\n.text-19-normal, .text-19-normal-150, .text-19-normal-uppercase {\n  font-weight: normal;\n}\n.text-19-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-19-normal-150 {\n  line-height: 150%;\n}\n.text-19-bold, .text-19-bold-capitalize, .text-19-bold-uppercase {\n  font-weight: 700;\n}\n.text-19-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-19-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-19-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-20, .text-20-italic, .text-20-bold, .text-20-bold-capitalize, .text-20-bold-uppercase, .text-20-normal, .text-20-normal-150, .text-20-normal-uppercase {\n  font-style: normal;\n  font-size: 1.25rem;\n  line-height: 120%;\n}\n.text-20-normal, .text-20-normal-150, .text-20-normal-uppercase {\n  font-weight: normal;\n}\n.text-20-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-20-normal-150 {\n  line-height: 150%;\n}\n.text-20-bold, .text-20-bold-capitalize, .text-20-bold-uppercase {\n  font-weight: 700;\n}\n.text-20-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-20-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-20-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-21, .text-21-italic, .text-21-bold, .text-21-bold-capitalize, .text-21-bold-uppercase, .text-21-normal, .text-21-normal-150, .text-21-normal-uppercase {\n  font-style: normal;\n  font-size: 1.313rem;\n  line-height: 120%;\n}\n.text-21-normal, .text-21-normal-150, .text-21-normal-uppercase {\n  font-weight: normal;\n}\n.text-21-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-21-normal-150 {\n  line-height: 150%;\n}\n.text-21-bold, .text-21-bold-capitalize, .text-21-bold-uppercase {\n  font-weight: 700;\n}\n.text-21-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-21-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-21-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-22, .text-22-italic, .text-22-bold, .text-22-bold-capitalize, .text-22-bold-uppercase, .text-22-normal, .text-22-normal-150, .text-22-normal-uppercase {\n  font-style: normal;\n  font-size: 1.375rem;\n  line-height: 120%;\n}\n.text-22-normal, .text-22-normal-150, .text-22-normal-uppercase {\n  font-weight: normal;\n}\n.text-22-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-22-normal-150 {\n  line-height: 150%;\n}\n.text-22-bold, .text-22-bold-capitalize, .text-22-bold-uppercase {\n  font-weight: 700;\n}\n.text-22-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-22-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-22-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-24, .text-24-italic, .text-24-bold, .text-24-bold-capitalize, .text-24-bold-uppercase, .text-24-normal, .text-24-normal-150, .text-24-normal-uppercase {\n  font-style: normal;\n  font-size: 1.5rem;\n  line-height: 120%;\n}\n.text-24-normal, .text-24-normal-150, .text-24-normal-uppercase {\n  font-weight: normal;\n}\n.text-24-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-24-normal-150 {\n  line-height: 150%;\n}\n.text-24-bold, .text-24-bold-capitalize, .text-24-bold-uppercase {\n  font-weight: 700;\n}\n.text-24-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-24-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-24-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-26, .text-26-italic, .text-26-bold, .text-26-bold-capitalize, .text-26-bold-uppercase, .text-26-normal, .text-26-normal-150, .text-26-normal-uppercase {\n  font-style: normal;\n  font-size: 1.625rem;\n  line-height: 120%;\n}\n.text-26-normal, .text-26-normal-150, .text-26-normal-uppercase {\n  font-weight: normal;\n}\n.text-26-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-26-normal-150 {\n  line-height: 150%;\n}\n.text-26-bold, .text-26-bold-capitalize, .text-26-bold-uppercase {\n  font-weight: 700;\n}\n.text-26-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-26-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-26-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-28, .text-28-italic, .text-28-bold, .text-28-bold-capitalize, .text-28-bold-uppercase, .text-28-normal, .text-28-normal-150, .text-28-normal-uppercase {\n  font-style: normal;\n  font-size: 1.75rem;\n  line-height: 120%;\n}\n.text-28-normal, .text-28-normal-150, .text-28-normal-uppercase {\n  font-weight: normal;\n}\n.text-28-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-28-normal-150 {\n  line-height: 150%;\n}\n.text-28-bold, .text-28-bold-capitalize, .text-28-bold-uppercase {\n  font-weight: 700;\n}\n.text-28-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-28-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-28-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-36, .text-36-italic, .text-36-bold, .text-36-bold-capitalize, .text-36-bold-uppercase, .text-36-normal, .text-36-normal-150, .text-36-normal-uppercase {\n  font-style: normal;\n  font-size: 2.25rem;\n  line-height: 120%;\n}\n.text-36-normal, .text-36-normal-150, .text-36-normal-uppercase {\n  font-weight: normal;\n}\n.text-36-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-36-normal-150 {\n  line-height: 150%;\n}\n.text-36-bold, .text-36-bold-capitalize, .text-36-bold-uppercase {\n  font-weight: 700;\n}\n.text-36-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-36-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-36-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n/* Card */\n.card-title-on {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1.125rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n.card-text-bold {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: bold;\n  font-size: 1rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n.card-indicator {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n.card-text {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n/* Chart */\n.chart-ticks-x-text {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1rem;\n  line-height: 120%;\n}\n@media only screen and (max-width : 768px) {\n  .chart-ticks-x-text {\n    font-size: 0.685rem;\n  }\n}\n\n.chart-ticks-y-text {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 0.9rem;\n  line-height: 120%;\n}\n@media only screen and (max-width : 768px) {\n  .chart-ticks-y-text {\n    font-size: 0.75rem;\n  }\n}\n\n/* Cozy bar */\n.cozybar {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: bold;\n  font-size: 1.3125rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.axis {\n  color: #7b7b7b;\n}\n.axis .tick-text {\n  fill: #7b7b7b;\n}\n.axis .tick-text.tick-text-selected {\n  fill: #e0e0e0;\n}\n.axis .separator {\n  text-align: center;\n  margin: 0 2px;\n  font-size: 1rem !important;\n}\n\n.value-text {\n  fill: #7b7b7b;\n}\n.value-text.selected {\n  fill: #e0e0e0;\n}\n\n.barContainer.disabled *,\n.barFill.disabled * {\n  cursor: default !important;\n}\n.barContainer:hover,\n.barFill:hover {\n  cursor: pointer;\n}\n\n.background-true {\n  opacity: 0.1;\n}\n.background-true:hover {\n  cursor: pointer;\n}\n\n.background-false {\n  opacity: 0;\n}\n\n.bar-compare-ELECTRICITY:hover,\n.bar-compare-GAS:hover,\n.bar-compare-WATER:hover,\n.bar-compare-MULTIFLUID:hover,\n.bar-MULTIFLUID:hover,\n.bar-WATER:hover,\n.bar-GAS:hover,\n.bar-ELECTRICITY:hover {\n  cursor: pointer;\n}\n.bar-compare-ELECTRICITY:hover.disabled,\n.bar-compare-GAS:hover.disabled,\n.bar-compare-WATER:hover.disabled,\n.bar-compare-MULTIFLUID:hover.disabled,\n.bar-MULTIFLUID:hover.disabled,\n.bar-WATER:hover.disabled,\n.bar-GAS:hover.disabled,\n.bar-ELECTRICITY:hover.disabled {\n  cursor: default;\n}\n\n.bar-ELECTRICITY {\n  fill: #5d3d2a;\n}\n.bar-ELECTRICITY.selected {\n  fill: #d87b39;\n  filter: drop-shadow(0 -0.1rem 0.2rem #d87b39);\n}\n\n.bar-compare-ELECTRICITY {\n  fill: #795c47;\n}\n.bar-compare-ELECTRICITY.selected {\n  fill: #e2bca1;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1);\n}\n\n.bar-WATER {\n  fill: #20415e;\n}\n.bar-WATER.selected {\n  fill: #3a98ec;\n  filter: drop-shadow(0 -0.1rem 0.2rem #3a98ec);\n}\n\n.bar-compare-WATER {\n  fill: #4d5c6e;\n}\n.bar-compare-WATER.selected {\n  fill: #abd4fa;\n  filter: drop-shadow(0 -0.1rem 0.2rem #abd4fa);\n}\n\n.bar-GAS {\n  fill: #184940;\n}\n.bar-GAS.selected {\n  fill: #45d1b8;\n  filter: drop-shadow(0 -0.1rem 0.2rem #45d1b8);\n}\n\n.bar-compare-GAS {\n  fill: #597773;\n}\n.bar-compare-GAS.selected {\n  fill: #a8f7e9;\n  filter: drop-shadow(0 -0.1rem 0.2rem #a8f7e9);\n}\n\n.bar-MULTIFLUID {\n  fill: #705d1d;\n}\n.bar-MULTIFLUID.selected {\n  fill: #e3b82a;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n.bar-MULTIFLUID.disabled:hover {\n  cursor: default;\n}\n\n.bar-duel {\n  fill: #61f0f2;\n}\n.bar-duel.selected {\n  fill: #61f0f2;\n  filter: drop-shadow(0 -0.1rem 0.2rem #61f0f2);\n}\n.bar-duel.disabled:hover {\n  cursor: default;\n}\n\n.bar-UPCOMING {\n  fill: #7b7b7b;\n  opacity: 0.6;\n}\n.bar-UPCOMING.selected {\n  fill: #7b7b7b;\n}\n.bar-UPCOMING.disabled:hover {\n  cursor: default;\n}\n\n.bar-compare-MULTIFLUID {\n  fill: #7d6a4e;\n}\n.bar-compare-MULTIFLUID.selected {\n  fill: #ffd597;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n\n.bar-average {\n  stroke-width: 2;\n  stroke: #e3b82a;\n}\n\n.week {\n  fill: #e2bca1;\n}\n.week.selected {\n  fill: #e2bca1;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1);\n}\n\n.weekend {\n  fill: #ffd597;\n}\n.weekend.selected {\n  fill: #ffd597;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n\n.barValue {\n  outline: none;\n}\n.barValue:focus-visible {\n  outline: 1px solid;\n}\n\n/** Animation **/\n.bounce-1 {\n  animation-name: bounce-1;\n  animation-timing-function: cubic-bezier(1, 1, 0.42, 1);\n  animation-iteration-count: 1;\n  transform-origin: bottom center;\n  transform-box: fill-box;\n}\n\n@keyframes bounce-1 {\n  0% {\n    transform: scale(0.1, 0.1);\n  }\n  28% {\n    transform: scale(0.1, 1.1);\n  }\n  45% {\n    transform: scale(0.8, 0.95);\n  }\n  55% {\n    transform: scale(1, 1);\n  }\n  65% {\n    transform: scale(1, 0.98);\n  }\n  75% {\n    transform: scale(1, 1);\n  }\n}\n.bounce-2 {\n  animation-name: bounce-2;\n  animation-timing-function: cubic-bezier(1, 1, 0.42, 1);\n  animation-iteration-count: 1;\n  transform-origin: bottom center;\n  transform-box: fill-box;\n}\n\n@keyframes bounce-2 {\n  0% {\n    transform: scale(1, 1);\n  }\n  28% {\n    transform: scale(1, 1.1);\n  }\n  45% {\n    transform: scale(0.8, 0.95);\n  }\n  55% {\n    transform: scale(1, 1);\n  }\n  65% {\n    transform: scale(1, 0.98);\n  }\n  75% {\n    transform: scale(1, 1);\n  }\n}\n/** Animation delay **/\n.delay {\n  animation-duration: 0.4s;\n}\n\n.delay--0 {\n  animation-duration: 0.4s;\n}\n\n.delay--1 {\n  animation-duration: 0.48s;\n}\n\n.delay--2 {\n  animation-duration: 0.56s;\n}\n\n.delay--3 {\n  animation-duration: 0.64s;\n}\n\n.delay--4 {\n  animation-duration: 0.72s;\n}\n\n.delay--5 {\n  animation-duration: 0.8s;\n}\n\n.delay--6 {\n  animation-duration: 0.88s;\n}\n\n.delay--7 {\n  animation-duration: 0.96s;\n}\n\n.delay--8 {\n  animation-duration: 1.04s;\n}\n\n.delay--9 {\n  animation-duration: 1.12s;\n}\n\n.delay--10 {\n  animation-duration: 1.2s;\n}\n\n.delay--11 {\n  animation-duration: 1.28s;\n}\n\n.delay--12 {\n  animation-duration: 1.36s;\n}\n\n.delay--13 {\n  animation-duration: 1.44s;\n}\n\n.delay--14 {\n  animation-duration: 1.52s;\n}\n\n.delay--15 {\n  animation-duration: 1.6s;\n}\n\n.delay--16 {\n  animation-duration: 1.68s;\n}\n\n.delay--17 {\n  animation-duration: 1.76s;\n}\n\n.delay--18 {\n  animation-duration: 1.84s;\n}\n\n.delay--19 {\n  animation-duration: 1.92s;\n}\n\n.delay--20 {\n  animation-duration: 2s;\n}\n\n.delay--21 {\n  animation-duration: 2.08s;\n}\n\n.delay--22 {\n  animation-duration: 2.16s;\n}\n\n.delay--23 {\n  animation-duration: 2.24s;\n}\n\n.delay--24 {\n  animation-duration: 2.32s;\n}\n\n.delay--25 {\n  animation-duration: 2.4s;\n}\n\n.delay--26 {\n  animation-duration: 2.48s;\n}\n\n.delay--27 {\n  animation-duration: 2.56s;\n}\n\n.delay--28 {\n  animation-duration: 2.64s;\n}\n\n.delay--29 {\n  animation-duration: 2.72s;\n}\n\n.delay--30 {\n  animation-duration: 2.8s;\n}\n\n.delay--31 {\n  animation-duration: 2.88s;\n}\n\n.delay--32 {\n  animation-duration: 2.96s;\n}\n\n.delay--33 {\n  animation-duration: 3.04s;\n}\n\n.delay--34 {\n  animation-duration: 3.12s;\n}\n\n.delay--35 {\n  animation-duration: 3.2s;\n}\n\n.delay--36 {\n  animation-duration: 3.28s;\n}\n\n.delay--37 {\n  animation-duration: 3.36s;\n}\n\n.delay--38 {\n  animation-duration: 3.44s;\n}\n\n.delay--39 {\n  animation-duration: 3.52s;\n}\n\n.delay--40 {\n  animation-duration: 3.6s;\n}\n\n.delay--41 {\n  animation-duration: 3.68s;\n}\n\n.delay--42 {\n  animation-duration: 3.76s;\n}\n\n.delay--43 {\n  animation-duration: 3.84s;\n}\n\n.delay--44 {\n  animation-duration: 3.92s;\n}\n\n.delay--45 {\n  animation-duration: 4s;\n}\n\n.delay--46 {\n  animation-duration: 4.08s;\n}\n\n.delay--47 {\n  animation-duration: 4.16s;\n}\n\n.delay--48 {\n  animation-duration: 4.24s;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\nbutton span {\n  font-size: 1rem;\n  font-weight: 700;\n}\nbutton.btnPrimary {\n  background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;\n  border: 1px solid;\n  border-color: transparent;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n}\nbutton.btnPrimary span:first-child {\n  color: #121212;\n}\nbutton.btnPrimary:hover, button.btnPrimary:focus, button.btnPrimary.active, button.btnPrimary:disabled {\n  background-color: #b89318;\n}\nbutton.btnPrimary:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\nbutton.btnSecondary {\n  background: transparent;\n  border: 1px solid;\n  border-color: #e0e0e0;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n}\nbutton.btnSecondary span:first-child {\n  color: #e0e0e0;\n}\nbutton.btnSecondary:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\nbutton.btnText {\n  text-decoration: underline;\n}\nbutton.btnText span {\n  text-transform: none;\n  font-weight: 400;\n}\nbutton.btnPrimaryNegative {\n  background: linear-gradient(180deg, #61f0f2 0%, #48c2c4 100%);\n  border: 1px solid;\n  border-color: transparent;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n}\nbutton.btnPrimaryNegative span:first-child {\n  color: #121212;\n}\nbutton.btnPrimaryNegative:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\nbutton.btnPrimaryNegative:hover {\n  opacity: 0.7;\n}\nbutton.btnIncrement {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  border: 1px solid;\n  border-color: transparent;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n  min-width: 40px;\n  width: 40px;\n  height: 40px;\n  border-radius: 4px;\n  box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.55);\n}\nbutton.btnIncrement span:first-child {\n  color: #ffffff;\n}\nbutton.btnIncrement:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ninput.inputText,\ninput.inputNumber {\n  box-sizing: border-box;\n  border: 1px solid #7b7b7b;\n  background: transparent;\n  transition: all 300ms ease;\n  color: #e0e0e0;\n}\ninput.inputText:focus, input.inputText:focus-visible,\ninput.inputNumber:focus,\ninput.inputNumber:focus-visible {\n  border-color: #e3b82a;\n  outline: none;\n}\n\ninput.inputText {\n  appearance: none;\n  border-radius: 4px;\n  height: 45px;\n  width: 100%;\n  max-width: 280px;\n  padding: 0 0.5rem;\n}\n\ninput.inputNumber {\n  border-radius: 2px;\n  height: 40px;\n  width: 60px;\n  max-width: 5rem;\n  text-align: center;\n}\n\ninput.inputCheckbox {\n  width: 24px;\n  min-width: 24px;\n  height: 24px;\n  display: flex;\n  align-items: center;\n  border-radius: 4px;\n  cursor: pointer;\n  appearance: none;\n  background: #121212;\n  position: relative;\n  border: solid 1px #7b7b7b;\n}\ninput.inputCheckbox:checked {\n  background: #e3b82a;\n  border-color: #e3b82a;\n}\ninput.inputCheckbox:checked:before, input.inputCheckbox:checked:after {\n  content: \"\";\n  position: absolute;\n  display: inline-block;\n  background: #121212;\n  border-radius: 0.5rem;\n}\ninput.inputCheckbox:checked:before {\n  width: 3px;\n  height: 12px;\n  left: 10px;\n  top: 4px;\n  transform: rotate(41deg);\n}\ninput.inputCheckbox:checked:after {\n  width: 3px;\n  height: 6px;\n  left: 5px;\n  top: 8px;\n  transform: rotate(133deg);\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.card {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  box-sizing: border-box;\n  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.75);\n  border-radius: 4px;\n  padding: 16px;\n}\n.card:hover {\n  background: linear-gradient(180deg, rgba(70, 71, 77, 0.7) 0%, rgba(57, 58, 63, 0.7) 100%);\n}\n.card.rich-card {\n  padding: 16px;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ndiv.modal-root .MuiBackdrop-root {\n  background-color: hsla(231deg, 11%, 12%, 0.85);\n}\n\ndiv.modal-paper {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  width: 36rem;\n  max-width: 100%;\n  max-height: 90vh;\n  padding: 2rem;\n  box-sizing: border-box;\n  box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);\n  border-radius: 4px;\n  margin: 0 0 0 13.75rem;\n  align-items: center;\n  color: #ffffff;\n}\n@media only screen and (max-width : 1023px) {\n  div.modal-paper {\n    width: 35rem;\n    margin: 0;\n  }\n}\n@media only screen and (max-width : 768px) {\n  div.modal-paper {\n    padding: 1rem 1rem 1.5rem;\n    width: 85%;\n    max-width: 35rem;\n    margin: 0;\n  }\n}\ndiv.modal-paper.no-padding {\n  padding: 0;\n}\ndiv.modal-paper.blue-border {\n  border: 1px solid rgba(88, 255, 255, 0.2509803922);\n}\ndiv.modal-paper.blue-light-border {\n  border: 1px solid #61f0f2;\n}\ndiv.modal-paper.yellow-border {\n  border: 1px solid rgba(227, 184, 42, 0.4);\n}\ndiv.modal-paper .modal-paper-close-button {\n  position: absolute;\n  top: 0.5rem;\n  right: 0.5rem;\n  padding: 5px 5px;\n  z-index: 10;\n}\n\ndiv.modal-paper-full-screen {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  width: 100%;\n  max-width: 100%;\n  height: 100%;\n  max-height: 100%;\n  padding: 0;\n  margin: 0;\n  box-sizing: border-box;\n  box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);\n  border-radius: 4px;\n  color: #ffffff;\n  display: flex;\n  align-items: center;\n}\ndiv.modal-paper-full-screen.dark-background {\n  background: #121212;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ndiv.expansion-panel-root {\n  margin: 1.2rem 0;\n  color: #e0e0e0;\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  border-radius: 4px;\n  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.75);\n  transition: background-color 0.6s ease;\n  box-sizing: border-box;\n}\ndiv.expansion-panel-root.Mui-expanded:first-child {\n  margin: 1.2rem 0;\n}\ndiv.expansion-panel-root.Mui-expanded:last-child {\n  margin: 1.2rem 0;\n}\ndiv.expansion-panel-root.red-border {\n  border: 1px solid #d25959;\n}\n\ndiv.expansion-panel-summary {\n  padding: 0.25rem 1.2rem;\n  min-height: 4rem;\n}\ndiv.expansion-panel-summary.Mui-focused {\n  border-radius: 4px;\n  background-color: unset;\n  box-shadow: 0 0 0 1px #e0e0e0;\n}\ndiv.expansion-panel-summary.Mui-expanded {\n  min-height: 4rem;\n}\ndiv.expansion-panel-summary.Mui-expanded.small {\n  min-height: 3rem;\n}\ndiv.expansion-panel-summary.small {\n  padding: 0 1.2rem;\n  min-height: 3rem;\n}\ndiv.expansion-panel-summary.bold-text {\n  font-weight: bold;\n}\n\ndiv.expansion-panel-content {\n  display: flex;\n  align-items: center;\n}\ndiv.expansion-panel-content.Mui-expanded {\n  margin: 0.75rem 0;\n}\n\ndiv.expansion-panel-details {\n  padding: 0 1.2rem 1.2rem;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\na {\n  color: #deaf0e;\n}\na:visited {\n  color: #deaf0e;\n}\n\na:focus {\n  outline: none;\n  box-shadow: inset 0 0 0 1px #e0e0e0;\n}\na:focus > div:first-child {\n  box-shadow: 0 0 0 1px #e0e0e0;\n}\n\na.MuiLink-underlineHover:hover {\n  text-decoration: none;\n}\n\na.MuiTypography-colorPrimary {\n  color: #e0e0e0;\n}\n\n:root {\n  white-space: pre-line;\n  --blue: #58ffff;\n  --blue40: rgba(88, 255, 255, 0.2509803922);\n  --blueBackground: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n  --blueRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n  --blueRadialGradientTrans: radial-gradient(circle, #58ffff 0%, rgba(255, 255, 255, 0) 100%);\n  --elecColor: #d87b39;\n  --elecColor40: rgba(216, 123, 57, 0.4);\n  --elecCompareColor: #e2bca1;\n  --gasColor: #45d1b8;\n  --gasColor40: rgba(69, 209, 184, 0.4);\n  --gasCompareColor: #a8f7e9;\n  --waterColor: #3a98ec;\n  --waterColor40: rgba(58, 152, 236, 0.4);\n  --waterCompareColor: #abd4fa;\n  --multiColor: #e3b82a;\n  --multiCompareColor: #ffd597;\n  --redPrimary: #d25959;\n  --greyBright: #e0e0e0;\n  --greyDark: #7b7b7b;\n  --textWhite: #ffffff;\n  --softGrey: #a0a0a0;\n  --darkLight: #25262b;\n  --darkLight2: #121212;\n  --textFont: Lato, sans-serif;\n  --greyLinearGradientBackground: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  --multiColorRadialGradientTrans: radial-gradient(circle, #e3b82a 0%, rgba(255, 255, 255, 0) 100%);\n  --elecColorRadialGradientTrans: radial-gradient(circle, #d87b39 0%, rgba(255, 255, 255, 0) 100%);\n  --waterColorRadialGradientTrans: radial-gradient(circle, #3a98ec 0%, rgba(255, 255, 255, 0) 100%);\n  --gasColorRadialGradientTrans: radial-gradient(circle, #e3b82a 0%, rgba(255, 255, 255, 0) 100%);\n  --multiColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;\n  --elecColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(158, 67, 2, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #d87b39;\n  --gasColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(4, 106, 88, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #45d1b8;\n  --waterColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(2, 93, 174, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #3a98ec;\n}\n\n.application {\n  overflow-x: hidden;\n  background-color: #121212;\n}\n\n.accordion-icon {\n  color: #ffffff;\n}\n\n.loaderContainer {\n  height: 80vh;\n  display: flex;\n  flex: 1;\n  justify-content: center;\n  align-items: center;\n}\n\n.makeStyles-fab-1 {\n  top: 12px;\n  left: 3rem !important;\n  width: 36px !important;\n  height: 36px !important;\n  background-color: #323339 !important;\n}\n\ninput:-webkit-autofill,\ninput:-webkit-autofill:hover,\ninput:-webkit-autofill:focus,\ninput:-webkit-autofill:active {\n  -webkit-box-shadow: 0 0 0 30px #1b1c22 inset !important;\n}", ""]);
+exports.push([module.i, "/* Cozy UI utilities classes */\n/* Cozy UI React components styles */\n/* App styles */\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\nhtml {\n  background: #121212;\n}\n\nbody {\n  background: #121212;\n  overflow: unset !important;\n  color: #e0e0e0;\n}\n\n.column {\n  display: flex;\n  flex-direction: column;\n}\n\n.row {\n  display: flex;\n  flex-direction: row;\n}\n\n.cozy-bar {\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-left: 0;\n}\n\n[role=banner] .coz-bar-container {\n  background-color: #ffffff;\n}\n@media only screen and (max-width : 768px) {\n  [role=banner] .coz-bar-container {\n    padding: 0.6rem 0 0 0;\n    background-color: unset;\n  }\n}\n\n.coz-bar-wrapper {\n  box-shadow: unset !important;\n  background: unset !important;\n}\n\n.coz-label {\n  color: #32363f;\n}\n\n.content-view-loading {\n  height: 80vh;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  color: #e0e0e0;\n}\n.content-view-loading .content-view-loading-text {\n  padding-top: 1rem;\n  margin: 0 2rem;\n  text-align: center;\n}\n.content-view-loading .content-view-loading-button {\n  max-width: 50vw;\n  margin-top: 1rem;\n}\n\n[role=main] {\n  /* width */\n  /* Track */\n  /* Handle */\n}\n[role=main]::-webkit-scrollbar {\n  width: 10px;\n}\n[role=main]::-webkit-scrollbar-track {\n  background: #3e4045;\n}\n[role=main]::-webkit-scrollbar-thumb {\n  background: #6f7074;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n* {\n  font-family: Lato, sans-serif;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np {\n  color: #a0a0a0;\n  font-family: Lato, sans-serif;\n}\n\n.home-title {\n  font-size: 1rem;\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 120%;\n  text-transform: uppercase;\n}\n\n.app-title {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: bold;\n  font-size: 21px;\n  line-height: 24px;\n  text-align: center;\n  letter-spacing: 0.15px;\n  color: #e0e0e0;\n  text-shadow: 0px -1px 0px #060609, 0px 1px 0px rgba(255, 255, 255, 0.07);\n}\n\n.text-10, .text-10-italic, .text-10-bold, .text-10-bold-capitalize, .text-10-bold-uppercase, .text-10-normal, .text-10-normal-150, .text-10-normal-uppercase {\n  font-style: normal;\n  font-size: 0.625rem;\n  line-height: 120%;\n}\n.text-10-normal, .text-10-normal-150, .text-10-normal-uppercase {\n  font-weight: normal;\n}\n.text-10-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-10-normal-150 {\n  line-height: 150%;\n}\n.text-10-bold, .text-10-bold-capitalize, .text-10-bold-uppercase {\n  font-weight: 700;\n}\n.text-10-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-10-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-10-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-12, .text-12-italic, .text-12-bold, .text-12-bold-capitalize, .text-12-bold-uppercase, .text-12-normal, .text-12-normal-150, .text-12-normal-uppercase {\n  font-style: normal;\n  font-size: 0.75rem;\n  line-height: 120%;\n}\n.text-12-normal, .text-12-normal-150, .text-12-normal-uppercase {\n  font-weight: normal;\n}\n.text-12-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-12-normal-150 {\n  line-height: 150%;\n}\n.text-12-bold, .text-12-bold-capitalize, .text-12-bold-uppercase {\n  font-weight: 700;\n}\n.text-12-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-12-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-12-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-13, .text-13-italic, .text-13-bold, .text-13-bold-capitalize, .text-13-bold-uppercase, .text-13-normal, .text-13-normal-150, .text-13-normal-uppercase {\n  font-style: normal;\n  font-size: 0.8125rem;\n  line-height: 120%;\n}\n.text-13-normal, .text-13-normal-150, .text-13-normal-uppercase {\n  font-weight: normal;\n}\n.text-13-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-13-normal-150 {\n  line-height: 150%;\n}\n.text-13-bold, .text-13-bold-capitalize, .text-13-bold-uppercase {\n  font-weight: 700;\n}\n.text-13-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-13-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-13-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-14, .text-14-italic, .text-14-bold, .text-14-bold-capitalize, .text-14-bold-uppercase, .text-14-normal, .text-14-normal-150, .text-14-normal-uppercase {\n  font-style: normal;\n  font-size: 0.875rem;\n  line-height: 120%;\n}\n.text-14-normal, .text-14-normal-150, .text-14-normal-uppercase {\n  font-weight: normal;\n}\n.text-14-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-14-normal-150 {\n  line-height: 150%;\n}\n.text-14-bold, .text-14-bold-capitalize, .text-14-bold-uppercase {\n  font-weight: 700;\n}\n.text-14-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-14-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-14-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-15, .text-15-italic, .text-15-bold, .text-15-bold-capitalize, .text-15-bold-uppercase, .text-15-normal, .text-15-normal-150, .text-15-normal-uppercase {\n  font-style: normal;\n  font-size: 0.938rem;\n  line-height: 120%;\n}\n.text-15-normal, .text-15-normal-150, .text-15-normal-uppercase {\n  font-weight: normal;\n}\n.text-15-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-15-normal-150 {\n  line-height: 150%;\n}\n.text-15-bold, .text-15-bold-capitalize, .text-15-bold-uppercase {\n  font-weight: 700;\n}\n.text-15-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-15-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-15-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-16, .text-16-italic, .text-16-bold, .text-16-bold-capitalize, .text-16-bold-uppercase, .text-16-normal, .text-16-normal-150, .text-16-normal-uppercase {\n  font-style: normal;\n  font-size: 1rem;\n  line-height: 120%;\n}\n.text-16-normal, .text-16-normal-150, .text-16-normal-uppercase {\n  font-weight: normal;\n}\n.text-16-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-16-normal-150 {\n  line-height: 150%;\n}\n.text-16-bold, .text-16-bold-capitalize, .text-16-bold-uppercase {\n  font-weight: 700;\n}\n.text-16-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-16-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-16-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-18, .text-18-italic, .text-18-bold, .text-18-bold-capitalize, .text-18-bold-uppercase, .text-18-normal, .text-18-normal-150, .text-18-normal-uppercase {\n  font-style: normal;\n  font-size: 1.125rem;\n  line-height: 120%;\n}\n.text-18-normal, .text-18-normal-150, .text-18-normal-uppercase {\n  font-weight: normal;\n}\n.text-18-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-18-normal-150 {\n  line-height: 150%;\n}\n.text-18-bold, .text-18-bold-capitalize, .text-18-bold-uppercase {\n  font-weight: 700;\n}\n.text-18-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-18-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-18-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-19, .text-19-italic, .text-19-bold, .text-19-bold-capitalize, .text-19-bold-uppercase, .text-19-normal, .text-19-normal-150, .text-19-normal-uppercase {\n  font-style: normal;\n  font-size: 1.188rem;\n  line-height: 120%;\n}\n.text-19-normal, .text-19-normal-150, .text-19-normal-uppercase {\n  font-weight: normal;\n}\n.text-19-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-19-normal-150 {\n  line-height: 150%;\n}\n.text-19-bold, .text-19-bold-capitalize, .text-19-bold-uppercase {\n  font-weight: 700;\n}\n.text-19-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-19-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-19-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-20, .text-20-italic, .text-20-bold, .text-20-bold-capitalize, .text-20-bold-uppercase, .text-20-normal, .text-20-normal-150, .text-20-normal-uppercase {\n  font-style: normal;\n  font-size: 1.25rem;\n  line-height: 120%;\n}\n.text-20-normal, .text-20-normal-150, .text-20-normal-uppercase {\n  font-weight: normal;\n}\n.text-20-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-20-normal-150 {\n  line-height: 150%;\n}\n.text-20-bold, .text-20-bold-capitalize, .text-20-bold-uppercase {\n  font-weight: 700;\n}\n.text-20-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-20-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-20-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-21, .text-21-italic, .text-21-bold, .text-21-bold-capitalize, .text-21-bold-uppercase, .text-21-normal, .text-21-normal-150, .text-21-normal-uppercase {\n  font-style: normal;\n  font-size: 1.313rem;\n  line-height: 120%;\n}\n.text-21-normal, .text-21-normal-150, .text-21-normal-uppercase {\n  font-weight: normal;\n}\n.text-21-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-21-normal-150 {\n  line-height: 150%;\n}\n.text-21-bold, .text-21-bold-capitalize, .text-21-bold-uppercase {\n  font-weight: 700;\n}\n.text-21-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-21-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-21-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-22, .text-22-italic, .text-22-bold, .text-22-bold-capitalize, .text-22-bold-uppercase, .text-22-normal, .text-22-normal-150, .text-22-normal-uppercase {\n  font-style: normal;\n  font-size: 1.375rem;\n  line-height: 120%;\n}\n.text-22-normal, .text-22-normal-150, .text-22-normal-uppercase {\n  font-weight: normal;\n}\n.text-22-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-22-normal-150 {\n  line-height: 150%;\n}\n.text-22-bold, .text-22-bold-capitalize, .text-22-bold-uppercase {\n  font-weight: 700;\n}\n.text-22-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-22-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-22-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-24, .text-24-italic, .text-24-bold, .text-24-bold-capitalize, .text-24-bold-uppercase, .text-24-normal, .text-24-normal-150, .text-24-normal-uppercase {\n  font-style: normal;\n  font-size: 1.5rem;\n  line-height: 120%;\n}\n.text-24-normal, .text-24-normal-150, .text-24-normal-uppercase {\n  font-weight: normal;\n}\n.text-24-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-24-normal-150 {\n  line-height: 150%;\n}\n.text-24-bold, .text-24-bold-capitalize, .text-24-bold-uppercase {\n  font-weight: 700;\n}\n.text-24-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-24-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-24-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-26, .text-26-italic, .text-26-bold, .text-26-bold-capitalize, .text-26-bold-uppercase, .text-26-normal, .text-26-normal-150, .text-26-normal-uppercase {\n  font-style: normal;\n  font-size: 1.625rem;\n  line-height: 120%;\n}\n.text-26-normal, .text-26-normal-150, .text-26-normal-uppercase {\n  font-weight: normal;\n}\n.text-26-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-26-normal-150 {\n  line-height: 150%;\n}\n.text-26-bold, .text-26-bold-capitalize, .text-26-bold-uppercase {\n  font-weight: 700;\n}\n.text-26-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-26-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-26-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-28, .text-28-italic, .text-28-bold, .text-28-bold-capitalize, .text-28-bold-uppercase, .text-28-normal, .text-28-normal-150, .text-28-normal-uppercase {\n  font-style: normal;\n  font-size: 1.75rem;\n  line-height: 120%;\n}\n.text-28-normal, .text-28-normal-150, .text-28-normal-uppercase {\n  font-weight: normal;\n}\n.text-28-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-28-normal-150 {\n  line-height: 150%;\n}\n.text-28-bold, .text-28-bold-capitalize, .text-28-bold-uppercase {\n  font-weight: 700;\n}\n.text-28-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-28-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-28-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.text-36, .text-36-italic, .text-36-bold, .text-36-bold-capitalize, .text-36-bold-uppercase, .text-36-normal, .text-36-normal-150, .text-36-normal-uppercase {\n  font-style: normal;\n  font-size: 2.25rem;\n  line-height: 120%;\n}\n.text-36-normal, .text-36-normal-150, .text-36-normal-uppercase {\n  font-weight: normal;\n}\n.text-36-normal-uppercase {\n  text-transform: uppercase;\n}\n.text-36-normal-150 {\n  line-height: 150%;\n}\n.text-36-bold, .text-36-bold-capitalize, .text-36-bold-uppercase {\n  font-weight: 700;\n}\n.text-36-bold-uppercase {\n  text-transform: uppercase;\n}\n.text-36-bold-capitalize {\n  text-transform: capitalize;\n}\n.text-36-italic {\n  font-style: italic;\n  font-weight: normal;\n}\n\n/* Card */\n.card-title-on {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1.125rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n.card-text-bold {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: bold;\n  font-size: 1rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n.card-indicator {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n.card-text {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n/* Chart */\n.chart-ticks-x-text {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 1rem;\n  line-height: 120%;\n}\n@media only screen and (max-width : 768px) {\n  .chart-ticks-x-text {\n    font-size: 0.685rem;\n  }\n}\n\n.chart-ticks-y-text {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 0.9rem;\n  line-height: 120%;\n}\n@media only screen and (max-width : 768px) {\n  .chart-ticks-y-text {\n    font-size: 0.75rem;\n  }\n}\n\n/* Cozy bar */\n.cozybar {\n  font-family: Lato, sans-serif;\n  font-style: normal;\n  font-weight: bold;\n  font-size: 1.3125rem;\n  line-height: 120%;\n  color: #e0e0e0;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.axis {\n  color: #7b7b7b;\n}\n.axis .tick-text {\n  fill: #7b7b7b;\n}\n.axis .tick-text.tick-text-selected {\n  fill: #e0e0e0;\n}\n.axis .separator {\n  text-align: center;\n  margin: 0 2px;\n  font-size: 1rem !important;\n}\n\n.value-text {\n  fill: #7b7b7b;\n}\n.value-text.selected {\n  fill: #e0e0e0;\n}\n\n.barContainer.disabled *,\n.barFill.disabled * {\n  cursor: default !important;\n}\n.barContainer:hover,\n.barFill:hover {\n  cursor: pointer;\n}\n\n.background-true {\n  opacity: 0.1;\n}\n.background-true:hover {\n  cursor: pointer;\n}\n\n.background-false {\n  opacity: 0;\n}\n\n.bar-compare-ELECTRICITY:hover,\n.bar-compare-GAS:hover,\n.bar-compare-WATER:hover,\n.bar-compare-MULTIFLUID:hover,\n.bar-MULTIFLUID:hover,\n.bar-WATER:hover,\n.bar-GAS:hover,\n.bar-ELECTRICITY:hover {\n  cursor: pointer;\n}\n.bar-compare-ELECTRICITY:hover.disabled,\n.bar-compare-GAS:hover.disabled,\n.bar-compare-WATER:hover.disabled,\n.bar-compare-MULTIFLUID:hover.disabled,\n.bar-MULTIFLUID:hover.disabled,\n.bar-WATER:hover.disabled,\n.bar-GAS:hover.disabled,\n.bar-ELECTRICITY:hover.disabled {\n  cursor: default;\n}\n\n.bar-ELECTRICITY {\n  fill: #5d3d2a;\n}\n.bar-ELECTRICITY.selected {\n  fill: #d87b39;\n  filter: drop-shadow(0 -0.1rem 0.2rem #d87b39);\n}\n\n.bar-compare-ELECTRICITY {\n  fill: #795c47;\n}\n.bar-compare-ELECTRICITY.selected {\n  fill: #e2bca1;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1);\n}\n\n.bar-WATER {\n  fill: #20415e;\n}\n.bar-WATER.selected {\n  fill: #3a98ec;\n  filter: drop-shadow(0 -0.1rem 0.2rem #3a98ec);\n}\n\n.bar-compare-WATER {\n  fill: #4d5c6e;\n}\n.bar-compare-WATER.selected {\n  fill: #abd4fa;\n  filter: drop-shadow(0 -0.1rem 0.2rem #abd4fa);\n}\n\n.bar-GAS {\n  fill: #184940;\n}\n.bar-GAS.selected {\n  fill: #45d1b8;\n  filter: drop-shadow(0 -0.1rem 0.2rem #45d1b8);\n}\n\n.bar-compare-GAS {\n  fill: #597773;\n}\n.bar-compare-GAS.selected {\n  fill: #a8f7e9;\n  filter: drop-shadow(0 -0.1rem 0.2rem #a8f7e9);\n}\n\n.bar-MULTIFLUID {\n  fill: #705d1d;\n}\n.bar-MULTIFLUID.selected {\n  fill: #e3b82a;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n.bar-MULTIFLUID.disabled:hover {\n  cursor: default;\n}\n\n.bar-duel {\n  fill: #61f0f2;\n}\n.bar-duel.selected {\n  fill: #61f0f2;\n  filter: drop-shadow(0 -0.1rem 0.2rem #61f0f2);\n}\n.bar-duel.disabled:hover {\n  cursor: default;\n}\n\n.bar-UPCOMING {\n  fill: #7b7b7b;\n  opacity: 0.6;\n}\n.bar-UPCOMING.selected {\n  fill: #7b7b7b;\n}\n.bar-UPCOMING.disabled:hover {\n  cursor: default;\n}\n\n.bar-compare-MULTIFLUID {\n  fill: #7d6a4e;\n}\n.bar-compare-MULTIFLUID.selected {\n  fill: #ffd597;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n\n.bar-average {\n  stroke-width: 2;\n  stroke: #e3b82a;\n}\n\n.week {\n  fill: #e2bca1;\n}\n.week.selected {\n  fill: #e2bca1;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e2bca1);\n}\n\n.weekend {\n  fill: #ffd597;\n}\n.weekend.selected {\n  fill: #ffd597;\n  filter: drop-shadow(0 -0.1rem 0.2rem #e3b82a);\n}\n\n.barValue {\n  outline: none;\n}\n.barValue:focus-visible {\n  outline: 2px solid #1b8bff;\n  outline-offset: 2px;\n}\n\n/** Animation **/\n.bounce-1 {\n  animation-name: bounce-1;\n  animation-timing-function: cubic-bezier(1, 1, 0.42, 1);\n  animation-iteration-count: 1;\n  transform-origin: bottom center;\n  transform-box: fill-box;\n}\n\n@keyframes bounce-1 {\n  0% {\n    transform: scale(0.1, 0.1);\n  }\n  28% {\n    transform: scale(0.1, 1.1);\n  }\n  45% {\n    transform: scale(0.8, 0.95);\n  }\n  55% {\n    transform: scale(1, 1);\n  }\n  65% {\n    transform: scale(1, 0.98);\n  }\n  75% {\n    transform: scale(1, 1);\n  }\n}\n.bounce-2 {\n  animation-name: bounce-2;\n  animation-timing-function: cubic-bezier(1, 1, 0.42, 1);\n  animation-iteration-count: 1;\n  transform-origin: bottom center;\n  transform-box: fill-box;\n}\n\n@keyframes bounce-2 {\n  0% {\n    transform: scale(1, 1);\n  }\n  28% {\n    transform: scale(1, 1.1);\n  }\n  45% {\n    transform: scale(0.8, 0.95);\n  }\n  55% {\n    transform: scale(1, 1);\n  }\n  65% {\n    transform: scale(1, 0.98);\n  }\n  75% {\n    transform: scale(1, 1);\n  }\n}\n/** Animation delay **/\n.delay {\n  animation-duration: 0.4s;\n}\n\n.delay--0 {\n  animation-duration: 0.4s;\n}\n\n.delay--1 {\n  animation-duration: 0.48s;\n}\n\n.delay--2 {\n  animation-duration: 0.56s;\n}\n\n.delay--3 {\n  animation-duration: 0.64s;\n}\n\n.delay--4 {\n  animation-duration: 0.72s;\n}\n\n.delay--5 {\n  animation-duration: 0.8s;\n}\n\n.delay--6 {\n  animation-duration: 0.88s;\n}\n\n.delay--7 {\n  animation-duration: 0.96s;\n}\n\n.delay--8 {\n  animation-duration: 1.04s;\n}\n\n.delay--9 {\n  animation-duration: 1.12s;\n}\n\n.delay--10 {\n  animation-duration: 1.2s;\n}\n\n.delay--11 {\n  animation-duration: 1.28s;\n}\n\n.delay--12 {\n  animation-duration: 1.36s;\n}\n\n.delay--13 {\n  animation-duration: 1.44s;\n}\n\n.delay--14 {\n  animation-duration: 1.52s;\n}\n\n.delay--15 {\n  animation-duration: 1.6s;\n}\n\n.delay--16 {\n  animation-duration: 1.68s;\n}\n\n.delay--17 {\n  animation-duration: 1.76s;\n}\n\n.delay--18 {\n  animation-duration: 1.84s;\n}\n\n.delay--19 {\n  animation-duration: 1.92s;\n}\n\n.delay--20 {\n  animation-duration: 2s;\n}\n\n.delay--21 {\n  animation-duration: 2.08s;\n}\n\n.delay--22 {\n  animation-duration: 2.16s;\n}\n\n.delay--23 {\n  animation-duration: 2.24s;\n}\n\n.delay--24 {\n  animation-duration: 2.32s;\n}\n\n.delay--25 {\n  animation-duration: 2.4s;\n}\n\n.delay--26 {\n  animation-duration: 2.48s;\n}\n\n.delay--27 {\n  animation-duration: 2.56s;\n}\n\n.delay--28 {\n  animation-duration: 2.64s;\n}\n\n.delay--29 {\n  animation-duration: 2.72s;\n}\n\n.delay--30 {\n  animation-duration: 2.8s;\n}\n\n.delay--31 {\n  animation-duration: 2.88s;\n}\n\n.delay--32 {\n  animation-duration: 2.96s;\n}\n\n.delay--33 {\n  animation-duration: 3.04s;\n}\n\n.delay--34 {\n  animation-duration: 3.12s;\n}\n\n.delay--35 {\n  animation-duration: 3.2s;\n}\n\n.delay--36 {\n  animation-duration: 3.28s;\n}\n\n.delay--37 {\n  animation-duration: 3.36s;\n}\n\n.delay--38 {\n  animation-duration: 3.44s;\n}\n\n.delay--39 {\n  animation-duration: 3.52s;\n}\n\n.delay--40 {\n  animation-duration: 3.6s;\n}\n\n.delay--41 {\n  animation-duration: 3.68s;\n}\n\n.delay--42 {\n  animation-duration: 3.76s;\n}\n\n.delay--43 {\n  animation-duration: 3.84s;\n}\n\n.delay--44 {\n  animation-duration: 3.92s;\n}\n\n.delay--45 {\n  animation-duration: 4s;\n}\n\n.delay--46 {\n  animation-duration: 4.08s;\n}\n\n.delay--47 {\n  animation-duration: 4.16s;\n}\n\n.delay--48 {\n  animation-duration: 4.24s;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\nbutton span {\n  font-size: 1rem;\n  font-weight: 700;\n}\nbutton:focus-visible {\n  outline: 2px solid #1b8bff;\n  outline-offset: 2px;\n}\nbutton.btnPrimary {\n  background: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;\n  border: 1px solid;\n  border-color: transparent;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n}\nbutton.btnPrimary span:first-child {\n  color: #121212;\n}\nbutton.btnPrimary:hover, button.btnPrimary:focus, button.btnPrimary.active, button.btnPrimary:disabled {\n  background-color: #b89318;\n}\nbutton.btnPrimary:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\nbutton.btnSecondary {\n  background: transparent;\n  border: 1px solid;\n  border-color: #e0e0e0;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n}\nbutton.btnSecondary span:first-child {\n  color: #e0e0e0;\n}\nbutton.btnSecondary:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\nbutton.btnText {\n  text-decoration: underline;\n}\nbutton.btnText span {\n  text-transform: none;\n  font-weight: 400;\n}\nbutton.btnPrimaryNegative {\n  background: linear-gradient(180deg, #61f0f2 0%, #48c2c4 100%);\n  border: 1px solid;\n  border-color: transparent;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n}\nbutton.btnPrimaryNegative span:first-child {\n  color: #121212;\n}\nbutton.btnPrimaryNegative:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\nbutton.btnPrimaryNegative:hover {\n  opacity: 0.7;\n}\nbutton.btnIncrement {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  border: 1px solid;\n  border-color: transparent;\n  border-radius: 2px;\n  width: 100%;\n  text-transform: initial;\n  transition: all 150ms ease-in-out;\n  min-width: 40px;\n  width: 40px;\n  height: 40px;\n  border-radius: 4px;\n  box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.55);\n}\nbutton.btnIncrement span:first-child {\n  color: #ffffff;\n}\nbutton.btnIncrement:disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ninput.inputText,\ninput.inputNumber {\n  box-sizing: border-box;\n  border: 1px solid #7b7b7b;\n  background: transparent;\n  transition: all 300ms ease;\n  color: #e0e0e0;\n}\n\ninput.inputText {\n  appearance: none;\n  border-radius: 4px;\n  height: 45px;\n  width: 100%;\n  max-width: 280px;\n  padding: 0 0.5rem;\n}\n\ninput.inputNumber {\n  border-radius: 2px;\n  height: 40px;\n  width: 60px;\n  max-width: 5rem;\n  text-align: center;\n}\n\ninput.inputCheckbox {\n  width: 24px;\n  min-width: 24px;\n  height: 24px;\n  display: flex;\n  align-items: center;\n  border-radius: 4px;\n  cursor: pointer;\n  appearance: none;\n  background: #121212;\n  position: relative;\n  border: solid 1px #7b7b7b;\n}\ninput.inputCheckbox:checked {\n  background: #e3b82a;\n  border-color: #e3b82a;\n}\ninput.inputCheckbox:checked:before, input.inputCheckbox:checked:after {\n  content: \"\";\n  position: absolute;\n  display: inline-block;\n  background: #121212;\n  border-radius: 0.5rem;\n}\ninput.inputCheckbox:checked:before {\n  width: 3px;\n  height: 12px;\n  left: 10px;\n  top: 4px;\n  transform: rotate(41deg);\n}\ninput.inputCheckbox:checked:after {\n  width: 3px;\n  height: 6px;\n  left: 5px;\n  top: 8px;\n  transform: rotate(133deg);\n}\n\ninput:focus-visible {\n  outline: 2px solid #1b8bff;\n  outline-offset: 2px;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.card {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  box-sizing: border-box;\n  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.75);\n  border-radius: 4px;\n  padding: 16px;\n}\n.card:hover {\n  background: linear-gradient(180deg, rgba(70, 71, 77, 0.7) 0%, rgba(57, 58, 63, 0.7) 100%);\n}\n.card.rich-card {\n  padding: 16px;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ndiv.modal-root .MuiBackdrop-root {\n  background-color: hsla(231deg, 11%, 12%, 0.85);\n}\n\ndiv.modal-paper {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  width: 36rem;\n  max-width: 100%;\n  max-height: 90vh;\n  padding: 2rem;\n  box-sizing: border-box;\n  box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);\n  border-radius: 4px;\n  margin: 0 0 0 13.75rem;\n  align-items: center;\n  color: #ffffff;\n}\n@media only screen and (max-width : 1023px) {\n  div.modal-paper {\n    width: 35rem;\n    margin: 0;\n  }\n}\n@media only screen and (max-width : 768px) {\n  div.modal-paper {\n    padding: 1rem 1rem 1.5rem;\n    width: 85%;\n    max-width: 35rem;\n    margin: 0;\n  }\n}\ndiv.modal-paper.no-padding {\n  padding: 0;\n}\ndiv.modal-paper.blue-border {\n  border: 1px solid rgba(88, 255, 255, 0.2509803922);\n}\ndiv.modal-paper.blue-light-border {\n  border: 1px solid #61f0f2;\n}\ndiv.modal-paper.yellow-border {\n  border: 1px solid rgba(227, 184, 42, 0.4);\n}\ndiv.modal-paper .modal-paper-close-button {\n  position: absolute;\n  top: 0.5rem;\n  right: 0.5rem;\n  padding: 5px 5px;\n  z-index: 10;\n}\n\ndiv.modal-paper-full-screen {\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  width: 100%;\n  max-width: 100%;\n  height: 100%;\n  max-height: 100%;\n  padding: 0;\n  margin: 0;\n  box-sizing: border-box;\n  box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.55);\n  border-radius: 4px;\n  color: #ffffff;\n  display: flex;\n  align-items: center;\n}\ndiv.modal-paper-full-screen.dark-background {\n  background: #121212;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\ndiv.expansion-panel-root {\n  margin: 1.2rem 0;\n  color: #e0e0e0;\n  background: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  border-radius: 4px;\n  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.75);\n  transition: background-color 0.6s ease;\n  box-sizing: border-box;\n}\ndiv.expansion-panel-root.Mui-expanded:first-child {\n  margin: 1.2rem 0;\n}\ndiv.expansion-panel-root.Mui-expanded:last-child {\n  margin: 1.2rem 0;\n}\ndiv.expansion-panel-root.red-border {\n  border: 1px solid #d25959;\n}\n\ndiv.expansion-panel-summary {\n  padding: 0.25rem 1.2rem;\n  min-height: 4rem;\n}\ndiv.expansion-panel-summary.Mui-focused {\n  border-radius: 4px;\n  background-color: unset;\n  box-shadow: 0 0 0 1px #e0e0e0;\n}\ndiv.expansion-panel-summary:focus-visible {\n  outline: 2px solid #1b8bff;\n  outline-offset: 2px;\n}\ndiv.expansion-panel-summary.Mui-expanded {\n  min-height: 4rem;\n}\ndiv.expansion-panel-summary.Mui-expanded.small {\n  min-height: 3rem;\n}\ndiv.expansion-panel-summary.small {\n  padding: 0 1.2rem;\n  min-height: 3rem;\n}\ndiv.expansion-panel-summary.bold-text {\n  font-weight: bold;\n}\n\ndiv.expansion-panel-content {\n  display: flex;\n  align-items: center;\n}\ndiv.expansion-panel-content.Mui-expanded {\n  margin: 0.75rem 0;\n}\n\ndiv.expansion-panel-details {\n  padding: 0 1.2rem 1.2rem;\n}\n\n/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\na {\n  color: #deaf0e;\n}\na:visited {\n  color: #deaf0e;\n}\n\na:focus {\n  outline: none;\n  box-shadow: inset 0 0 0 1px #e0e0e0;\n}\na:focus > div:first-child {\n  box-shadow: 0 0 0 1px #e0e0e0;\n}\n\na:focus-visible {\n  outline: 2px solid #1b8bff;\n  outline-offset: 2px;\n}\n\na.MuiLink-underlineHover:hover {\n  text-decoration: none;\n}\n\na.MuiTypography-colorPrimary {\n  color: #e0e0e0;\n}\n\n:root {\n  white-space: pre-line;\n  --blue: #58ffff;\n  --blue40: rgba(88, 255, 255, 0.2509803922);\n  --blueBackground: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n  --blueRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(1, 153, 163, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #58ffff;\n  --blueRadialGradientTrans: radial-gradient(circle, #58ffff 0%, rgba(255, 255, 255, 0) 100%);\n  --elecColor: #d87b39;\n  --elecColor40: rgba(216, 123, 57, 0.4);\n  --elecCompareColor: #e2bca1;\n  --gasColor: #45d1b8;\n  --gasColor40: rgba(69, 209, 184, 0.4);\n  --gasCompareColor: #a8f7e9;\n  --waterColor: #3a98ec;\n  --waterColor40: rgba(58, 152, 236, 0.4);\n  --waterCompareColor: #abd4fa;\n  --multiColor: #e3b82a;\n  --multiCompareColor: #ffd597;\n  --redPrimary: #d25959;\n  --greyBright: #e0e0e0;\n  --greyDark: #7b7b7b;\n  --textWhite: #ffffff;\n  --softGrey: #a0a0a0;\n  --darkLight: #25262b;\n  --darkLight2: #121212;\n  --textFont: Lato, sans-serif;\n  --greyLinearGradientBackground: linear-gradient(180deg, #323339 0%, #25262b 100%);\n  --multiColorRadialGradientTrans: radial-gradient(circle, #e3b82a 0%, rgba(255, 255, 255, 0) 100%);\n  --elecColorRadialGradientTrans: radial-gradient(circle, #d87b39 0%, rgba(255, 255, 255, 0) 100%);\n  --waterColorRadialGradientTrans: radial-gradient(circle, #3a98ec 0%, rgba(255, 255, 255, 0) 100%);\n  --gasColorRadialGradientTrans: radial-gradient(circle, #e3b82a 0%, rgba(255, 255, 255, 0) 100%);\n  --multiColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(226, 137, 4, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #f1c017;\n  --elecColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(158, 67, 2, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #d87b39;\n  --gasColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(4, 106, 88, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #45d1b8;\n  --waterColorRadialGradient: radial-gradient(105.25% 64.58% at 49.68% 70.83%, rgba(2, 93, 174, 0.5) 0%, rgba(255, 255, 255, 0) 100%), #3a98ec;\n}\n\n.application {\n  overflow-x: hidden;\n  background-color: #121212;\n}\n\n.accordion-icon {\n  color: #ffffff;\n}\n\n.loaderContainer {\n  height: 80vh;\n  display: flex;\n  flex: 1;\n  justify-content: center;\n  align-items: center;\n}\n\n.makeStyles-fab-1 {\n  top: 12px;\n  left: 3rem !important;\n  width: 36px !important;\n  height: 36px !important;\n  background-color: #323339 !important;\n}\n\ninput:-webkit-autofill,\ninput:-webkit-autofill:hover,\ninput:-webkit-autofill:focus,\ninput:-webkit-autofill:active {\n  -webkit-box-shadow: 0 0 0 30px #1b1c22 inset !important;\n}", ""]);
 
 
 
@@ -66512,7 +66512,7 @@ var shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), create
 /***/ "Hsuv":
 /***/ (function(module) {
 
-module.exports = JSON.parse("{\"common\":{\"title_app\":\"Ecolyo\",\"title_consumption\":\"Conso\",\"title_consumption_electricity\":\"Conso électrigue\",\"title_consumption_gas\":\"Conso de gaz\",\"title_consumption_water\":\"Conso d'eau\",\"title_challenge\":\"Défis\",\"title_quiz\":\"Quiz\",\"title_exploration\":\"Exploration\",\"title_action\":\"Action\",\"title_duel\":\"Duel final\",\"title_ecogesture\":\"Astuce\",\"title_ecogestures\":\"Astuces\",\"title_ecogestures_choice\":\"Sélection des astuces\",\"title_options\":\"Options\",\"title_analysis\":\"Analyse\",\"title_profiletype\":\"Ajuster mon profil\",\"title_legal_notice\":\"Mentions légales\",\"title_gcu\":\"Conditions générales d’utilisation\",\"title_accessibility\":\"Accessibilité : non conforme\",\"title_sge_connect\":\"Connexion à l'électricité\",\"title_gas_connect\":\"Connexion au gaz\",\"accessibility\":{\"loading\":\"Chargement\"},\"funders_logo\":\"Logo des financeurs : Métropole de Lyon, Etat via la Banque des Territoires et son programme France 2030, Union Européenne\"},\"navigation\":{\"consumption\":\"Conso\",\"challenges\":\"Défis\",\"ecogestures\":\"Astuces\",\"options\":\"Options\",\"analysis\":\"Analyse\"},\"FLUID\":{\"ELECTRICITY\":{\"NAME\":\"Électricité\",\"LABEL\":\"Électricité\",\"LABEL_PREPOSITION\":\"d'électricité\",\"UNIT\":\"kWh\",\"ADD\":\"Ajouter l'électricité\",\"MEGAUNIT\":\"MWh\",\"provider\":\"Enedis\"},\"WATER\":{\"NAME\":\"Eau\",\"LABEL\":\"Eau\",\"LABEL_PREPOSITION\":\"d'eau\",\"ADD\":\"Ajouter l'eau\",\"UNIT\":\"L\",\"MEGAUNIT\":\"m³\",\"provider\":\"Eau Publique du Grand Lyon\"},\"GAS\":{\"NAME\":\"Gaz\",\"LABEL\":\"Gaz\",\"LABEL_PREPOSITION\":\"de gaz\",\"ADD\":\"Ajouter le gaz\",\"UNIT\":\"kWh\",\"MEGAUNIT\":\"MWh\",\"provider\":\"GRDF\"},\"MULTIFLUID\":{\"NAME\":\"Multi fluide\",\"LABEL\":\"Multi\",\"UNIT\":\"€\"}},\"action\":{\"duration\":\"Durée : %{smartCount} jours\",\"result\":\"Résultat\",\"finished\":\"Défi terminé !\",\"details\":\"Détail de l'astuce\",\"apply\":\"J'applique cette action\",\"other\":\"Je choisis une autre action\",\"resultText1\":\"Cela n'a pas été trop difficile ?\",\"resultText2\":\"Jetez un coup d'œil dans la page conso dans 1 à 3 jours, le temps que vos données arrivent, pour voir l'impact de votre action.\",\"resultText3\":\"Pas de baisse de significative ? Pas de panique, en maintenant cette pratique dans le temps, les économies d'énergies et d'eau seront davantage visibles.\",\"resultText4\":\"Dans tous les cas, bravo, vous remportez...\",\"ok\":\"Ok\"},\"action_modal\":{\"accept\":\"Je relève le défi\",\"refuse\":\"Je me défile\",\"accessibility\":{\"window_title\":\"Fenêtre de confirmation\",\"button_accept\":\"Accepter\",\"button_refuse\":\"Refuser\"}},\"analysis\":{\"viewTitle\":\"Analyse\",\"warning_title\":\"Analyse incomplète\",\"warning_text\":\"Ecolyo n'a pas encore reçu toutes les données %{fluidList} pour ce mois\",\"comparison\":\"Comparatif\",\"analysis_date\":\"Conso totale\",\"challenge\":\"Défis terminés en\",\"user_consumption\":\"Votre conso\",\"average_home\":\"Conso moyenne d'un profil similaire\",\"average_home_description\":\"Le comparatif ici présenté est calculé sur la base d'un profil similaire au vôtre. Il s'agit d'un calcul et non d'une comparaison avec les autres utilisateurs de l'application. Sont pris en compte l'ensemble des informations entrées dans votre profil : mode de chauffage, âge du logement et éventuels travaux de rénovation, etc. Ce modèle a été créé avec l'Agence Locale de l'Energie sur la base de chiffres issues du Schéma Directeur des Energies de la Métropole de Lyon et de Chiffres-clé publiés par l'ADEME (l'Agence de l'Environnement et de la Maîtrise de l'Energie).\",\"approximative_description\":\"Pour comparer votre consommation avec un foyer similaire ou avec une conso idéale, veuillez détailler votre profil\",\"no_data\":\"Pas de données\",\"accessibility\":{\"button_go_to_profil\":\"Détailler mon profil\",\"comparison_multifluid\":\"Vos dépenses (tous fluides confondus) vs Dépenses moyennes\",\"comparison_electricity\":\"Votre consommation d'électricité vs Consommation moyenne\",\"comparison_water\":\"Votre consommation d'eau vs Consommation moyenne\",\"comparison_gas\":\"Votre consommation de gaz vs Consommation moyenne\"},\"max_day\":\"Jour où vous avez le plus consommé\",\"compare\":{\"title\":\"Comparateur\",\"month_tab\":\"Comparer au mois dernier\",\"year_tab\":\"Comparer à l'année dernière\"},\"temperature_comparison\":{\"unit\":\"°C\",\"comparison\":\"par rapport à\",\"info_button\":\"Information sur l'indice météo\",\"modal\":{\"title\":\"Indice météo\",\"month_comparison\":\"Écart de température moyenne entre le mois observé et le mois précédent.\",\"year_comparison\":\"Écart de température moyenne entre le mois observé et le même mois de l'année précédente.\",\"data_info\":\"Données Météo France issues de la station météo Lyon Bron.\",\"close\":\"Fermer la fenêtre\"}}},\"analysis_error_modal\":{\"title\":\"Aucune analyse\",\"message\":\"Pour profiter d’une analyse de vos consommations, connectez au moins un de vos compteurs.\",\"go_to_conso\":\"Je connecte mes compteurs\",\"understood\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_understood\":\"J'ai compris\",\"button_goto_konnector\":\"Aller aux connecteurs\"}},\"analysis_pie\":{\"total\":\"Conso totale\",\"details\":\"Détail par fluide\",\"month\":\"Au mois \",\"estimation\":\"Comment sont estimés<br>les prix ?\"},\"special_elec\":{\"title\":\"Spécial Électricité\",\"average\":\"Conso moyenne\",\"weektype\":\"un jour de \",\"week\":\"semaine\",\"weekend\":\"week-end\",\"min\":\"Conso minimum\",\"percentage\":\"Part dans la facture\",\"price\":\"Soit\",\"maxPower\":\"Puissance maximum atteinte\",\"offPeakHour\":\"Consommation en heures creuses\",\"showModal\":\"Plus d'infos\"},\"elec_info_modal\":{\"accessibility\":{\"window_title\":\"Information sur les statistiques Enedis\",\"button_close\":\"Fermer la fenêtre d'information\"},\"maxPowerTitle\":\"Qu’est-ce que la puissance maximum ?\",\"maxPowerDetails-1\":\"C’est la puissance maximum délivrée par tous les appareils fonctionnant au même moment dans votre logement.\",\"maxPowerDetails-2\":\"Vous avez choisi une puissance maximum dans votre offre d’électricité (3, 6 ou 9 kVA...) que vous ne devez pas dépasser pour ne pas faire sauter votre compteur. \",\"maxPowerDetails-3\":\"Cette puissance varie d'un mois à l'autre, regardez cette valeur sur l'ensemble de l'année pour vérifier si votre puissance souscrite correspond bien à votre usage.\",\"offPeakTitle\":\"Sur quelle base est calculé mon ratio Heures Pleines / Heures Creuses ?\",\"offPeakDetails-1\":\"D'après Enedis, vos plages d'heures creuses sont les suivantes : %{offPeakHours}. Nous avons donc simplement calculé, à l'aide vos consommations à la demi-heure, quelle part de votre consommation est réalisée sur vos heures creuses.\",\"minPowerTitle\":\"Qu’est-ce que la consommation minimum ?\",\"minPowerDetails-1\":\"Elle correspond à votre plus petite consommation du mois sur un créneau d'une demi-heure.\",\"minPowerDetails-2\":\"Nous extrapolons cette consommation sur 1 mois afin vous donner un aperçu de la consommation de vos consommations électriques en veille (box, télé, chargeurs, ...) ou encore de celle, incompressible, de vos appareils de froid (frigo, congélateur).\"},\"auth\":{\"enedissgegrandlyon\":{\"title\":\"Ecolyo doit se connecter à l’électricité\",\"bill\":\"Munissez-vous d’une <span>facture d’électricité</span> pour valider la connexion\",\"connect\":\"Je me connecte à l'électricité\",\"accessibility\":{\"connect\":\"Se connecter\"},\"identityTitle\":\"Nom inscrit sur la facture\",\"firstName\":\"Prénom\",\"lastName\":\"Nom\",\"pdlTitle\":\"Numéro de votre compteur électrique (PDL)\",\"pdlLabel\":\"N° (14 chiffres)\",\"pdlModal\":{\"title\":\"Qu'est-ce qu'un PDL ?\",\"title_accessibility\":\"Modale qu'est ce qu'un PDL ?\",\"txt1\":\"Votre numéro de point de livraison (PDL) peut aussi s’appeler PRM si vous possédez un compteur Linky.\",\"txt2\":\"Ce numéro est composé de 14 chiffres.\",\"txt3\":\"Votre numéro de PDL ou PRM se trouve sur votre facture d’électricité.\",\"txt4\":\"Si vous avez un compteur Linky, appuyez sur le bouton “+” et faites défiler l’affichage jusqu’à obtenir l’affichage suivant :\",\"button\":\"J'ai compris\",\"button_accessibility\":\"Bouton valider\",\"prm_accessibility\":\"Écran d'un compteur Linky présentant le numéro PRM\"},\"addressTitle\":\"Adresse du titulaire\",\"address\":\"Numéro et voie\",\"zipCode\":\"Code postal\",\"city\":\"Ville\",\"headConsent\":\"En acceptant de partager vos données, celles-ci seront directement transférées à Ecolyo à l’intérieur de votre cloud personnel, sans que la Métropole n’y accède ni ne les visualise.\",\"textConsent\":\"Afin de vous offrir des fonctionnalités de visualisation et d'analyse, Ecolyo a besoin des données suivantes : \",\"consentLi1\":\"L'historique et le relevé de vos consommations quotidiennes en kWh\",\"consentLi2\":\"L'historique et le relevé de vos consommations au pas de temps 30 minutes\",\"consentLi3\":\"Les puissances maximales atteintes quotidiennement\",\"consentLi4\":\"Les données contractuelles (début de contrat et puissance souscrite)\",\"consentCheck1\":\"Je consens à partager les données personnelles ci-dessus pour une durée d'<span>un an</span>\",\"consentCheck2\":\"J’atteste être le titulaire du point de livraison (PDL) renseigné à l’étape précédente\"},\"grdfgrandlyon\":{\"title\":\"Ecolyo doit se connecter au gaz\",\"bill\":\"Munissez-vous d’une <span>facture de gaz</span> pour valider la connexion\",\"connect\":\"Je me connecte au gaz\",\"accessibility\":{\"connect\":\"Se connecter\"},\"identityTitle\":\"Nom inscrit sur la facture\",\"firstName\":\"Prénom\",\"lastName\":\"Nom\",\"email\":\"Email\",\"zipCode\":\"Code postal\",\"pceTitle\":\"Numéro de votre compteur de gaz (PCE)\",\"pceLabel\":\"N° (14 chiffres)\",\"pceHint\":\"Où trouver le numéro de PCE ?\",\"pceModal\":{\"title\":\"Où trouver le n° de PCE ?\",\"txt1\":\"Votre numéro de <span>PCE</span> - ou <span>Point de comptage et d'estimation</span> - se trouve sur votre facture au niveau de vos informations contractuelles (parfois en 1ère page... parfois en dernière !)<br/><br/> C'est un identifiant à 14 chiffres.\",\"button\":\"J'ai compris\",\"accessibility\":\"Titre de la modale\",\"button-accessibility\":\"Bouton valider\"},\"headConsent\":\"Vous allez partager vos données à la Métropole de Lyon. Elles seront directement transférées à Ecolyo à l'intérieur de votre cloud personnel, sans que la Métropole n'y accède ni ne les visualise.\",\"textConsent\":\"Afin de vous offrir des fonctionnalités de visualisation et d'analyse, Ecolyo a besoin des données suivantes :\",\"consentLi1\":\"L'historique de vos consommations (jusqu’à 36 mois) et le relevé quotidien de vos consommations\",\"consentLi2\":\"Les données contractuelles (type de compteur, date de début de contrat)\",\"consentCheck1\":\"Je consens à partager les données personnelles ci-dessus pour une durée d'<span>un an</span>\",\"consentCheck2\":\"J’atteste être le titulaire du point de livraison (PCE) renseigné à l’étape précédente\",\"waiting\":{\"mailSent\":\"Un mail vous a été envoyé...\",\"mailDelay\":\"La réception du mail peut prendre 15min, l'envoi des mails se faisant tous les 1/4 d'heure\",\"validate\":\"Merci de valider l'autorisation d'accès à vos données\",\"comeback\":\"Une fois ce clic effectué, revenez ici pour accéder à vos données\",\"button_done\":\"C’est fait !\"}},\"eglgrandlyon\":{\"bill\":\"Munissez-vous d’une <span>facture d'eau</span> pour valider la connexion\",\"connect\":\"Je me connecte à l'eau\",\"accessibility\":{\"connect\":\"Se connecter\"},\"connect_form\":{\"login\":\"Identifiant (7 chiffres)\",\"password\":\"Mot de passe\",\"label\":\"Je connecte Ecolyo à mon compte Eau Publique du Grand Lyon\"},\"no_account\":{\"title\":\"Ecolyo doit se connecter à l'eau\"},\"with_account\":{\"title\":\"Votre compte Eau Publique du Grand Lyon a bien été créé ?\",\"subtitle1\":\"Plus qu’à donner votre accord pour connecter votre compteur d'eau et Ecolyo !\"},\"step1\":{\"info1\":\"La connexion se fait via <span>votre compte Eau Publique du Grand Lyon</span>.\",\"info2\":\"Possédez-vous un <span>compte Eau Publique du Grand Lyon</span> ?\"},\"step2\":{\"info1\":\"Une fois votre compte créé, <span>n'oubliez pas de revenir sur Ecolyo</span> pour finaliser la connexion.\"},\"button_go_to_partner_site\":\"Aller sur EPGL\"},\"connect_oauth\":{\"loading\":\"Chargement...\"},\"accessibility\":{\"button_reveal_password\":\"Afficher le mot de passe\",\"button_connect\":\"Se connecter\",\"button_create_account\":\"Se créer un compte\",\"window_title\":\"Fenêtre d'information sur la création de compte.\",\"button_close\":\"Fermer la fenêtre.\"},\"button_previous\":\"Précédent\",\"button_connect\":\"Se connecter\",\"button_create_account\":\"Se créer un compte\",\"button_has_account\":\"J'ai déjà un compte\",\"button_validate\":\"J'ai compris\",\"button_showOfflineData\":\"Voir mes anciennes données\",\"warningOfflineData\":\"Attention, vous visualisez d’anciennes données. Pour actualiser vos données, connectez votre compteur\"},\"challenge\":{\"card\":{\"ongoing\":{\"quiz\":\"Quiz\",\"exploration\":\"Explorations\",\"action\":\"Actions\",\"duel\":\"Duel Final\",\"result\":\"Résultat\",\"duelDone\":\"du duel final\"},\"locked\":{\"desc\":\"À débloquer en terminant le défi précédent\"}},\"card_done\":{\"saving\":\"Économie de\",\"depense\":\"Dépense de\",\"win\":\"Gagné\",\"lost\":\"Perdu\",\"final_defi\":\"sur le duel final\",\"final_defi_view\":\"Revoir le duel final\",\"reset_defi\":\"Relancer le défi\"},\"card_last\":{\"title\":\"Tous les défis sont terminés\",\"message1\":\"Nous travaillons actuellement à vous proposer de nouveaux défis.\",\"button\":\"Suggérer une idée de défi\"},\"card_unlocked\":{\"button_launch\":\"Lancer le défi\"},\"accessibility\":{\"button_launch\":\"Lancer le défi\",\"button_goto_konnector\":\"Aller aux connecteurs\",\"button_slider_previous\":\"Précédent\",\"button_slider_next\":\"Suivant\"}},\"challenge_no_fluid_modal\":{\"title\":\"Oups !\",\"content\":\"Connectez au moins 1 fluide pour pouvoir jouer\",\"button_validate\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Valider\"}},\"consumption\":{\"display_last_data\":\"Voir mes dernières consos\",\"accessibility\":{\"navigation_group\":\"Choix de la période\",\"fluid_menu\":\"Choix du fluide\",\"button_previous_period\":\"Afficher la période précédente\",\"button_next_period\":\"Afficher la période suivante\",\"button_previous_value\":\"Sélectionner la valeur précédente\",\"button_next_value\":\"Sélectionner la valeur suivante\",\"checkbox_compare\":\"Afficher ou cacher la comparaison\",\"bar\":\"Consommation du %{date} : %{value} %{unit}\"},\"partner_issue_modal\":{\"title\":\"Attention !\",\"accessibility_title\":\"Modale de maintenance partenaire\",\"error_connect_gaz\":\"La connexion à vos données de <span class='gaz'>gaz</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='gaz'>GRDF</span> ou dans notre service)\",\"error_connect_elec\":\"La connexion à vos données d'<span class='elec'>électricité</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='elec'>Enedis</span> ou dans notre service)\",\"error_connect_water\":\"La connexion à vos données d'<span class='water'>eau</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='water'>Eau Publique du Grand Lyon</span> ou dans notre service)\",\"additional_text\":\"La visualisation et/ou la connexion à vos données de consommation peut s'en trouver affectée.<br /><br /><i>Merci pour votre patience en attendant un retour à la normale :)</i>\",\"ok\":\"Ok\"},\"compared\":\"Comparé\"},\"consumption_details\":{\"detail\":\"Détail par fluide\",\"connect\":\"Connecter d'autres fluides\",\"mini_cards_label\":\"AUTRES ENERGIES\"},\"consumption_visualizer\":{\"missing_data\":\"Données manquantes\",\"no_data\":\"Pas de données\",\"why_no_data\":\"Pourquoi n'ai-je pas de données ?\",\"last_valid_data\":\"Dernières données valides : %{date}\",\"last_available_data\":\"Dernières données disponibles : %{date}\",\"last_valid_data_multi\":\"Dernières données complètes : %{date}\",\"data_to_come\":\"À venir\",\"aie\":\"Aïe !\",\"data_empty\":\"Vide\",\"estimated\":\"estimés\",\"cost_per_fluid\":{\"electricity\":\"Part de l'électricité\",\"water\":\"Part de l'eau\",\"gas\":\"Part du gaz\"},\"dataModal\":{\"list_title\":\"3 raisons possibles :\",\"item1\":\"le lien entre Ecolyo et le fournisseur de données est rompu : une mise à jour de ce lien (en bas de la page) peut résoudre ce problème.\",\"item2\":\"un problème technique chez votre gestionnaire : se connecter directement chez ce gestionnaire pour vérifier que cette donnée apparaît.\",\"item3\":\"pour le gaz : vous n'avez pas autorisé Ecolyo à accéder aux données de consommation de cette période.\",\"item4\":\"vous n'aviez tout simplement pas de compteur communicant à l'époque !\"},\"modal\":{\"window_title\":\"info estimation des prix\",\"title\":\"Comment sont estimés les prix ?\",\"close\":\"Fermer la fenêtre\",\"part1\":\"Le prix de votre électricité ou de votre gaz dépend de l'offre choisie auprès de votre fournisseur. N’ayant pas accès à cette information, Ecolyo affiche un prix moyen par fluide. \",\"part2\":\"Tarifs moyens retenus :\",\"list1\":\" : 1 kWh = %{elecPrice} €TTC (il correspond au tarif réglementé d’EDF au %{elecPriceStartDate} pour une puissance souscrite de 3 ou 6 kVA et hors offre heure pleine/heure creuse)\",\"list2\":\" : 1 kWh = %{gasPrice} €TTC (Prix repère de vente de gaz publié par la Commission de Régulation de l'Energie au %{gasPriceStartDate} pour un consommateur \\\"Cuisson/Eau Chaude\\\")\",\"list3\":\" : 1 litre d’eau = %{waterPrice} € TTC (prix constaté au %{waterPriceStartDate} pour un abonnement et une consommation de 120 m3/an sur la Métropole de Lyon)\",\"part3\":\"Le coût de votre abonnement n'est pas pris en compte pour l'électricité.\"},\"release_notes_modal\":{\"title\":\"Du nouveau sur Ecolyo !\",\"message\":\"Les mises à jour suivantes ont été effectuées sur votre application :\",\"go_back\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre de notifications\",\"button_go_back\":\"J'ai compris\"}}},\"ecogestures\":{\"loading\":\"Chargement des astuces\"},\"duel\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"average_info\":\"%{average} euros étant votre moyenne actuelle, relevez-vous le défi ?\",\"button_start\":\"Allons-y !\",\"goal1\":\"Faites moins que votre moyenne actuelle sur %{durationInDays} jours\",\"goal2\":\"pour gagner le badge %{title}\",\"goal_done\":\"Duel remporté\",\"goal_failed\":\"Duel perdu\",\"caption_average\":\"Votre moyenne à titre indicatif\",\"caption_consumption\":\"Votre consommation\",\"caption_incoming\":\"Données à venir\",\"accessibility\":{\"button_go_back\":\"Retour\",\"button_start_duel\":\"Lancer le duel\",\"button_start_quiz\":\"Lancer le quiz\"}},\"duel_result_modal\":{\"success\":{\"title\":\"Félicitations\",\"message1\":\"Vous avez économisé %{value} €\",\"message2\":\"et gagné le badge %{title} !\",\"button_validate\":\"Youpi\"},\"lost\":{\"title\":\"Presque\",\"message1\":\"Vous avez dépassé de %{value} €\",\"message2\":\"et manqué le badge %{title}\",\"button_validate\":\"Zut alors\"},\"accessibility\":{\"window_title\":\"Fenêtre de résultat\",\"button_validate\":\"Valider\"}},\"last_duel_modal\":{\"title\":\"Félicitations !\",\"subtitle\":\"Vous avez terminé tous les défis !\",\"message1\":\"Nous travaillons actuellement à vous proposer de nouveaux défis.\",\"message2\":\"Vous pouvez donner votre avis sur ce que vous aimeriez en cliquant sur la bulle d'aide.\",\"close\":\"Fermer la fenêtre\"},\"duel_empty_value_modal\":{\"title\":\"Oups !\",\"message\":\"Impossible de lancer le duel. Il nous manque en effet certaines de vos données de consommation pour vous proposer un duel à votre hauteur.\",\"button\":\"Je retourne au menu des défis\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Retourner au menu des défis\"}},\"ecogesture\":{\"title_tab_0\":\"Objectifs\",\"title_tab_1\":\"Je fais déjà\",\"title_tab_2\":\"Toutes\",\"MENU_TITLE\":\"Filtrer\",\"ALL\":\"Tous les usages\",\"HEATING\":\"Chauffage\",\"AIR_CONDITIONING\":\"Climatisation\",\"ECS\":\"Eau chaude\",\"COLD_WATER\":\"Eau froide\",\"ELECTRICITY_SPECIFIC\":\"Électricité courante\",\"COOKING\":\"Cuisson\",\"selection\":\"Sélectionner les astuces les plus adaptées à votre consommation\",\"selection_2\":\"vues sur\",\"button_selection\":\"Continuer ma sélection\",\"no_ecogesture\":\"Aucune astuce ne correspond à votre filtrage\",\"no_ecogesture_filter\":{\"text1\":\"Nous n'avons pas trouvé d'astuces adaptées à votre profil dans cette catégorie.\",\"text2\":\"En effet, de par votre profil et vos modes de chauffage, d'eau ou d'eau chaude sanitaire, nous n'avons pas identifié d’astuces vous permettant de diminuer vos factures à titre individuel. Toutefois, vous pouvez toujours agir pour préserver les ressources en appliquant et diffusant autour de vous les autres bonnes pratiques présentées dans la partie \\\"Toutes les astuces\\\".\"},\"adjust_profil\":{\"description\":\"Pour une sélection d’astuces adaptée à votre consommation, vous pouvez ajuster votre profil.\",\"button_go_to_profil\":\"Ajuster mon profil\"},\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_close\":\"Fermer la fenêtre\",\"button_selection\":\"Aller à la page de sélection\"},\"doing\":\"Je fais déjà\",\"objective\":\"Objectif\",\"emptyList\":{\"obj1\":\"Les astuces présentées sont des actions qui vous permettent de réduire vos consommations et donc vos factures. On parle parfois d’écogestes.\",\"obj1_done\":\"Aucune astuce n’a été sélectionnée comme objectif actuellement.\",\"obj2\":\"Vous pouvez sélectionner ceux à mettre en objectifs et ceux que vous appliquez déjà.\",\"obj2_done\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous souhaitez garder en objectif dans cette section.\",\"doing1\":\"Aucune astuce n’a été sélectionnée dans la catégorie appliquée actuellement.\",\"doing1_done\":\"Aucune astuce n’est indiquée comme déjà appliquée actuellement.\",\"doing2\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous mettez déjà en pratique dans cette section.\",\"doing2_done\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous mettez déjà en pratique dans cette section.\",\"btn1\":\"Voir toutes les astuces\",\"btn2\":\"Sélectionner\"},\"initModal\":{\"title\":\"Sélectionner mes astuces\",\"text1\":\"Les astuces présentées dans cette page sont des actions qui vous permettent de réduire vos consommations. Elles sont appelées parfois aussi écogestes.\",\"text2\":\"Répondez à un court questionnaire pour générer une liste d'astuces adaptée à votre profil puis sélectionnez celles que vous suivez déjà et celles que vous voulez vous mettre en objectif !\",\"btn1\":\"Plus tard\",\"btn2\":\"C'est parti !\"},\"reset\":\"Réinitialiser ma sélection\",\"resetModal\":{\"title_part1\":\"Cette action\",\"title_part2\":\"supprimera votre liste d’astuces\",\"title_part3\":\"sélectionnées dans\",\"title_part4\":\"“Objectifs”\",\"title_part5\":\"et\",\"title_part6\":\"“Je fais déjà”\",\"text1\":\"Vous pourrez ensuite faire une nouvelle sélection adaptée à votre consommation.\",\"text2\":\"Souhaitez-vous réinitialiser votre sélection d’astuces ?\",\"btn1\":\"Non\",\"btn2\":\"Réinitialiser\"}},\"ecogesture_modal\":{\"title_ecogesture\":\"Astuce\",\"title_action\":\"Action\",\"efficiency\":\"Efficacité\",\"show_less\":\"Voir moins\",\"show_more\":\"Voir plus\",\"select_action\":\"Je choisis cette action\",\"accessibility\":{\"window_title_ecogesture\":\"Fenêtre astuce\",\"window_title_action\":\"Fenêtre action\",\"button_close\":\"Fermer la fenêtre\",\"button_select_action\":\"Sélectionner cette action\",\"button_see_more_detail\":\"Afficher plus de détails\"}},\"ecogesture_info_modal\":{\"header\":\"Comment sont choisis les astuces adaptées à mon profil ?\",\"text\":\"Les astuces adaptés à votre profil sont aujourd’hui choisies en fonction des compteurs individuels que vous possédez (communicants ou non). Ceux présentés ici vous permettent d'agir sur vos consommations individuelles. Des modes de tri plus personnalisables seront proposés à l'avenir.\",\"button_close\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre d'information\",\"button_close\":\"Fermer la fenêtre\"}},\"ecogesture_form\":{\"heating_type\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"5\":\"Autre\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour vous chauffer ?\",\"no_fluid_text\":\"Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel\",\"0_text\":\"Produit grâce à de l'électricité\",\"2_text\":\"Produit grâce au gaz\",\"3_text\":\"Produit grâce au bois\",\"4_text\":\"Produit grâce au fioul\",\"5_text\":\"Produit grâce à un autre moyen\"},\"hot_water\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"}},\"ecogesture_profile\":{\"equipments\":{\"question\":\"Quels équipements possédez-vous ?\",\"hint\":\"Plusieurs réponses possibles\",\"air_conditioning\":\"Climatisation\",\"computer\":\"Ordinateur\",\"microwave\":\"Micro-ondes\",\"oven\":\"Four\",\"washing_machine\":\"Lave-linge\",\"dishwasher\":\"Lave-vaisselle\",\"cooking_plates\":\"Plaques électriques\",\"outside\":\"Extérieur\",\"dryer\":\"Sèche-linge\",\"refregirator\":\"Réfrigérateur\",\"fan\":\"Ventilateur\",\"water_heater\":\"Chauffe-eau\",\"curtain\":\"Rideaux\",\"internet_box\":\"Box internet\",\"ventilation\":\"VMC\",\"freezer\":\"Congélateur\",\"boiler\":\"Chaudière\",\"hydraulic_heating\":\"Chauffage hydraulique\",\"accessible_label\":\"Liste des équipements\"}},\"ecogesture_selection\":{\"header\":\"Sélection des astuces\",\"title\":\"Vous avez parcouru un groupe de %{smartCount} astuces\",\"text\":\"Voulez-vous continuer sur votre lancée ou remettre cette sélection à plus tard ?\",\"title_final\":\"Félicitations !\",\"text_final_1\":\"Vous avez terminé la sélection des astuces adaptées à votre consommation.\",\"text_final_2\":\"Vous pouvez les retrouver dans les sections “Objectifs” et “Je fais déjà” selon que vous les pratiquiez déjà ou non.\",\"button_go_to_ecogesture\":\"Plus tard\",\"button_ok\":\"J'ai compris\",\"button_continue\":\"Poursuivre\",\"button_objective\":\"Objectif\",\"button_doing\":\"Je fais déjà\",\"button_skip\":\"Pas intéressé\",\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_close\":\"Fermer la fenêtre\",\"button_go_to_ecogesture\":\"Retourner aux astuces\",\"button_continue\":\"Poursuivre\",\"button_ok\":\"Fermer la sélection\"},\"selectionModal\":{\"title\":\"Des astuces correspondant à votre profil ont été trouvées !\",\"text\":\"À vous de choisir celles que vous souhaitez mettre en objectif et celles que vous faites déjà.\",\"button_close\":\"C'est parti !\"}},\"exploration\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"button_already_done\":\"C’est déjà fait !\",\"button_come_back\":\"Je reviens quand cela sera fait\",\"button_start\":\"C'est parti !\",\"watch_consumption\":\"Je fonce\",\"congratulation\":\"Bravo !\",\"earn\":\"Vous remportez\",\"button_confirm\":\"Ok\",\"interval\":{\"explanation\":\"Vous pouvez vérifier cette informations sur l'écran Conso.\"},\"accessibility\":{\"button_already_done\":\"Marquer l'exploration comme déjà réalisée\",\"button_confirm\":\"Valider\",\"button_come_back\":\"Fermer l'exploration\",\"button_go_back\":\"Retour\",\"button_start\":\"Lancer l'exploration\"}},\"error_page\":{\"main\":\"Erreur\",\"back\":\"Retour\",\"no_ecogesture\":\"Oups ! Nous n'avons pas trouvé l'astuce demandée.\"},\"help\":{\"title_help\":\"une question ? un problème ? une suggestion ?\",\"read_help\":\"Nous écrire via le Service d'Assistance Utilisateur\"},\"feedback\":{\"title\":\"Vous allez contacter le Service Assistance Utilisateur du Grand Lyon.\",\"text1\":\"Vous pourrez nous remonter un problème, chercher de l'aide pour vous connecter plus facilement, ou encore nous partager une bonne idée d'évolution.\",\"text2\":\"N'hésitez pas à nous écrire ! L'équipe Ecolyo vous répondra avec plaisir :)\",\"later\":\"Plus tard\",\"lets_go\":\"J'y vais\",\"accessibility\":{\"window_title\":\"Fenêtre de partage de retours\",\"button_close\":\"Fermer la fenêtre de partage de retours\"}},\"dataShare\":{\"title1\":\"Bienvenue !\",\"title1Update\":\"Ecolyo évolue !\",\"title2Update\":\"Pour continuer à utiliser Ecolyo, merci d’accepter les modalités de traitement des données ci-dessous.\",\"part1\":\"Nous avons besoin de l’adresse email utilisée lors de la création de votre Cozy Métropole de Lyon, ci-après nommé cloud personnel.\",\"part2\":\"Cette donnée de compte est conservée dans Ecolyo le temps de l’utilisation de ce service.\",\"part3\":\"La Métropole de Lyon utilisera cet email afin de vous tenir informé·e :\",\"item1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter.\",\"item2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"item3\":\"De l’évolution de vos consommations, des nouveautés et  de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part4\":\"Vos données privées de consommation d’énergie et d’eau sont récupérées, sauvegardées et stockées dans votre cloud personnel à votre initiative sans visibilité de la Métropole  de Lyon sur leur contenu.\",\"part5\":\"Il en est de même pour les données privées de composition du logement et du foyer, fournies par vos soins. Elles restent également sans visibilité de la Métropole de Lyon sur leur contenu.\\nLes données d’identification entrées lors de la connexion aux données de consommations d’électricité sont quant à elles conservées dans un espace sécurisé de la Métropole de Lyon et sont utilisées uniquement à des fins de contrôle du consentement par des organismes extérieurs.\",\"part6\":\"Dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées et pseudonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation, d’évaluer globalement l’usage de l’application via des mesures d’audience ainsi que d’évaluer à terme l’impact global en termes de baisse des consommations énergétiques de notre service.\",\"part7\":\"Au sein de votre cloud personnel, vous pouvez à tout moment exercer vos droits d’accès, de rectification, de portabilité, de limitation et d’opposition en consultant notamment la page Options.\",\"part8\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part9\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Assemblées, des Affaires Juridiques et des Assurances - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 \",\"part10\":\"ou en ligne, au moyen du formulaire disponible à l'adresse suivante : \",\"link1\":\"<a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/</a>\",\"validDataConsent\":\"Je consens au traitement de mes données tel que décrit ci-dessus.\",\"validCGU\":\"Je valide les \",\"validCGU_button\":\"Conditions Générales d’Utilisation\",\"validLegal\":\" du service et ai pris connaissance des \",\"validLegal_button\":\"Mentions Légales\",\"validLegal2\":\"de celui-ci.\",\"button_accept\":\"C'est parti !\",\"accessibility\":{\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"minorUpdate\":{\"title\":\"Ecolyo évolue !\",\"button\":\"J'ai compris\"},\"gcu\":{\"title\":\"Conditions générales d’utilisation du service\",\"version\":\"Version du 12.12.2022\",\"content\":{\"title1\":\"Ecolyo, késako ?\",\"part1_1\":\"Ecolyo est un service proposé par la Métropole de Lyon vous permettant de suivre au même endroit vos consommations d’électricité, de gaz et d’eau, en kWh, en litres, en euros et à différentes échelles de temps. Ce service vous permet également de participer à des défis individuels et vous offre une analyse de vos consommations. Des astuces vous sont aussi proposées afin de vous permettre de réduire vos consommations.\",\"part1_2\":\"C’est un service gratuit qui prend la forme d’un site web dit « responsive », c’est-à-dire qu’il peut être consulté sur ordinateur ou sur mobile. Sur mobile, c’est une application que l’on a souhaitée ergonomique, réactive et esthétique pour votre plaisir de navigation et d’utilisation au quotidien.\",\"part1_3\":\"Tous les termes « techniques » sont définis en bas de page.\",\"title2\":\"Quelles fonctionnalités le service propose-t-il ?\",\"part2_1\":\"La fonctionnalité principale d’Ecolyo est la visualisation, au même endroit, de vos consommations d’électricité, de gaz et d’eau et ce, à différents pas de temps (de la demi-heure – uniquement pour l’électricité, à plusieurs années, en passant par les pas de temps journaliers et mensuels). La visualisation des consommations se fait en kWh pour l’énergie et en L pour l’eau ainsi qu’en euros (euros résultant d’un prix moyenné).\",\"part2_2\":\"Au-delà de la visualisation de vos consommations et parce que nous souhaitons vous aider à diminuer ces consommations vous retrouverez plusieurs autres pages : \",\"part2_2_list1\":\"Défis : Des quiz, et actions à mettre en place vous seront proposés pour vous pousser à réduire vos consommations.\",\"part2_2_list2\":\"Astuces : Une liste d’astuces pour maîtriser ses consommations d’énergie et d’eau à trier par usage, et avec une possibilité de les adapter plus précisément à votre profil.\",\"part2_2_list3\":\"Analyse : Une analyse de vos consommations réelles en comparaison à celle d’un foyer étant proche d’une vôtre.\",\"part2_3\":\"Pour la page Analyse ainsi que pour la partie personnalisation des astuces, des éléments supplémentaires sur votre profil vous seront demandés. L’ensemble de ces informations récoltées à l’aide du formulaire peuvent être modifiées par la suite.\",\"part2_4\":\"Dernière page : la page Options dans laquelle vous pourrez vous abonner à un service d’alerte sur vos consommations d’eau, de quoi ajuster votre profil ou encore vous désabonner de la lettre mensuelle.\",\"title3\":\"Comment ai-je accès à mes données d’électricité, de gaz et d’eau ?\",\"part3_1\":\"Pour visualiser vos consommations réelles et profiter pleinement du potentiel de notre service, il vous faut au minimum un des trois compteurs communicants suivants : Linky (pour l’électricité), Gazpar (pour le gaz), Téléo (pour l’eau).\",\"part3_2\":\"Ces compteurs sont opérés par les gestionnaires de réseaux. Pour Linky, c’est Enedis, le gestionnaire de réseau de distribution d’électricité. Pour Gazpar, GRDF est responsable de cette gestion. Et pour Téléo, c’est Eau Publique du Grand Lyon.\",\"part3_3\":\"Ces acteurs sont responsables de la relève de vos données. Ces données servent notamment à votre fournisseur d’électricité, de gaz ou d’eau pour permettre la facturation de vos consommations d’énergie. Des fournisseurs d’électricité ou de gaz il y en a des dizaines. Les gestionnaires de réseaux (… et de votre compteur) ne sont qu’au nombre de trois. Nous avons donc décidé de travailler avec eux, au plus près de la donnée brute issue de vos compteurs.\",\"part3_4\":\"Il vous faudra donc avoir un compte chez GRDF et Eau Publique du Grand Lyon pour accéder à vos données. Si vous n’en avez pas, il suffira de vous en créer un. Ceci ne sera à faire qu’une fois, au début.\",\"title4\":\"Ecolyo se trouve dans un cloud personnel Métropole de Lyon, qu’est-ce que cela signifie ?\",\"part4_1\":\"Comme vous avez dû le remarquer, lors de votre première connexion à Ecolyo vous avez dû vous créer un compte Cozy Métropole de Lyon. Ce cloud personnel est un espace sécurisé porté par l’ambition de vous apporter visibilité, transparence et maîtrise sur l’usage de vos données personnelles, et dont les fonctionnalités vous permettant de récupérer, synchroniser, stocker et partager vos données avec les destinataires de votre choix.  Le service Ecolyo se déploie  à l’intérieur de cet espace protégé. Dans ce cloud personnel, vous pourrez accéder également à d’autres services. Toutes les données traitées par Ecolyo, mais aussi les autres services que vous seriez amenés à utiliser dans ce cloud personnel restent dans ce Cloud Personnel Grand Lyon et n’en sortent pas, sauf si vous décidez vous-même de partager vos données avec des tiers.\",\"part4_2\":\"Pour en savoir plus sur ce cloud et son utilisation, ainsi que la durée de conservation de vos données, vous pouvez lire les conditions générales d’utilisation du service <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">ici</a>.\",\"title5\":\"Et donc concrètement pour Ecolyo, quelles données sont collectées et qui y a accès ?\",\"part5_1\":\"Pour qu’Ecolyo ait accès à vos données de consommations, vous devrez activer vos différents connecteurs. À ce moment-là, pour la connexion aux données de gaz et d’eau à travers un parcours qui vous conduira de manière intuitive sur le site de chacun des gestionnaires de réseaux concerné, vous pourrez donner votre consentement à partager ces données avec le Service Ecolyo, et ce pour une durée limitée dans le temps. Pour l’électricité, le don du consentement et la connexion aux données se fait directement dans notre service. Quid de la durée de ce consentement ? Pour les données électriques, elle est par défaut d'un an. Pour les données gaz, cela sera à vous de la définir (nous vous recommandons 1 an pour une expérience optimale). Les données utilisées pour vérifier la bonne connexion de vos données d’électricité sont stockées du côté de la Métropole de Lyon sur des serveurs sécurisés.\",\"part5_2\":\"Vos connecteurs, une fois configurés, permettent le transfert de vos données de consommations au service Ecolyo. Le transfert de ces données de consommation se fait sans que personne n’accède à leur contenu, pas même la Métropole de Lyon. En effet, ces données sont stockées et traitées directement dans votre cloud personnel qui en assure la protection. Tous les calculs, analyses et traitements sur ces données sont faites DANS votre espace personnel sans visibilité sur le contenu des données par la Métropole de Lyon.\",\"part5_3\":\"Vous pouvez bien sûr mettre fin à la récupération/ au transfert de vos données de consommation sur votre espace cloud personnel à tout moment et  à plusieurs niveaux : \",\"part5_3_list1\":\"Vous pouvez supprimer le transfert quotidien de vos données en supprimant tout simplement le connecteur dans la page Consos (en bas).\",\"part5_3_list2\":\"Pour supprimer l’ensemble de vos données ainsi que votre cloud personnel Métropole de Lyon, vous devez demander la suppression de votre cloud. Pour faire cela, rendez-vous dans les paramètres de votre cloud personnel via la barre blanche en haut d’Ecolyo et appuyez sur le bouton « Supprimer mon compte » dans la partie paramètres.\",\"part5_4\":\"Des données sur le profil de votre foyer peuvent être également remplies au sein de l’application. Ces données s’enrichiront au fur et à mesure de votre utilisation du service avec d’autres informations : défis réalisés, étoiles gagnées, etc. L’ensemble de ces données restent à l’intérieur de votre cloud personnel, sans que personne n’y ait accès.\",\"part5_5\":\"Enfin, afin de permettre une mise à jour quotidienne de vos données de consommations, vos identifiants Eau Publique du Grand Lyon, un jeton d’identification GRDF ainsi que vos numéros de compteurs sont stockés.\",\"title6\":\"Personne n’a donc accès à mes données, pas même la Métropole de Lyon, vraiment ?\",\"part6_1\":\"Conformément aux indications du paragraphe précédent, la Métropole de Lyon n’accède ni à vos données de consommations ni aux données utilisées via certaines fonctionnalités du service comme le formulaire (celui-là même qui permet l’analyse de vos consommations personnalisée ainsi qu’une sélection d’éco-gestes personnalisés). Toutes ces informations sont bien gardées au chaud dans votre cloud personnel Métropole de Lyon\",\"part6_2\":\"Seul vous pouvez accepter de partager vos données, documents ou fichiers privés avec la Métropole de Lyon, ses partenaires ou d’autres utilisateurs ou acteurs (publics ou privés) après recueil de votre consentement éclairé et par une action expresse de votre part.\",\"part6_3\":\"La Métropole de Lyon n'a cependant accès qu’à l’adresse email utilisée lors la création de votre cloud personnel Métropole de Lyon. Elle utilise cet email afin de vous tenir informé·e :\",\"part6_3_list1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter. \",\"part6_3_list2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"part6_3_list3\":\"De l’évolution de vos consommations, des nouveautés et  de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part6_4\":\"Elle stocke également les informations transmises lors de la connexion à l’électricité (nom, adresse postale). Ces informations doivent être stockées car la Métropole de Lyon est régulièrement contrôlée par Enedis et doit prouver détenir le consentement des personnes pour lesquelles elle va chercher la donnée.\",\"part6_5\":\"Par ailleurs, et dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques anonymisées nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation ainsi que d’évaluer l’impact global en termes de baisse des consommations énergétiques de notre service. Parmi ces statistiques, des mesures d’audience de la fréquentation des différentes pages du service sont réalisées. Vous pouvez, via la page Options, à tout instant, décider de vous opposer à la récupération de ces données d’utilisation.\",\"title8\":\"Encore des questions ?\",\"part8_1\":\"N’hésitez pas à consulter la FAQ ou à nous contacter via le formulaire de contact présente sur l’ensemble des pages.\",\"part8_2\":\"Dernière option, contactez-nous directement à <a href=\\\"mailto:ecolyo@grandlyon.com\\\">ecolyo(at)grandlyon.com</a>.\",\"title9\":\"LEXIQUE\",\"part9_1_title\":\"Cloud personnel Métropole de Lyon : \",\"part9_1_content\":\"Cloud personnel : appelé aussi le « domicile numérique », le cloud personnel est souvent réduit à un simple espace de stockage de documents mais il est bien plus que ça. C'est un espace individuel et sécurisé où vous pouvez accéder à des services sans exposer aucune donnée à l’extérieur. Vous seul pouvez y accéder, personne d'autre.\",\"part9_2_title\":\"Connecteur : \",\"part9_2_content\":\"Un connecteur est un service, installé dans votre cloud personnel également, qui a pour but uniquement d’aller récupérer les données auprès de différents partenaires/sources de données. Dans le cadre d’Ecolyo, trois connecteurs sont pré-installés dans votre cloud personnel : celui d’Enedis, celui de GRDF et celui d’Eau Publique du Grand Lyon.\",\"part9_3_title\":\"Compteur communicant : \",\"part9_3_content\":\"Un compteur communicant est un compteur qui mesure de manière précise et détaillée vos consommations et peut transmettre ces données  au gestionnaire de réseau via une technologie radio (c'est le cas pour Gazpar et Téléo par exemple) ou via les réseaux électriques (via Courant Porteur en ligne, c'est le cas pour Linky par exemple).\",\"part9_4_title\":\"Fournisseur : \",\"part9_4_content\":\"Votre fournisseur d’électricité, de gaz ou d’eau est l’entreprise qui vous facture votre électricité, gaz ou eau. Côté électricité il en existe <a href=\\\"https://www.enedis.fr/liste-des-fournisseurs-delectricite\\\">aujourd’hui plus de 50</a>, chacun proposant des tarifs différents.\",\"part9_5_title\":\"Gestionnaire de réseau de distribution : \",\"part9_5_content\":\"Appelé aussi parfois distributeur, il est en charge de la livraison de votre électricité, gaz ou eau jusqu’à votre domicile. Il est aussi en charge du compteur qui relève vos consommations. Il transmet vos données de consommations à votre fournisseur afin qu’il effectue la facturation de vos consommations d’énergie. Il peut également les transmettre à tout acteur avec qui vous avez décidé de partager ces données.\"}},\"gcu_modal\":{\"button_accept\":\"J'accepte\",\"accessibility\":{\"window_title\":\"Conditions générales d’utilisation\",\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"matomo\":{\"matomo_title\":\"Suivi statistiques d'usage Matomo\"},\"header\":{\"accessibility\":{\"button_back\":\"Retour à la page précédente\",\"button_open_feedbacks\":\"Ouvrir le partage de retours\"}},\"konnector_form\":{\"label_updated_at\":\"Dernière mise-à-jour le\",\"button_update\":\"Mettre à jour\",\"loading\":\"Chargement...\",\"wait_end_issue\":\"Attendre la fin de la maintenance avant de mettre à jour.\",\"button_disconnect\":\"Déconnecter\",\"issue\":\"Le problème semble venir de \",\"resolve\":\"Une mise à jour peut résoudre ce problème.\",\"login_failed\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"not_installed\":\"Le connecteur n'est pas installé. Veuillez l'installer en cliquant sur le bouton ci-dessous.\",\"button_install\":\"Installer\",\"error_account_creation\":\"Une erreur est survenue, veuillez essayer de nouveau.\",\"error_no_login_password\":\"Identifiant et mot de passe requis\",\"error_login_failed\":\"Identifiants invalides\",\"error_update\":\"Un problème est survenu lors du rapatriement de vos données.\",\"error_update_oauth\":\"Votre autorisation pour afficher vos données %{fluid} a expiré.\",\"button_oauth_reload\":\"Redonner mon consentement\",\"OK\":\"Ok\",\"konnector_delta\":{\"ELECTRICITY\":\"La donnée de consommation électrique arrive normalement à J+1. Un retard d'un ou deux jours est parfois constaté.\",\"GAS\":\"La donnée de consommation de gaz arrive normalement à J+3. Un retard d'un ou deux jours est parfois constaté.\",\"WATER\":\"La donnée de consommation d'eau arrive normalement à J+3. Un retard d'un ou deux jours est parfois constaté.\"},\"accessibility\":{\"button_install\":\"Installer le connecteur\",\"button_update\":\"Mettre à jour votre connexion\",\"button_disconnect\":\"Déconnecter votre connecteur\"}},\"konnector_options\":{\"label_connect_to_electricity\":\"Se connecter à l'électricité\",\"label_connect_to_water\":\"Se connecter à l'eau\",\"label_connect_to_gas\":\"Se connecter au gaz\",\"label_offline_electricity\":\"Électricité déconnectée\",\"label_offline_water\":\"Eau déconnectée\",\"label_offline_gas\":\"Gaz déconnecté\",\"partner_issue\":\"En maintenance\",\"outdated\":\"Données manquantes depuis %{isOutdatedData} jours\",\"accessibility\":{\"label_ko_status\":\"Connecteur en erreur\",\"button_toggle_detail_electricity\":\"Afficher ou masquer le détail de la connexion à l'électricité\",\"button_toggle_detail_water\":\"Afficher ou masquer le détail de la connexion à l'eau\",\"button_toggle_detail_gas\":\"Afficher ou masquer le détail de la connexion au gaz\"}},\"konnector_modal\":{\"loading_data\":\"Veuillez patienter, vos données sont en cours de chargement.\",\"loading_data_update\":\"Veuillez patienter, vos données sont en cours de mise à jour.\",\"logging_txt\":\"Nous vérifions vos informations d'identité\",\"success_txt\":\"Félicitations !\",\"success_data_electricity\":\"Vos données de consommation d'électricité sont maintenant connectées à Ecolyo.\",\"success_data_water\":\"Vos données de consommation d'eau sont maintenant connectées à Ecolyo.\",\"success_data_gas\":\"Vos données de consommation de gaz sont maintenant connectées à Ecolyo.\",\"success_data_additional_electricity\":\"Les données de consommations mettent entre un et deux jours pour arriver.\",\"success_data_additional_water\":\"Les données de consommations mettent entre trois et cinq jours pour arriver.\",\"success_data_additional_gas\":\"Les données de consommations mettent entre trois et cinq jours pour arriver.\",\"success_update_txt\":\"Connexion réussie !\",\"success_data_update_electricity\":\"Ecolyo est bien connecté à votre compteur d'électricité.\",\"success_data_update_water\":\"Ecolyo est bien connecté à votre compteur d'eau.\",\"success_data_update_gas\":\"Ecolyo est bien connecté à votre compteur de gaz.\",\"success_data_additional_update_electricity\":\"Sachez que la donnée de consommation d'électricité arrive entre J+1 et J+2.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"success_data_additional_update_water\":\"Sachez que la donnée de consommation d'eau arrive entre J+3 et J+5.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"success_data_additional_update_gas\":\"Sachez que la donnée de consommation de gaz arrive entre J+3 et J+5.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"error_txt\":\"Aïe !\",\"mismatch\":{\"title\":\"Vos données n'ont pas pu être récupérées.\",\"text1\":\"Vos nom et numéro de compteur ne correspondent plus. Merci de reconfigurer votre connecteur.\",\"text2\":\"Reconfigurer mon connecteur ?\",\"text3\":\"La reconfiguration de votre connecteur passe par sa suppression et sa nouvelle installation. Vos données seront conservées.\"},\"error_credentials_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter. L'identifiant est un numéro à 7 chiffres (différent de votre numéro de contrat).\",\"error_credentials_electricity\":\"Il semblerait que les nom(s) et adresse ne concordent pas avec le numéro de votre compteur.\",\"error_credentials_electricity_2\":\"Nous ne pouvons vous donner accès aux données de consommation.\",\"error_credentials_update_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter.\",\"error_credentials_update_electricity\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"error_credentials_update_gas\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"error_consent_form_gas_title\":\"L'accès à vos données a été bloqué par GRDF suite à un consentement précédemment supprimé par vos soins.\",\"error_consent_form_gas_report\":\"Merci de nous signaler le problème.\",\"error_data_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité ne seront pas chargées.\",\"error_data_water\":\"Un problème est survenu. Vos données de consommation d’eau ne seront pas chargées.\",\"error_data_gas\":\"Il semblerait que le service de connexion à vos données de gaz soit momentanément en panne.\",\"error_data_update_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité n’ont pas été mises à jour.\",\"error_data_update_water\":\"Un problème est survenu. Vos données de consommation d’eau n’ont pas été mises à jour.\",\"error_data_update_gas\":\"Un problème est survenu. Vos données de consommation de gaz n’ont pas été mises à jour.\",\"error_data_2\":\"Merci de réessayer plus tard.\",\"button_validate\":\"Ok\",\"button_understood\":\"J'ai compris\",\"button_try_again\":\"Réessayer\",\"button_contact\":\"Nous contacter\",\"button_check_info\":\"Vérifier les infos\",\"button_go\":\"J'y vais\",\"button_later\":\"Plus tard\",\"show_common_error\":\"Voir les erreurs récurrentes\",\"show_common_error_list\":\"<span>Le problème peut provenir des cas suivants :</span><ul><li>Vous avez un co-titulaire sur votre contrat. Veillez à bien entrer le nom du <span class=\\\"gold\\\">titulaire du contrat</span> et non le co-titulaire.</li><li>  Votre nom comporte un tiret ? Tentez sans le tiret.</li><li>Entrez bien le nom de votre commune de résidence en entier (tirets et accents inclus)</li><li>Avez-vous bien entré le <span class=\\\"gold\\\">numéro de votre compteur</span> (PDL) ? Tout autre numéro (de contrat, de client) ne fonctionne pas.</li></ul><p>Si vous rencontrez toujours des difficultés, contactez notre service d'aide </p><div class=\\\"center\\\">Avez-vous pensez à vérifier ces informations ?</div>\",\"accessibility\":{\"window_title\":\"Fenêtre d'attente de connexion\",\"button_close\":\"Fermer la fenêtre\"}},\"consent_outdated\":{\"title\":{\"0\":\"Votre autorisation pour afficher vos données d’électricité a expiré\",\"2\":\"Aïe !\"},\"text1\":{\"0\":\"Veuillez re-donner votre consentement pour la transmission et la reconnexion de vos données ENEDIS à Ecolyo.\",\"2\":\"L'accès à vos données de consommation de gaz a expiré.\"},\"text2\":{\"0\":\"Souhaitez-vous renouveler votre accord dès maintenant pour un an ?\",\"2\":\"Merci de redonner votre consentement pour y accéder.\"},\"later\":\"Plus tard\",\"go\":\"J'y vais\",\"no\":\"Non\",\"yes\":\"Oui\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur, consentement expiré\",\"button_close\":\"Fermer la fenêtre\"}},\"legal\":{\"read_legal\":\"Lire les mentions légales\",\"title_legal\":\"Mentions légales & CGU\",\"version\":\"Version du 12.12.2022\",\"site\":\"Site du service Ecolyo : <a href=\\\"https://ecolyo.com/\\\"> https://ecolyo.com/</a>\",\"adress\":\"Métropole de Lyon - 20, rue du Lac – CS 33569 - 69505 Lyon cedex 03\",\"phone\":\"Tél : (33) 4 78 63 40 40\",\"mail\":\"<a href=\\\"mailto:ecolyo@grandlyon.com\\\"> ecolyo(at)grandlyon.com</a>\",\"p1b\":\"Directrice de publication : \",\"p1\":\"Blandine MELAY, Responsable du Service Transition Énergétique\",\"p2b\":\"Animation éditoriale, gestion et mise à jour : \",\"p2\":\"Marion BERTHOLON, Chargée de services numériques pour la transition énergétique\",\"p3b\":\"Photographies : \",\"p3\":\"sauf mention contraire, les photos sont la propriété de la Métropole de Lyon\",\"p4b\":\"Conception et Charte graphique : \",\"p4\":\"Florent Dufier\",\"p5b\":\"Réalisation technique : \",\"p5\":\"Métropole de Lyon, Sopra Steria\",\"p6b\":\"Maintenance technique : \",\"p6\":\"Délégation Développement économique, emploi & savoirs - Innovation numérique & systèmes d’information - Usages et services numériques - Développement des services numériques\",\"title1\":\"Crédits\",\"part1\":\"Ce site est le résultat de développements spécifiques réalisés dans les langages Go, TypeScript, HTML et Sass. Les développements s’appuient sur plusieurs bibliothèques et frameworks libres : axios, cozy-bar, cozy-client, cozy-harvest-lib, cozy-scripts, cozy-ui, d3, global, lodash, luxon, node-sass, object-hash, react, react-dom, react-redux, react-router-dom, react-swipeable-views, redux-devtools-extension, sass-loader. Les tests de l’application s’appuient sur les bibliothèques et frameworks libres suivants: jest-junit, react-test-renderer, redux-mock-store. La pile technique intègre également les applications Cozy stack, Yarn, Docker, ACH. Les déploiements sont réalisés sur le registre hébergé chez Cozy. L’équipe de réalisation utilise au quotidien les applications GitLab, IceScrum, RocketChat, SonarQube.\",\"title2\":\"Traitement des données personnelles et droit d’accès, de modification et de suppression\",\"part2\":\"Conformément à la réglementation en vigueur en matière de protection des données personnelles, le service Ecolyo a fait l’objet d’une inscription au registre des traitements de la Métropole de Lyon. Ecolyo fait partie de l’écosystème de services orientés « self data » déployés par la Métropole de Lyon avec l’ambition d’offrir aux usagers métropolitains les outils et les services leur permettant d’exercer directement leur droit à la portabilité, dans un cadre apte à garantir aussi bien la transparence et le contrôle sur l’usage de leurs données personnelles que l’exploitation directe du contenu de ces données selon leurs libres choix. Le self data est en effet selon la Fondation Internet Nouvelle Génération (FING) « la production, l’exploitation et le partage de données personnelles par les individus, sous leur contrôle et à leurs propres fins ». Au sein de cet environnement self data, la gestion des données s’appuie sur l’organisation suivante des rôles et responsabilités associées : \",\"part2-1\":\"Les partenaires du service GRDF et Eau Publique du Grand Lyon sont responsables exclusivement des seuls traitements de Données Personnelles relatifs à la collecte des données de consommation de gaz et d’eau de l’utilisateur et à leur transmission sur la plateforme de cloud personnel, après consentement de l’utilisateur.\",\"part2-2\":\"Enedis est responsable de la collecte des données de consommation d’électricité et de leur mise à disposition à la Métropole de Lyon qui, elle en gère la transmission sur la plateforme du cloud personnel de l’utilisateur, après avoir récupéré le consentement de l’utilisateur.\",\"part2-3\":\"La Métropole de Lyon est responsable de traitement sur le périmètre du service Ecolyo qu’elle propose à l’usager, ainsi que des traitements nécessaires à la fourniture de la plateforme de cloud personnel qu’elle met à disposition de l’usager pour accéder au service Ecolyo. En sa qualité de responsable de ces traitements, elle collecte et traite : \",\"part2-3-1\":\"Les données de compte de l’usager renseignées par l’usager au sein de son espace de cloud personnel Grand Lyon à des fins de gestion du compte et de communication avec l’usager ;\",\"part2-3-2\":\"Les données de compte de l’utilisateur lui permettant de connecter ses données d’électricité à Ecolyo ;\",\"part2-3-3\":\"Les données privées de consommation d’énergie et d’eau dont la récupération, la sauvegarde, le stockage, la synchronisation et le partage sur la plateforme de cloud personnel sont initiés par l’usager sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-3-4\":\"Les données privées sur la composition du logement et du foyer de l’utilisateur, fournies par l’utilisateur lui-même au sein du service, sont traitées par le service sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-3-5\":\"Des métriques d’usage du service anonymisées et remontées périodiquement afin d’améliorer la qualité du service et d’évaluer son impact (Plus d’informations sur la manière dont votre anonymat est bien préservé dans ce processus <a href=\\\"https://ecolyo.com/cloud_statistiques.html\\\">ici</a>).\",\"part2-4\":\"La Métropole réalise également des mesures d’audience à l’aide de la solution Matomo. Afin de vous fournir un meilleur service et d’améliorer votre expérience d'utilisateur, nous utilisons des solutions de mesure d’audience qui utilisent la technologie des « cookies », des fichiers texte qui sont enregistrés sur votre ordinateur et qui permettent de générer des informations envoyées aux serveurs de mesure d’audience. Sur ces serveurs, l’adresse IP est anonymisée. Les données recueillies ont uniquement pour finalité de permettre d'analyser la fréquentation de nos pages afin d'en améliorer le contenu. Il s'agit de statistiques agrégées permettant de connaître le nombre de visites et de visiteurs différents, les pages les plus populaires, les chemins préférés, les niveaux d'activité par jour de la semaine et par heure de la journée, les principales erreurs etc. Vous avez cependant le droit de vous opposer à l’utilisation de ces cookies, et donc au traitement de vos données personnelles de navigation, en vous rendant dans la page Options de notre service.\",\"part2-5\":\"L’usager est seul décisionnaire des finalités d’utilisation qu’il souhaite définir pour le traitement de ses données personnelles de consommation, à la suite de leur transmission par les partenaires du service Ecolyo sur son cloud personnel. Ainsi, dans le cadre de l’utilisation d’Ecolyo, l’usager ne recevra les données des partenaires du service : Enedis, GRDF et Eau Publique du Grand Lyon seulement qu’à sa demande expresse après la saisie de ses identifiants.\",\"part2-6\":\"L’utilisateur est donc le seul à accéder :\",\"part2-6-1\":\"À ses données de consommation d’électricité horaires, journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-6-2\":\"À ses données de consommation de gaz journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-6-3\":\"À ses données de consommation eau journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-7\":\"Les engagements et responsabilités de la Métropole de Lyon concernant la protection des données et la confidentialité des données Ecolyo sont précisés dans les Mentions légales et les conditions d’utilisation du cloud personnel Grand Lyon qui accueille aujourd’hui le service Ecolyo et sans lequel le service ne peut pas fonctionner. Pour plus d’informations sur les engagements et responsabilités de la Métropole de Lyon concernant la protection et la confidentialité dans le cloud personnel, nous vous invitons à vous référer <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">aux mentions légales et CGU du cloud personnel métropolitain.</a> \",\"part2-8\":\"Conformément à la loi 78-17 du 6 janvier 1978 modifiée relative à l’information, aux fichiers et aux libertés, vous disposez d’un droit d’accès, de rectification et d’opposition au traitement de vos données à caractère personnel. Votre cloud personnel vous permet d’exercer ces droits directement dans cet espace sur vos données de compte. S’agissant des données de consommations d’électricité et de gaz, l’utilisateur peut supprimer son consentement à partager ses données en supprimant son connecteur dans la page Consos.\",\"part2-9\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part2-10\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Assemblées, des Affaires Juridiques et des Assurances - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou en ligne, au moyen du formulaire disponible à l'adresse suivante : <a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/.</a>\",\"part2-11\":\"L’exercice de ces droits sur vos données personnelles auprès de la Métropole de Lyon concerne exclusivement les données traitées dans le cadre du service  « Ecolyo ».\",\"title3\":\"Dispositions légales\",\"part3-1\":\"Les divers éléments du site web (la forme, la mise en page, le fonds, la structure …) sont protégés par le droit des dessins et modèles, le droit d’auteur, le droit des marques ainsi que le droit à l’image et ils ne peuvent être copiés ou imités en tout ou partie sauf autorisation expresse de la Métropole de Lyon.\",\"part3-2\":\"Toute personne ne respectant pas les dispositions légales applicables se rend coupable du délit de contrefaçon et est passible des sanctions pénales prévues par la loi.\",\"title4\":\"Droits d’auteurs\",\"part4-1\":\"Les photographies, textes, logos, pictogrammes, ainsi que toutes œuvres intégrées dans le site sont la propriété de la \\\"Métropole de Lyon\\\" ou de tiers ayant autorisé la \\\"Métropole de Lyon\\\" à les utiliser.\",\"part4-2\":\"Les reproductions, les transmissions, les modifications, les réutilisations, sur un support papier ou informatique, dudit site et des œuvres qui y sont reproduites ne sont autorisées que pour un usage personnel et privé conforme aux dispositions de l’article L 122-5 du Code de la Propriété Intellectuelle. Ces reproductions devront ainsi notamment indiquer clairement la source et l’auteur du site et/ou de ces œuvres multimédias. En aucun cas ces reproductions ne sauraient porter préjudice aux droits des tiers. Les reproductions, les transmissions, les modifications, les réutilisations à des fins publicitaires, commerciales ou d’information, de tout ou partie du site, sont totalement interdites.\",\"title5\":\"Logo de la Métropole de Lyon et d’Ecolyo\",\"part5\":\"Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent pas être modifiés – proportions, couleurs, éléments, constituants – et ne peuvent pas être sujet à aucune transformation, animation ou tout autre processus. Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent être utilisés et associés qu’aux seules informations vérifiables. Ils ne peuvent être notamment utilisés que pour illustrer des relations avec la Métropole de Lyon ou des actions de sponsorings dûment établies. Quel que soit le cas d’espèce, la Métropole de Lyon se réserve le droit d’approuver ou de désapprouver toute utilisation des logos de la Métropole de Lyon et d’Ecolyo, pour assurer son utilisation correcte, conformément à l’éthique, la morale et aux intérêts de la Métropole de Lyon. Les conditions susmentionnées s’appliquent dans le cadre de pages web, elles ne font pas référence à l’utilisation des logos dans tout autre document. La Métropole de Lyon se réserve le droit de modifier les conditions d’utilisation des logos de la Métropole de Lyon et d’Ecolyo à tout moment et sans préavis.\",\"title6\":\"Droit des bases de données\",\"part6\":\"Les bases de données sont protégées par la loi du 1er juillet 1998 et le régime français du droit d’auteur.\",\"title7\":\"Établissements de liens vers le site Ecolyo\",\"part7-1\":\"La Métropole de Lyon autorise la mise en place d’un lien hypertexte vers son service Ecolyo pour tous les sites internet, à l’exclusion de ceux diffusant des informations à caractère polémique, pornographique, xénophobe ou pouvant, dans une plus large mesure porter atteinte à la sensibilité du plus grand nombre.\",\"part7-2\":\"Le lien doit aboutir à la page d’accueil du service (<a href=\\\"https://ecolyo.com\\\">https://ecolyo.com</a>), cette page devant apparaître dans une nouvelle fenêtre. Les pages du service Ecolyo ne doivent en aucun cas être intégrées à l’intérieur des pages d’un autre site (iframe).\",\"part7-3\":\"Dans tous les cas d’espèce, La Métropole de Lyon se réserve le droit de demander la suppression d’un lien si elle estime que le site cible ne respecte pas les règles ainsi définies.\",\"title8\":\"Liens vers des sites tiers depuis le site Ecolyo\",\"part8\":\"Les liens hypertextes mis en œuvre au sein du site en direction d’autres sites et/ou de pages personnelles et d’une manière générale vers toutes ressources existantes sur internet ne sauraient engager la responsabilité de la Métropole de Lyon quant aux liens qu’ils contiennent ou aux changements ou mises à jour qui leur sont apportés.\",\"title9\":\"Mise en garde générale\",\"part9-1\":\"Nos services mettent tout en œuvre pour offrir aux visiteurs de ce site web des informations fiables et vérifiées. Cependant, malgré tous les soins apportés, le site peut comporter des inexactitudes, des défauts de mise à jour ou des erreurs.\",\"part9-2\":\"Nous remercions les utilisateurs du site de nous faire part d’éventuelles omissions, erreurs ou corrections par mail sur la boite aux lettres du webmestre ou directement via le formulaire proposé dans le service.\",\"accessibility\":{\"button_close\":\"Fermer la fenêtre\"}},\"oauth\":{\"window\":{\"title\":\"OAuth\"}},\"onboarding\":{\"welcomeModal\":{\"title\":\"Vous êtes à mi-chemin !\",\"part1\":\"Votre cloud personnel a bien été créé.\",\"part2\":\"Il vous faut maintenant donner votre accord pour connecter vos compteurs au service.\",\"button_valid\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre de bienvenue\",\"button_valid\":\"Valider\"}}},\"performance_indicator\":{\"bilan\":{\"text1\":\"Par rapport à \",\"text2\":\"soit une différence de : \"},\"error_no_compare\":\"comparaison impossible\",\"error_no_compare_reason\":\"(manque de données)\",\"error_no_compare_no_data\":\"Vos consommations pour cette période sont incomplètes à cause d’un problème technique concernant :\",\"fpi\":{\"no_data\":\"Données non disponibles\",\"no_comparison\":\"Pas de comparaison possible\"}},\"profile\":{\"report\":{\"title_bilan\":\"Inscription à la lettre mensuelle\",\"switch_label_bilan\":\"Recevoir mon bilan de consommation et des conseils\",\"title_alert\":\"Alerte Consommation Excessive d'Eau\",\"switch_label_alert\":\"Être prévenu d’un dépassement anormal de ma consommation d’eau\",\"input_label_alert\":\"Si ma consommation d’eau quotidienne dépasse :\",\"input_label_subtext_alert\":\"Votre consommation quotidienne maximum sur les 6 derniers mois : \"},\"accessibility\":{\"button_toggle_mail_report\":\"Recevoir mon bilan mensuel par mail\",\"button_toggle_consumption_alert\":\"Recevoir des alertes sur mes consommations journalières\",\"input_water_alert_report\":\"Indiquer une limite de consommation d'eau journalière\"}},\"profile_type\":{\"title_profile\":\"Mes données\",\"read_profile\":\"Ajuster mon profil\",\"button_update_profile\":\"J'ajuste mon profil\",\"your_profile\":\"Mon profil\",\"multi_choices\":\"Plusieurs réponses possibles\",\"housing_type\":{\"title\":\"Logement\",\"question\":\"De quel type de logement disposez-vous ?\",\"individual_house\":\"Maison individuelle\",\"apartment\":\"Appartement\"},\"construction_year\":{\"title\":\"Construction\",\"question\":\"Quelle est son année de construction ?\",\"text_before_1948\":\"Construit avant 1948\",\"text_between_1948_and_1974\":\"Construit entre 1948 et 1974\",\"text_between_1975_and_1989\":\"Construit entre 1975 et 1989\",\"text_between_1990_and_1998\":\"Construit entre 1990 et 1998\",\"text_after_1998\":\"Construit après 1998\",\"text_unknown\":\"Construit après 1998\",\"before_1948\":\"Avant 1948\",\"between_1948_and_1974\":\"Entre 1948 et 1974\",\"between_1975_and_1989\":\"Entre 1975 et 1989\",\"between_1990_and_1998\":\"Entre 1990 et 1998\",\"after_1998\":\"Après 1998\",\"unknown\":\"Je ne sais pas\"},\"occupantsNumber\":{\"single\":\" occupant\",\"multi\":\" occupants\"},\"area\":{\"title\":\"Surface\",\"question\":\"Quelle est sa surface en m² ?\",\"name\":\" m²\"},\"occupants_number\":{\"title\":\"Nombre d'occupants\",\"question\":\"Combien il y a-t-il d'occupants ?\"},\"outside_facing_walls\":{\"1\":\"1 façade\",\"2\":\"2 façades\",\"3\":\"3 façades\",\"4\":\"4 façades\",\"title\":\"Murs extérieurs\",\"question\":\"Combien de façades donnent sur l'extérieur ?\",\"text\":{\"single\":\" façade donne sur l'extérieur\",\"multi\":\" façades donnent sur l'extérieur\"}},\"floor\":{\"title\":\"Étage\",\"question\":\"À quel étage est votre appartement ?\",\"ground_floor\":\"Au rez-de-chaussée\",\"intermediate_floor\":\"Étage intermédiaire\",\"last_floor\":\"Dernier étage\",\"not_applicable\":\"Sans objet\"},\"heating\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"individual_insulation_work\":{\"title\":\"Travaux de rénovation\",\"question\":\"Quels travaux de rénovation avez-vous réalisés ces 10 dernières années ?\",\"none\":\"Aucun\",\"roof_insulation\":\"Isolation toiture\",\"window_replacement\":\"Remplacement fenêtres\",\"wall_insulation\":\"Isolation des murs\",\"window_replacement_and_wall_insulation\":\"Remplacement fenêtres et isolation des murs\",\"window_replacement_and_roof_insulation\":\"Remplacement fenêtres et isolation toiture\",\"roof_and_wall_insulation\":\"Isolation toiture et murs\",\"window_replacement_and_roof_and_wall_insulation\":\"Remplacement fenêtre et isolation des murs et isolation toiture\",\"built_after_1998\":\"construit après 1998\"},\"facilities_installation\":{\"title\":\"Équipement\"},\"ventilation\":{\"title\":\"Ventilation double flux\",\"question\":\"Êtes-vous équipé d'une ventilation double flux ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une ventilation double flux\"},\"heater_replacement\":{\"title\":\"Pompe à chaleur ou poêle à bois\",\"question\":\"Au cours de ces 10 dernières années, avez-vous remplacé votre chaudière ou vous êtes-vous équipé d'une pompe à chaleur ou d'un poêle à bois ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une pompe à chaleur ou poêle à bois\"},\"cold_water\":{\"title\":\"Eau\",\"question\":\"Votre eau est-elle comprise dans vos charges collectives ?\",\"individual\":\"Non\",\"collective\":\"Oui\",\"individual_text\":\"Individuelle\",\"collective_text\":\"Collective\"},\"hot_water\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"},\"hot_water_equipment\":{\"title\":\"Eau chaude\",\"question\":\"Utilisez-vous l’un de ces équipements pour produire votre eau chaude ?\",\"solar\":\"Chauffe-eau solaire\",\"thermodynamic\":\"Chauffe-eau thermodynamique\",\"other\":\"Aucun des deux\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"5\":\"Autre\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour vous chauffer ?\",\"no_fluid_text\":\"Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel\",\"0_text\":\"Produit grâce à de l'électricité\",\"2_text\":\"Produit grâce au gaz\",\"3_text\":\"Produit grâce au bois\",\"4_text\":\"Produit grâce au fioul\",\"5_text\":\"Produit grâce à un autre moyen\"},\"hot_water_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Autre (Fioul, Bois)\",\"title\":\"Source eau chaude\",\"question\":\"Avec quelle source d’énergie votre eau chaude est-elle produite ?\",\"no_fluid_text\":\"Produite ni par de l'électricité, ni par du gaz\",\"0_text\":\"Produite grâce à de l'électricité\",\"2_text\":\"Produite grâce au gaz\",\"3_text\":\"Produite à partir d'un autre moyen que l'électricité ou le gaz\"},\"cooking_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"title\":\"Source cuisson\",\"question\":\"Quel mode de cuisson principal utilisez-vous ?\"},\"update_date\":{\"title\":\"Date de prise d'effet\",\"question\":\"A partir de quelle date souhaitez-vous que ce nouveau profil soit pris en compte dans l'analyse de vos données ?\"},\"fluidType\":{\"0\":\"Électricité\",\"1\":\"Eau\",\"2\":\"Gaz\"},\"form\":{\"button_previous\":\"Précédent\",\"button_next\":\"Suivant\",\"button_end\":\"Terminer\",\"button_loading\":\"Chargement...\"},\"finished\":{\"title\":\"Terminé !\",\"label1\":\"Grâce à ces informations, vous pourrez comparer votre consommation avec celle d'un foyer vous ressemblant davantage !\",\"label2\":\"Nous pourrons aussi vous proposer des astuces pour maîtriser vos consommations adaptées à votre profil.\",\"button_validate\":\"OK\"},\"accessibility\":{\"button_end\":\"Terminer la mise à jour du profil\",\"button_next\":\"Aller à la section suivante\",\"button_previous\":\"Retour à la section précédente\",\"button_update_profile\":\"Ouvrir la page de mise à jour du profil\",\"button_toggle_detail_profile\":\"Afficher ou masquer le détail du profil\",\"button_toggle_export\":\"Afficher ou masquer l'export des données'\",\"button_toggle_average_home\":\"Afficher ou masquer les informations sur le comparatif'\",\"button_validate\":\"Valider\",\"button_export_data\":\"Télécharger les données\"}},\"export\":{\"title_export\":\"Télécharger mes données\",\"text1\":\"Vous allez télécharger l'historique mensuel de vos fluides sélectionnés\",\"fluid_select\":\"Pour quel(s) fluide(s) souhaitez vous exporter vos données ?\",\"no_data\":\"Vous n'avez aucune donnée de fluide...\",\"button_download\":\"Télécharger\",\"month\":\"Mois\",\"year\":\"Année\",\"consumption\":\"Consommation\",\"maxpower\":\"Puissance max (kVA)\",\"button_close\":\"Fermer la fenêtre\",\"modal_start\":{\"accessibility_title\":\"Commencer le téléchargement\",\"text1\":\"Vous allez télécharger des données personnelles, Ecolyo n’est plus responsable de celles-ci une fois téléchargées\",\"text2\":\"Les données seront téléchargées sous forme de document excel (.xls)\",\"text3\":\"Lancer le téléchargement ?\",\"button_cancel\":\"Annuler\"},\"modal_loading\":{\"accessibility_title\":\"Téléchargement en cours\",\"text1\":\"Données en cours de téléchargement\",\"text2\":\"Veuillez ne pas quitter l’application pendant la récupération et le téléchargement de vos données\",\"button_cancel\":\"Annuler le téléchargement\"},\"modal_done\":{\"accessibility_title\":\"Téléchargement terminé\",\"text1\":\"Vos données ont bien été téléchargées !\",\"text2\":\"Vous pouvez maintenant retrouver l’historique de vos données sur votre appareil\",\"error1\":\"Aïe !\",\"error2\":\"Il semblerait qu’une erreur se soit produite lors du téléchargement de vos données.\",\"button_close\":\"Fermer\",\"button_close_error\":\"Revenir plus tard\"}},\"quiz\":{\"explanation\":\"Répondez correctement aux 5 questions et remportez 5 des 15 étoiles nécessaires pour débloquer le duel final\",\"score_final\":\"SCORE FINAL\",\"correct\":\"Bravo !\",\"wrong\":\"Raté !\",\"rightAnswer\":\"Bonne réponse :\",\"earn\":\"Vous remportez\",\"button_go_back\":\"Retour\",\"button_end_quiz\":\"Youpi !\",\"button_try_again\":\"Réessayer\",\"button_validate\":\"Valider\",\"next\":\"Suivant\",\"consumption_question\":\"Question sur votre consommation\",\"accessibility\":{\"window_quit\":\"Quitter la fenêtre\",\"window_title\":\"Fenêtre de résultat\",\"button_end_quiz\":\"Terminer le quiz\",\"button_go_back\":\"Retour\",\"button_go_next\":\"Suivant\",\"button_try_again\":\"Relancer le quiz\",\"button_validate\":\"Valider\"}},\"splashscreen\":{\"error_loading\":\"Une erreur est survenue\",\"button_reload\":\"Réessayer\",\"accessibility\":{\"button_reload\":\"Recharger la page\"},\"migration_error\":\"Mise à jour de l'application\",\"consent_error\":\"Vérification de vos consentements pour partager vos données avec Ecolyo\",\"profile_error\":\"Chargement de votre profil utilisateur\",\"profileType_error\":\"Chargement de votre profil de consommation.\",\"challenges_error\":\"Actualisation de votre progression dans les défis\",\"analysis_error\":\"Chargement de votre analyse mensuelle\",\"index_error\":\"Chargement des index\",\"prices_error\":\"Mise à jour des prix\",\"consos_error\":\"Connexion à vos données de consommation\",\"partners_error\":\"Récupération de l'état des services partenaires\",\"unknown_error\":\"Veuillez vérifier votre connexion internet\",\"network_error\":\"Erreur de réseau\",\"step\":{\"migration\":\"Mise à jour de l'application\",\"profile\":\"Chargement de votre profil\",\"challenges\":\"Actualisation de votre progression dans les défis\"}},\"timestep\":{\"today\":\"Aujourd'hui\",\"year\":{\"period\":\"5 ans\",\"comparelabel\":\"Comparer à l'année précédente\"},\"month\":{\"period\":\"Année\",\"comparelabel\":\"Comparer à l'année précédente\",\"current\":\"année actuelle\",\"last\":\"année précédente\"},\"day\":{\"period\":\"Mois\",\"comparelabel\":\"Comparer au mois précédent\",\"current\":\"mois actuel\",\"last\":\"mois précédent\"},\"week\":{\"period\":\"Semaine\",\"comparelabel\":\"Comparer à la semaine précédente\",\"current\":\"semaine actuelle\",\"last\":\"semaine précédente\"},\"half_an_hour\":{\"period\":\"Jour\",\"comparelabel\":\"Comparer à la journée précédente\",\"gather_data_title\":\"La récupération de vos données demi-horaires prend environ 24h.\",\"current\":\"jour actuel\",\"last\":\"jour précédent\",\"gather_data_subtitle\":\"Votre connexion a bien été prise en compte mais un délai de 24h est en général nécessaire à l’obtention de vos données.\\nÀ demain !\",\"gather_data_failure\":\"Il semblerait que votre compteur ne nous permette pas d'accéder à des données de consommation plus fines.\",\"analysis_waiting_data\":\"Pour bénéficier d'une analyse approfondie de votre consommation électrique, il nous faut récupérer vos données de consommation horaires. La récupération de ces données prend environ 24h. A bientôt !\"},\"accessibility\":{\"button_zoom_in\":\"Sélectionner le pas de temps précédent\",\"button_zoom_out\":\"Sélectionner le pas de temps suivant\"}},\"unsubscribe\":{\"error\":\"Une erreur est survenue lors de votre désinscription, merci de ré-essayer plus tard.\",\"unsubscribed\":\"Vous êtes désormais désabonné de la newsletter Ecolyo\",\"subscribed\":\"Vous êtes désormais à nouveau abonné à la newsletter Ecolyo\",\"content\":\"Vous ne recevrez plus la notification de votre bilan ainsi que les conseils associés au mois en cours.\",\"button_subscribe\":\"Me ré-abonner\",\"button_home\":\"Me connecter à Ecolyo\",\"button_accessibility\":\"Bouton de désinscription\"},\"welcome_modal\":{\"title\":\"Félicitations\",\"perso\":\"Votre espace personnel a bien été créé.\",\"connect\":\"Vous pouvez maintenant connecter vos compteurs d’énergie à Ecolyo en toute sécurité.\",\"button_valid\":\"Ok\",\"accessibility\":{\"title\":\"Fenêtre de félicitations\",\"button_valid\":\"Valider\"}}}");
+module.exports = JSON.parse("{\"common\":{\"title_app\":\"Ecolyo\",\"title_consumption\":\"Cons0\",\"title_consumption_electricity\":\"Conso électrique\",\"title_consumption_gas\":\"Conso de gaz\",\"title_consumption_water\":\"Conso d'eau\",\"title_challenge\":\"Défis\",\"title_quiz\":\"Quiz\",\"title_exploration\":\"Exploration\",\"title_action\":\"Action\",\"title_duel\":\"Duel final\",\"title_ecogesture\":\"Astuce\",\"title_ecogestures\":\"Astuces\",\"title_ecogestures_choice\":\"Sélection des astuces\",\"title_options\":\"Options\",\"title_analysis\":\"Analyse\",\"title_profiletype\":\"Ajuster mon profil\",\"title_legal_notice\":\"Mentions légales\",\"title_gcu\":\"Conditions générales d’utilisation\",\"title_accessibility\":\"Accessibilité : non conforme\",\"title_sge_connect\":\"Connexion à l'électricité\",\"title_gas_connect\":\"Connexion au gaz\",\"accessibility\":{\"loading\":\"Chargement\",\"skip_link\":\"Aller au contenu\"},\"funders_logo\":\"Logo des financeurs : Métropole de Lyon, Etat via la Banque des Territoires et son programme France 2030, Union Européenne\"},\"navigation\":{\"consumption\":\"Conso\",\"challenges\":\"Défis\",\"ecogestures\":\"Astuces\",\"options\":\"Options\",\"analysis\":\"Analyse\"},\"FLUID\":{\"ELECTRICITY\":{\"NAME\":\"Électricité\",\"LABEL\":\"Électricité\",\"LABEL_PREPOSITION\":\"d'électricité\",\"UNIT\":\"kWh\",\"ADD\":\"Ajouter l'électricité\",\"MEGAUNIT\":\"MWh\",\"provider\":\"Enedis\"},\"WATER\":{\"NAME\":\"Eau\",\"LABEL\":\"Eau\",\"LABEL_PREPOSITION\":\"d'eau\",\"ADD\":\"Ajouter l'eau\",\"UNIT\":\"L\",\"MEGAUNIT\":\"m³\",\"provider\":\"Eau Publique du Grand Lyon\"},\"GAS\":{\"NAME\":\"Gaz\",\"LABEL\":\"Gaz\",\"LABEL_PREPOSITION\":\"de gaz\",\"ADD\":\"Ajouter le gaz\",\"UNIT\":\"kWh\",\"MEGAUNIT\":\"MWh\",\"provider\":\"GRDF\"},\"MULTIFLUID\":{\"NAME\":\"Multi fluide\",\"LABEL\":\"Multi\",\"UNIT\":\"€\"}},\"action\":{\"duration\":\"Durée : %{smartCount} jours\",\"result\":\"Résultat\",\"finished\":\"Défi terminé !\",\"details\":\"Détail de l'astuce\",\"apply\":\"J'applique cette action\",\"other\":\"Je choisis une autre action\",\"resultText1\":\"Cela n'a pas été trop difficile ?\",\"resultText2\":\"Jetez un coup d'œil dans la page conso dans 1 à 3 jours, le temps que vos données arrivent, pour voir l'impact de votre action.\",\"resultText3\":\"Pas de baisse de significative ? Pas de panique, en maintenant cette pratique dans le temps, les économies d'énergies et d'eau seront davantage visibles.\",\"resultText4\":\"Dans tous les cas, bravo, vous remportez...\",\"ok\":\"Ok\"},\"action_modal\":{\"accept\":\"Je relève le défi\",\"refuse\":\"Je me défile\",\"accessibility\":{\"window_title\":\"Fenêtre de confirmation\",\"button_accept\":\"Accepter\",\"button_refuse\":\"Refuser\"}},\"analysis\":{\"viewTitle\":\"Analyse\",\"warning_title\":\"Analyse incomplète\",\"warning_text\":\"Ecolyo n'a pas encore reçu toutes les données %{fluidList} pour ce mois\",\"comparison\":\"Comparatif\",\"analysis_date\":\"Conso totale\",\"challenge\":\"Défis terminés en\",\"user_consumption\":\"Votre conso\",\"average_home\":\"Conso moyenne d'un profil similaire\",\"average_home_description\":\"Le comparatif ici présenté est calculé sur la base d'un profil similaire au vôtre. Il s'agit d'un calcul et non d'une comparaison avec les autres utilisateurs de l'application. Sont pris en compte l'ensemble des informations entrées dans votre profil : mode de chauffage, âge du logement et éventuels travaux de rénovation, etc. Ce modèle a été créé avec l'Agence Locale de l'Energie sur la base de chiffres issues du Schéma Directeur des Energies de la Métropole de Lyon et de Chiffres-clé publiés par l'ADEME (l'Agence de l'Environnement et de la Maîtrise de l'Energie).\",\"approximative_description\":\"Pour comparer votre consommation avec un foyer similaire ou avec une conso idéale, veuillez détailler votre profil\",\"no_data\":\"Pas de données\",\"accessibility\":{\"button_go_to_profil\":\"Détailler mon profil\",\"comparison_multifluid\":\"Vos dépenses (tous fluides confondus) vs Dépenses moyennes\",\"comparison_electricity\":\"Votre consommation d'électricité vs Consommation moyenne\",\"comparison_water\":\"Votre consommation d'eau vs Consommation moyenne\",\"comparison_gas\":\"Votre consommation de gaz vs Consommation moyenne\"},\"max_day\":\"Jour où vous avez le plus consommé\",\"compare\":{\"title\":\"Comparateur\",\"month_tab\":\"Comparer au mois dernier\",\"year_tab\":\"Comparer à l'année dernière\"},\"temperature_comparison\":{\"unit\":\"°C\",\"comparison\":\"par rapport à\",\"info_button\":\"Information sur l'indice météo\",\"modal\":{\"title\":\"Indice météo\",\"month_comparison\":\"Écart de température moyenne entre le mois observé et le mois précédent.\",\"year_comparison\":\"Écart de température moyenne entre le mois observé et le même mois de l'année précédente.\",\"data_info\":\"Données Météo France issues de la station météo Lyon Bron.\",\"close\":\"Fermer la fenêtre\"}}},\"analysis_error_modal\":{\"title\":\"Aucune analyse\",\"message\":\"Pour profiter d’une analyse de vos consommations, connectez au moins un de vos compteurs.\",\"go_to_conso\":\"Je connecte mes compteurs\",\"understood\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_understood\":\"J'ai compris\",\"button_goto_konnector\":\"Aller aux connecteurs\"}},\"analysis_pie\":{\"total\":\"Conso totale\",\"details\":\"Détail par fluide\",\"month\":\"Au mois \",\"estimation\":\"Comment sont estimés<br>les prix ?\"},\"special_elec\":{\"title\":\"Spécial Électricité\",\"average\":\"Conso moyenne\",\"weektype\":\"un jour de \",\"week\":\"semaine\",\"weekend\":\"week-end\",\"min\":\"Conso minimum\",\"percentage\":\"Part dans la facture\",\"price\":\"Soit\",\"maxPower\":\"Puissance maximum atteinte\",\"offPeakHour\":\"Consommation en heures creuses\",\"showModal\":\"Plus d'infos\"},\"elec_info_modal\":{\"accessibility\":{\"window_title\":\"Information sur les statistiques Enedis\",\"button_close\":\"Fermer la fenêtre d'information\"},\"maxPowerTitle\":\"Qu’est-ce que la puissance maximum ?\",\"maxPowerDetails-1\":\"C’est la puissance maximum délivrée par tous les appareils fonctionnant au même moment dans votre logement.\",\"maxPowerDetails-2\":\"Vous avez choisi une puissance maximum dans votre offre d’électricité (3, 6 ou 9 kVA...) que vous ne devez pas dépasser pour ne pas faire sauter votre compteur. \",\"maxPowerDetails-3\":\"Cette puissance varie d'un mois à l'autre, regardez cette valeur sur l'ensemble de l'année pour vérifier si votre puissance souscrite correspond bien à votre usage.\",\"offPeakTitle\":\"Sur quelle base est calculé mon ratio Heures Pleines / Heures Creuses ?\",\"offPeakDetails-1\":\"D'après Enedis, vos plages d'heures creuses sont les suivantes : %{offPeakHours}. Nous avons donc simplement calculé, à l'aide vos consommations à la demi-heure, quelle part de votre consommation est réalisée sur vos heures creuses.\",\"minPowerTitle\":\"Qu’est-ce que la consommation minimum ?\",\"minPowerDetails-1\":\"Elle correspond à votre plus petite consommation du mois sur un créneau d'une demi-heure.\",\"minPowerDetails-2\":\"Nous extrapolons cette consommation sur 1 mois afin vous donner un aperçu de la consommation de vos consommations électriques en veille (box, télé, chargeurs, ...) ou encore de celle, incompressible, de vos appareils de froid (frigo, congélateur).\"},\"auth\":{\"enedissgegrandlyon\":{\"title\":\"Ecolyo doit se connecter à l’électricité\",\"bill\":\"Munissez-vous d’une <span>facture d’électricité</span> pour valider la connexion\",\"connect\":\"Je me connecte à l'électricité\",\"accessibility\":{\"connect\":\"Se connecter\"},\"identityTitle\":\"Nom inscrit sur la facture\",\"firstName\":\"Prénom\",\"lastName\":\"Nom\",\"pdlTitle\":\"Numéro de votre compteur électrique (PDL)\",\"pdlLabel\":\"N° (14 chiffres)\",\"pdlModal\":{\"title\":\"Qu'est-ce qu'un PDL ?\",\"title_accessibility\":\"Modale qu'est ce qu'un PDL ?\",\"txt1\":\"Votre numéro de point de livraison (PDL) peut aussi s’appeler PRM si vous possédez un compteur Linky.\",\"txt2\":\"Ce numéro est composé de 14 chiffres.\",\"txt3\":\"Votre numéro de PDL ou PRM se trouve sur votre facture d’électricité.\",\"txt4\":\"Si vous avez un compteur Linky, appuyez sur le bouton “+” et faites défiler l’affichage jusqu’à obtenir l’affichage suivant :\",\"button\":\"J'ai compris\",\"button_accessibility\":\"Bouton valider\",\"prm_accessibility\":\"Écran d'un compteur Linky présentant le numéro PRM\"},\"addressTitle\":\"Adresse du titulaire\",\"address\":\"Numéro et voie\",\"zipCode\":\"Code postal\",\"city\":\"Ville\",\"headConsent\":\"En acceptant de partager vos données, celles-ci seront directement transférées à Ecolyo à l’intérieur de votre cloud personnel, sans que la Métropole n’y accède ni ne les visualise.\",\"textConsent\":\"Afin de vous offrir des fonctionnalités de visualisation et d'analyse, Ecolyo a besoin des données suivantes : \",\"consentLi1\":\"L'historique et le relevé de vos consommations quotidiennes en kWh\",\"consentLi2\":\"L'historique et le relevé de vos consommations au pas de temps 30 minutes\",\"consentLi3\":\"Les puissances maximales atteintes quotidiennement\",\"consentLi4\":\"Les données contractuelles (début de contrat et puissance souscrite)\",\"consentCheck1\":\"Je consens à partager les données personnelles ci-dessus pour une durée d'<span>un an</span> *\",\"consentCheck2\":\"J’atteste être le titulaire du point de livraison (PDL) renseigné à l’étape précédente *\"},\"grdfgrandlyon\":{\"title\":\"Ecolyo doit se connecter au gaz\",\"bill\":\"Munissez-vous d’une <span>facture de gaz</span> pour valider la connexion\",\"connect\":\"Je me connecte au gaz\",\"accessibility\":{\"connect\":\"Se connecter\"},\"identityTitle\":\"Nom inscrit sur la facture\",\"firstName\":\"Prénom\",\"lastName\":\"Nom\",\"email\":\"Email\",\"zipCode\":\"Code postal\",\"pceTitle\":\"Numéro de votre compteur de gaz (PCE)\",\"pceLabel\":\"N° (14 chiffres)\",\"pceHint\":\"Où trouver le numéro de PCE ?\",\"pceModal\":{\"title\":\"Où trouver le n° de PCE ?\",\"txt1\":\"Votre numéro de <span>PCE</span> - ou <span>Point de comptage et d'estimation</span> - se trouve sur votre facture au niveau de vos informations contractuelles (parfois en 1ère page... parfois en dernière !)<br/><br/> C'est un identifiant à 14 chiffres.\",\"button\":\"J'ai compris\",\"accessibility\":\"Titre de la modale\",\"button-accessibility\":\"Bouton valider\"},\"headConsent\":\"Vous allez partager vos données à la Métropole de Lyon. Elles seront directement transférées à Ecolyo à l'intérieur de votre cloud personnel, sans que la Métropole n'y accède ni ne les visualise.\",\"textConsent\":\"Afin de vous offrir des fonctionnalités de visualisation et d'analyse, Ecolyo a besoin des données suivantes :\",\"consentLi1\":\"L'historique de vos consommations (jusqu’à 36 mois) et le relevé quotidien de vos consommations\",\"consentLi2\":\"Les données contractuelles (type de compteur, date de début de contrat)\",\"consentCheck1\":\"Je consens à partager les données personnelles ci-dessus pour une durée d'<span>un an</span> *\",\"consentCheck2\":\"J’atteste être le titulaire du point de livraison (PCE) renseigné à l’étape précédente *\",\"waiting\":{\"mailSent\":\"Un mail vous a été envoyé...\",\"mailDelay\":\"La réception du mail peut prendre 15min, l'envoi des mails se faisant tous les 1/4 d'heure\",\"validate\":\"Merci de valider l'autorisation d'accès à vos données\",\"comeback\":\"Une fois ce clic effectué, revenez ici pour accéder à vos données\",\"button_done\":\"C’est fait !\"}},\"eglgrandlyon\":{\"bill\":\"Munissez-vous d’une <span>facture d'eau</span> pour valider la connexion\",\"connect\":\"Je me connecte à l'eau\",\"accessibility\":{\"connect\":\"Se connecter\"},\"connect_form\":{\"login\":\"Identifiant (7 chiffres)\",\"password\":\"Mot de passe\",\"label\":\"Je connecte Ecolyo à mon compte Eau Publique du Grand Lyon\"},\"no_account\":{\"title\":\"Ecolyo doit se connecter à l'eau\"},\"with_account\":{\"title\":\"Votre compte Eau Publique du Grand Lyon a bien été créé ?\",\"subtitle1\":\"Plus qu’à donner votre accord pour connecter votre compteur d'eau et Ecolyo !\"},\"step1\":{\"info1\":\"La connexion se fait via <span>votre compte Eau Publique du Grand Lyon</span>.\",\"info2\":\"Possédez-vous un <span>compte Eau Publique du Grand Lyon</span> ?\"},\"step2\":{\"info1\":\"Une fois votre compte créé, <span>n'oubliez pas de revenir sur Ecolyo</span> pour finaliser la connexion.\"},\"button_go_to_partner_site\":\"Aller sur EPGL\"},\"connect_oauth\":{\"loading\":\"Chargement...\"},\"accessibility\":{\"button_reveal_password\":\"Afficher le mot de passe\",\"button_hide_password\":\"Masquer le mot de passe\",\"button_connect\":\"Se connecter\",\"button_create_account\":\"Se créer un compte\",\"window_title\":\"Fenêtre d'information sur la création de compte.\",\"button_close\":\"Fermer la fenêtre.\"},\"button_previous\":\"Précédent\",\"button_connect\":\"Se connecter\",\"button_create_account\":\"Se créer un compte\",\"button_has_account\":\"J'ai déjà un compte\",\"button_validate\":\"J'ai compris\",\"button_showOfflineData\":\"Voir mes anciennes données\",\"warningOfflineData\":\"Attention, vous visualisez d’anciennes données. Pour actualiser vos données, connectez votre compteur\"},\"challenge\":{\"card\":{\"ongoing\":{\"quiz\":\"Quiz\",\"exploration\":\"Explorations\",\"action\":\"Actions\",\"duel\":\"Duel Final\",\"result\":\"Résultat\",\"duelDone\":\"du duel final\"},\"locked\":{\"desc\":\"À débloquer en terminant le défi précédent\"},\"goto\":\"Aller vers le challenge\"},\"card_done\":{\"saving\":\"Économie de\",\"depense\":\"Dépense de\",\"win\":\"Gagné\",\"lost\":\"Perdu\",\"final_defi\":\"sur le duel final\",\"final_defi_view\":\"Revoir le duel final\",\"reset_defi\":\"Relancer le défi\"},\"card_last\":{\"title\":\"Tous les défis sont terminés\",\"message1\":\"Nous travaillons actuellement à vous proposer de nouveaux défis.\",\"button\":\"Suggérer une idée de défi\"},\"card_unlocked\":{\"button_launch\":\"Lancer le défi\"},\"accessibility\":{\"button_launch\":\"Lancer le défi\",\"button_goto_konnector\":\"Aller aux connecteurs\",\"button_slider_previous\":\"Précédent\",\"button_slider_next\":\"Suivant\"}},\"challenge_no_fluid_modal\":{\"title\":\"Oups !\",\"content\":\"Connectez au moins 1 fluide pour pouvoir jouer\",\"button_validate\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Valider\"}},\"consumption\":{\"display_last_data\":\"Voir mes dernières consos\",\"accessibility\":{\"navigation_group\":\"Choix de la période\",\"fluid_menu\":\"Choix du fluide\",\"button_previous_period\":\"Afficher la période précédente\",\"button_next_period\":\"Afficher la période suivante\",\"button_previous_value\":\"Sélectionner la valeur précédente\",\"button_next_value\":\"Sélectionner la valeur suivante\",\"checkbox_compare\":\"Afficher ou cacher la comparaison\",\"bar\":\"Consommation du %{date} : %{value} %{unit}\"},\"partner_issue_modal\":{\"title\":\"Attention !\",\"accessibility_title\":\"Modale de maintenance partenaire\",\"error_connect_gaz\":\"La connexion à vos données de <span class='gaz'>gaz</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='gaz'>GRDF</span> ou dans notre service)\",\"error_connect_elec\":\"La connexion à vos données d'<span class='elec'>électricité</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='elec'>Enedis</span> ou dans notre service)\",\"error_connect_water\":\"La connexion à vos données d'<span class='water'>eau</span> est actuellement dysfonctionnelle (Maintenance chez notre partenaire <span class='water'>Eau Publique du Grand Lyon</span> ou dans notre service)\",\"additional_text\":\"La visualisation et/ou la connexion à vos données de consommation peut s'en trouver affectée.<br /><br /><i>Merci pour votre patience en attendant un retour à la normale :)</i>\",\"ok\":\"Ok\"},\"compared\":\"Comparé\",\"water_pricing\":{\"year\":\"Année %{year}\",\"consumption\":\"Consommation : <span>%{consumption}m³</span>\",\"free\":\"Gratuit\",\"regular\":\"Tarif normal\",\"double\":\"Tarif double\",\"more\":\"En savoir plus\",\"modal\":{\"title\":\"A partir du 1er janvier 2025, une tarification solidaire environnementale de l’eau est mise en place.\",\"details\":\"Cette jauge vous permet de garder un œil tout au long de l’année sur votre consommation d’eau afin de voir dans quelle tranche vous vous situez en tant que particulier.<br><br> Cette information vous est donnée à titre informatif, l'application définitive des tranches sera assurée par Eau Publique du Grand Lyon sur vos factures d'eau à compter du 01/01/2025 en fonction de vos consommations.\",\"understood\":\"J'ai compris\"}}},\"consumption_details\":{\"detail\":\"Détail par fluide\",\"connect\":\"Connecter d'autres fluides\",\"mini_cards_label\":\"AUTRES ENERGIES\"},\"consumption_visualizer\":{\"missing_data\":\"Données manquantes\",\"no_data\":\"Pas de données\",\"why_no_data\":\"Pourquoi n'ai-je pas de données ?\",\"last_valid_data\":\"Dernières données valides : %{date}\",\"last_available_data\":\"Dernières données disponibles : %{date}\",\"last_valid_data_multi\":\"Dernières données complètes : %{date}\",\"data_to_come\":\"À venir\",\"aie\":\"Aïe !\",\"data_empty\":\"Vide\",\"estimated\":\"estimés\",\"cost_per_fluid\":{\"electricity\":\"Part de l'électricité\",\"water\":\"Part de l'eau\",\"gas\":\"Part du gaz\"},\"dataModal\":{\"list_title\":\"3 raisons possibles :\",\"item1\":\"le lien entre Ecolyo et le fournisseur de données est rompu : une mise à jour de ce lien (en bas de la page) peut résoudre ce problème.\",\"item2\":\"un problème technique chez votre gestionnaire : se connecter directement chez ce gestionnaire pour vérifier que cette donnée apparaît.\",\"item3\":\"pour le gaz : vous n'avez pas autorisé Ecolyo à accéder aux données de consommation de cette période.\",\"item4\":\"vous n'aviez tout simplement pas de compteur communicant à l'époque !\"},\"modal\":{\"window_title\":\"info estimation des prix\",\"title\":\"Comment sont estimés les prix ?\",\"close\":\"Fermer la fenêtre\",\"part1\":\"Le prix de votre électricité ou de votre gaz dépend de l'offre choisie auprès de votre fournisseur. N’ayant pas accès à cette information, Ecolyo affiche un prix moyen par fluide. \",\"part2\":\"Tarifs moyens retenus :\",\"list1\":\" : 1 kWh = %{elecPrice} €TTC (il correspond au tarif réglementé d’EDF au %{elecPriceStartDate} pour une puissance souscrite de 3 ou 6 kVA et hors offre heure pleine/heure creuse)\",\"list2\":\" : 1 kWh = %{gasPrice} €TTC (Prix repère de vente de gaz publié par la Commission de Régulation de l'Energie au %{gasPriceStartDate} pour un consommateur \\\"Cuisson/Eau Chaude\\\")\",\"list3\":\" : 1 litre d’eau = %{waterPrice} € TTC (prix constaté au %{waterPriceStartDate} pour un abonnement et une consommation de 120 m3/an sur la Métropole de Lyon)\",\"part3\":\"Le coût de votre abonnement n'est pas pris en compte pour l'électricité.\"},\"release_notes_modal\":{\"title\":\"Du nouveau sur Ecolyo !\",\"message\":\"Les mises à jour suivantes ont été effectuées sur votre application :\",\"go_back\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre de notifications\",\"button_go_back\":\"J'ai compris\"}}},\"ecogestures\":{\"loading\":\"Chargement des astuces\"},\"duel\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"average_info\":\"%{average} euros étant votre moyenne actuelle, relevez-vous le défi ?\",\"button_start\":\"Allons-y !\",\"goal1\":\"Faites moins que votre moyenne actuelle sur %{durationInDays} jours\",\"goal2\":\"pour gagner le badge %{title}\",\"goal_done\":\"Duel remporté\",\"goal_failed\":\"Duel perdu\",\"caption_average\":\"Votre moyenne à titre indicatif\",\"caption_consumption\":\"Votre consommation\",\"caption_incoming\":\"Données à venir\",\"accessibility\":{\"button_go_back\":\"Retour\",\"button_start_duel\":\"Lancer le duel\",\"button_start_quiz\":\"Lancer le quiz\"}},\"duel_result_modal\":{\"success\":{\"title\":\"Félicitations\",\"message1\":\"Vous avez économisé %{value} €\",\"message2\":\"et gagné le badge %{title} !\",\"button_validate\":\"Youpi\"},\"lost\":{\"title\":\"Presque\",\"message1\":\"Vous avez dépassé de %{value} €\",\"message2\":\"et manqué le badge %{title}\",\"button_validate\":\"Zut alors\"},\"accessibility\":{\"window_title\":\"Fenêtre de résultat\",\"button_validate\":\"Valider\"}},\"last_duel_modal\":{\"title\":\"Félicitations !\",\"subtitle\":\"Vous avez terminé tous les défis !\",\"message1\":\"Nous travaillons actuellement à vous proposer de nouveaux défis.\",\"message2\":\"Vous pouvez donner votre avis sur ce que vous aimeriez en cliquant sur la bulle d'aide.\",\"close\":\"Fermer la fenêtre\"},\"duel_empty_value_modal\":{\"title\":\"Oups !\",\"message\":\"Impossible de lancer le duel. Il nous manque en effet certaines de vos données de consommation pour vous proposer un duel à votre hauteur.\",\"button\":\"Je retourne au menu des défis\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur\",\"button_validate\":\"Retourner au menu des défis\"}},\"ecogesture\":{\"title_tab_0\":\"Objectifs\",\"title_tab_1\":\"Je fais déjà\",\"title_tab_2\":\"Toutes\",\"MENU_TITLE\":\"Filtrer\",\"ALL\":\"Tous les usages\",\"HEATING\":\"Chauffage\",\"AIR_CONDITIONING\":\"Climatisation\",\"ECS\":\"Eau chaude\",\"COLD_WATER\":\"Eau froide\",\"ELECTRICITY_SPECIFIC\":\"Électricité courante\",\"COOKING\":\"Cuisson\",\"selection\":\"Sélectionner les astuces les plus adaptées à votre consommation\",\"selection_2\":\"vues sur\",\"button_selection\":\"Continuer ma sélection\",\"no_ecogesture\":\"Aucune astuce ne correspond à votre filtrage\",\"no_ecogesture_filter\":{\"text1\":\"Nous n'avons pas trouvé d'astuces adaptées à votre profil dans cette catégorie.\",\"text2\":\"En effet, de par votre profil et vos modes de chauffage, d'eau ou d'eau chaude sanitaire, nous n'avons pas identifié d’astuces vous permettant de diminuer vos factures à titre individuel. Toutefois, vous pouvez toujours agir pour préserver les ressources en appliquant et diffusant autour de vous les autres bonnes pratiques présentées dans la partie \\\"Toutes les astuces\\\".\"},\"adjust_profil\":{\"description\":\"Pour une sélection d’astuces adaptée à votre consommation, vous pouvez ajuster votre profil.\",\"button_go_to_profil\":\"Ajuster mon profil\"},\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_close\":\"Fermer la fenêtre\",\"button_selection\":\"Aller à la page de sélection\"},\"doing\":\"Je fais déjà\",\"objective\":\"Objectif\",\"emptyList\":{\"obj1\":\"Les astuces présentées sont des actions qui vous permettent de réduire vos consommations et donc vos factures. On parle parfois d’écogestes.\",\"obj1_done\":\"Aucune astuce n’a été sélectionnée comme objectif actuellement.\",\"obj2\":\"Vous pouvez sélectionner ceux à mettre en objectifs et ceux que vous appliquez déjà.\",\"obj2_done\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous souhaitez garder en objectif dans cette section.\",\"doing1\":\"Aucune astuce n’a été sélectionnée dans la catégorie appliquée actuellement.\",\"doing1_done\":\"Aucune astuce n’est indiquée comme déjà appliquée actuellement.\",\"doing2\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous mettez déjà en pratique dans cette section.\",\"doing2_done\":\"Vous pouvez consulter toutes les astuces et ajouter celles que vous mettez déjà en pratique dans cette section.\",\"btn1\":\"Voir toutes les astuces\",\"btn2\":\"Sélectionner\"},\"initModal\":{\"title\":\"Sélectionner mes astuces\",\"text1\":\"Les astuces présentées dans cette page sont des actions qui vous permettent de réduire vos consommations. Elles sont appelées parfois aussi écogestes.\",\"text2\":\"Répondez à un court questionnaire pour générer une liste d'astuces adaptée à votre profil puis sélectionnez celles que vous suivez déjà et celles que vous voulez vous mettre en objectif !\",\"btn1\":\"Plus tard\",\"btn2\":\"C'est parti !\"},\"reset\":\"Réinitialiser ma sélection\",\"resetModal\":{\"title_part1\":\"Cette action\",\"title_part2\":\"supprimera votre liste d’astuces\",\"title_part3\":\"sélectionnées dans\",\"title_part4\":\"“Objectifs”\",\"title_part5\":\"et\",\"title_part6\":\"“Je fais déjà”\",\"text1\":\"Vous pourrez ensuite faire une nouvelle sélection adaptée à votre consommation.\",\"text2\":\"Souhaitez-vous réinitialiser votre sélection d’astuces ?\",\"btn1\":\"Non\",\"btn2\":\"Réinitialiser\"}},\"ecogesture_modal\":{\"title_ecogesture\":\"Astuce\",\"title_action\":\"Action\",\"efficiency\":\"Efficacité\",\"show_less\":\"Voir moins\",\"show_more\":\"Voir plus\",\"select_action\":\"Je choisis cette action\",\"accessibility\":{\"window_title_ecogesture\":\"Fenêtre astuce\",\"window_title_action\":\"Fenêtre action\",\"button_close\":\"Fermer la fenêtre\",\"button_select_action\":\"Sélectionner cette action\",\"button_see_more_detail\":\"Afficher plus de détails\"}},\"ecogesture_info_modal\":{\"header\":\"Comment sont choisis les astuces adaptées à mon profil ?\",\"text\":\"Les astuces adaptés à votre profil sont aujourd’hui choisies en fonction des compteurs individuels que vous possédez (communicants ou non). Ceux présentés ici vous permettent d'agir sur vos consommations individuelles. Des modes de tri plus personnalisables seront proposés à l'avenir.\",\"button_close\":\"J'ai compris\",\"accessibility\":{\"window_title\":\"Fenêtre d'information\",\"button_close\":\"Fermer la fenêtre\"}},\"ecogesture_form\":{\"heating_type\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"5\":\"Autre\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour vous chauffer ?\",\"no_fluid_text\":\"Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel\",\"0_text\":\"Produit grâce à de l'électricité\",\"2_text\":\"Produit grâce au gaz\",\"3_text\":\"Produit grâce au bois\",\"4_text\":\"Produit grâce au fioul\",\"5_text\":\"Produit grâce à un autre moyen\"},\"hot_water\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"}},\"ecogesture_profile\":{\"equipments\":{\"question\":\"Quels équipements possédez-vous ?\",\"hint\":\"Plusieurs réponses possibles\",\"air_conditioning\":\"Climatisation\",\"computer\":\"Ordinateur\",\"microwave\":\"Micro-ondes\",\"oven\":\"Four\",\"washing_machine\":\"Lave-linge\",\"dishwasher\":\"Lave-vaisselle\",\"cooking_plates\":\"Plaques électriques\",\"outside\":\"Extérieur\",\"dryer\":\"Sèche-linge\",\"refregirator\":\"Réfrigérateur\",\"fan\":\"Ventilateur\",\"water_heater\":\"Chauffe-eau\",\"curtain\":\"Rideaux\",\"internet_box\":\"Box internet\",\"ventilation\":\"VMC\",\"freezer\":\"Congélateur\",\"boiler\":\"Chaudière\",\"hydraulic_heating\":\"Chauffage hydraulique\",\"accessible_label\":\"Liste des équipements\"}},\"ecogesture_selection\":{\"header\":\"Sélection des astuces\",\"title\":\"Vous avez parcouru un groupe de %{smartCount} astuces\",\"text\":\"Voulez-vous continuer sur votre lancée ou remettre cette sélection à plus tard ?\",\"title_final\":\"Félicitations !\",\"text_final_1\":\"Vous avez terminé la sélection des astuces adaptées à votre consommation.\",\"text_final_2\":\"Vous pouvez les retrouver dans les sections “Objectifs” et “Je fais déjà” selon que vous les pratiquiez déjà ou non.\",\"button_go_to_ecogesture\":\"Plus tard\",\"button_ok\":\"J'ai compris\",\"button_continue\":\"Poursuivre\",\"button_objective\":\"Objectif\",\"button_doing\":\"Je fais déjà\",\"button_skip\":\"Pas intéressé\",\"accessibility\":{\"window_title\":\"Fenêtre d'information'\",\"button_close\":\"Fermer la fenêtre\",\"button_go_to_ecogesture\":\"Retourner aux astuces\",\"button_continue\":\"Poursuivre\",\"button_ok\":\"Fermer la sélection\"},\"selectionModal\":{\"title\":\"Des astuces correspondant à votre profil ont été trouvées !\",\"text\":\"À vous de choisir celles que vous souhaitez mettre en objectif et celles que vous faites déjà.\",\"button_close\":\"C'est parti !\"}},\"exploration\":{\"global_error\":\"Oups. Une erreur est survenue. Veuillez retourner à l'écran d’accueil des défis\",\"button_go_back\":\"Retour\",\"button_already_done\":\"C’est déjà fait !\",\"button_come_back\":\"Je reviens quand cela sera fait\",\"button_start\":\"C'est parti !\",\"watch_consumption\":\"Je fonce\",\"congratulation\":\"Bravo !\",\"earn\":\"Vous remportez\",\"button_confirm\":\"Ok\",\"interval\":{\"explanation\":\"Vous pouvez vérifier cette informations sur l'écran Conso.\"},\"accessibility\":{\"button_already_done\":\"Marquer l'exploration comme déjà réalisée\",\"button_confirm\":\"Valider\",\"button_come_back\":\"Fermer l'exploration\",\"button_go_back\":\"Retour\",\"button_start\":\"Lancer l'exploration\"}},\"error_page\":{\"main\":\"Erreur\",\"back\":\"Retour\",\"no_ecogesture\":\"Oups ! Nous n'avons pas trouvé l'astuce demandée.\"},\"help\":{\"title_help\":\"une question ? un problème ? une suggestion ?\",\"read_help\":\"Nous écrire via le Service d'Assistance Utilisateur\"},\"feedback\":{\"title\":\"Vous allez contacter le Service Assistance Utilisateur du Grand Lyon.\",\"text1\":\"Vous pourrez nous remonter un problème, chercher de l'aide pour vous connecter plus facilement, ou encore nous partager une bonne idée d'évolution.\",\"text2\":\"N'hésitez pas à nous écrire ! L'équipe Ecolyo vous répondra avec plaisir :)\",\"later\":\"Plus tard\",\"lets_go\":\"J'y vais\",\"accessibility\":{\"window_title\":\"Fenêtre de partage de retours\",\"button_close\":\"Fermer la fenêtre de partage de retours\"}},\"dataShare\":{\"title1\":\"Bienvenue !\",\"title1Update\":\"Ecolyo évolue !\",\"title2Update\":\"Pour continuer à utiliser Ecolyo, merci d’accepter les modalités de traitement des données ci-dessous.\",\"part1\":\"Nous avons besoin de l’adresse email utilisée lors de la création de votre Cozy Métropole de Lyon, ci-après nommé cloud personnel.\",\"part2\":\"Cette donnée de compte est conservée dans Ecolyo le temps de l’utilisation de ce service.\",\"part3\":\"La Métropole de Lyon utilisera cet email afin de vous tenir informé·e :\",\"item1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter.\",\"item2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"item3\":\"De l’évolution de vos consommations, des nouveautés et  de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part4\":\"Vos données privées de consommation d’énergie et d’eau sont récupérées, sauvegardées et stockées dans votre cloud personnel à votre initiative sans visibilité de la Métropole  de Lyon sur leur contenu.\",\"part5\":\"Il en est de même pour les données privées de composition du logement et du foyer, fournies par vos soins. Elles restent également sans visibilité de la Métropole de Lyon sur leur contenu.\\nLes données d’identification entrées lors de la connexion aux données de consommations d’électricité sont quant à elles conservées dans un espace sécurisé de la Métropole de Lyon et sont utilisées uniquement à des fins de contrôle du consentement par des organismes extérieurs.\",\"part6\":\"Dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées et pseudonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation, d’évaluer globalement l’usage de l’application via des mesures d’audience ainsi que d’évaluer à terme l’impact global en termes de baisse des consommations énergétiques de notre service.\",\"part7\":\"Au sein de votre cloud personnel, vous pouvez à tout moment exercer vos droits d’accès, de rectification, de portabilité, de limitation et d’opposition en consultant notamment la page Options.\",\"part8\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part9\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Assemblées, des Affaires Juridiques et des Assurances - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 \",\"part10\":\"ou en ligne, au moyen du formulaire disponible à l'adresse suivante : \",\"link1\":\"<a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/</a>\",\"validDataConsent\":\"Je consens au traitement de mes données tel que décrit ci-dessus. *\",\"validCGU\":\"Je valide les \",\"validCGU_button\":\"Conditions Générales d’Utilisation\",\"validLegal\":\" du service et ai pris connaissance des \",\"validLegal_button\":\"Mentions Légales\",\"validLegal2\":\"de celui-ci. *\",\"button_accept\":\"C'est parti !\",\"accessibility\":{\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"minorUpdate\":{\"title\":\"Ecolyo évolue !\",\"button\":\"J'ai compris\"},\"gcu\":{\"title\":\"Conditions générales d’utilisation du service\",\"version\":\"Version du 12.12.2022\",\"content\":{\"title1\":\"Ecolyo, késako ?\",\"part1_1\":\"Ecolyo est un service proposé par la Métropole de Lyon vous permettant de suivre au même endroit vos consommations d’électricité, de gaz et d’eau, en kWh, en litres, en euros et à différentes échelles de temps. Ce service vous permet également de participer à des défis individuels et vous offre une analyse de vos consommations. Des astuces vous sont aussi proposées afin de vous permettre de réduire vos consommations.\",\"part1_2\":\"C’est un service gratuit qui prend la forme d’un site web dit « responsive », c’est-à-dire qu’il peut être consulté sur ordinateur ou sur mobile. Sur mobile, c’est une application que l’on a souhaitée ergonomique, réactive et esthétique pour votre plaisir de navigation et d’utilisation au quotidien.\",\"part1_3\":\"Tous les termes « techniques » sont définis en bas de page.\",\"title2\":\"Quelles fonctionnalités le service propose-t-il ?\",\"part2_1\":\"La fonctionnalité principale d’Ecolyo est la visualisation, au même endroit, de vos consommations d’électricité, de gaz et d’eau et ce, à différents pas de temps (de la demi-heure – uniquement pour l’électricité, à plusieurs années, en passant par les pas de temps journaliers et mensuels). La visualisation des consommations se fait en kWh pour l’énergie et en L pour l’eau ainsi qu’en euros (euros résultant d’un prix moyenné).\",\"part2_2\":\"Au-delà de la visualisation de vos consommations et parce que nous souhaitons vous aider à diminuer ces consommations vous retrouverez plusieurs autres pages : \",\"part2_2_list1\":\"Défis : Des quiz, et actions à mettre en place vous seront proposés pour vous pousser à réduire vos consommations.\",\"part2_2_list2\":\"Astuces : Une liste d’astuces pour maîtriser ses consommations d’énergie et d’eau à trier par usage, et avec une possibilité de les adapter plus précisément à votre profil.\",\"part2_2_list3\":\"Analyse : Une analyse de vos consommations réelles en comparaison à celle d’un foyer étant proche d’une vôtre.\",\"part2_3\":\"Pour la page Analyse ainsi que pour la partie personnalisation des astuces, des éléments supplémentaires sur votre profil vous seront demandés. L’ensemble de ces informations récoltées à l’aide du formulaire peuvent être modifiées par la suite.\",\"part2_4\":\"Dernière page : la page Options dans laquelle vous pourrez vous abonner à un service d’alerte sur vos consommations d’eau, de quoi ajuster votre profil ou encore vous désabonner de la lettre mensuelle.\",\"title3\":\"Comment ai-je accès à mes données d’électricité, de gaz et d’eau ?\",\"part3_1\":\"Pour visualiser vos consommations réelles et profiter pleinement du potentiel de notre service, il vous faut au minimum un des trois compteurs communicants suivants : Linky (pour l’électricité), Gazpar (pour le gaz), Téléo (pour l’eau).\",\"part3_2\":\"Ces compteurs sont opérés par les gestionnaires de réseaux. Pour Linky, c’est Enedis, le gestionnaire de réseau de distribution d’électricité. Pour Gazpar, GRDF est responsable de cette gestion. Et pour Téléo, c’est Eau Publique du Grand Lyon.\",\"part3_3\":\"Ces acteurs sont responsables de la relève de vos données. Ces données servent notamment à votre fournisseur d’électricité, de gaz ou d’eau pour permettre la facturation de vos consommations d’énergie. Des fournisseurs d’électricité ou de gaz il y en a des dizaines. Les gestionnaires de réseaux (… et de votre compteur) ne sont qu’au nombre de trois. Nous avons donc décidé de travailler avec eux, au plus près de la donnée brute issue de vos compteurs.\",\"part3_4\":\"Il vous faudra donc avoir un compte chez GRDF et Eau Publique du Grand Lyon pour accéder à vos données. Si vous n’en avez pas, il suffira de vous en créer un. Ceci ne sera à faire qu’une fois, au début.\",\"title4\":\"Ecolyo se trouve dans un cloud personnel Métropole de Lyon, qu’est-ce que cela signifie ?\",\"part4_1\":\"Comme vous avez dû le remarquer, lors de votre première connexion à Ecolyo vous avez dû vous créer un compte Cozy Métropole de Lyon. Ce cloud personnel est un espace sécurisé porté par l’ambition de vous apporter visibilité, transparence et maîtrise sur l’usage de vos données personnelles, et dont les fonctionnalités vous permettant de récupérer, synchroniser, stocker et partager vos données avec les destinataires de votre choix.  Le service Ecolyo se déploie  à l’intérieur de cet espace protégé. Dans ce cloud personnel, vous pourrez accéder également à d’autres services. Toutes les données traitées par Ecolyo, mais aussi les autres services que vous seriez amenés à utiliser dans ce cloud personnel restent dans ce Cloud Personnel Grand Lyon et n’en sortent pas, sauf si vous décidez vous-même de partager vos données avec des tiers.\",\"part4_2\":\"Pour en savoir plus sur ce cloud et son utilisation, ainsi que la durée de conservation de vos données, vous pouvez lire les conditions générales d’utilisation du service <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">ici</a>.\",\"title5\":\"Et donc concrètement pour Ecolyo, quelles données sont collectées et qui y a accès ?\",\"part5_1\":\"Pour qu’Ecolyo ait accès à vos données de consommations, vous devrez activer vos différents connecteurs. À ce moment-là, pour la connexion aux données de gaz et d’eau à travers un parcours qui vous conduira de manière intuitive sur le site de chacun des gestionnaires de réseaux concerné, vous pourrez donner votre consentement à partager ces données avec le Service Ecolyo, et ce pour une durée limitée dans le temps. Pour l’électricité, le don du consentement et la connexion aux données se fait directement dans notre service. Quid de la durée de ce consentement ? Pour les données électriques, elle est par défaut d'un an. Pour les données gaz, cela sera à vous de la définir (nous vous recommandons 1 an pour une expérience optimale). Les données utilisées pour vérifier la bonne connexion de vos données d’électricité sont stockées du côté de la Métropole de Lyon sur des serveurs sécurisés.\",\"part5_2\":\"Vos connecteurs, une fois configurés, permettent le transfert de vos données de consommations au service Ecolyo. Le transfert de ces données de consommation se fait sans que personne n’accède à leur contenu, pas même la Métropole de Lyon. En effet, ces données sont stockées et traitées directement dans votre cloud personnel qui en assure la protection. Tous les calculs, analyses et traitements sur ces données sont faites DANS votre espace personnel sans visibilité sur le contenu des données par la Métropole de Lyon.\",\"part5_3\":\"Vous pouvez bien sûr mettre fin à la récupération/ au transfert de vos données de consommation sur votre espace cloud personnel à tout moment et  à plusieurs niveaux : \",\"part5_3_list1\":\"Vous pouvez supprimer le transfert quotidien de vos données en supprimant tout simplement le connecteur dans la page Consos (en bas).\",\"part5_3_list2\":\"Pour supprimer l’ensemble de vos données ainsi que votre cloud personnel Métropole de Lyon, vous devez demander la suppression de votre cloud. Pour faire cela, rendez-vous dans les paramètres de votre cloud personnel via la barre blanche en haut d’Ecolyo et appuyez sur le bouton « Supprimer mon compte » dans la partie paramètres.\",\"part5_4\":\"Des données sur le profil de votre foyer peuvent être également remplies au sein de l’application. Ces données s’enrichiront au fur et à mesure de votre utilisation du service avec d’autres informations : défis réalisés, étoiles gagnées, etc. L’ensemble de ces données restent à l’intérieur de votre cloud personnel, sans que personne n’y ait accès.\",\"part5_5\":\"Enfin, afin de permettre une mise à jour quotidienne de vos données de consommations, vos identifiants Eau Publique du Grand Lyon, un jeton d’identification GRDF ainsi que vos numéros de compteurs sont stockés.\",\"title6\":\"Personne n’a donc accès à mes données, pas même la Métropole de Lyon, vraiment ?\",\"part6_1\":\"Conformément aux indications du paragraphe précédent, la Métropole de Lyon n’accède ni à vos données de consommations ni aux données utilisées via certaines fonctionnalités du service comme le formulaire (celui-là même qui permet l’analyse de vos consommations personnalisée ainsi qu’une sélection d’éco-gestes personnalisés). Toutes ces informations sont bien gardées au chaud dans votre cloud personnel Métropole de Lyon\",\"part6_2\":\"Seul vous pouvez accepter de partager vos données, documents ou fichiers privés avec la Métropole de Lyon, ses partenaires ou d’autres utilisateurs ou acteurs (publics ou privés) après recueil de votre consentement éclairé et par une action expresse de votre part.\",\"part6_3\":\"La Métropole de Lyon n'a cependant accès qu’à l’adresse email utilisée lors la création de votre cloud personnel Métropole de Lyon. Elle utilise cet email afin de vous tenir informé·e :\",\"part6_3_list1\":\"En réponse à vos demandes, si vous avez pris l’initiative de nous contacter. \",\"part6_3_list2\":\"En cas de problème majeur avec la gestion de votre compte.\",\"part6_3_list3\":\"De l’évolution de vos consommations, des nouveautés et  de la qualité du service via une lettre mensuelle. Vous pouvez à tout moment vous désinscrire de cette lettre via la page Options du service.\",\"part6_4\":\"Elle stocke également les informations transmises lors de la connexion à l’électricité (nom, adresse postale). Ces informations doivent être stockées car la Métropole de Lyon est régulièrement contrôlée par Enedis et doit prouver détenir le consentement des personnes pour lesquelles elle va chercher la donnée.\",\"part6_5\":\"Par ailleurs, et dans le cadre de l’évaluation et de l’amélioration du service, des données d’utilisation anonymisées seront remontées à des fins d’exploitation statistiques. La récupération de ces statistiques anonymisées nous permettra de s’assurer du bon fonctionnement technique de la connexion à vos données de consommation ainsi que d’évaluer l’impact global en termes de baisse des consommations énergétiques de notre service. Parmi ces statistiques, des mesures d’audience de la fréquentation des différentes pages du service sont réalisées. Vous pouvez, via la page Options, à tout instant, décider de vous opposer à la récupération de ces données d’utilisation.\",\"title8\":\"Encore des questions ?\",\"part8_1\":\"N’hésitez pas à consulter la FAQ ou à nous contacter via le formulaire de contact présente sur l’ensemble des pages.\",\"part8_2\":\"Dernière option, contactez-nous directement à <a href=\\\"mailto:ecolyo@grandlyon.com\\\">ecolyo(at)grandlyon.com</a>.\",\"title9\":\"LEXIQUE\",\"part9_1_title\":\"Cloud personnel Métropole de Lyon : \",\"part9_1_content\":\"Cloud personnel : appelé aussi le « domicile numérique », le cloud personnel est souvent réduit à un simple espace de stockage de documents mais il est bien plus que ça. C'est un espace individuel et sécurisé où vous pouvez accéder à des services sans exposer aucune donnée à l’extérieur. Vous seul pouvez y accéder, personne d'autre.\",\"part9_2_title\":\"Connecteur : \",\"part9_2_content\":\"Un connecteur est un service, installé dans votre cloud personnel également, qui a pour but uniquement d’aller récupérer les données auprès de différents partenaires/sources de données. Dans le cadre d’Ecolyo, trois connecteurs sont pré-installés dans votre cloud personnel : celui d’Enedis, celui de GRDF et celui d’Eau Publique du Grand Lyon.\",\"part9_3_title\":\"Compteur communicant : \",\"part9_3_content\":\"Un compteur communicant est un compteur qui mesure de manière précise et détaillée vos consommations et peut transmettre ces données  au gestionnaire de réseau via une technologie radio (c'est le cas pour Gazpar et Téléo par exemple) ou via les réseaux électriques (via Courant Porteur en ligne, c'est le cas pour Linky par exemple).\",\"part9_4_title\":\"Fournisseur : \",\"part9_4_content\":\"Votre fournisseur d’électricité, de gaz ou d’eau est l’entreprise qui vous facture votre électricité, gaz ou eau. Côté électricité il en existe <a href=\\\"https://www.enedis.fr/liste-des-fournisseurs-delectricite\\\">aujourd’hui plus de 50</a>, chacun proposant des tarifs différents.\",\"part9_5_title\":\"Gestionnaire de réseau de distribution : \",\"part9_5_content\":\"Appelé aussi parfois distributeur, il est en charge de la livraison de votre électricité, gaz ou eau jusqu’à votre domicile. Il est aussi en charge du compteur qui relève vos consommations. Il transmet vos données de consommations à votre fournisseur afin qu’il effectue la facturation de vos consommations d’énergie. Il peut également les transmettre à tout acteur avec qui vous avez décidé de partager ces données.\"}},\"gcu_modal\":{\"button_accept\":\"J'accepte\",\"accessibility\":{\"window_title\":\"Conditions générales d’utilisation\",\"button_accept\":\"Accepter les conditions générales d'utilisation\"}},\"matomo\":{\"matomo_title\":\"Suivi statistiques d'usage Matomo\"},\"header\":{\"accessibility\":{\"button_back\":\"Retour à la page précédente\",\"button_open_feedbacks\":\"Ouvrir le partage de retours\"}},\"konnector_form\":{\"label_updated_at\":\"Dernière mise-à-jour le\",\"button_update\":\"Mettre à jour\",\"loading\":\"Chargement...\",\"wait_end_issue\":\"Attendre la fin de la maintenance avant de mettre à jour.\",\"button_disconnect\":\"Déconnecter\",\"issue\":\"Le problème semble venir de \",\"resolve\":\"Une mise à jour peut résoudre ce problème.\",\"login_failed\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"not_installed\":\"Le connecteur n'est pas installé. Veuillez l'installer en cliquant sur le bouton ci-dessous.\",\"button_install\":\"Installer\",\"error_account_creation\":\"Une erreur est survenue, veuillez essayer de nouveau.\",\"error_no_login_password\":\"Identifiant et mot de passe requis\",\"error_login_failed\":\"Identifiants invalides\",\"error_update\":\"Un problème est survenu lors du rapatriement de vos données.\",\"error_update_oauth\":\"Votre autorisation pour afficher vos données %{fluid} a expiré.\",\"button_oauth_reload\":\"Redonner mon consentement\",\"OK\":\"Ok\",\"konnector_delta\":{\"ELECTRICITY\":\"La donnée de consommation électrique arrive normalement à J+1. Un retard d'un ou deux jours est parfois constaté.\",\"GAS\":\"La donnée de consommation de gaz arrive normalement à J+3. Un retard d'un ou deux jours est parfois constaté.\",\"WATER\":\"La donnée de consommation d'eau arrive normalement à J+3. Un retard d'un ou deux jours est parfois constaté.\"},\"accessibility\":{\"button_install\":\"Installer le connecteur\",\"button_update\":\"Mettre à jour votre connexion\",\"button_disconnect\":\"Déconnecter votre connecteur\"}},\"konnector_options\":{\"label_connect_to_electricity\":\"Se connecter à l'électricité\",\"label_connect_to_water\":\"Se connecter à l'eau\",\"label_connect_to_gas\":\"Se connecter au gaz\",\"label_offline_electricity\":\"Électricité déconnectée\",\"label_offline_water\":\"Eau déconnectée\",\"label_offline_gas\":\"Gaz déconnecté\",\"partner_issue\":\"En maintenance\",\"outdated\":\"Données manquantes depuis %{isOutdatedData} jours\",\"accessibility\":{\"label_ko_status\":\"Connecteur en erreur\",\"button_toggle_detail_electricity\":\"Afficher ou masquer le détail de la connexion à l'électricité\",\"button_toggle_detail_water\":\"Afficher ou masquer le détail de la connexion à l'eau\",\"button_toggle_detail_gas\":\"Afficher ou masquer le détail de la connexion au gaz\"}},\"konnector_modal\":{\"loading_data\":\"Veuillez patienter, vos données sont en cours de chargement.\",\"loading_data_update\":\"Veuillez patienter, vos données sont en cours de mise à jour.\",\"logging_txt\":\"Nous vérifions vos informations d'identité\",\"success_txt\":\"Félicitations !\",\"success_data_electricity\":\"Vos données de consommation d'électricité sont maintenant connectées à Ecolyo.\",\"success_data_water\":\"Vos données de consommation d'eau sont maintenant connectées à Ecolyo.\",\"success_data_gas\":\"Vos données de consommation de gaz sont maintenant connectées à Ecolyo.\",\"success_data_additional_electricity\":\"Les données de consommations mettent entre un et deux jours pour arriver.\",\"success_data_additional_water\":\"Les données de consommations mettent entre trois et cinq jours pour arriver.\",\"success_data_additional_gas\":\"Les données de consommations mettent entre trois et cinq jours pour arriver.\",\"success_update_txt\":\"Connexion réussie !\",\"success_data_update_electricity\":\"Ecolyo est bien connecté à votre compteur d'électricité.\",\"success_data_update_water\":\"Ecolyo est bien connecté à votre compteur d'eau.\",\"success_data_update_gas\":\"Ecolyo est bien connecté à votre compteur de gaz.\",\"success_data_additional_update_electricity\":\"Sachez que la donnée de consommation d'électricité arrive entre J+1 et J+2.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"success_data_additional_update_water\":\"Sachez que la donnée de consommation d'eau arrive entre J+3 et J+5.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"success_data_additional_update_gas\":\"Sachez que la donnée de consommation de gaz arrive entre J+3 et J+5.<br /><br />S'il vous manque encore des données, c'est qu'elles n'ont pas encore été mises à disposition par le gestionnaire de votre compteur. Merci pour votre patience !\",\"error_txt\":\"Aïe !\",\"mismatch\":{\"title\":\"Vos données n'ont pas pu être récupérées.\",\"text1\":\"Vos nom et numéro de compteur ne correspondent plus. Merci de reconfigurer votre connecteur.\",\"text2\":\"Reconfigurer mon connecteur ?\",\"text3\":\"La reconfiguration de votre connecteur passe par sa suppression et sa nouvelle installation. Vos données seront conservées.\"},\"error_credentials_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter. L'identifiant est un numéro à 7 chiffres (différent de votre numéro de contrat).\",\"error_credentials_electricity\":\"Il semblerait que les nom(s) et adresse ne concordent pas avec le numéro de votre compteur.\",\"error_credentials_electricity_2\":\"Nous ne pouvons vous donner accès aux données de consommation.\",\"error_credentials_update_water\":\"Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter.\",\"error_credentials_update_electricity\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"error_credentials_update_gas\":\"Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.\",\"error_consent_form_gas_title\":\"L'accès à vos données a été bloqué par GRDF suite à un consentement précédemment supprimé par vos soins.\",\"error_consent_form_gas_report\":\"Merci de nous signaler le problème.\",\"error_data_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité ne seront pas chargées.\",\"error_data_water\":\"Un problème est survenu. Vos données de consommation d’eau ne seront pas chargées.\",\"error_data_gas\":\"Il semblerait que le service de connexion à vos données de gaz soit momentanément en panne.\",\"error_data_update_electricity\":\"Un problème est survenu. Vos données de consommation d’électricité n’ont pas été mises à jour.\",\"error_data_update_water\":\"Un problème est survenu. Vos données de consommation d’eau n’ont pas été mises à jour.\",\"error_data_update_gas\":\"Un problème est survenu. Vos données de consommation de gaz n’ont pas été mises à jour.\",\"error_data_2\":\"Merci de réessayer plus tard.\",\"button_validate\":\"Ok\",\"button_understood\":\"J'ai compris\",\"button_try_again\":\"Réessayer\",\"button_contact\":\"Nous contacter\",\"button_check_info\":\"Vérifier les infos\",\"button_go\":\"J'y vais\",\"button_later\":\"Plus tard\",\"show_common_error\":\"Voir les erreurs récurrentes\",\"show_common_error_list\":\"<span>Le problème peut provenir des cas suivants :</span><ul><li>Vous avez un co-titulaire sur votre contrat. Veillez à bien entrer le nom du <span class=\\\"gold\\\">titulaire du contrat</span> et non le co-titulaire.</li><li>  Votre nom comporte un tiret ? Tentez sans le tiret.</li><li>Entrez bien le nom de votre commune de résidence en entier (tirets et accents inclus)</li><li>Avez-vous bien entré le <span class=\\\"gold\\\">numéro de votre compteur</span> (PDL) ? Tout autre numéro (de contrat, de client) ne fonctionne pas.</li></ul><p>Si vous rencontrez toujours des difficultés, contactez notre service d'aide </p><div class=\\\"center\\\">Avez-vous pensez à vérifier ces informations ?</div>\",\"accessibility\":{\"window_title\":\"Fenêtre d'attente de connexion\",\"button_close\":\"Fermer la fenêtre\"}},\"consent_outdated\":{\"title\":{\"0\":\"Votre autorisation pour afficher vos données d’électricité a expiré\",\"2\":\"Aïe !\"},\"text1\":{\"0\":\"Veuillez re-donner votre consentement pour la transmission et la reconnexion de vos données ENEDIS à Ecolyo.\",\"2\":\"L'accès à vos données de consommation de gaz a expiré.\"},\"text2\":{\"0\":\"Souhaitez-vous renouveler votre accord dès maintenant pour un an ?\",\"2\":\"Merci de redonner votre consentement pour y accéder.\"},\"later\":\"Plus tard\",\"go\":\"J'y vais\",\"no\":\"Non\",\"yes\":\"Oui\",\"accessibility\":{\"window_title\":\"Fenêtre d'erreur, consentement expiré\",\"button_close\":\"Fermer la fenêtre\"}},\"legal\":{\"read_legal\":\"Lire les mentions légales\",\"title_legal\":\"Mentions légales & CGU\",\"version\":\"Version du 12.12.2022\",\"site\":\"Site du service Ecolyo : <a href=\\\"https://ecolyo.com/\\\"> https://ecolyo.com/</a>\",\"adress\":\"Métropole de Lyon - 20, rue du Lac – CS 33569 - 69505 Lyon cedex 03\",\"phone\":\"Tél : (33) 4 78 63 40 40\",\"mail\":\"<a href=\\\"mailto:ecolyo@grandlyon.com\\\"> ecolyo(at)grandlyon.com</a>\",\"p1b\":\"Directrice de publication : \",\"p1\":\"Blandine MELAY, Responsable du Service Transition Énergétique\",\"p2b\":\"Animation éditoriale, gestion et mise à jour : \",\"p2\":\"Marion BERTHOLON, Chargée de services numériques pour la transition énergétique\",\"p3b\":\"Photographies : \",\"p3\":\"sauf mention contraire, les photos sont la propriété de la Métropole de Lyon\",\"p4b\":\"Conception et Charte graphique : \",\"p4\":\"Florent Dufier\",\"p5b\":\"Réalisation technique : \",\"p5\":\"Métropole de Lyon, Sopra Steria\",\"p6b\":\"Maintenance technique : \",\"p6\":\"Délégation Développement économique, emploi & savoirs - Innovation numérique & systèmes d’information - Usages et services numériques - Développement des services numériques\",\"title1\":\"Crédits\",\"part1\":\"Ce site est le résultat de développements spécifiques réalisés dans les langages Go, TypeScript, HTML et Sass. Les développements s’appuient sur plusieurs bibliothèques et frameworks libres : axios, cozy-bar, cozy-client, cozy-harvest-lib, cozy-scripts, cozy-ui, d3, global, lodash, luxon, node-sass, object-hash, react, react-dom, react-redux, react-router-dom, react-swipeable-views, redux-devtools-extension, sass-loader. Les tests de l’application s’appuient sur les bibliothèques et frameworks libres suivants: jest-junit, react-test-renderer, redux-mock-store. La pile technique intègre également les applications Cozy stack, Yarn, Docker, ACH. Les déploiements sont réalisés sur le registre hébergé chez Cozy. L’équipe de réalisation utilise au quotidien les applications GitLab, IceScrum, RocketChat, SonarQube.\",\"title2\":\"Traitement des données personnelles et droit d’accès, de modification et de suppression\",\"part2\":\"Conformément à la réglementation en vigueur en matière de protection des données personnelles, le service Ecolyo a fait l’objet d’une inscription au registre des traitements de la Métropole de Lyon. Ecolyo fait partie de l’écosystème de services orientés « self data » déployés par la Métropole de Lyon avec l’ambition d’offrir aux usagers métropolitains les outils et les services leur permettant d’exercer directement leur droit à la portabilité, dans un cadre apte à garantir aussi bien la transparence et le contrôle sur l’usage de leurs données personnelles que l’exploitation directe du contenu de ces données selon leurs libres choix. Le self data est en effet selon la Fondation Internet Nouvelle Génération (FING) « la production, l’exploitation et le partage de données personnelles par les individus, sous leur contrôle et à leurs propres fins ». Au sein de cet environnement self data, la gestion des données s’appuie sur l’organisation suivante des rôles et responsabilités associées : \",\"part2-1\":\"Les partenaires du service GRDF et Eau Publique du Grand Lyon sont responsables exclusivement des seuls traitements de Données Personnelles relatifs à la collecte des données de consommation de gaz et d’eau de l’utilisateur et à leur transmission sur la plateforme de cloud personnel, après consentement de l’utilisateur.\",\"part2-2\":\"Enedis est responsable de la collecte des données de consommation d’électricité et de leur mise à disposition à la Métropole de Lyon qui, elle en gère la transmission sur la plateforme du cloud personnel de l’utilisateur, après avoir récupéré le consentement de l’utilisateur.\",\"part2-3\":\"La Métropole de Lyon est responsable de traitement sur le périmètre du service Ecolyo qu’elle propose à l’usager, ainsi que des traitements nécessaires à la fourniture de la plateforme de cloud personnel qu’elle met à disposition de l’usager pour accéder au service Ecolyo. En sa qualité de responsable de ces traitements, elle collecte et traite : \",\"part2-3-1\":\"Les données de compte de l’usager renseignées par l’usager au sein de son espace de cloud personnel Grand Lyon à des fins de gestion du compte et de communication avec l’usager ;\",\"part2-3-2\":\"Les données de compte de l’utilisateur lui permettant de connecter ses données d’électricité à Ecolyo ;\",\"part2-3-3\":\"Les données privées de consommation d’énergie et d’eau dont la récupération, la sauvegarde, le stockage, la synchronisation et le partage sur la plateforme de cloud personnel sont initiés par l’usager sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-3-4\":\"Les données privées sur la composition du logement et du foyer de l’utilisateur, fournies par l’utilisateur lui-même au sein du service, sont traitées par le service sans visibilité de la Métropole de Lyon sur leur contenu.\",\"part2-3-5\":\"Des métriques d’usage du service anonymisées et remontées périodiquement afin d’améliorer la qualité du service et d’évaluer son impact (Plus d’informations sur la manière dont votre anonymat est bien préservé dans ce processus <a href=\\\"https://ecolyo.com/cloud_statistiques.html\\\">ici</a>).\",\"part2-4\":\"La Métropole réalise également des mesures d’audience à l’aide de la solution Matomo. Afin de vous fournir un meilleur service et d’améliorer votre expérience d'utilisateur, nous utilisons des solutions de mesure d’audience qui utilisent la technologie des « cookies », des fichiers texte qui sont enregistrés sur votre ordinateur et qui permettent de générer des informations envoyées aux serveurs de mesure d’audience. Sur ces serveurs, l’adresse IP est anonymisée. Les données recueillies ont uniquement pour finalité de permettre d'analyser la fréquentation de nos pages afin d'en améliorer le contenu. Il s'agit de statistiques agrégées permettant de connaître le nombre de visites et de visiteurs différents, les pages les plus populaires, les chemins préférés, les niveaux d'activité par jour de la semaine et par heure de la journée, les principales erreurs etc. Vous avez cependant le droit de vous opposer à l’utilisation de ces cookies, et donc au traitement de vos données personnelles de navigation, en vous rendant dans la page Options de notre service.\",\"part2-5\":\"L’usager est seul décisionnaire des finalités d’utilisation qu’il souhaite définir pour le traitement de ses données personnelles de consommation, à la suite de leur transmission par les partenaires du service Ecolyo sur son cloud personnel. Ainsi, dans le cadre de l’utilisation d’Ecolyo, l’usager ne recevra les données des partenaires du service : Enedis, GRDF et Eau Publique du Grand Lyon seulement qu’à sa demande expresse après la saisie de ses identifiants.\",\"part2-6\":\"L’utilisateur est donc le seul à accéder :\",\"part2-6-1\":\"À ses données de consommation d’électricité horaires, journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-6-2\":\"À ses données de consommation de gaz journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-6-3\":\"À ses données de consommation eau journalières, hebdomadaires, mensuelles et annuelles.\",\"part2-7\":\"Les engagements et responsabilités de la Métropole de Lyon concernant la protection des données et la confidentialité des données Ecolyo sont précisés dans les Mentions légales et les conditions d’utilisation du cloud personnel Grand Lyon qui accueille aujourd’hui le service Ecolyo et sans lequel le service ne peut pas fonctionner. Pour plus d’informations sur les engagements et responsabilités de la Métropole de Lyon concernant la protection et la confidentialité dans le cloud personnel, nous vous invitons à vous référer <a href=\\\"https://manager.cozygrandlyon.cloud/tos/266b4226-8417-42fb-b911-41e86dae8581.pdf?locale=fr\\\">aux mentions légales et CGU du cloud personnel métropolitain.</a> \",\"part2-8\":\"Conformément à la loi 78-17 du 6 janvier 1978 modifiée relative à l’information, aux fichiers et aux libertés, vous disposez d’un droit d’accès, de rectification et d’opposition au traitement de vos données à caractère personnel. Votre cloud personnel vous permet d’exercer ces droits directement dans cet espace sur vos données de compte. S’agissant des données de consommations d’électricité et de gaz, l’utilisateur peut supprimer son consentement à partager ses données en supprimant son connecteur dans la page Consos.\",\"part2-9\":\"Vous pouvez également exercer vos droits d’accès, de rectification, de limitation, d’opposition et d’effacement de vos données personnelles en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse :\",\"part2-10\":\"Métropole de Lyon – Délégué à la Protection des Données - Direction des Assemblées, des Affaires Juridiques et des Assurances - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou en ligne, au moyen du formulaire disponible à l'adresse suivante : <a href=\\\"https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/\\\">https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/.</a>\",\"part2-11\":\"L’exercice de ces droits sur vos données personnelles auprès de la Métropole de Lyon concerne exclusivement les données traitées dans le cadre du service  « Ecolyo ».\",\"title3\":\"Dispositions légales\",\"part3-1\":\"Les divers éléments du site web (la forme, la mise en page, le fonds, la structure …) sont protégés par le droit des dessins et modèles, le droit d’auteur, le droit des marques ainsi que le droit à l’image et ils ne peuvent être copiés ou imités en tout ou partie sauf autorisation expresse de la Métropole de Lyon.\",\"part3-2\":\"Toute personne ne respectant pas les dispositions légales applicables se rend coupable du délit de contrefaçon et est passible des sanctions pénales prévues par la loi.\",\"title4\":\"Droits d’auteurs\",\"part4-1\":\"Les photographies, textes, logos, pictogrammes, ainsi que toutes œuvres intégrées dans le site sont la propriété de la \\\"Métropole de Lyon\\\" ou de tiers ayant autorisé la \\\"Métropole de Lyon\\\" à les utiliser.\",\"part4-2\":\"Les reproductions, les transmissions, les modifications, les réutilisations, sur un support papier ou informatique, dudit site et des œuvres qui y sont reproduites ne sont autorisées que pour un usage personnel et privé conforme aux dispositions de l’article L 122-5 du Code de la Propriété Intellectuelle. Ces reproductions devront ainsi notamment indiquer clairement la source et l’auteur du site et/ou de ces œuvres multimédias. En aucun cas ces reproductions ne sauraient porter préjudice aux droits des tiers. Les reproductions, les transmissions, les modifications, les réutilisations à des fins publicitaires, commerciales ou d’information, de tout ou partie du site, sont totalement interdites.\",\"title5\":\"Logo de la Métropole de Lyon et d’Ecolyo\",\"part5\":\"Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent pas être modifiés – proportions, couleurs, éléments, constituants – et ne peuvent pas être sujet à aucune transformation, animation ou tout autre processus. Les logos de la Métropole de Lyon et d’Ecolyo ne peuvent être utilisés et associés qu’aux seules informations vérifiables. Ils ne peuvent être notamment utilisés que pour illustrer des relations avec la Métropole de Lyon ou des actions de sponsorings dûment établies. Quel que soit le cas d’espèce, la Métropole de Lyon se réserve le droit d’approuver ou de désapprouver toute utilisation des logos de la Métropole de Lyon et d’Ecolyo, pour assurer son utilisation correcte, conformément à l’éthique, la morale et aux intérêts de la Métropole de Lyon. Les conditions susmentionnées s’appliquent dans le cadre de pages web, elles ne font pas référence à l’utilisation des logos dans tout autre document. La Métropole de Lyon se réserve le droit de modifier les conditions d’utilisation des logos de la Métropole de Lyon et d’Ecolyo à tout moment et sans préavis.\",\"title6\":\"Droit des bases de données\",\"part6\":\"Les bases de données sont protégées par la loi du 1er juillet 1998 et le régime français du droit d’auteur.\",\"title7\":\"Établissements de liens vers le site Ecolyo\",\"part7-1\":\"La Métropole de Lyon autorise la mise en place d’un lien hypertexte vers son service Ecolyo pour tous les sites internet, à l’exclusion de ceux diffusant des informations à caractère polémique, pornographique, xénophobe ou pouvant, dans une plus large mesure porter atteinte à la sensibilité du plus grand nombre.\",\"part7-2\":\"Le lien doit aboutir à la page d’accueil du service (<a href=\\\"https://ecolyo.com\\\">https://ecolyo.com</a>), cette page devant apparaître dans une nouvelle fenêtre. Les pages du service Ecolyo ne doivent en aucun cas être intégrées à l’intérieur des pages d’un autre site (iframe).\",\"part7-3\":\"Dans tous les cas d’espèce, La Métropole de Lyon se réserve le droit de demander la suppression d’un lien si elle estime que le site cible ne respecte pas les règles ainsi définies.\",\"title8\":\"Liens vers des sites tiers depuis le site Ecolyo\",\"part8\":\"Les liens hypertextes mis en œuvre au sein du site en direction d’autres sites et/ou de pages personnelles et d’une manière générale vers toutes ressources existantes sur internet ne sauraient engager la responsabilité de la Métropole de Lyon quant aux liens qu’ils contiennent ou aux changements ou mises à jour qui leur sont apportés.\",\"title9\":\"Mise en garde générale\",\"part9-1\":\"Nos services mettent tout en œuvre pour offrir aux visiteurs de ce site web des informations fiables et vérifiées. Cependant, malgré tous les soins apportés, le site peut comporter des inexactitudes, des défauts de mise à jour ou des erreurs.\",\"part9-2\":\"Nous remercions les utilisateurs du site de nous faire part d’éventuelles omissions, erreurs ou corrections par mail sur la boite aux lettres du webmestre ou directement via le formulaire proposé dans le service.\",\"accessibility\":{\"button_close\":\"Fermer la fenêtre\"}},\"oauth\":{\"window\":{\"title\":\"OAuth\"}},\"onboarding\":{\"welcomeModal\":{\"title\":\"Vous êtes à mi-chemin !\",\"part1\":\"Votre cloud personnel a bien été créé.\",\"part2\":\"Il vous faut maintenant donner votre accord pour connecter vos compteurs au service.\",\"button_valid\":\"Ok\",\"accessibility\":{\"window_title\":\"Fenêtre de bienvenue\",\"button_valid\":\"Valider\"}}},\"performance_indicator\":{\"bilan\":{\"text1\":\"Par rapport à \",\"text2\":\"soit une différence de : \"},\"error_no_compare\":\"comparaison impossible\",\"error_no_compare_reason\":\"(manque de données)\",\"error_no_compare_no_data\":\"Vos consommations pour cette période sont incomplètes à cause d’un problème technique concernant :\",\"fpi\":{\"no_data\":\"Données non disponibles\",\"no_comparison\":\"Pas de comparaison possible\"}},\"profile\":{\"report\":{\"title_bilan\":\"Inscription à la lettre mensuelle\",\"switch_label_bilan\":\"Recevoir mon bilan de consommation et des conseils\",\"title_alert\":\"Alerte Consommation Excessive d'Eau\",\"switch_label_alert\":\"Être prévenu d’un dépassement anormal de ma consommation d’eau\",\"input_label_alert\":\"Si ma consommation d’eau quotidienne dépasse :\",\"input_label_subtext_alert\":\"Votre consommation quotidienne maximum sur les 6 derniers mois : \"},\"accessibility\":{\"button_toggle_mail_report\":\"Recevoir mon bilan mensuel par mail\",\"button_toggle_consumption_alert\":\"Recevoir des alertes sur mes consommations journalières\",\"input_water_alert_report\":\"Indiquer une limite de consommation d'eau journalière\"}},\"profile_type\":{\"title_profile\":\"Mes données\",\"read_profile\":\"Ajuster mon profil\",\"button_update_profile\":\"J'ajuste mon profil\",\"your_profile\":\"Mon profil\",\"multi_choices\":\"Plusieurs réponses possibles\",\"housing_type\":{\"title\":\"Logement\",\"question\":\"De quel type de logement disposez-vous ?\",\"individual_house\":\"Maison individuelle\",\"apartment\":\"Appartement\"},\"construction_year\":{\"title\":\"Construction\",\"question\":\"Quelle est son année de construction ?\",\"text_before_1948\":\"Construit avant 1948\",\"text_between_1948_and_1974\":\"Construit entre 1948 et 1974\",\"text_between_1975_and_1989\":\"Construit entre 1975 et 1989\",\"text_between_1990_and_1998\":\"Construit entre 1990 et 1998\",\"text_after_1998\":\"Construit après 1998\",\"text_unknown\":\"Construit après 1998\",\"before_1948\":\"Avant 1948\",\"between_1948_and_1974\":\"Entre 1948 et 1974\",\"between_1975_and_1989\":\"Entre 1975 et 1989\",\"between_1990_and_1998\":\"Entre 1990 et 1998\",\"after_1998\":\"Après 1998\",\"unknown\":\"Je ne sais pas\"},\"occupantsNumber\":{\"single\":\" occupant\",\"multi\":\" occupants\"},\"area\":{\"title\":\"Surface\",\"question\":\"Quelle est sa surface en m² ?\",\"name\":\" m²\"},\"occupants_number\":{\"title\":\"Nombre d'occupants\",\"question\":\"Combien il y a-t-il d'occupants ?\"},\"outside_facing_walls\":{\"1\":\"1 façade\",\"2\":\"2 façades\",\"3\":\"3 façades\",\"4\":\"4 façades\",\"title\":\"Murs extérieurs\",\"question\":\"Combien de façades donnent sur l'extérieur ?\",\"text\":{\"single\":\" façade donne sur l'extérieur\",\"multi\":\" façades donnent sur l'extérieur\"}},\"floor\":{\"title\":\"Étage\",\"question\":\"À quel étage est votre appartement ?\",\"ground_floor\":\"Au rez-de-chaussée\",\"intermediate_floor\":\"Étage intermédiaire\",\"last_floor\":\"Dernier étage\",\"not_applicable\":\"Sans objet\"},\"heating\":{\"title\":\"Chauffage\",\"question\":\"Quel est votre type de chauffage ?\",\"individual\":\"Individuel\",\"collective\":\"Collectif\"},\"individual_insulation_work\":{\"title\":\"Travaux de rénovation\",\"question\":\"Quels travaux de rénovation avez-vous réalisés ces 10 dernières années ?\",\"none\":\"Aucun\",\"roof_insulation\":\"Isolation toiture\",\"window_replacement\":\"Remplacement fenêtres\",\"wall_insulation\":\"Isolation des murs\",\"window_replacement_and_wall_insulation\":\"Remplacement fenêtres et isolation des murs\",\"window_replacement_and_roof_insulation\":\"Remplacement fenêtres et isolation toiture\",\"roof_and_wall_insulation\":\"Isolation toiture et murs\",\"window_replacement_and_roof_and_wall_insulation\":\"Remplacement fenêtre et isolation des murs et isolation toiture\",\"built_after_1998\":\"construit après 1998\"},\"facilities_installation\":{\"title\":\"Équipement\"},\"ventilation\":{\"title\":\"Ventilation double flux\",\"question\":\"Êtes-vous équipé d'une ventilation double flux ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une ventilation double flux\"},\"heater_replacement\":{\"title\":\"Pompe à chaleur ou poêle à bois\",\"question\":\"Au cours de ces 10 dernières années, avez-vous remplacé votre chaudière ou vous êtes-vous équipé d'une pompe à chaleur ou d'un poêle à bois ?\",\"yes\":\"Oui\",\"no\":\"Non\",\"unknown\":\"Je ne sais pas\",\"text\":\"Équipé d'une pompe à chaleur ou poêle à bois\"},\"cold_water\":{\"title\":\"Eau\",\"question\":\"Votre eau est-elle comprise dans vos charges collectives ?\",\"individual\":\"Non\",\"collective\":\"Oui\",\"individual_text\":\"Individuelle\",\"collective_text\":\"Collective\"},\"hot_water\":{\"title\":\"Eau chaude\",\"question\":\"Quel est votre type de production d’eau chaude ?\",\"individual\":\"Individuelle\",\"collective\":\"Collective\"},\"hot_water_equipment\":{\"title\":\"Eau chaude\",\"question\":\"Utilisez-vous l’un de ces équipements pour produire votre eau chaude ?\",\"solar\":\"Chauffe-eau solaire\",\"thermodynamic\":\"Chauffe-eau thermodynamique\",\"other\":\"Aucun des deux\"},\"warming_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Bois\",\"4\":\"Fioul\",\"5\":\"Autre\",\"title\":\"Source chauffage\",\"question\":\"Quelle source d’énergie principale utilisez-vous pour vous chauffer ?\",\"no_fluid_text\":\"Produit ni par de l'électricité, ni par du gaz, ni par du bois ou du fuel\",\"0_text\":\"Produit grâce à de l'électricité\",\"2_text\":\"Produit grâce au gaz\",\"3_text\":\"Produit grâce au bois\",\"4_text\":\"Produit grâce au fioul\",\"5_text\":\"Produit grâce à un autre moyen\"},\"hot_water_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"3\":\"Autre (Fioul, Bois)\",\"title\":\"Source eau chaude\",\"question\":\"Avec quelle source d’énergie votre eau chaude est-elle produite ?\",\"no_fluid_text\":\"Produite ni par de l'électricité, ni par du gaz\",\"0_text\":\"Produite grâce à de l'électricité\",\"2_text\":\"Produite grâce au gaz\",\"3_text\":\"Produite à partir d'un autre moyen que l'électricité ou le gaz\"},\"cooking_fluid\":{\"0\":\"Électricité\",\"2\":\"Gaz\",\"title\":\"Source cuisson\",\"question\":\"Quel mode de cuisson principal utilisez-vous ?\"},\"update_date\":{\"title\":\"Date de prise d'effet\",\"question\":\"A partir de quelle date souhaitez-vous que ce nouveau profil soit pris en compte dans l'analyse de vos données ?\"},\"fluidType\":{\"0\":\"Électricité\",\"1\":\"Eau\",\"2\":\"Gaz\"},\"form\":{\"button_previous\":\"Précédent\",\"button_next\":\"Suivant\",\"button_end\":\"Terminer\",\"button_loading\":\"Chargement...\"},\"finished\":{\"title\":\"Terminé !\",\"label1\":\"Grâce à ces informations, vous pourrez comparer votre consommation avec celle d'un foyer vous ressemblant davantage !\",\"label2\":\"Nous pourrons aussi vous proposer des astuces pour maîtriser vos consommations adaptées à votre profil.\",\"button_validate\":\"OK\"},\"accessibility\":{\"button_end\":\"Terminer la mise à jour du profil\",\"button_next\":\"Aller à la section suivante\",\"button_previous\":\"Retour à la section précédente\",\"button_update_profile\":\"Ouvrir la page de mise à jour du profil\",\"button_toggle_detail_profile\":\"Afficher ou masquer le détail du profil\",\"button_toggle_export\":\"Afficher ou masquer l'export des données'\",\"button_toggle_average_home\":\"Afficher ou masquer les informations sur le comparatif'\",\"button_validate\":\"Valider\",\"button_export_data\":\"Télécharger les données\"}},\"export\":{\"title_export\":\"Télécharger mes données\",\"text1\":\"Vous allez télécharger l'historique mensuel de vos fluides sélectionnés\",\"fluid_select\":\"Pour quel(s) fluide(s) souhaitez vous exporter vos données ?\",\"no_data\":\"Vous n'avez aucune donnée de fluide...\",\"button_download\":\"Télécharger\",\"month\":\"Mois\",\"year\":\"Année\",\"consumption\":\"Consommation\",\"maxpower\":\"Puissance max (kVA)\",\"button_close\":\"Fermer la fenêtre\",\"modal_start\":{\"accessibility_title\":\"Commencer le téléchargement\",\"text1\":\"Vous allez télécharger des données personnelles, Ecolyo n’est plus responsable de celles-ci une fois téléchargées\",\"text2\":\"Les données seront téléchargées sous forme de document excel (.xls)\",\"text3\":\"Lancer le téléchargement ?\",\"button_cancel\":\"Annuler\"},\"modal_loading\":{\"accessibility_title\":\"Téléchargement en cours\",\"text1\":\"Données en cours de téléchargement\",\"text2\":\"Veuillez ne pas quitter l’application pendant la récupération et le téléchargement de vos données\",\"button_cancel\":\"Annuler le téléchargement\"},\"modal_done\":{\"accessibility_title\":\"Téléchargement terminé\",\"text1\":\"Vos données ont bien été téléchargées !\",\"text2\":\"Vous pouvez maintenant retrouver l’historique de vos données sur votre appareil\",\"error1\":\"Aïe !\",\"error2\":\"Il semblerait qu’une erreur se soit produite lors du téléchargement de vos données.\",\"button_close\":\"Fermer\",\"button_close_error\":\"Revenir plus tard\"}},\"quiz\":{\"explanation\":\"Répondez correctement aux 5 questions et remportez 5 des 15 étoiles nécessaires pour débloquer le duel final\",\"score_final\":\"SCORE FINAL\",\"correct\":\"Bravo !\",\"wrong\":\"Raté !\",\"rightAnswer\":\"Bonne réponse :\",\"earn\":\"Vous remportez\",\"button_go_back\":\"Retour\",\"button_end_quiz\":\"Youpi !\",\"button_try_again\":\"Réessayer\",\"button_validate\":\"Valider\",\"next\":\"Suivant\",\"consumption_question\":\"Question sur votre consommation\",\"accessibility\":{\"window_quit\":\"Quitter la fenêtre\",\"window_title\":\"Fenêtre de résultat\",\"button_end_quiz\":\"Terminer le quiz\",\"button_go_back\":\"Retour\",\"button_go_next\":\"Suivant\",\"button_try_again\":\"Relancer le quiz\",\"button_validate\":\"Valider\"}},\"splashscreen\":{\"error_loading\":\"Une erreur est survenue\",\"button_reload\":\"Réessayer\",\"accessibility\":{\"button_reload\":\"Recharger la page\"},\"migration_error\":\"Mise à jour de l'application\",\"consent_error\":\"Vérification de vos consentements pour partager vos données avec Ecolyo\",\"profile_error\":\"Chargement de votre profil utilisateur\",\"profileType_error\":\"Chargement de votre profil de consommation.\",\"challenges_error\":\"Actualisation de votre progression dans les défis\",\"analysis_error\":\"Chargement de votre analyse mensuelle\",\"index_error\":\"Chargement des index\",\"prices_error\":\"Mise à jour des prix\",\"consos_error\":\"Connexion à vos données de consommation\",\"partners_error\":\"Récupération de l'état des services partenaires\",\"unknown_error\":\"Veuillez vérifier votre connexion internet\",\"network_error\":\"Erreur de réseau\",\"step\":{\"migration\":\"Mise à jour de l'application\",\"profile\":\"Chargement de votre profil\",\"challenges\":\"Actualisation de votre progression dans les défis\"}},\"timestep\":{\"today\":\"Aujourd'hui\",\"year\":{\"period\":\"5 ans\",\"comparelabel\":\"Comparer à l'année précédente\"},\"month\":{\"period\":\"Année\",\"comparelabel\":\"Comparer à l'année précédente\",\"current\":\"année actuelle\",\"last\":\"année précédente\"},\"day\":{\"period\":\"Mois\",\"comparelabel\":\"Comparer au mois précédent\",\"current\":\"mois actuel\",\"last\":\"mois précédent\"},\"week\":{\"period\":\"Semaine\",\"comparelabel\":\"Comparer à la semaine précédente\",\"current\":\"semaine actuelle\",\"last\":\"semaine précédente\"},\"half_an_hour\":{\"period\":\"Jour\",\"comparelabel\":\"Comparer à la journée précédente\",\"gather_data_title\":\"La récupération de vos données demi-horaires prend environ 24h.\",\"current\":\"jour actuel\",\"last\":\"jour précédent\",\"gather_data_subtitle\":\"Votre connexion a bien été prise en compte mais un délai de 24h est en général nécessaire à l’obtention de vos données.\\nÀ demain !\",\"gather_data_failure\":\"Il semblerait que votre compteur ne nous permette pas d'accéder à des données de consommation plus fines.\",\"analysis_waiting_data\":\"Pour bénéficier d'une analyse approfondie de votre consommation électrique, il nous faut récupérer vos données de consommation horaires. La récupération de ces données prend environ 24h. A bientôt !\"},\"accessibility\":{\"button_zoom_in\":\"Sélectionner le pas de temps précédent\",\"button_zoom_out\":\"Sélectionner le pas de temps suivant\"}},\"unsubscribe\":{\"error\":\"Une erreur est survenue lors de votre désinscription, merci de ré-essayer plus tard.\",\"unsubscribed\":\"Vous êtes désormais désabonné de la newsletter Ecolyo\",\"subscribed\":\"Vous êtes désormais à nouveau abonné à la newsletter Ecolyo\",\"content\":\"Vous ne recevrez plus la notification de votre bilan ainsi que les conseils associés au mois en cours.\",\"button_subscribe\":\"Me ré-abonner\",\"button_home\":\"Me connecter à Ecolyo\",\"button_accessibility\":\"Bouton de désinscription\"},\"welcome_modal\":{\"title\":\"Félicitations\",\"perso\":\"Votre espace personnel a bien été créé.\",\"connect\":\"Vous pouvez maintenant connecter vos compteurs d’énergie à Ecolyo en toute sécurité.\",\"button_valid\":\"Ok\",\"accessibility\":{\"title\":\"Fenêtre de félicitations\",\"button_valid\":\"Valider\"}}}");
 
 /***/ }),
 
diff --git a/public/index.html b/public/index.html
index 890802ce07128bbc51ba297e77485bd6989bc9af..a52b5bdef144a393c203c1f23c220bbfe54fa394 100644
--- a/public/index.html
+++ b/public/index.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo | Désabonnement</title><link rel="icon" type="image/png" href="public/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="public/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="mask-icon" href="public/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="public/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="public/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="../public/ecolyo.5dd25a0699626960a7a3.js"></script></div></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo | Désabonnement</title><link rel="icon" type="image/png" href="public/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="public/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="mask-icon" href="public/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="public/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="public/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="../public/ecolyo.13e8a89ac26ff8c8b5e8.js"></script></div></body></html>
\ No newline at end of file
diff --git a/services/enedisHalfHourMonthlyAnalysis/ecolyo.js b/services/enedisHalfHourMonthlyAnalysis/ecolyo.js
index 2b40a865a1b558ea5f9f2fb89bea4be302744ce7..a8f2668595f3f4ec8258fde6bbfed5a07af25c93 100644
--- a/services/enedisHalfHourMonthlyAnalysis/ecolyo.js
+++ b/services/enedisHalfHourMonthlyAnalysis/ecolyo.js
@@ -144613,10 +144613,11 @@ const getEnedisMonthAnalysisData = async (client, month, year) => {
     const weekEndAverages = weekEndValuesArray.map(halfHourArray => arrAvg(halfHourArray));
     // so we calculate the average
     const weekAverages = weekValuesArray.map(halfHourArray => arrAvg(halfHourArray));
+    const [maxPower, offPeakHoursRatio] = await Promise.all([getMonthMaxPower(month, year, client), getOffPeakHoursRatio(month, year, client)]);
     monthlyAveragesLoads.weekDaysHalfHourAverageValues = weekAverages;
     monthlyAveragesLoads.weekEndDaysHalfHourAverageValues = weekEndAverages;
-    monthlyAveragesLoads.maxPower = await getMonthMaxPower(month, year, client);
-    monthlyAveragesLoads.offPeakHoursRatio = await getOffPeakHoursRatio(month, year, client);
+    monthlyAveragesLoads.maxPower = maxPower;
+    monthlyAveragesLoads.offPeakHoursRatio = offPeakHoursRatio;
     return monthlyAveragesLoads;
   }
 };
diff --git a/services/fluidsPrices/ecolyo.js b/services/fluidsPrices/ecolyo.js
index a87e2cd10ef799182a1b729136316d382743d508..dc5ba88ce2043dadab5b265af296da271e9dabdf 100644
--- a/services/fluidsPrices/ecolyo.js
+++ b/services/fluidsPrices/ecolyo.js
@@ -117718,6 +117718,8 @@ const updatePrices = async ({
         continue;
       }
       logStack('debug', `Price exists in db but not up to date, updating it`);
+      // If a price has been updated, set the oldest startDate of the edited price so we can redo aggregation
+
       await fps.updatePrice(existingPrice, {
         price: remotePrice.price,
         UpdatedAt: remotePrice.UpdatedAt,