diff --git a/4/ecolyo.c067f7cbfdea129d8383.js b/4/ecolyo.fd60d6605197e95bca7c.js
similarity index 95%
rename from 4/ecolyo.c067f7cbfdea129d8383.js
rename to 4/ecolyo.fd60d6605197e95bca7c.js
index 25f88de2b4820692ad72c69c36a85a7522b90935..ed6a58f46e260f3beb4785307add81b0f4fe3c7c 100644
--- a/4/ecolyo.c067f7cbfdea129d8383.js
+++ b/4/ecolyo.fd60d6605197e95bca7c.js
@@ -1952,10 +1952,6 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.default = void 0;
 
-var _regenerator = _interopRequireDefault(__webpack_require__("o0o1"));
-
-var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__("yXPU"));
-
 var _slicedToArray2 = _interopRequireDefault(__webpack_require__("J4zp"));
 
 var _logos_partenaires = _interopRequireDefault(__webpack_require__("mrO1"));
@@ -2000,66 +1996,6 @@ var OptionsView = function OptionsView() {
     setHeaderHeight(height);
   };
 
-  function checkPermission() {
-    return _checkPermission.apply(this, arguments);
-  }
-
-  function _checkPermission() {
-    _checkPermission = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
-      var permission;
-      return _regenerator.default.wrap(function _callee4$(_context4) {
-        while (1) {
-          switch (_context4.prev = _context4.next) {
-            case 0:
-              _context4.next = 2;
-              return navigator.permissions.query({
-                name: 'notifications'
-              });
-
-            case 2:
-              permission = _context4.sent;
-
-              if (permission.state === 'prompt') {
-                console.log('prompt');
-              }
-
-              return _context4.abrupt("return");
-
-            case 5:
-            case "end":
-              return _context4.stop();
-          }
-        }
-      }, _callee4);
-    }));
-    return _checkPermission.apply(this, arguments);
-  }
-
-  var requestNotification = /*#__PURE__*/function () {
-    var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
-      return _regenerator.default.wrap(function _callee$(_context) {
-        while (1) {
-          switch (_context.prev = _context.next) {
-            case 0:
-              _context.next = 2;
-              return Notification.requestPermission();
-
-            case 2:
-              checkPermission();
-
-            case 3:
-            case "end":
-              return _context.stop();
-          }
-        }
-      }, _callee);
-    }));
-
-    return function requestNotification() {
-      return _ref.apply(this, arguments);
-    };
-  }();
-
   return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_CozyBar.default, {
     titleKey: 'common.title_options'
   }), /*#__PURE__*/_react.default.createElement(_Header.default, {
@@ -2067,96 +2003,7 @@ var OptionsView = function OptionsView() {
     desktopTitleKey: 'common.title_options'
   }), /*#__PURE__*/_react.default.createElement(_Content.default, {
     height: headerHeight
-  }, /*#__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("button", {
-    id: "butInstall"
-  }, "INSTALL PWA"), /*#__PURE__*/_react.default.createElement("button", {
-    onClick: requestNotification
-  }, "REQUEST PERMISSION"), /*#__PURE__*/_react.default.createElement("button", {
-    onClick: function onClick() {
-      new Notification('Test de notification', {
-        vibrate: 100,
-        body: 'hello world'
-      });
-    }
-  }, "NOTIFICATION"), /*#__PURE__*/_react.default.createElement("button", {
-    onClick: /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
-      return _regenerator.default.wrap(function _callee2$(_context2) {
-        while (1) {
-          switch (_context2.prev = _context2.next) {
-            case 0:
-              if (!('setAppBadge' in navigator)) {
-                _context2.next = 12;
-                break;
-              }
-
-              _context2.prev = 1;
-              console.log('api badge supported');
-              _context2.next = 5;
-              return navigator.setAppBadge(2);
-
-            case 5:
-              _context2.next = 10;
-              break;
-
-            case 7:
-              _context2.prev = 7;
-              _context2.t0 = _context2["catch"](1);
-              console.log(_context2.t0); // The badge is not supported, or the user has prevented the app from setting a badge.
-
-            case 10:
-              _context2.next = 13;
-              break;
-
-            case 12:
-              console.log('api badge not supported');
-
-            case 13:
-            case "end":
-              return _context2.stop();
-          }
-        }
-      }, _callee2, null, [[1, 7]]);
-    }))
-  }, "SET BADGE"), /*#__PURE__*/_react.default.createElement("button", {
-    onClick: /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
-      return _regenerator.default.wrap(function _callee3$(_context3) {
-        while (1) {
-          switch (_context3.prev = _context3.next) {
-            case 0:
-              if (!('clearAppBadge' in navigator)) {
-                _context3.next = 12;
-                break;
-              }
-
-              _context3.prev = 1;
-              console.log('api badge supported');
-              _context3.next = 5;
-              return navigator.clearAppBadge();
-
-            case 5:
-              _context3.next = 10;
-              break;
-
-            case 7:
-              _context3.prev = 7;
-              _context3.t0 = _context3["catch"](1);
-              console.log(_context3.t0); // The badge is not supported, or the user has prevented the app from setting a badge.
-
-            case 10:
-              _context3.next = 13;
-              break;
-
-            case 12:
-              console.log('api badge not supported');
-
-            case 13:
-            case "end":
-              return _context3.stop();
-          }
-        }
-      }, _callee3, null, [[1, 7]]);
-    }))
-  }, "CLEAR BADGE"), /*#__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(_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", {
     className: "parameters-logos"
   }, /*#__PURE__*/_react.default.createElement("img", {
     src: _logos_partenaires.default,
diff --git a/app/ecolyo.84d21c7a8a5d8c9fd85d.js b/app/ecolyo.cf6ca1615053afbe1556.js
similarity index 99%
rename from app/ecolyo.84d21c7a8a5d8c9fd85d.js
rename to app/ecolyo.cf6ca1615053afbe1556.js
index c8ac95588d769c04953dd097715e7bd3ab7929b3..aa46adfee6a86124f59b7d6c77816ae2773e763c 100644
--- a/app/ecolyo.84d21c7a8a5d8c9fd85d.js
+++ b/app/ecolyo.cf6ca1615053afbe1556.js
@@ -64,7 +64,7 @@
 /******/
 /******/ 	// script path function
 /******/ 	function jsonpScriptSrc(chunkId) {
-/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"1":"c44aefc530d1de68ee3f","3":"673e8ddd696663d6ffcf","4":"c067f7cbfdea129d8383","5":"82bfea9d56ce3943d256","6":"68590aa155e034150cca","7":"d2a6fc631880361b47a0","8":"5a104e5906433ba909f2","9":"d4e0f8345c64c54574af"}[chunkId] + ".js"
+/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"1":"c44aefc530d1de68ee3f","3":"673e8ddd696663d6ffcf","4":"fd60d6605197e95bca7c","5":"82bfea9d56ce3943d256","6":"68590aa155e034150cca","7":"d2a6fc631880361b47a0","8":"5a104e5906433ba909f2","9":"d4e0f8345c64c54574af"}[chunkId] + ".js"
 /******/ 	}
 /******/
 /******/ 	// The require function
@@ -6045,7 +6045,7 @@ var _water = _interopRequireDefault(__webpack_require__("4S84"));
 var _fluid = __webpack_require__("5Wkc");
 
 /**
- * Return an icon corresponding to FuildType enum
+ * Return an icon corresponding to FluidType enum
  * @param type FluidType
  */
 function getPicto(type) {
@@ -6069,7 +6069,7 @@ function getPicto(type) {
   }
 }
 /**
- * Return an icon corresponding to add FuildType enum
+ * Return an icon corresponding to add FluidType enum
  * @param type FluidType
  */
 
@@ -6105,32 +6105,39 @@ function getParamPicto(type) {
       return _elecParam.default;
   }
 }
+
+var getIcon = function getIcon(active, connected, activeIcon, inactiveIcon) {
+  if (connected) {
+    return active ? activeIcon : inactiveIcon;
+  } else {
+    return active ? _disconnected.default : _disconnectedGrey.default;
+  }
+};
 /**
- * Return an icon corresponding to FuildType enum
- * @param type FluidType
+ * Returns the appropriate icon for a given fluid type and connection status
  */
 
 
-function getNavPicto(type, active, connected) {
-  switch (type) {
+function getNavPicto(fluidType, active, connected) {
+  switch (fluidType) {
     case _fluid.FluidType.ELECTRICITY:
-      return connected ? active ? _elecSmall.default : _elecGrey.default : active ? _disconnected.default : _disconnectedGrey.default;
+      return getIcon(active, connected, _elecSmall.default, _elecGrey.default);
 
     case _fluid.FluidType.WATER:
-      return connected ? active ? _waterSmall.default : _waterGrey.default : active ? _disconnected.default : _disconnectedGrey.default;
+      return getIcon(active, connected, _waterSmall.default, _waterGrey.default);
 
     case _fluid.FluidType.GAS:
-      return connected ? active ? _gasSmall.default : _gasGrey.default : active ? _disconnected.default : _disconnectedGrey.default;
+      return getIcon(active, connected, _gasSmall.default, _gasGrey.default);
 
     case _fluid.FluidType.MULTIFLUID:
-      return connected ? active ? _multi.default : _multiGrey.default : active ? _disconnected.default : _disconnectedGrey.default;
+      return getIcon(active, connected, _multi.default, _multiGrey.default);
 
     default:
       return _elec.default;
   }
 }
 /**
- * Return an partner icon corresponding to FuildType enum
+ * Return an partner icon corresponding to FluidType enum
  * @param slug string
  * @param blackLogo boolean - define the color of the logo (black or white)
  */
diff --git a/index.html b/index.html
index 15e0a08eb27c390b8ec61ecf4ed723ea90159815..b8d304de80842356dd283b82b8d06b6e0076c9b8 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.8db661a341ead8755066.js"></script><script src="app/ecolyo.84d21c7a8a5d8c9fd85d.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.8db661a341ead8755066.js"></script><script src="app/ecolyo.cf6ca1615053afbe1556.js"></script></div></body></html>
\ No newline at end of file
diff --git a/serviceWorker.js b/serviceWorker.js
index 6882a7c26811a145922340a7b7edd762ffa29bab..51dc9b97b60f013203eabb07d760dfee02265eca 100644
--- a/serviceWorker.js
+++ b/serviceWorker.js
@@ -45,26 +45,3 @@ self.addEventListener('activate', event => {
     )
   )
 })
-
-/* Add to Home Screen */
-let deferredPrompt
-const btnAdd = document.getElementById('butInstall')
-btnAdd.addEventListener('click', e => {
-  // hide our user interface that shows our A2HS button
-  btnAdd.setAttribute('disabled', true)
-  // Show the prompt
-  deferredPrompt.prompt()
-  // Wait for the user to respond to the prompt
-  deferredPrompt.userChoice.then(resp => {
-    console.log(JSON.stringify(resp))
-  })
-})
-
-window.addEventListener('beforeinstallprompt', e => {
-  // Prevent the mini-info bar from appearing.
-  e.preventDefault()
-  // Stash the event so it can be triggered later.
-  deferredPrompt = e
-  // Update UI notify the user they can add to home screen
-  btnAdd.removeAttribute('disabled')
-})
diff --git a/services/monthlyReportNotification/ecolyo.js b/services/monthlyReportNotification/ecolyo.js
index 4a5673b1a7278550304c2cffdd46691ab8cbe6e1..644e92d047edfd260a2a49938e9a1a764c95216a 100644
--- a/services/monthlyReportNotification/ecolyo.js
+++ b/services/monthlyReportNotification/ecolyo.js
@@ -165350,7 +165350,7 @@ module.exports = (Handlebars["default"] || Handlebars).template({"1":function(co
     + ((stack1 = lookupProperty(helpers,"if").call(alias3,(depth0 != null ? lookupProperty(depth0,"isContent") : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":47,"column":4},"end":{"line":80,"column":11}}})) != null ? stack1 : "")
     + "    <mj-section background-color=\"#121212\">\n      <mj-column vertical-align=\"middle\">\n        <mj-image src="
     + alias2(alias1((depth0 != null ? lookupProperty(depth0,"feedbackImageUrl") : depth0), depth0))
-    + " width=\"32px\" align=\"center\" alt=\"feedback\"></mj-image>\n        <mj-text color=\"white\" font-weight=\"900\" align=\"center\" font-size=\"18px\">\n          Un problème, une question, une suggestion ?\n        </mj-text>\n        <mj-text color=\"white\" align=\"center\" font-size=\"18px\">\n          N'hésitez pas à nous écrire via la bulle dans le service.\n        </mj-text>\n      </mj-column>\n    </mj-section>\n    <mj-section background-color=\"black\">\n      <mj-column>\n"
+    + " width=\"32px\" align=\"center\" alt=\"feedback\"></mj-image>\n        <mj-text color=\"white\" font-weight=\"900\" align=\"center\" font-size=\"18px\">\n          Un problème, une question, une suggestion ?\n        </mj-text>\n        <mj-text color=\"white\" align=\"center\" font-size=\"18px\">\n          N'hésitez pas à nous écrire via la bulle dans le service ou \n          <a href=\"https://support.grandlyon.com/ecolyo/\" alt=\"lier vers le service assistance utilisateur\">cliquez ici.</a>\n        </mj-text>\n      </mj-column>\n    </mj-section>\n    <mj-section background-color=\"black\">\n      <mj-column>\n"
     + ((stack1 = container.invokePartial(__webpack_require__(1601),depth0,{"name":"base/footer","fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"helpers":helpers,"partials":partials,"decorators":container.decorators})) != null ? stack1 : "")
     + ((stack1 = container.invokePartial(__webpack_require__(1610),depth0,{"name":"base/unsubscribe","fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"helpers":helpers,"partials":partials,"decorators":container.decorators})) != null ? stack1 : "")
     + "      </mj-column>\n    </mj-section>\n  </mj-body>\n</mjml>";