gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated: pretty


From: gnunet
Subject: [taler-wallet-core] branch master updated: pretty
Date: Mon, 19 Dec 2022 16:23:47 +0100

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository wallet-core.

The following commit(s) were added to refs/heads/master by this push:
     new 72b429321 pretty
72b429321 is described below

commit 72b429321553841ac1ff48cf974bfc65da01bb06
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Mon Dec 19 12:23:39 2022 -0300

    pretty
---
 .../merchant-backoffice-ui/src/AdminRoutes.tsx     |    65 +-
 .../merchant-backoffice-ui/src/Application.tsx     |   168 +-
 .../src/ApplicationReadyRoutes.tsx                 |     7 +-
 .../merchant-backoffice-ui/src/InstanceRoutes.tsx  |     4 +-
 .../src/components/exception/AsyncButton.tsx       |    28 +-
 .../src/components/exception/loading.tsx           |    32 +-
 .../src/components/exception/login.tsx             |     2 +-
 .../src/components/form/FormProvider.tsx           |    76 +-
 .../src/components/form/Input.tsx                  |   118 +-
 .../src/components/form/InputArray.tsx             |   156 +-
 .../src/components/form/InputBoolean.tsx           |    89 +-
 .../src/components/form/InputCurrency.tsx          |    51 +-
 .../src/components/form/InputDuration.tsx          |     2 +-
 .../src/components/form/InputGroup.tsx             |    82 +-
 .../src/components/form/InputImage.tsx             |   144 +-
 .../src/components/form/InputLocation.tsx          |    51 +-
 .../src/components/form/InputNumber.tsx            |    44 +-
 .../src/components/form/InputPayto.tsx             |    41 +-
 .../src/components/form/InputSearchProduct.tsx     |   199 +-
 .../src/components/form/InputSecured.stories.tsx   |    56 +-
 .../src/components/form/InputSecured.tsx           |   222 +-
 .../src/components/form/InputStock.tsx             |   232 +-
 .../src/components/form/InputTaxes.tsx             |   119 +-
 .../src/components/form/InputWithAddon.tsx         |   118 +-
 .../src/components/form/TextField.tsx              |    64 +-
 .../src/components/form/useField.tsx               |    65 +-
 .../src/components/form/useGroupField.tsx          |    17 +-
 .../src/components/menu/LangSelector.tsx           |    99 +-
 .../src/components/menu/NavigationBar.tsx          |    74 +-
 .../src/components/modal/index.tsx                 |   561 +-
 .../notifications/CreatedSuccessfully.tsx          |    48 +-
 .../notifications/Notifications.stories.tsx        |    55 +-
 .../src/components/notifications/index.tsx         |    55 +-
 .../src/components/picker/DatePicker.tsx           |   315 +-
 .../components/picker/DurationPicker.stories.tsx   |    43 +-
 .../product/InventoryProductForm.stories.tsx       |    46 +-
 .../components/product/InventoryProductForm.tsx    |    98 +-
 .../components/product/NonInventoryProductForm.tsx |   215 +-
 .../src/components/product/ProductForm.tsx         |     4 +-
 .../src/components/product/ProductList.tsx         |     4 +-
 .../merchant-backoffice-ui/src/context/backend.ts  |    81 +-
 .../merchant-backoffice-ui/src/context/config.ts   |    14 +-
 .../merchant-backoffice-ui/src/context/instance.ts |    16 +-
 .../merchant-backoffice-ui/src/context/listener.ts |    16 +-
 .../src/context/translation.ts                     |    47 +-
 packages/merchant-backoffice-ui/src/custom.d.ts    |     8 +-
 .../merchant-backoffice-ui/src/declaration.d.ts    |  2338 ++-
 packages/merchant-backoffice-ui/src/hooks/async.ts |    41 +-
 .../merchant-backoffice-ui/src/hooks/backend.ts    |    21 +-
 packages/merchant-backoffice-ui/src/hooks/index.ts |   114 +-
 .../merchant-backoffice-ui/src/hooks/instance.ts   |    22 +-
 .../merchant-backoffice-ui/src/hooks/listener.ts   |    42 +-
 .../src/hooks/notifications.ts                     |    38 +-
 packages/merchant-backoffice-ui/src/hooks/order.ts |    76 +-
 .../merchant-backoffice-ui/src/hooks/product.ts    |    39 +-
 .../merchant-backoffice-ui/src/hooks/reserves.ts   |    34 +-
 .../merchant-backoffice-ui/src/hooks/transfer.ts   |    69 +-
 packages/merchant-backoffice-ui/src/i18n/index.tsx |     4 +-
 .../merchant-backoffice-ui/src/i18n/strings.ts     |  4633 ++----
 packages/merchant-backoffice-ui/src/index.html     |    12 +-
 packages/merchant-backoffice-ui/src/index.tsx      |     2 +-
 packages/merchant-backoffice-ui/src/manifest.json  |     2 +-
 .../src/paths/admin/create/Create.stories.tsx      |    31 +-
 .../src/paths/admin/create/CreatePage.tsx          |     4 +-
 .../admin/create/InstanceCreatedSuccessfully.tsx   |    85 +-
 .../src/paths/admin/create/index.tsx               |     2 +-
 .../src/paths/admin/list/TableActive.tsx           |   278 +-
 .../src/paths/admin/list/View.stories.tsx          |   104 +-
 .../src/paths/admin/list/View.tsx                  |   114 +-
 .../src/paths/index.stories.ts                     |     2 +-
 .../src/paths/instance/details/DetailPage.tsx      |    84 +-
 .../src/paths/instance/details/Details.stories.tsx |     2 +-
 .../src/paths/instance/details/index.tsx           |    68 +-
 .../instance/orders/create/Create.stories.tsx      |     2 +-
 .../paths/instance/orders/create/CreatePage.tsx    |    20 +-
 .../orders/create/OrderCreatedSuccessfully.tsx     |   123 +-
 .../src/paths/instance/orders/create/index.tsx     |    89 +-
 .../instance/orders/details/Detail.stories.tsx     |     2 +-
 .../paths/instance/orders/details/DetailPage.tsx   |     6 +-
 .../src/paths/instance/orders/details/index.tsx    |    69 +-
 .../paths/instance/orders/list/List.stories.tsx    |     2 +-
 .../src/paths/instance/orders/list/ListPage.tsx    |   256 +-
 .../src/paths/instance/orders/list/Table.tsx       |    10 +-
 .../src/paths/instance/orders/list/index.tsx       |   258 +-
 .../instance/products/create/Create.stories.tsx    |    29 +-
 .../paths/instance/products/create/CreatePage.tsx  |    71 +-
 .../products/create/CreatedSuccessfully.tsx        |    73 +-
 .../src/paths/instance/products/create/index.tsx   |    57 +-
 .../paths/instance/products/list/List.stories.tsx  |    59 +-
 .../src/paths/instance/products/list/Table.tsx     |    14 +-
 .../src/paths/instance/products/list/index.tsx     |   112 +-
 .../instance/products/update/Update.stories.tsx    |    54 +-
 .../paths/instance/products/update/UpdatePage.tsx  |    92 +-
 .../src/paths/instance/products/update/index.tsx   |    78 +-
 .../instance/reserves/create/Create.stories.tsx    |    29 +-
 .../paths/instance/reserves/create/CreatePage.tsx  |   296 +-
 .../create/CreatedSuccessfully.stories.tsx         |    40 +-
 .../reserves/create/CreatedSuccessfully.tsx        |   112 +-
 .../paths/instance/reserves/details/DetailPage.tsx |     7 +-
 .../instance/reserves/details/Details.stories.tsx  |     2 +-
 .../paths/instance/reserves/details/TipInfo.tsx    |     2 +-
 .../instance/reserves/list/AutorizeTipModal.tsx    |   107 +-
 .../instance/reserves/list/CreatedSuccessfully.tsx |     2 +-
 .../paths/instance/reserves/list/List.stories.tsx  |     2 +-
 .../src/paths/instance/reserves/list/Table.tsx     |     4 +-
 .../src/paths/instance/reserves/list/index.tsx     |     4 +-
 .../instance/transfers/create/Create.stories.tsx   |    28 +-
 .../paths/instance/transfers/create/CreatePage.tsx |   148 +-
 .../src/paths/instance/transfers/create/index.tsx  |    67 +-
 .../paths/instance/transfers/list/List.stories.tsx |     2 +-
 .../src/paths/instance/transfers/list/ListPage.tsx |   135 +-
 .../src/paths/instance/transfers/list/Table.tsx    |     2 +-
 .../src/paths/instance/transfers/list/index.tsx    |   100 +-
 .../src/paths/instance/transfers/update/index.tsx  |    14 +-
 .../src/paths/instance/update/Update.stories.tsx   |     2 +-
 .../src/paths/instance/update/UpdatePage.tsx       |     8 +-
 .../src/paths/instance/update/index.tsx            |    10 +-
 .../src/paths/login/index.tsx                      |    12 +-
 .../src/paths/notfound/index.tsx                   |    25 +-
 .../merchant-backoffice-ui/src/schemas/index.ts    |   258 +-
 .../src/scss/DurationPicker.scss                   |     1 -
 .../merchant-backoffice-ui/src/scss/_aside.scss    |    30 +-
 .../merchant-backoffice-ui/src/scss/_card.scss     |     4 +-
 .../src/scss/_custom-calendar.scss                 |    83 +-
 .../merchant-backoffice-ui/src/scss/_footer.scss   |     2 +-
 .../merchant-backoffice-ui/src/scss/_form.scss     |    33 +-
 .../merchant-backoffice-ui/src/scss/_hero-bar.scss |     8 +-
 .../src/scss/_main-section.scss                    |     2 +-
 .../merchant-backoffice-ui/src/scss/_mixins.scss   |     6 +-
 .../merchant-backoffice-ui/src/scss/_modal.scss    |     2 +-
 .../merchant-backoffice-ui/src/scss/_nav-bar.scss  |    16 +-
 .../merchant-backoffice-ui/src/scss/_table.scss    |    28 +-
 .../merchant-backoffice-ui/src/scss/_tiles.scss    |     3 +-
 .../src/scss/_title-bar.scss                       |     8 +-
 .../src/scss/fonts/nunito.css                      |     4 +-
 .../scss/icons/materialdesignicons-4.9.95.min.css  | 15108 ++++++++++++++++++-
 .../merchant-backoffice-ui/src/scss/libs/_all.scss |     2 +-
 packages/merchant-backoffice-ui/src/sw.js          |     2 +-
 .../merchant-backoffice-ui/src/utils/amount.ts     |    56 +-
 .../merchant-backoffice-ui/src/utils/constants.ts  |    33 +-
 .../src/utils/switchableAxios.ts                   |    47 +-
 packages/merchant-backoffice-ui/src/utils/table.ts |    36 +-
 142 files changed, 22735 insertions(+), 7985 deletions(-)

diff --git a/packages/merchant-backoffice-ui/src/AdminRoutes.tsx 
b/packages/merchant-backoffice-ui/src/AdminRoutes.tsx
index d3eb8a5b9..7f86d92ab 100644
--- a/packages/merchant-backoffice-ui/src/AdminRoutes.tsx
+++ b/packages/merchant-backoffice-ui/src/AdminRoutes.tsx
@@ -16,43 +16,38 @@
 import { h, VNode } from "preact";
 import Router, { route, Route } from "preact-router";
 import InstanceCreatePage from "./paths/admin/create/index.js";
-import InstanceListPage from './paths/admin/list/index.js';
-
+import InstanceListPage from "./paths/admin/list/index.js";
 
 export enum AdminPaths {
-  list_instances = '/instances',
-  new_instance = '/instance/new',
+  list_instances = "/instances",
+  new_instance = "/instance/new",
 }
 
 export function AdminRoutes(): VNode {
-  
-  return <Router>
-
-    <Route path={AdminPaths.list_instances} component={InstanceListPage}
-
-      onCreate={() => {
-        route(AdminPaths.new_instance);
-      }}
-
-      onUpdate={(id: string): void => {
-        route(`/instance/${id}/update`);
-      }}
-
-    />
-
-    <Route path={AdminPaths.new_instance} component={InstanceCreatePage}
-
-      onBack={() => route(AdminPaths.list_instances)}
-
-      onConfirm={() => {
-        // route(AdminPaths.list_instances);
-      }}
-
-      // onError={(error: any) => {
-      // }}
-      
-    />
-
-
-  </Router>
-}
\ No newline at end of file
+  return (
+    <Router>
+      <Route
+        path={AdminPaths.list_instances}
+        component={InstanceListPage}
+        onCreate={() => {
+          route(AdminPaths.new_instance);
+        }}
+        onUpdate={(id: string): void => {
+          route(`/instance/${id}/update`);
+        }}
+      />
+
+      <Route
+        path={AdminPaths.new_instance}
+        component={InstanceCreatePage}
+        onBack={() => route(AdminPaths.list_instances)}
+        onConfirm={() => {
+          // route(AdminPaths.list_instances);
+        }}
+
+        // onError={(error: any) => {
+        // }}
+      />
+    </Router>
+  );
+}
diff --git a/packages/merchant-backoffice-ui/src/Application.tsx 
b/packages/merchant-backoffice-ui/src/Application.tsx
index 4aa0f7891..0b92375c1 100644
--- a/packages/merchant-backoffice-ui/src/Application.tsx
+++ b/packages/merchant-backoffice-ui/src/Application.tsx
@@ -15,95 +15,125 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode } from 'preact';
-import { route } from 'preact-router';
+import { h, VNode } from "preact";
+import { route } from "preact-router";
 import { useMemo } from "preact/hooks";
 import { ApplicationReadyRoutes } from "./ApplicationReadyRoutes.js";
 import { Loading } from "./components/exception/loading.js";
-import { NotificationCard, NotYetReadyAppMenu } from 
"./components/menu/index.js";
-import { BackendContextProvider, useBackendContext } from 
'./context/backend.js';
-import { ConfigContextProvider } from './context/config.js';
-import { TranslationProvider } from './context/translation.js';
+import {
+  NotificationCard,
+  NotYetReadyAppMenu,
+} from "./components/menu/index.js";
+import {
+  BackendContextProvider,
+  useBackendContext,
+} from "./context/backend.js";
+import { ConfigContextProvider } from "./context/config.js";
+import { TranslationProvider } from "./context/translation.js";
 import { useBackendConfig } from "./hooks/backend.js";
-import { useTranslator } from './i18n/index.js';
-import LoginPage from './paths/login/index.js';
+import { useTranslator } from "./i18n/index.js";
+import LoginPage from "./paths/login/index.js";
 
 export function Application(): VNode {
   return (
     // <FetchContextProvider>
-      <BackendContextProvider>
-        <TranslationProvider>
-          <ApplicationStatusRoutes />
-        </TranslationProvider>
-      </BackendContextProvider>
+    <BackendContextProvider>
+      <TranslationProvider>
+        <ApplicationStatusRoutes />
+      </TranslationProvider>
+    </BackendContextProvider>
     // </FetchContextProvider>
   );
 }
 
 function ApplicationStatusRoutes(): VNode {
-  const { updateLoginStatus, triedToLog } = useBackendContext()
+  const { updateLoginStatus, triedToLog } = useBackendContext();
   const result = useBackendConfig();
-  const i18n = useTranslator()
+  const i18n = useTranslator();
 
   const updateLoginInfoAndGoToRoot = (url: string, token?: string) => {
-    updateLoginStatus(url, token)
-    route('/')
-  }
+    updateLoginStatus(url, token);
+    route("/");
+  };
 
-  const { currency, version } = result.ok ? result.data : { currency: 
'unknown', version: 'unknown' }
-  const ctx = useMemo(() => ({ currency, version }), [currency, version])
+  const { currency, version } = result.ok
+    ? result.data
+    : { currency: "unknown", version: "unknown" };
+  const ctx = useMemo(() => ({ currency, version }), [currency, version]);
 
   if (!triedToLog) {
-    return <div id="app">
-      <NotYetReadyAppMenu title="Welcome!" />
-      <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />
-    </div>
+    return (
+      <div id="app">
+        <NotYetReadyAppMenu title="Welcome!" />
+        <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />
+      </div>
+    );
   }
 
-  if (result.clientError && result.isUnauthorized) return <div id="app">
-    <NotYetReadyAppMenu title="Login" />
-    <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />
-  </div>
-
-  if (result.clientError && result.isNotfound) return <div id="app">
-    <NotYetReadyAppMenu title="Error" />
-    <NotificationCard notification={{
-      message: i18n`Server not found`,
-      type: 'ERROR',
-      description: `Check your url`,
-    }} />
-    <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />
-  </div>
-
-  if (result.serverError) return <div id="app">
-    <NotYetReadyAppMenu title="Error" />
-    <NotificationCard notification={{
-      message: i18n`Couldn't access the server`,
-      type: 'ERROR',
-      description: i18n`Got message ${result.message} from 
${result.info?.url}`,
-    }} />
-    <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />
-  </div>
-
-  if (result.loading) return <Loading />
-
-  if (!result.ok) return <div id="app">
-    <NotYetReadyAppMenu title="Error" />
-    <NotificationCard notification={{
-      message: i18n`Unexpected Error`,
-      type: 'ERROR',
-      description: i18n`Got message ${result.message} from 
${result.info?.url}`,
-    }} />
-    <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />
-  </div>
-
-  return <div id="app" class="has-navbar-fixed-top">
-    <ConfigContextProvider value={ctx}>
-      <ApplicationReadyRoutes />
-    </ConfigContextProvider>
-  </div>
+  if (result.clientError && result.isUnauthorized)
+    return (
+      <div id="app">
+        <NotYetReadyAppMenu title="Login" />
+        <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />
+      </div>
+    );
+
+  if (result.clientError && result.isNotfound)
+    return (
+      <div id="app">
+        <NotYetReadyAppMenu title="Error" />
+        <NotificationCard
+          notification={{
+            message: i18n`Server not found`,
+            type: "ERROR",
+            description: `Check your url`,
+          }}
+        />
+        <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />
+      </div>
+    );
+
+  if (result.serverError)
+    return (
+      <div id="app">
+        <NotYetReadyAppMenu title="Error" />
+        <NotificationCard
+          notification={{
+            message: i18n`Couldn't access the server`,
+            type: "ERROR",
+            description: i18n`Got message ${result.message} from 
${result.info?.url}`,
+          }}
+        />
+        <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />
+      </div>
+    );
+
+  if (result.loading) return <Loading />;
+
+  if (!result.ok)
+    return (
+      <div id="app">
+        <NotYetReadyAppMenu title="Error" />
+        <NotificationCard
+          notification={{
+            message: i18n`Unexpected Error`,
+            type: "ERROR",
+            description: i18n`Got message ${result.message} from 
${result.info?.url}`,
+          }}
+        />
+        <LoginPage onConfirm={updateLoginInfoAndGoToRoot} />
+      </div>
+    );
+
+  return (
+    <div id="app" class="has-navbar-fixed-top">
+      <ConfigContextProvider value={ctx}>
+        <ApplicationReadyRoutes />
+      </ConfigContextProvider>
+    </div>
+  );
 }
diff --git a/packages/merchant-backoffice-ui/src/ApplicationReadyRoutes.tsx 
b/packages/merchant-backoffice-ui/src/ApplicationReadyRoutes.tsx
index 78cbd505b..fe4493bff 100644
--- a/packages/merchant-backoffice-ui/src/ApplicationReadyRoutes.tsx
+++ b/packages/merchant-backoffice-ui/src/ApplicationReadyRoutes.tsx
@@ -25,7 +25,10 @@ import { useBackendInstancesTestForAdmin } from 
"./hooks/backend.js";
 import { InstanceRoutes } from "./InstanceRoutes.js";
 import LoginPage from "./paths/login/index.js";
 import { INSTANCE_ID_LOOKUP } from "./utils/constants.js";
-import { NotYetReadyAppMenu, NotificationCard } from 
"./components/menu/index.js";
+import {
+  NotYetReadyAppMenu,
+  NotificationCard,
+} from "./components/menu/index.js";
 import { useTranslator } from "./i18n/index.js";
 import { createHashHistory } from "history";
 import { useState } from "preact/hooks";
@@ -107,7 +110,7 @@ export function ApplicationReadyRoutes(): VNode {
 
 function DefaultMainRoute({ instance, admin, instanceNameByBackendURL }: any) {
   const [instanceName, setInstanceName] = useState(
-    instanceNameByBackendURL || instance || "default"
+    instanceNameByBackendURL || instance || "default",
   );
 
   return (
diff --git a/packages/merchant-backoffice-ui/src/InstanceRoutes.tsx 
b/packages/merchant-backoffice-ui/src/InstanceRoutes.tsx
index eef8e68ac..adfc73e20 100644
--- a/packages/merchant-backoffice-ui/src/InstanceRoutes.tsx
+++ b/packages/merchant-backoffice-ui/src/InstanceRoutes.tsx
@@ -131,7 +131,7 @@ export function InstanceRoutes({ id, admin, setInstanceName 
}: Props): VNode {
 
   const value = useMemo(
     () => ({ id, token, admin, changeToken }),
-    [id, token, admin]
+    [id, token, admin],
   );
 
   function ServerErrorRedirectTo(to: InstancePaths | AdminPaths) {
@@ -451,7 +451,7 @@ function AdminInstanceUpdatePage({
   };
   const value = useMemo(
     () => ({ id, token, admin: true, changeToken }),
-    [id, token]
+    [id, token],
   );
   const i18n = useTranslator();
 
diff --git 
a/packages/merchant-backoffice-ui/src/components/exception/AsyncButton.tsx 
b/packages/merchant-backoffice-ui/src/components/exception/AsyncButton.tsx
index b234ce847..510bc29b8 100644
--- a/packages/merchant-backoffice-ui/src/components/exception/AsyncButton.tsx
+++ b/packages/merchant-backoffice-ui/src/components/exception/AsyncButton.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { ComponentChildren, h } from "preact";
 import { LoadingModal } from "../modal/index.js";
@@ -25,10 +25,10 @@ import { useAsync } from "../../hooks/async.js";
 import { Translate } from "../../i18n/index.js";
 
 type Props = {
-  children: ComponentChildren,
+  children: ComponentChildren;
   disabled: boolean;
   onClick?: () => Promise<void>;
-  [rest:string]: any,
+  [rest: string]: any;
 };
 
 export function AsyncButton({ onClick, disabled, children, ...rest }: Props) {
@@ -38,12 +38,18 @@ export function AsyncButton({ onClick, disabled, children, 
...rest }: Props) {
     return <LoadingModal onCancel={cancel} />;
   }
   if (isLoading) {
-    return <button class="button"><Translate>Loading...</Translate></button>;
+    return (
+      <button class="button">
+        <Translate>Loading...</Translate>
+      </button>
+    );
   }
 
-  return <span {...rest}>
-    <button class="button is-success" onClick={request} disabled={disabled}>
-      {children}
-    </button>
-  </span>;
+  return (
+    <span {...rest}>
+      <button class="button is-success" onClick={request} disabled={disabled}>
+        {children}
+      </button>
+    </span>
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/components/exception/loading.tsx 
b/packages/merchant-backoffice-ui/src/components/exception/loading.tsx
index 9c9b4daae..a043b81eb 100644
--- a/packages/merchant-backoffice-ui/src/components/exception/loading.tsx
+++ b/packages/merchant-backoffice-ui/src/components/exception/loading.tsx
@@ -15,18 +15,34 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { h, VNode } from "preact";
 
 export function Loading(): VNode {
-  return <div class="columns is-centered is-vcentered" style={{ height: 
'calc(100% - 3rem)', position: 'absolute', width: '100%' }}>
-    <Spinner />
-  </div>
+  return (
+    <div
+      class="columns is-centered is-vcentered"
+      style={{
+        height: "calc(100% - 3rem)",
+        position: "absolute",
+        width: "100%",
+      }}
+    >
+      <Spinner />
+    </div>
+  );
 }
 
 export function Spinner(): VNode {
-  return <div class="lds-ring"><div /><div /><div /><div /></div>
-}
\ No newline at end of file
+  return (
+    <div class="lds-ring">
+      <div />
+      <div />
+      <div />
+      <div />
+    </div>
+  );
+}
diff --git a/packages/merchant-backoffice-ui/src/components/exception/login.tsx 
b/packages/merchant-backoffice-ui/src/components/exception/login.tsx
index c2af2a83a..d1898915d 100644
--- a/packages/merchant-backoffice-ui/src/components/exception/login.tsx
+++ b/packages/merchant-backoffice-ui/src/components/exception/login.tsx
@@ -46,7 +46,7 @@ export function LoginModal({ onConfirm, withMessage }: 
Props): VNode {
   const { url: backendUrl, token: baseToken } = useBackendContext();
   const { admin, token: instanceToken } = useInstanceContext();
   const currentToken = getTokenValuePart(
-    !admin ? baseToken : instanceToken || ""
+    !admin ? baseToken : instanceToken || "",
   );
   const [token, setToken] = useState(currentToken);
 
diff --git 
a/packages/merchant-backoffice-ui/src/components/form/FormProvider.tsx 
b/packages/merchant-backoffice-ui/src/components/form/FormProvider.tsx
index ab32b6bed..7bcebd706 100644
--- a/packages/merchant-backoffice-ui/src/components/form/FormProvider.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/FormProvider.tsx
@@ -15,37 +15,59 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { ComponentChildren, createContext, h, VNode } from "preact";
 import { useContext, useMemo } from "preact/hooks";
 
-type Updater<S> = (value: ((prevState: S) => S) ) => void;
+type Updater<S> = (value: (prevState: S) => S) => void;
 
 export interface Props<T> {
   object?: Partial<T>;
   errors?: FormErrors<T>;
   name?: string;
   valueHandler: Updater<Partial<T>> | null;
-  children: ComponentChildren
+  children: ComponentChildren;
 }
 
-const noUpdater: Updater<Partial<unknown>> = () => (s: unknown) => s
+const noUpdater: Updater<Partial<unknown>> = () => (s: unknown) => s;
 
-export function FormProvider<T>({ object = {}, errors = {}, name = '', 
valueHandler, children }: Props<T>): VNode {
+export function FormProvider<T>({
+  object = {},
+  errors = {},
+  name = "",
+  valueHandler,
+  children,
+}: Props<T>): VNode {
   const initialObject = useMemo(() => object, []);
-  const value = useMemo<FormType<T>>(() => ({ errors, object, initialObject, 
valueHandler: valueHandler ? valueHandler : noUpdater, name, toStr: {}, 
fromStr: {} }), [errors, object, valueHandler]);
-
-  return <FormContext.Provider value={value}>
-    <form class="field" onSubmit={(e) => {
-      e.preventDefault();
-      // if (valueHandler) valueHandler(object);
-    }}>
-      {children}
-    </form>
-  </FormContext.Provider>;
+  const value = useMemo<FormType<T>>(
+    () => ({
+      errors,
+      object,
+      initialObject,
+      valueHandler: valueHandler ? valueHandler : noUpdater,
+      name,
+      toStr: {},
+      fromStr: {},
+    }),
+    [errors, object, valueHandler],
+  );
+
+  return (
+    <FormContext.Provider value={value}>
+      <form
+        class="field"
+        onSubmit={(e) => {
+          e.preventDefault();
+          // if (valueHandler) valueHandler(object);
+        }}
+      >
+        {children}
+      </form>
+    </FormContext.Provider>
+  );
 }
 
 export interface FormType<T> {
@@ -58,24 +80,24 @@ export interface FormType<T> {
   valueHandler: Updater<Partial<T>>;
 }
 
-const FormContext = createContext<FormType<unknown>>(null!)
+const FormContext = createContext<FormType<unknown>>(null!);
 
 export function useFormContext<T>() {
-  return useContext<FormType<T>>(FormContext)
+  return useContext<FormType<T>>(FormContext);
 }
 
 export type FormErrors<T> = {
-  [P in keyof T]?: string | FormErrors<T[P]>
-}
+  [P in keyof T]?: string | FormErrors<T[P]>;
+};
 
 export type FormtoStr<T> = {
-  [P in keyof T]?: ((f?: T[P]) => string)
-}
+  [P in keyof T]?: (f?: T[P]) => string;
+};
 
 export type FormfromStr<T> = {
-  [P in keyof T]?: ((f: string) => T[P])
-}
+  [P in keyof T]?: (f: string) => T[P];
+};
 
 export type FormUpdater<T> = {
-  [P in keyof T]?: (f: keyof T) => (v: T[P]) => void
-}
+  [P in keyof T]?: (f: keyof T) => (v: T[P]) => void;
+};
diff --git a/packages/merchant-backoffice-ui/src/components/form/Input.tsx 
b/packages/merchant-backoffice-ui/src/components/form/Input.tsx
index 793477f3d..54140ba4d 100644
--- a/packages/merchant-backoffice-ui/src/components/form/Input.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/Input.tsx
@@ -15,57 +15,101 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { ComponentChildren, h, VNode } from "preact";
 import { useField, InputProps } from "./useField.js";
 
 interface Props<T> extends InputProps<T> {
-  inputType?: 'text' | 'number' | 'multiline' | 'password';
+  inputType?: "text" | "number" | "multiline" | "password";
   expand?: boolean;
   toStr?: (v?: any) => string;
   fromStr?: (s: string) => any;
-  inputExtra?: any,
+  inputExtra?: any;
   side?: ComponentChildren;
   children?: ComponentChildren;
 }
 
-const defaultToString = (f?: any): string => f || ''
-const defaultFromString = (v: string): any => v as any
+const defaultToString = (f?: any): string => f || "";
+const defaultFromString = (v: string): any => v as any;
 
-const TextInput = ({ inputType, error, ...rest }: any) => inputType === 
'multiline' ?
-  <textarea {...rest} class={error ? "textarea is-danger" : "textarea"} 
rows="3" /> :
-  <input {...rest} class={error ? "input is-danger" : "input"} 
type={inputType} />;
+const TextInput = ({ inputType, error, ...rest }: any) =>
+  inputType === "multiline" ? (
+    <textarea
+      {...rest}
+      class={error ? "textarea is-danger" : "textarea"}
+      rows="3"
+    />
+  ) : (
+    <input
+      {...rest}
+      class={error ? "input is-danger" : "input"}
+      type={inputType}
+    />
+  );
 
-export function Input<T>({ name, readonly, placeholder, tooltip, label, 
expand, help, children, inputType, inputExtra, side, fromStr = 
defaultFromString, toStr = defaultToString }: Props<keyof T>): VNode {
+export function Input<T>({
+  name,
+  readonly,
+  placeholder,
+  tooltip,
+  label,
+  expand,
+  help,
+  children,
+  inputType,
+  inputExtra,
+  side,
+  fromStr = defaultFromString,
+  toStr = defaultToString,
+}: Props<keyof T>): VNode {
   const { error, value, onChange, required } = useField<T>(name);
-  return <div class="field is-horizontal">
-    <div class="field-label is-normal">
-      <label class="label">
-        {label}
-        {tooltip && <span class="icon has-tooltip-right" 
data-tooltip={tooltip}>
-          <i class="mdi mdi-information" />
-        </span>}
-      </label>
-    </div>
-    <div class="field-body is-flex-grow-3">
-      <div class="field">
-        <p class={expand ? "control is-expanded has-icons-right" : "control 
has-icons-right"}>
-          <TextInput error={error} {...inputExtra}
-            inputType={inputType}
-            placeholder={placeholder} readonly={readonly}
-            name={String(name)} value={toStr(value)}
-            onChange={(e: h.JSX.TargetedEvent<HTMLInputElement>): void => 
onChange(fromStr(e.currentTarget.value))} />
-          {help}
-          {children}
-          { required && <span class="icon has-text-danger is-right">
-            <i class="mdi mdi-alert" />
-          </span> }
-        </p>
-        {error && <p class="help is-danger">{error}</p>}
+  return (
+    <div class="field is-horizontal">
+      <div class="field-label is-normal">
+        <label class="label">
+          {label}
+          {tooltip && (
+            <span class="icon has-tooltip-right" data-tooltip={tooltip}>
+              <i class="mdi mdi-information" />
+            </span>
+          )}
+        </label>
+      </div>
+      <div class="field-body is-flex-grow-3">
+        <div class="field">
+          <p
+            class={
+              expand
+                ? "control is-expanded has-icons-right"
+                : "control has-icons-right"
+            }
+          >
+            <TextInput
+              error={error}
+              {...inputExtra}
+              inputType={inputType}
+              placeholder={placeholder}
+              readonly={readonly}
+              name={String(name)}
+              value={toStr(value)}
+              onChange={(e: h.JSX.TargetedEvent<HTMLInputElement>): void =>
+                onChange(fromStr(e.currentTarget.value))
+              }
+            />
+            {help}
+            {children}
+            {required && (
+              <span class="icon has-text-danger is-right">
+                <i class="mdi mdi-alert" />
+              </span>
+            )}
+          </p>
+          {error && <p class="help is-danger">{error}</p>}
+        </div>
+        {side}
       </div>
-      {side}
     </div>
-  </div>;
+  );
 }
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputArray.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputArray.tsx
index f8bf6437d..b5da1117a 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputArray.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputArray.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { Translate, useTranslator } from "../../i18n/index.js";
@@ -30,68 +30,110 @@ export interface Props<T> extends InputProps<T> {
   fromStr?: (s: string) => any;
 }
 
-const defaultToString = (f?: any): string => f || ''
-const defaultFromString = (v: string): any => v as any
+const defaultToString = (f?: any): string => f || "";
+const defaultFromString = (v: string): any => v as any;
 
-export function InputArray<T>({ name, readonly, placeholder, tooltip, label, 
help, addonBefore, isValid = () => true, fromStr = defaultFromString, toStr = 
defaultToString }: Props<keyof T>): VNode {
+export function InputArray<T>({
+  name,
+  readonly,
+  placeholder,
+  tooltip,
+  label,
+  help,
+  addonBefore,
+  isValid = () => true,
+  fromStr = defaultFromString,
+  toStr = defaultToString,
+}: Props<keyof T>): VNode {
   const { error: formError, value, onChange, required } = useField<T>(name);
-  const [localError, setLocalError] = useState<string | null>(null)
+  const [localError, setLocalError] = useState<string | null>(null);
 
-  const error = localError || formError
+  const error = localError || formError;
 
   const array: any[] = (value ? value! : []) as any;
-  const [currentValue, setCurrentValue] = useState('');
+  const [currentValue, setCurrentValue] = useState("");
   const i18n = useTranslator();
 
-  return <div class="field is-horizontal">
-    <div class="field-label is-normal">
-      <label class="label">
-        {label}
-        {tooltip && <span class="icon has-tooltip-right" 
data-tooltip={tooltip}>
-          <i class="mdi mdi-information" />
-        </span>}
-      </label>
-    </div>
-    <div class="field-body is-flex-grow-3">
-      <div class="field">
-        <div class="field has-addons">
-          {addonBefore && <div class="control">
-            <a class="button is-static">{addonBefore}</a>
-          </div>}
-          <p class="control is-expanded has-icons-right">
-            <input class={error ? "input is-danger" : "input"} type="text"
-              placeholder={placeholder} readonly={readonly} disabled={readonly}
-              name={String(name)} value={currentValue}
-              onChange={(e): void => setCurrentValue(e.currentTarget.value)} />
-            {required && <span class="icon has-text-danger is-right">
-              <i class="mdi mdi-alert" />
-            </span>}
-          </p>
-          <p class="control">
-            <button class="button is-info has-tooltip-left" 
disabled={!currentValue} onClick={(): void => {
-              const v = fromStr(currentValue)
-              if (!isValid(v)) {
-                setLocalError(i18n`The value ${v} is invalid for a payment 
url`)
-                return;
-              }
-              setLocalError(null)
-              onChange([v, ...array] as any);
-              setCurrentValue('');
-            }} data-tooltip={i18n`add element to the 
list`}><Translate>add</Translate></button>
-          </p>
-        </div>
-        {help}
-        {error && <p class="help is-danger"> {error} </p>}
-        {array.map((v, i) => <div key={i} class="tags has-addons mt-3 mb-0">
-          <span class="tag is-medium is-info mb-0" style={{ maxWidth: '90%' 
}}>{v}</span>
-          <a class="tag is-medium is-danger is-delete mb-0" onClick={() => {
-            onChange(array.filter(f => f !== v) as any);
-            setCurrentValue(toStr(v));
-          }} />
+  return (
+    <div class="field is-horizontal">
+      <div class="field-label is-normal">
+        <label class="label">
+          {label}
+          {tooltip && (
+            <span class="icon has-tooltip-right" data-tooltip={tooltip}>
+              <i class="mdi mdi-information" />
+            </span>
+          )}
+        </label>
+      </div>
+      <div class="field-body is-flex-grow-3">
+        <div class="field">
+          <div class="field has-addons">
+            {addonBefore && (
+              <div class="control">
+                <a class="button is-static">{addonBefore}</a>
+              </div>
+            )}
+            <p class="control is-expanded has-icons-right">
+              <input
+                class={error ? "input is-danger" : "input"}
+                type="text"
+                placeholder={placeholder}
+                readonly={readonly}
+                disabled={readonly}
+                name={String(name)}
+                value={currentValue}
+                onChange={(e): void => setCurrentValue(e.currentTarget.value)}
+              />
+              {required && (
+                <span class="icon has-text-danger is-right">
+                  <i class="mdi mdi-alert" />
+                </span>
+              )}
+            </p>
+            <p class="control">
+              <button
+                class="button is-info has-tooltip-left"
+                disabled={!currentValue}
+                onClick={(): void => {
+                  const v = fromStr(currentValue);
+                  if (!isValid(v)) {
+                    setLocalError(
+                      i18n`The value ${v} is invalid for a payment url`,
+                    );
+                    return;
+                  }
+                  setLocalError(null);
+                  onChange([v, ...array] as any);
+                  setCurrentValue("");
+                }}
+                data-tooltip={i18n`add element to the list`}
+              >
+                <Translate>add</Translate>
+              </button>
+            </p>
+          </div>
+          {help}
+          {error && <p class="help is-danger"> {error} </p>}
+          {array.map((v, i) => (
+            <div key={i} class="tags has-addons mt-3 mb-0">
+              <span
+                class="tag is-medium is-info mb-0"
+                style={{ maxWidth: "90%" }}
+              >
+                {v}
+              </span>
+              <a
+                class="tag is-medium is-danger is-delete mb-0"
+                onClick={() => {
+                  onChange(array.filter((f) => f !== v) as any);
+                  setCurrentValue(toStr(v));
+                }}
+              />
+            </div>
+          ))}
         </div>
-        )}
       </div>
-
     </div>
-  </div>;
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/components/form/InputBoolean.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputBoolean.tsx
index 4c40cacf6..f79e16c07 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputBoolean.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputBoolean.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { h, VNode } from "preact";
 import { InputProps, useField } from "./useField.js";
 
@@ -30,43 +30,62 @@ interface Props<T> extends InputProps<T> {
   fromBoolean?: (s: boolean | undefined) => any;
 }
 
-const defaultToBoolean = (f?: any): boolean | undefined => f || ''
-const defaultFromBoolean = (v: boolean | undefined): any => v as any
-
+const defaultToBoolean = (f?: any): boolean | undefined => f || "";
+const defaultFromBoolean = (v: boolean | undefined): any => v as any;
 
-export function InputBoolean<T>({ name, readonly, placeholder, tooltip, label, 
help, threeState, expand, fromBoolean = defaultFromBoolean, toBoolean = 
defaultToBoolean }: Props<keyof T>): VNode {
+export function InputBoolean<T>({
+  name,
+  readonly,
+  placeholder,
+  tooltip,
+  label,
+  help,
+  threeState,
+  expand,
+  fromBoolean = defaultFromBoolean,
+  toBoolean = defaultToBoolean,
+}: Props<keyof T>): VNode {
   const { error, value, onChange } = useField<T>(name);
 
   const onCheckboxClick = (): void => {
-    const c = toBoolean(value)
-    if (c === false && threeState) return onChange(undefined as any)
-    return onChange(fromBoolean(!c))
-  }
+    const c = toBoolean(value);
+    if (c === false && threeState) return onChange(undefined as any);
+    return onChange(fromBoolean(!c));
+  };
 
-  return <div class="field is-horizontal">
-    <div class="field-label is-normal">
-      <label class="label">
-        {label}
-        {tooltip && <span class="icon has-tooltip-right" 
data-tooltip={tooltip}>
-          <i class="mdi mdi-information" />
-        </span>}
-      </label>
-    </div>
-    <div class="field-body is-flex-grow-3">
-      <div class="field">
-        <p class={expand ? "control is-expanded" : "control"}>
-          <label class="b-checkbox checkbox">
-            <input type="checkbox" class={toBoolean(value) === undefined ? 
"is-indeterminate" : ""}
-              checked={toBoolean(value)}
-              placeholder={placeholder} readonly={readonly}
-              name={String(name)} disabled={readonly}
-              onChange={onCheckboxClick} />
-            <span class="check" />
-          </label>
-          {help}
-        </p>
-        {error && <p class="help is-danger">{error}</p>}
+  return (
+    <div class="field is-horizontal">
+      <div class="field-label is-normal">
+        <label class="label">
+          {label}
+          {tooltip && (
+            <span class="icon has-tooltip-right" data-tooltip={tooltip}>
+              <i class="mdi mdi-information" />
+            </span>
+          )}
+        </label>
+      </div>
+      <div class="field-body is-flex-grow-3">
+        <div class="field">
+          <p class={expand ? "control is-expanded" : "control"}>
+            <label class="b-checkbox checkbox">
+              <input
+                type="checkbox"
+                class={toBoolean(value) === undefined ? "is-indeterminate" : 
""}
+                checked={toBoolean(value)}
+                placeholder={placeholder}
+                readonly={readonly}
+                name={String(name)}
+                disabled={readonly}
+                onChange={onCheckboxClick}
+              />
+              <span class="check" />
+            </label>
+            {help}
+          </p>
+          {error && <p class="help is-danger">{error}</p>}
+        </div>
       </div>
     </div>
-  </div>;
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/components/form/InputCurrency.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputCurrency.tsx
index 6191d7ba5..57a5163b7 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputCurrency.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputCurrency.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { ComponentChildren, h } from "preact";
 import { useConfigContext } from "../../context/config.js";
 import { Amount } from "../../declaration.js";
@@ -31,17 +31,36 @@ export interface Props<T> extends InputProps<T> {
   side?: ComponentChildren;
 }
 
-export function InputCurrency<T>({ name, readonly, label, placeholder, help, 
tooltip, expand, addonAfter, children, side }: Props<keyof T>) {
-  const config = useConfigContext()
-  return <InputWithAddon<T> name={name} readonly={readonly} 
addonBefore={config.currency}
-    side={side}
-    label={label} placeholder={placeholder} help={help} tooltip={tooltip}
-    addonAfter={addonAfter}
-    inputType='number' expand={expand}
-    toStr={(v?: Amount) => v?.split(':')[1] || ''}
-    fromStr={(v: string) => !v ? '' : `${config.currency}:${v}`}
-    inputExtra={{ min: 0 }}
-    children={children}
-  />
+export function InputCurrency<T>({
+  name,
+  readonly,
+  label,
+  placeholder,
+  help,
+  tooltip,
+  expand,
+  addonAfter,
+  children,
+  side,
+}: Props<keyof T>) {
+  const config = useConfigContext();
+  return (
+    <InputWithAddon<T>
+      name={name}
+      readonly={readonly}
+      addonBefore={config.currency}
+      side={side}
+      label={label}
+      placeholder={placeholder}
+      help={help}
+      tooltip={tooltip}
+      addonAfter={addonAfter}
+      inputType="number"
+      expand={expand}
+      toStr={(v?: Amount) => v?.split(":")[1] || ""}
+      fromStr={(v: string) => (!v ? "" : `${config.currency}:${v}`)}
+      inputExtra={{ min: 0 }}
+      children={children}
+    />
+  );
 }
-
diff --git 
a/packages/merchant-backoffice-ui/src/components/form/InputDuration.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputDuration.tsx
index dd21a4708..658cc4db7 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputDuration.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputDuration.tsx
@@ -81,7 +81,7 @@ export function InputDuration<T>({
             era: () => "e",
           },
         },
-      }
+      },
     );
   }
 
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputGroup.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputGroup.tsx
index 26d0292d6..b5e0bd52b 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputGroup.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputGroup.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { ComponentChildren, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { useGroupField } from "./useGroupField.js";
@@ -32,35 +32,55 @@ export interface Props<T> {
   initialActive?: boolean;
 }
 
-export function InputGroup<T>({ name, label, children, tooltip, alternative, 
fixed, initialActive }: Props<keyof T>): VNode {
+export function InputGroup<T>({
+  name,
+  label,
+  children,
+  tooltip,
+  alternative,
+  fixed,
+  initialActive,
+}: Props<keyof T>): VNode {
   const [active, setActive] = useState(initialActive || fixed);
   const group = useGroupField<T>(name);
 
-  return <div class="card">
-    <header class="card-header">
-      <p class="card-header-title">
-        {label}
-        {tooltip && <span class="icon has-tooltip-right" 
data-tooltip={tooltip}>
-          <i class="mdi mdi-information" />
-        </span>}
-        {group?.hasError && <span class="icon has-text-danger" 
data-tooltip={tooltip}>
-          <i class="mdi mdi-alert" />
-        </span>}
-      </p>
-      { !fixed && <button class="card-header-icon" aria-label="more options" 
onClick={(): void => setActive(!active)}>
-        <span class="icon">
-          {active ?
-            <i class="mdi mdi-arrow-up" /> :
-            <i class="mdi mdi-arrow-down" />}
-        </span>
-      </button> }
-    </header>
-    {active ? <div class="card-content">
-        {children}
-    </div> : (
-      alternative ? <div class="card-content">
-          {alternative}
-      </div> : undefined
-    )}
-  </div>;
+  return (
+    <div class="card">
+      <header class="card-header">
+        <p class="card-header-title">
+          {label}
+          {tooltip && (
+            <span class="icon has-tooltip-right" data-tooltip={tooltip}>
+              <i class="mdi mdi-information" />
+            </span>
+          )}
+          {group?.hasError && (
+            <span class="icon has-text-danger" data-tooltip={tooltip}>
+              <i class="mdi mdi-alert" />
+            </span>
+          )}
+        </p>
+        {!fixed && (
+          <button
+            class="card-header-icon"
+            aria-label="more options"
+            onClick={(): void => setActive(!active)}
+          >
+            <span class="icon">
+              {active ? (
+                <i class="mdi mdi-arrow-up" />
+              ) : (
+                <i class="mdi mdi-arrow-down" />
+              )}
+            </span>
+          </button>
+        )}
+      </header>
+      {active ? (
+        <div class="card-content">{children}</div>
+      ) : alternative ? (
+        <div class="card-content">{alternative}</div>
+      ) : undefined}
+    </div>
+  );
 }
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputImage.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputImage.tsx
index 51ac23ca1..d5b2aadb6 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputImage.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputImage.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { ComponentChildren, h, VNode } from "preact";
 import { useRef, useState } from "preact/hooks";
 import { Translate } from "../../i18n/index.js";
@@ -30,65 +30,93 @@ export interface Props<T> extends InputProps<T> {
   children?: ComponentChildren;
 }
 
-export function InputImage<T>({ name, readonly, placeholder, tooltip, label, 
help, children, expand }: Props<keyof T>): VNode {
+export function InputImage<T>({
+  name,
+  readonly,
+  placeholder,
+  tooltip,
+  label,
+  help,
+  children,
+  expand,
+}: Props<keyof T>): VNode {
   const { error, value, onChange } = useField<T>(name);
 
-  const image = useRef<HTMLInputElement>(null)
+  const image = useRef<HTMLInputElement>(null);
 
-  const [sizeError, setSizeError] = useState(false)
+  const [sizeError, setSizeError] = useState(false);
 
-  return <div class="field is-horizontal">
-    <div class="field-label is-normal">
-      <label class="label">
-        {label}
-        {tooltip && <span class="icon has-tooltip-right" 
data-tooltip={tooltip}>
-          <i class="mdi mdi-information" />
-        </span>}
-      </label>
-    </div>
-    <div class="field-body is-flex-grow-3">
-      <div class="field">
-        <p class={expand ? "control is-expanded" : "control"}>
-          {value &&
-            <img src={value} style={{ width: 200, height: 200 }} onClick={() 
=> image.current?.click()} />
-          }
-          <input
-            ref={image} style={{ display: 'none' }}
-            type="file" name={String(name)}
-            placeholder={placeholder} readonly={readonly}
-            onChange={e => {
-              const f: FileList | null = e.currentTarget.files
-              if (!f || f.length != 1) {
-                return onChange(undefined!)
-              }
-              if (f[0].size > MAX_IMAGE_UPLOAD_SIZE) {
-                setSizeError(true)
-                return onChange(undefined!)
-              }
-              setSizeError(false)
-              return f[0].arrayBuffer().then(b => {
-                const b64 = btoa(
-                  new Uint8Array(b)
-                    .reduce((data, byte) => data + String.fromCharCode(byte), 
'')
-                )
-                return onChange(`data:${f[0].type};base64,${b64}` as any)
-              })
-            }} />
-          {help}
-          {children}
-        </p>
-        {error && <p class="help is-danger">{error}</p>}
-        {sizeError && <p class="help is-danger">
-          <Translate>Image should be smaller than 1 MB</Translate>
-        </p>}
-        {!value &&
-          <button class="button" onClick={() => image.current?.click()} 
><Translate>Add</Translate></button>
-        }
-        {value &&
-          <button class="button" onClick={() => onChange(undefined!)} 
><Translate>Remove</Translate></button>
-        }
+  return (
+    <div class="field is-horizontal">
+      <div class="field-label is-normal">
+        <label class="label">
+          {label}
+          {tooltip && (
+            <span class="icon has-tooltip-right" data-tooltip={tooltip}>
+              <i class="mdi mdi-information" />
+            </span>
+          )}
+        </label>
+      </div>
+      <div class="field-body is-flex-grow-3">
+        <div class="field">
+          <p class={expand ? "control is-expanded" : "control"}>
+            {value && (
+              <img
+                src={value}
+                style={{ width: 200, height: 200 }}
+                onClick={() => image.current?.click()}
+              />
+            )}
+            <input
+              ref={image}
+              style={{ display: "none" }}
+              type="file"
+              name={String(name)}
+              placeholder={placeholder}
+              readonly={readonly}
+              onChange={(e) => {
+                const f: FileList | null = e.currentTarget.files;
+                if (!f || f.length != 1) {
+                  return onChange(undefined!);
+                }
+                if (f[0].size > MAX_IMAGE_UPLOAD_SIZE) {
+                  setSizeError(true);
+                  return onChange(undefined!);
+                }
+                setSizeError(false);
+                return f[0].arrayBuffer().then((b) => {
+                  const b64 = btoa(
+                    new Uint8Array(b).reduce(
+                      (data, byte) => data + String.fromCharCode(byte),
+                      "",
+                    ),
+                  );
+                  return onChange(`data:${f[0].type};base64,${b64}` as any);
+                });
+              }}
+            />
+            {help}
+            {children}
+          </p>
+          {error && <p class="help is-danger">{error}</p>}
+          {sizeError && (
+            <p class="help is-danger">
+              <Translate>Image should be smaller than 1 MB</Translate>
+            </p>
+          )}
+          {!value && (
+            <button class="button" onClick={() => image.current?.click()}>
+              <Translate>Add</Translate>
+            </button>
+          )}
+          {value && (
+            <button class="button" onClick={() => onChange(undefined!)}>
+              <Translate>Remove</Translate>
+            </button>
+          )}
+        </div>
       </div>
     </div>
-  </div>
+  );
 }
-
diff --git 
a/packages/merchant-backoffice-ui/src/components/form/InputLocation.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputLocation.tsx
index c97fe928b..613b2f1e6 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputLocation.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputLocation.tsx
@@ -15,29 +15,36 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { Fragment, h } from "preact";
 import { useTranslator } from "../../i18n/index.js";
 import { Input } from "./Input.js";
 
-export function InputLocation({name}:{name:string}) {
-  const i18n = useTranslator()
-  return <>
-    <Input name={`${name}.country`} label={i18n`Country`} />
-    <Input name={`${name}.address_lines`} inputType="multiline"
-      label={i18n`Address`}
-      toStr={(v: string[] | undefined) => !v ? '' : v.join('\n')}
-      fromStr={(v: string) => v.split('\n')}
-    />
-    <Input name={`${name}.building_number`} label={i18n`Building number`} />
-    <Input name={`${name}.building_name`} label={i18n`Building name`} />
-    <Input name={`${name}.street`} label={i18n`Street`} />
-    <Input name={`${name}.post_code`} label={i18n`Post code`} />
-    <Input name={`${name}.town_location`} label={i18n`Town location`} />
-    <Input name={`${name}.town`} label={i18n`Town`} />
-    <Input name={`${name}.district`} label={i18n`District`} />
-    <Input name={`${name}.country_subdivision`} label={i18n`Country 
subdivision`} />
-  </>
-}
\ No newline at end of file
+export function InputLocation({ name }: { name: string }) {
+  const i18n = useTranslator();
+  return (
+    <>
+      <Input name={`${name}.country`} label={i18n`Country`} />
+      <Input
+        name={`${name}.address_lines`}
+        inputType="multiline"
+        label={i18n`Address`}
+        toStr={(v: string[] | undefined) => (!v ? "" : v.join("\n"))}
+        fromStr={(v: string) => v.split("\n")}
+      />
+      <Input name={`${name}.building_number`} label={i18n`Building number`} />
+      <Input name={`${name}.building_name`} label={i18n`Building name`} />
+      <Input name={`${name}.street`} label={i18n`Street`} />
+      <Input name={`${name}.post_code`} label={i18n`Post code`} />
+      <Input name={`${name}.town_location`} label={i18n`Town location`} />
+      <Input name={`${name}.town`} label={i18n`Town`} />
+      <Input name={`${name}.district`} label={i18n`District`} />
+      <Input
+        name={`${name}.country_subdivision`}
+        label={i18n`Country subdivision`}
+      />
+    </>
+  );
+}
diff --git 
a/packages/merchant-backoffice-ui/src/components/form/InputNumber.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputNumber.tsx
index 9f0b28ff2..3b5df1474 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputNumber.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputNumber.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { ComponentChildren, h } from "preact";
 import { InputWithAddon } from "./InputWithAddon.js";
 import { InputProps } from "./useField.js";
@@ -29,14 +29,32 @@ export interface Props<T> extends InputProps<T> {
   children?: ComponentChildren;
 }
 
-export function InputNumber<T>({ name, readonly, placeholder, tooltip, label, 
help, expand, children, side }: Props<keyof T>) {
-  return <InputWithAddon<T> name={name} readonly={readonly} 
-    fromStr={(v) => !v ? undefined : parseInt(v, 10) } toStr={(v) => `${v}`}
-    inputType='number' expand={expand}
-    label={label} placeholder={placeholder} help={help} tooltip={tooltip}
-    inputExtra={{ min: 0 }}
-    children={children}
-    side={side}
-  />
+export function InputNumber<T>({
+  name,
+  readonly,
+  placeholder,
+  tooltip,
+  label,
+  help,
+  expand,
+  children,
+  side,
+}: Props<keyof T>) {
+  return (
+    <InputWithAddon<T>
+      name={name}
+      readonly={readonly}
+      fromStr={(v) => (!v ? undefined : parseInt(v, 10))}
+      toStr={(v) => `${v}`}
+      inputType="number"
+      expand={expand}
+      label={label}
+      placeholder={placeholder}
+      help={help}
+      tooltip={tooltip}
+      inputExtra={{ min: 0 }}
+      children={children}
+      side={side}
+    />
+  );
 }
-
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputPayto.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputPayto.tsx
index 021616e3f..6e88e8f2c 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputPayto.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputPayto.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { h, VNode } from "preact";
 import { InputArray } from "./InputArray.js";
 import { PAYTO_REGEX } from "../../utils/constants.js";
@@ -25,15 +25,28 @@ import { InputProps } from "./useField.js";
 
 export type Props<T> = InputProps<T>;
 
-const PAYTO_START_REGEX = /^payto:\/\//
-
-export function InputPayto<T>({ name, readonly, placeholder, tooltip, label, 
help }: Props<keyof T>): VNode {
-  return <InputArray<T> name={name} readonly={readonly} 
-    addonBefore="payto://" 
-    label={label} placeholder={placeholder} help={help} tooltip={tooltip}
-    isValid={(v) => v && PAYTO_REGEX.test(v) }
-    toStr={(v?: string) => !v ? '': v.replace(PAYTO_START_REGEX, '')}
-    fromStr={(v: string) => `payto://${v}` }
-  />
+const PAYTO_START_REGEX = /^payto:\/\//;
+
+export function InputPayto<T>({
+  name,
+  readonly,
+  placeholder,
+  tooltip,
+  label,
+  help,
+}: Props<keyof T>): VNode {
+  return (
+    <InputArray<T>
+      name={name}
+      readonly={readonly}
+      addonBefore="payto://"
+      label={label}
+      placeholder={placeholder}
+      help={help}
+      tooltip={tooltip}
+      isValid={(v) => v && PAYTO_REGEX.test(v)}
+      toStr={(v?: string) => (!v ? "" : v.replace(PAYTO_START_REGEX, ""))}
+      fromStr={(v: string) => `payto://${v}`}
+    />
+  );
 }
-
diff --git 
a/packages/merchant-backoffice-ui/src/components/form/InputSearchProduct.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputSearchProduct.tsx
index 0c91cc5a1..fceee9d56 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputSearchProduct.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputSearchProduct.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import emptyImage from "../../assets/empty.png";
@@ -26,74 +26,97 @@ import { Translate, useTranslator } from 
"../../i18n/index.js";
 import { FormErrors, FormProvider } from "./FormProvider.js";
 import { InputWithAddon } from "./InputWithAddon.js";
 
-type Entity = MerchantBackend.Products.ProductDetail & WithId
+type Entity = MerchantBackend.Products.ProductDetail & WithId;
 
 export interface Props {
   selected?: Entity;
   onChange: (p?: Entity) => void;
-  products: (MerchantBackend.Products.ProductDetail & WithId)[],
+  products: (MerchantBackend.Products.ProductDetail & WithId)[];
 }
 
 interface ProductSearch {
   name: string;
 }
 
-export function InputSearchProduct({ selected, onChange, products }: Props): 
VNode {
-  const [prodForm, setProdName] = useState<Partial<ProductSearch>>({ name: '' 
})
+export function InputSearchProduct({
+  selected,
+  onChange,
+  products,
+}: Props): VNode {
+  const [prodForm, setProdName] = useState<Partial<ProductSearch>>({
+    name: "",
+  });
 
   const errors: FormErrors<ProductSearch> = {
-    name: undefined
-  }
-  const i18n = useTranslator()
-
+    name: undefined,
+  };
+  const i18n = useTranslator();
 
   if (selected) {
-    return <article class="media">
-      <figure class="media-left">
-        <p class="image is-128x128">
-          <img src={selected.image ? selected.image : emptyImage} />
-        </p>
-      </figure>
-      <div class="media-content">
-        <div class="content">
-          <p class="media-meta"><Translate>Product id</Translate>: 
<b>{selected.id}</b></p>
-          <p><Translate>Description</Translate>: {selected.description}</p>
-          <div class="buttons is-right mt-5">
-            <button class="button is-info" onClick={() => 
onChange(undefined)}>clear</button>
+    return (
+      <article class="media">
+        <figure class="media-left">
+          <p class="image is-128x128">
+            <img src={selected.image ? selected.image : emptyImage} />
+          </p>
+        </figure>
+        <div class="media-content">
+          <div class="content">
+            <p class="media-meta">
+              <Translate>Product id</Translate>: <b>{selected.id}</b>
+            </p>
+            <p>
+              <Translate>Description</Translate>: {selected.description}
+            </p>
+            <div class="buttons is-right mt-5">
+              <button
+                class="button is-info"
+                onClick={() => onChange(undefined)}
+              >
+                clear
+              </button>
+            </div>
           </div>
         </div>
-      </div>
-    </article>
+      </article>
+    );
   }
 
-  return <FormProvider<ProductSearch> errors={errors} object={prodForm} 
valueHandler={setProdName} >
-
-    <InputWithAddon<ProductSearch>
-      name="name"
-      label={i18n`Product`}
-      tooltip={i18n`search products by it's description or id`}
-      addonAfter={<span class="icon" ><i class="mdi mdi-magnify" /></span>}
+  return (
+    <FormProvider<ProductSearch>
+      errors={errors}
+      object={prodForm}
+      valueHandler={setProdName}
     >
-      <div>
-        <ProductList
-          name={prodForm.name}
-          list={products}
-          onSelect={(p) => {
-            setProdName({ name: '' })
-            onChange(p)
-          }}
-        />
-      </div>
-    </InputWithAddon>
-
-  </FormProvider>
-
+      <InputWithAddon<ProductSearch>
+        name="name"
+        label={i18n`Product`}
+        tooltip={i18n`search products by it's description or id`}
+        addonAfter={
+          <span class="icon">
+            <i class="mdi mdi-magnify" />
+          </span>
+        }
+      >
+        <div>
+          <ProductList
+            name={prodForm.name}
+            list={products}
+            onSelect={(p) => {
+              setProdName({ name: "" });
+              onChange(p);
+            }}
+          />
+        </div>
+      </InputWithAddon>
+    </FormProvider>
+  );
 }
 
 interface ProductListProps {
   name?: string;
   onSelect: (p: MerchantBackend.Products.ProductDetail & WithId) => void;
-  list: (MerchantBackend.Products.ProductDetail & WithId)[]
+  list: (MerchantBackend.Products.ProductDetail & WithId)[];
 }
 
 function ProductList({ name, onSelect, list }: ProductListProps) {
@@ -102,37 +125,61 @@ function ProductList({ name, onSelect, list }: 
ProductListProps) {
       this BR is added to occupy the space that will be added when the 
       dropdown appears
     */
-    return <div ><br /></div>
+    return (
+      <div>
+        <br />
+      </div>
+    );
   }
-  const filtered = list.filter(p => p.id.includes(name) || 
p.description.includes(name))
-
-  return <div class="dropdown is-active">
-    <div class="dropdown-menu" id="dropdown-menu" role="menu" style={{ 
minWidth: '20rem' }}>
-      <div class="dropdown-content">
-        {!filtered.length ?
-          <div class="dropdown-item" >
-            <Translate>no products found with that description</Translate>
-          </div> :
-          filtered.map(p => (
-            <div key={p.id} class="dropdown-item" onClick={() => onSelect(p)} 
style={{ cursor: 'pointer' }}>
-              <article class="media">
-                <div class="media-left">
-                  <div class="image" style={{ minWidth: 64 }}><img 
src={p.image ? p.image : emptyImage} style={{ width: 64, height: 64 }} /></div>
-                </div>
-                <div class="media-content">
-                  <div class="content">
-                    <p>
-                      <strong>{p.id}</strong> <small>{p.price}</small>
-                      <br />
-                      {p.description}
-                    </p>
-                  </div>
-                </div>
-              </article>
+  const filtered = list.filter(
+    (p) => p.id.includes(name) || p.description.includes(name),
+  );
+
+  return (
+    <div class="dropdown is-active">
+      <div
+        class="dropdown-menu"
+        id="dropdown-menu"
+        role="menu"
+        style={{ minWidth: "20rem" }}
+      >
+        <div class="dropdown-content">
+          {!filtered.length ? (
+            <div class="dropdown-item">
+              <Translate>no products found with that description</Translate>
             </div>
-          ))
-        }
+          ) : (
+            filtered.map((p) => (
+              <div
+                key={p.id}
+                class="dropdown-item"
+                onClick={() => onSelect(p)}
+                style={{ cursor: "pointer" }}
+              >
+                <article class="media">
+                  <div class="media-left">
+                    <div class="image" style={{ minWidth: 64 }}>
+                      <img
+                        src={p.image ? p.image : emptyImage}
+                        style={{ width: 64, height: 64 }}
+                      />
+                    </div>
+                  </div>
+                  <div class="media-content">
+                    <div class="content">
+                      <p>
+                        <strong>{p.id}</strong> <small>{p.price}</small>
+                        <br />
+                        {p.description}
+                      </p>
+                    </div>
+                  </div>
+                </article>
+              </div>
+            ))
+          )}
+        </div>
       </div>
     </div>
-  </div>
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/components/form/InputSecured.stories.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputSecured.stories.tsx
index 061525d9e..12ce6c6aa 100644
--- 
a/packages/merchant-backoffice-ui/src/components/form/InputSecured.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/components/form/InputSecured.stories.tsx
@@ -15,41 +15,47 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode } from 'preact';
-import { useState } from 'preact/hooks';
+import { h, VNode } from "preact";
+import { useState } from "preact/hooks";
 import { FormProvider } from "./FormProvider.js";
-import { InputSecured } from './InputSecured.js';
+import { InputSecured } from "./InputSecured.js";
 
 export default {
-  title: 'Components/Form/InputSecured',
+  title: "Components/Form/InputSecured",
   component: InputSecured,
 };
 
-type T = { auth_token: string | null }
+type T = { auth_token: string | null };
 
 export const InitialValueEmpty = (): VNode => {
-  const [state, setState] = useState<Partial<T>>({ auth_token: '' })
-  return <FormProvider<T> object={state} errors={{}} valueHandler={setState}>
-    Initial value: ''
-    <InputSecured<T> name="auth_token" label="Access token" />
-  </FormProvider>
-}
+  const [state, setState] = useState<Partial<T>>({ auth_token: "" });
+  return (
+    <FormProvider<T> object={state} errors={{}} valueHandler={setState}>
+      Initial value: ''
+      <InputSecured<T> name="auth_token" label="Access token" />
+    </FormProvider>
+  );
+};
 
 export const InitialValueToken = (): VNode => {
-  const [state, setState] = useState<Partial<T>>({ auth_token: 'token' })
-  return <FormProvider<T> object={state} errors={{}} valueHandler={setState}>
-    <InputSecured<T> name="auth_token" label="Access token" />
-  </FormProvider>
-}
+  const [state, setState] = useState<Partial<T>>({ auth_token: "token" });
+  return (
+    <FormProvider<T> object={state} errors={{}} valueHandler={setState}>
+      <InputSecured<T> name="auth_token" label="Access token" />
+    </FormProvider>
+  );
+};
 
 export const InitialValueNull = (): VNode => {
-  const [state, setState] = useState<Partial<T>>({ auth_token: null })
-  return <FormProvider<T> object={state} errors={{}} valueHandler={setState}>
-    Initial value: ''
-    <InputSecured<T> name="auth_token" label="Access token" />
-  </FormProvider>
-}
+  const [state, setState] = useState<Partial<T>>({ auth_token: null });
+  return (
+    <FormProvider<T> object={state} errors={{}} valueHandler={setState}>
+      Initial value: ''
+      <InputSecured<T> name="auth_token" label="Access token" />
+    </FormProvider>
+  );
+};
diff --git 
a/packages/merchant-backoffice-ui/src/components/form/InputSecured.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputSecured.tsx
index b0168e505..799978683 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputSecured.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputSecured.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { Translate, useTranslator } from "../../i18n/index.js";
@@ -26,94 +26,160 @@ import { InputProps, useField } from "./useField.js";
 export type Props<T> = InputProps<T>;
 
 const TokenStatus = ({ prev, post }: any) => {
-  if ((prev === undefined || prev === null) && (post === undefined || post === 
null))
-    return null
-  return (prev === post) ? null : (
-    post === null ?
-      <span class="tag is-danger is-align-self-center 
ml-2"><Translate>Deleting</Translate></span> :
-      <span class="tag is-warning is-align-self-center 
ml-2"><Translate>Changing</Translate></span>
+  if (
+    (prev === undefined || prev === null) &&
+    (post === undefined || post === null)
   )
-}
+    return null;
+  return prev === post ? null : post === null ? (
+    <span class="tag is-danger is-align-self-center ml-2">
+      <Translate>Deleting</Translate>
+    </span>
+  ) : (
+    <span class="tag is-warning is-align-self-center ml-2">
+      <Translate>Changing</Translate>
+    </span>
+  );
+};
 
-export function InputSecured<T>({ name, readonly, placeholder, tooltip, label, 
help }: Props<keyof T>): VNode {
+export function InputSecured<T>({
+  name,
+  readonly,
+  placeholder,
+  tooltip,
+  label,
+  help,
+}: Props<keyof T>): VNode {
   const { error, value, initial, onChange, toStr, fromStr } = 
useField<T>(name);
 
   const [active, setActive] = useState(false);
-  const [newValue, setNuewValue] = useState("")
+  const [newValue, setNuewValue] = useState("");
 
-  const i18n = useTranslator()
+  const i18n = useTranslator();
 
-  return <Fragment>
-    <div class="field is-horizontal">
-      <div class="field-label is-normal">
-        <label class="label">
-          {label}
-          {tooltip && <span class="icon has-tooltip-right" 
data-tooltip={tooltip}>
-            <i class="mdi mdi-information" />
-          </span>}
-        </label>
-      </div>
-      <div class="field-body is-flex-grow-3">
-        {!active ?
-          <Fragment>
-            <div class="field has-addons">
-              <button class="button" 
-                onClick={(): void => { setActive(!active); }} >
-                <div class="icon is-left"><i class="mdi mdi-lock-reset" 
/></div>
-                <span><Translate>Manage access token</Translate></span>
-              </button>
-              <TokenStatus prev={initial} post={value} />
-            </div>
-          </Fragment> :
-          <Fragment>
-            <div class="field has-addons">
-              <div class="control">
-                <a class="button is-static">secret-token:</a>
-              </div>
-              <div class="control is-expanded">
-                <input class="input" type="text"
-                  placeholder={placeholder} readonly={readonly || !active}
-                  disabled={readonly || !active}
-                  name={String(name)} value={newValue}
-                  onInput={(e): void => {
-                    setNuewValue(e.currentTarget.value)
-                  }} />
-                {help}
-              </div>
-              <div class="control">
-                <button class="button is-info" disabled={fromStr(newValue) === 
value} onClick={(): void => { onChange(fromStr(newValue)); setActive(!active); 
setNuewValue(""); }} >
-                  <div class="icon is-left"><i class="mdi mdi-lock-outline" 
/></div>
-                  <span><Translate>Update</Translate></span>
-                </button>
-              </div>
-            </div>
-          </Fragment>
-        }
-        {error ? <p class="help is-danger">{error}</p> : null}
-      </div>
-    </div>
-    {active &&
+  return (
+    <Fragment>
       <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label class="label">
+            {label}
+            {tooltip && (
+              <span class="icon has-tooltip-right" data-tooltip={tooltip}>
+                <i class="mdi mdi-information" />
+              </span>
+            )}
+          </label>
+        </div>
         <div class="field-body is-flex-grow-3">
-          <div class="level" style={{ width: '100%' }}>
-            <div class="level-right is-flex-grow-1">
-              <div class="level-item">
-                <button class="button is-danger" disabled={null === value || 
undefined === value} onClick={(): void => { onChange(null!); 
setActive(!active); setNuewValue(""); }} >
-                  <div class="icon is-left"><i class="mdi 
mdi-lock-open-variant" /></div>
-                  <span><Translate>Remove</Translate></span>
+          {!active ? (
+            <Fragment>
+              <div class="field has-addons">
+                <button
+                  class="button"
+                  onClick={(): void => {
+                    setActive(!active);
+                  }}
+                >
+                  <div class="icon is-left">
+                    <i class="mdi mdi-lock-reset" />
+                  </div>
+                  <span>
+                    <Translate>Manage access token</Translate>
+                  </span>
                 </button>
+                <TokenStatus prev={initial} post={value} />
               </div>
-              <div class="level-item">
-                <button class="button " onClick={(): void => { 
onChange(initial!); setActive(!active); setNuewValue(""); }} >
-                  <div class="icon is-left"><i class="mdi 
mdi-lock-open-variant" /></div>
-                  <span><Translate>Cancel</Translate></span>
-                </button>
+            </Fragment>
+          ) : (
+            <Fragment>
+              <div class="field has-addons">
+                <div class="control">
+                  <a class="button is-static">secret-token:</a>
+                </div>
+                <div class="control is-expanded">
+                  <input
+                    class="input"
+                    type="text"
+                    placeholder={placeholder}
+                    readonly={readonly || !active}
+                    disabled={readonly || !active}
+                    name={String(name)}
+                    value={newValue}
+                    onInput={(e): void => {
+                      setNuewValue(e.currentTarget.value);
+                    }}
+                  />
+                  {help}
+                </div>
+                <div class="control">
+                  <button
+                    class="button is-info"
+                    disabled={fromStr(newValue) === value}
+                    onClick={(): void => {
+                      onChange(fromStr(newValue));
+                      setActive(!active);
+                      setNuewValue("");
+                    }}
+                  >
+                    <div class="icon is-left">
+                      <i class="mdi mdi-lock-outline" />
+                    </div>
+                    <span>
+                      <Translate>Update</Translate>
+                    </span>
+                  </button>
+                </div>
+              </div>
+            </Fragment>
+          )}
+          {error ? <p class="help is-danger">{error}</p> : null}
+        </div>
+      </div>
+      {active && (
+        <div class="field is-horizontal">
+          <div class="field-body is-flex-grow-3">
+            <div class="level" style={{ width: "100%" }}>
+              <div class="level-right is-flex-grow-1">
+                <div class="level-item">
+                  <button
+                    class="button is-danger"
+                    disabled={null === value || undefined === value}
+                    onClick={(): void => {
+                      onChange(null!);
+                      setActive(!active);
+                      setNuewValue("");
+                    }}
+                  >
+                    <div class="icon is-left">
+                      <i class="mdi mdi-lock-open-variant" />
+                    </div>
+                    <span>
+                      <Translate>Remove</Translate>
+                    </span>
+                  </button>
+                </div>
+                <div class="level-item">
+                  <button
+                    class="button "
+                    onClick={(): void => {
+                      onChange(initial!);
+                      setActive(!active);
+                      setNuewValue("");
+                    }}
+                  >
+                    <div class="icon is-left">
+                      <i class="mdi mdi-lock-open-variant" />
+                    </div>
+                    <span>
+                      <Translate>Cancel</Translate>
+                    </span>
+                  </button>
+                </div>
               </div>
             </div>
-
           </div>
         </div>
-      </div>
-    }
-  </Fragment >;
+      )}
+    </Fragment>
+  );
 }
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputStock.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputStock.tsx
index 74806734c..57aa5968d 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputStock.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputStock.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { Fragment, h } from "preact";
 import { MerchantBackend, Timestamp } from "../../declaration.js";
 import { InputProps, useField } from "./useField.js";
@@ -34,8 +34,7 @@ export interface Props<T> extends InputProps<T> {
   alreadyExist?: boolean;
 }
 
-
-type Entity = Stock
+type Entity = Stock;
 
 export interface Stock {
   current: number;
@@ -50,66 +49,96 @@ interface StockDelta {
   lost: number;
 }
 
-
-export function InputStock<T>({ name, tooltip, label, alreadyExist }: 
Props<keyof T>) {
+export function InputStock<T>({
+  name,
+  tooltip,
+  label,
+  alreadyExist,
+}: Props<keyof T>) {
   const { error, value, onChange } = useField<T>(name);
 
-  const [errors, setErrors] = useState<FormErrors<Entity>>({})
-
-  const [formValue, valueHandler] = useState<Partial<Entity>>(value)
-  const [addedStock, setAddedStock] = useState<StockDelta>({ incoming: 0, 
lost: 0 })
-  const i18n = useTranslator()
+  const [errors, setErrors] = useState<FormErrors<Entity>>({});
 
+  const [formValue, valueHandler] = useState<Partial<Entity>>(value);
+  const [addedStock, setAddedStock] = useState<StockDelta>({
+    incoming: 0,
+    lost: 0,
+  });
+  const i18n = useTranslator();
 
   useLayoutEffect(() => {
     if (!formValue) {
-      onChange(undefined as any)
+      onChange(undefined as any);
     } else {
       onChange({
         ...formValue,
         current: (formValue?.current || 0) + addedStock.incoming,
-        lost: (formValue?.lost || 0) + addedStock.lost
-      } as any)
+        lost: (formValue?.lost || 0) + addedStock.lost,
+      } as any);
     }
-  }, [formValue, addedStock])
+  }, [formValue, addedStock]);
 
   if (!formValue) {
-    return <Fragment>
-      <div class="field is-horizontal">
-        <div class="field-label is-normal">
-          <label class="label">
-            {label}
-            {tooltip && <span class="icon has-tooltip-right" 
data-tooltip={tooltip}>
-              <i class="mdi mdi-information" />
-            </span>}
-          </label>
-        </div>
-        <div class="field-body is-flex-grow-3">
-          <div class="field has-addons">
-            {!alreadyExist ?
-              <button class="button" 
-                data-tooltip={i18n`click here to configure the stock of the 
product, leave it as is and the backend will not control stock`}
-                onClick={(): void => { valueHandler({ current: 0, lost: 0, 
sold: 0 } as Stock as any); }} >
-                <span><Translate>Manage stock</Translate></span>
-              </button> : <button class="button" 
-                data-tooltip={i18n`this product has been configured without 
stock control`}
-                disabled >
-                <span><Translate>Infinite</Translate></span>
-              </button>
-            }
+    return (
+      <Fragment>
+        <div class="field is-horizontal">
+          <div class="field-label is-normal">
+            <label class="label">
+              {label}
+              {tooltip && (
+                <span class="icon has-tooltip-right" data-tooltip={tooltip}>
+                  <i class="mdi mdi-information" />
+                </span>
+              )}
+            </label>
+          </div>
+          <div class="field-body is-flex-grow-3">
+            <div class="field has-addons">
+              {!alreadyExist ? (
+                <button
+                  class="button"
+                  data-tooltip={i18n`click here to configure the stock of the 
product, leave it as is and the backend will not control stock`}
+                  onClick={(): void => {
+                    valueHandler({
+                      current: 0,
+                      lost: 0,
+                      sold: 0,
+                    } as Stock as any);
+                  }}
+                >
+                  <span>
+                    <Translate>Manage stock</Translate>
+                  </span>
+                </button>
+              ) : (
+                <button
+                  class="button"
+                  data-tooltip={i18n`this product has been configured without 
stock control`}
+                  disabled
+                >
+                  <span>
+                    <Translate>Infinite</Translate>
+                  </span>
+                </button>
+              )}
+            </div>
           </div>
         </div>
-      </div>
-    </Fragment >
+      </Fragment>
+    );
   }
 
-  const currentStock = (formValue.current || 0) - (formValue.lost || 0) - 
(formValue.sold || 0)
+  const currentStock =
+    (formValue.current || 0) - (formValue.lost || 0) - (formValue.sold || 0);
 
   const stockAddedErrors: FormErrors<typeof addedStock> = {
-    lost: currentStock + addedStock.incoming < addedStock.lost ?
-      i18n`lost cannot be greater than current and incoming (max 
${currentStock + addedStock.incoming})`
-      : undefined
-  }
+    lost:
+      currentStock + addedStock.incoming < addedStock.lost
+        ? i18n`lost cannot be greater than current and incoming (max ${
+            currentStock + addedStock.incoming
+          })`
+        : undefined,
+  };
 
   // const stockUpdateDescription = stockAddedErrors.lost ? '' : (
   //   !!addedStock.incoming || !!addedStock.lost ?
@@ -117,26 +146,39 @@ export function InputStock<T>({ name, tooltip, label, 
alreadyExist }: Props<keyo
   //     i18n`current stock will stay at ${currentStock}`
   // )
 
-  return <Fragment>
-    <div class="card">
-      <header class="card-header">
-        <p class="card-header-title">
-          {label}
-          {tooltip && <span class="icon" data-tooltip={tooltip}>
-            <i class="mdi mdi-information" />
-          </span>}
-        </p>
-      </header>
-      <div class="card-content">
-        <FormProvider<Entity> name="stock" errors={errors} object={formValue} 
valueHandler={valueHandler}>
-          {alreadyExist ? <Fragment>
-
-            <FormProvider name="added" errors={stockAddedErrors} 
object={addedStock} valueHandler={setAddedStock as any}>
-              <InputNumber name="incoming" label={i18n`Incoming`} />
-              <InputNumber name="lost" label={i18n`Lost`} />
-            </FormProvider>
-
-            {/* <div class="field is-horizontal">
+  return (
+    <Fragment>
+      <div class="card">
+        <header class="card-header">
+          <p class="card-header-title">
+            {label}
+            {tooltip && (
+              <span class="icon" data-tooltip={tooltip}>
+                <i class="mdi mdi-information" />
+              </span>
+            )}
+          </p>
+        </header>
+        <div class="card-content">
+          <FormProvider<Entity>
+            name="stock"
+            errors={errors}
+            object={formValue}
+            valueHandler={valueHandler}
+          >
+            {alreadyExist ? (
+              <Fragment>
+                <FormProvider
+                  name="added"
+                  errors={stockAddedErrors}
+                  object={addedStock}
+                  valueHandler={setAddedStock as any}
+                >
+                  <InputNumber name="incoming" label={i18n`Incoming`} />
+                  <InputNumber name="lost" label={i18n`Lost`} />
+                </FormProvider>
+
+                {/* <div class="field is-horizontal">
               <div class="field-label is-normal" />
               <div class="field-body is-flex-grow-3">
                 <div class="field">
@@ -144,28 +186,40 @@ export function InputStock<T>({ name, tooltip, label, 
alreadyExist }: Props<keyo
                 </div>
               </div>
             </div> */}
-
-          </Fragment> : <InputNumber<Entity> name="current"
-            label={i18n`Current`}
-            side={
-              <button class="button is-danger" 
-                data-tooltip={i18n`remove stock control for this product`}
-                onClick={(): void => { valueHandler(undefined as any) }} >
-                <span><Translate>without stock</Translate></span>
-              </button>
-            }
-          />}
-
-          <InputDate<Entity> name="nextRestock" label={i18n`Next restock`} 
withTimestampSupport />
-
-          <InputGroup<Entity> name="address" label={i18n`Delivery address`}>
-            <InputLocation name="address" />
-          </InputGroup>
-        </FormProvider>
+              </Fragment>
+            ) : (
+              <InputNumber<Entity>
+                name="current"
+                label={i18n`Current`}
+                side={
+                  <button
+                    class="button is-danger"
+                    data-tooltip={i18n`remove stock control for this product`}
+                    onClick={(): void => {
+                      valueHandler(undefined as any);
+                    }}
+                  >
+                    <span>
+                      <Translate>without stock</Translate>
+                    </span>
+                  </button>
+                }
+              />
+            )}
+
+            <InputDate<Entity>
+              name="nextRestock"
+              label={i18n`Next restock`}
+              withTimestampSupport
+            />
+
+            <InputGroup<Entity> name="address" label={i18n`Delivery address`}>
+              <InputLocation name="address" />
+            </InputGroup>
+          </FormProvider>
+        </div>
       </div>
-    </div>
-  </Fragment>
+    </Fragment>
+  );
 }
-  // (
-
-
+// (
diff --git a/packages/merchant-backoffice-ui/src/components/form/InputTaxes.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputTaxes.tsx
index 84f9234e9..d95463790 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputTaxes.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputTaxes.tsx
@@ -15,12 +15,12 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { h, VNode } from "preact";
 import { useCallback, useState } from "preact/hooks";
-import * as yup from 'yup';
+import * as yup from "yup";
 import { MerchantBackend } from "../../declaration.js";
 import { Translate, useTranslator } from "../../i18n/index.js";
 import { TaxSchema as schema } from "../../schemas/index.js";
@@ -33,65 +33,114 @@ export interface Props<T> extends InputProps<T> {
   isValid?: (e: any) => boolean;
 }
 
-type Entity = MerchantBackend.Tax
-export function InputTaxes<T>({ name, readonly, label }: Props<keyof T>): 
VNode {
-  const { value: taxes, onChange, } = useField<T>(name);
+type Entity = MerchantBackend.Tax;
+export function InputTaxes<T>({
+  name,
+  readonly,
+  label,
+}: Props<keyof T>): VNode {
+  const { value: taxes, onChange } = useField<T>(name);
 
-  const [value, valueHandler] = useState<Partial<Entity>>({})
+  const [value, valueHandler] = useState<Partial<Entity>>({});
   // const [errors, setErrors] = useState<FormErrors<Entity>>({})
 
-  let errors: FormErrors<Entity> = {}
+  let errors: FormErrors<Entity> = {};
 
   try {
-    schema.validateSync(value, { abortEarly: false })
+    schema.validateSync(value, { abortEarly: false });
   } catch (err) {
     if (err instanceof yup.ValidationError) {
-      const yupErrors = err.inner as yup.ValidationError[]
-      errors = yupErrors.reduce((prev, cur) => !cur.path ? prev : ({ ...prev, 
[cur.path]: cur.message }), {})      
+      const yupErrors = err.inner as yup.ValidationError[];
+      errors = yupErrors.reduce(
+        (prev, cur) =>
+          !cur.path ? prev : { ...prev, [cur.path]: cur.message },
+        {},
+      );
     }
   }
-  const hasErrors = Object.keys(errors).some(k => (errors as any)[k] !== 
undefined)
+  const hasErrors = Object.keys(errors).some(
+    (k) => (errors as any)[k] !== undefined,
+  );
 
   const submit = useCallback((): void => {
-    onChange([value as any, ...taxes] as any)
-    valueHandler({})
-  }, [value])
+    onChange([value as any, ...taxes] as any);
+    valueHandler({});
+  }, [value]);
 
-  const i18n = useTranslator()
+  const i18n = useTranslator();
 
   //FIXME: translating plural singular
   return (
-    <InputGroup name="tax" label={label} alternative={taxes.length > 0 && 
<p>This product has {taxes.length} applicable taxes configured.</p>}>
-      <FormProvider<Entity> name="tax" errors={errors} object={value} 
valueHandler={valueHandler} >
-
+    <InputGroup
+      name="tax"
+      label={label}
+      alternative={
+        taxes.length > 0 && (
+          <p>This product has {taxes.length} applicable taxes configured.</p>
+        )
+      }
+    >
+      <FormProvider<Entity>
+        name="tax"
+        errors={errors}
+        object={value}
+        valueHandler={valueHandler}
+      >
         <div class="field is-horizontal">
           <div class="field-label is-normal" />
-          <div class="field-body" style={{ display: 'block' }}>
-            {taxes.map((v: any, i: number) => <div key={i} class="tags 
has-addons mt-3 mb-0 mr-3" style={{ flexWrap: 'nowrap' }}>
-              <span class="tag is-medium is-info mb-0" style={{ maxWidth: 
'90%' }}><b>{v.tax}</b>: {v.name}</span>
-              <a class="tag is-medium is-danger is-delete mb-0" onClick={() => 
{
-                onChange(taxes.filter((f: any) => f !== v) as any);
-                valueHandler(v);
-              }} />
-            </div>
-            )}
+          <div class="field-body" style={{ display: "block" }}>
+            {taxes.map((v: any, i: number) => (
+              <div
+                key={i}
+                class="tags has-addons mt-3 mb-0 mr-3"
+                style={{ flexWrap: "nowrap" }}
+              >
+                <span
+                  class="tag is-medium is-info mb-0"
+                  style={{ maxWidth: "90%" }}
+                >
+                  <b>{v.tax}</b>: {v.name}
+                </span>
+                <a
+                  class="tag is-medium is-danger is-delete mb-0"
+                  onClick={() => {
+                    onChange(taxes.filter((f: any) => f !== v) as any);
+                    valueHandler(v);
+                  }}
+                />
+              </div>
+            ))}
             {!taxes.length && i18n`No taxes configured for this product.`}
           </div>
         </div>
 
-        <Input<Entity> name="tax" label={i18n`Amount`} tooltip={i18n`Taxes can 
be in currencies that differ from the main currency used by the merchant.`}>
-          <Translate>Enter currency and value separated with a colon, e.g. 
"USD:2.3".</Translate>
+        <Input<Entity>
+          name="tax"
+          label={i18n`Amount`}
+          tooltip={i18n`Taxes can be in currencies that differ from the main 
currency used by the merchant.`}
+        >
+          <Translate>
+            Enter currency and value separated with a colon, e.g. "USD:2.3".
+          </Translate>
         </Input>
 
-        <Input<Entity> name="name" label={i18n`Description`} 
tooltip={i18n`Legal name of the tax, e.g. VAT or import duties.`} />
+        <Input<Entity>
+          name="name"
+          label={i18n`Description`}
+          tooltip={i18n`Legal name of the tax, e.g. VAT or import duties.`}
+        />
 
         <div class="buttons is-right mt-5">
-          <button class="button is-info"
+          <button
+            class="button is-info"
             data-tooltip={i18n`add tax to the tax list`}
             disabled={hasErrors}
-            onClick={submit}><Translate>Add</Translate></button>
+            onClick={submit}
+          >
+            <Translate>Add</Translate>
+          </button>
         </div>
       </FormProvider>
     </InputGroup>
-  )
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/components/form/InputWithAddon.tsx 
b/packages/merchant-backoffice-ui/src/components/form/InputWithAddon.tsx
index bdc9eaa0c..620922584 100644
--- a/packages/merchant-backoffice-ui/src/components/form/InputWithAddon.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/InputWithAddon.tsx
@@ -15,63 +15,99 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { ComponentChildren, h, VNode } from "preact";
 import { InputProps, useField } from "./useField.js";
 
 export interface Props<T> extends InputProps<T> {
   expand?: boolean;
-  inputType?: 'text' | 'number';
+  inputType?: "text" | "number";
   addonBefore?: ComponentChildren;
   addonAfter?: ComponentChildren;
   toStr?: (v?: any) => string;
   fromStr?: (s: string) => any;
-  inputExtra?: any,
-  children?: ComponentChildren,
+  inputExtra?: any;
+  children?: ComponentChildren;
   side?: ComponentChildren;
 }
 
-const defaultToString = (f?: any): string => f || ''
-const defaultFromString = (v: string): any => v as any
+const defaultToString = (f?: any): string => f || "";
+const defaultFromString = (v: string): any => v as any;
 
-export function InputWithAddon<T>({ name, readonly, addonBefore, children, 
expand, label, placeholder, help, tooltip, inputType, inputExtra, side, 
addonAfter, toStr = defaultToString, fromStr = defaultFromString }: Props<keyof 
T>): VNode {
+export function InputWithAddon<T>({
+  name,
+  readonly,
+  addonBefore,
+  children,
+  expand,
+  label,
+  placeholder,
+  help,
+  tooltip,
+  inputType,
+  inputExtra,
+  side,
+  addonAfter,
+  toStr = defaultToString,
+  fromStr = defaultFromString,
+}: Props<keyof T>): VNode {
   const { error, value, onChange, required } = useField<T>(name);
 
-  return <div class="field is-horizontal">
-    <div class="field-label is-normal">
-      <label class="label">
-        {label}
-        {tooltip && <span class="icon has-tooltip-right" 
data-tooltip={tooltip}>
-          <i class="mdi mdi-information" />
-        </span>}
-      </label>
-    </div>
-    <div class="field-body is-flex-grow-3">
-      <div class="field">
-        <div class="field has-addons">
-          {addonBefore && <div class="control">
-            <a class="button is-static">{addonBefore}</a>
-          </div>}
-          <p class={`control${expand ? " is-expanded" :""}${required ? " 
has-icons-right" : ''}`}>
-            <input {...(inputExtra || {})} class={error ? "input is-danger" : 
"input"} type={inputType}
-              placeholder={placeholder} readonly={readonly}
-              name={String(name)} value={toStr(value)}
-              onChange={(e): void => onChange(fromStr(e.currentTarget.value))} 
/>
-            {required && <span class="icon has-text-danger is-right">
-              <i class="mdi mdi-alert" />
-            </span>}
-            {help}
-            {children}
-          </p>
-          {addonAfter && <div class="control">
-            <a class="button is-static">{addonAfter}</a>
-          </div>}
+  return (
+    <div class="field is-horizontal">
+      <div class="field-label is-normal">
+        <label class="label">
+          {label}
+          {tooltip && (
+            <span class="icon has-tooltip-right" data-tooltip={tooltip}>
+              <i class="mdi mdi-information" />
+            </span>
+          )}
+        </label>
+      </div>
+      <div class="field-body is-flex-grow-3">
+        <div class="field">
+          <div class="field has-addons">
+            {addonBefore && (
+              <div class="control">
+                <a class="button is-static">{addonBefore}</a>
+              </div>
+            )}
+            <p
+              class={`control${expand ? " is-expanded" : ""}${
+                required ? " has-icons-right" : ""
+              }`}
+            >
+              <input
+                {...(inputExtra || {})}
+                class={error ? "input is-danger" : "input"}
+                type={inputType}
+                placeholder={placeholder}
+                readonly={readonly}
+                name={String(name)}
+                value={toStr(value)}
+                onChange={(e): void => 
onChange(fromStr(e.currentTarget.value))}
+              />
+              {required && (
+                <span class="icon has-text-danger is-right">
+                  <i class="mdi mdi-alert" />
+                </span>
+              )}
+              {help}
+              {children}
+            </p>
+            {addonAfter && (
+              <div class="control">
+                <a class="button is-static">{addonAfter}</a>
+              </div>
+            )}
+          </div>
+          {error && <p class="help is-danger">{error}</p>}
         </div>
-        {error && <p class="help is-danger">{error}</p>}
+        {side}
       </div>
-      {side}
     </div>
-  </div>;
+  );
 }
diff --git a/packages/merchant-backoffice-ui/src/components/form/TextField.tsx 
b/packages/merchant-backoffice-ui/src/components/form/TextField.tsx
index 2cda71599..03f36dcbb 100644
--- a/packages/merchant-backoffice-ui/src/components/form/TextField.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/TextField.tsx
@@ -15,39 +15,57 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { ComponentChildren, h, VNode } from "preact";
 import { useField, InputProps } from "./useField.js";
 
 interface Props<T> extends InputProps<T> {
-  inputType?: 'text' | 'number' | 'multiline' | 'password';
+  inputType?: "text" | "number" | "multiline" | "password";
   expand?: boolean;
   side?: ComponentChildren;
   children: ComponentChildren;
 }
 
-export function TextField<T>({ name, tooltip, label, expand, help, children, 
side}: Props<keyof T>): VNode {
+export function TextField<T>({
+  name,
+  tooltip,
+  label,
+  expand,
+  help,
+  children,
+  side,
+}: Props<keyof T>): VNode {
   const { error } = useField<T>(name);
-  return <div class="field is-horizontal">
-    <div class="field-label is-normal">
-      <label class="label">
-        {label}
-        {tooltip && <span class="icon has-tooltip-right" 
data-tooltip={tooltip}>
-          <i class="mdi mdi-information" />
-        </span>}
-      </label>
-    </div>
-    <div class="field-body is-flex-grow-3">
-      <div class="field">
-        <p class={expand ? "control is-expanded has-icons-right" : "control 
has-icons-right"}>
-          {children}          
-          {help}
-        </p>
-        {error && <p class="help is-danger">{error}</p>}
+  return (
+    <div class="field is-horizontal">
+      <div class="field-label is-normal">
+        <label class="label">
+          {label}
+          {tooltip && (
+            <span class="icon has-tooltip-right" data-tooltip={tooltip}>
+              <i class="mdi mdi-information" />
+            </span>
+          )}
+        </label>
+      </div>
+      <div class="field-body is-flex-grow-3">
+        <div class="field">
+          <p
+            class={
+              expand
+                ? "control is-expanded has-icons-right"
+                : "control has-icons-right"
+            }
+          >
+            {children}
+            {help}
+          </p>
+          {error && <p class="help is-danger">{error}</p>}
+        </div>
+        {side}
       </div>
-      {side}
     </div>
-  </div>;
+  );
 }
diff --git a/packages/merchant-backoffice-ui/src/components/form/useField.tsx 
b/packages/merchant-backoffice-ui/src/components/form/useField.tsx
index 6b685d722..dffb0cc66 100644
--- a/packages/merchant-backoffice-ui/src/components/form/useField.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/useField.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { ComponentChildren, VNode } from "preact";
 import { useFormContext } from "./FormProvider.js";
@@ -29,26 +29,29 @@ interface Use<V> {
   initial: any;
   onChange: (v: V) => void;
   toStr: (f: V | undefined) => string;
-  fromStr: (v: string) => V
+  fromStr: (v: string) => V;
 }
 
 export function useField<T>(name: keyof T): Use<T[typeof name]> {
-  const { errors, object, initialObject, toStr, fromStr, valueHandler } = 
useFormContext<T>()
-  type P = typeof name
-  type V = T[P]
+  const { errors, object, initialObject, toStr, fromStr, valueHandler } =
+    useFormContext<T>();
+  type P = typeof name;
+  type V = T[P];
 
-  const updateField = (field: P) => (value: V): void => {
-    return valueHandler((prev) => {
-      return setValueDeeper(prev, String(field).split('.'), value)
-    })
-  }
+  const updateField =
+    (field: P) =>
+    (value: V): void => {
+      return valueHandler((prev) => {
+        return setValueDeeper(prev, String(field).split("."), value);
+      });
+    };
 
-  const defaultToString = ((f?: V): string => String(!f ? '' : f))
-  const defaultFromString = ((v: string): V => v as any)
-  const value = readField(object, String(name))
-  const initial = readField(initialObject, String(name))
-  const isDirty = value !== initial
-  const hasError = readField(errors, String(name))
+  const defaultToString = (f?: V): string => String(!f ? "" : f);
+  const defaultFromString = (v: string): V => v as any;
+  const value = readField(object, String(name));
+  const initial = readField(initialObject, String(name));
+  const isDirty = value !== initial;
+  const hasError = readField(errors, String(name));
   return {
     error: isDirty ? hasError : undefined,
     required: !isDirty && hasError,
@@ -57,24 +60,26 @@ export function useField<T>(name: keyof T): Use<T[typeof 
name]> {
     onChange: updateField(name) as any,
     toStr: toStr[name] ? toStr[name]! : defaultToString,
     fromStr: fromStr[name] ? fromStr[name]! : defaultFromString,
-  }
+  };
 }
 /**
  * read the field of an object an support accessing it using '.'
- * 
- * @param object 
- * @param name 
- * @returns 
+ *
+ * @param object
+ * @param name
+ * @returns
  */
 const readField = (object: any, name: string) => {
-  return name.split('.').reduce((prev, current) => prev && prev[current], 
object)
-}
+  return name
+    .split(".")
+    .reduce((prev, current) => prev && prev[current], object);
+};
 
 const setValueDeeper = (object: any, names: string[], value: any): any => {
-  if (names.length === 0) return value
-  const [head, ...rest] = names
-  return { ...object, [head]: setValueDeeper(object[head] || {}, rest, value) }
-}
+  if (names.length === 0) return value;
+  const [head, ...rest] = names;
+  return { ...object, [head]: setValueDeeper(object[head] || {}, rest, value) 
};
+};
 
 export interface InputProps<T> {
   name: T;
@@ -83,4 +88,4 @@ export interface InputProps<T> {
   tooltip?: ComponentChildren;
   readonly?: boolean;
   help?: ComponentChildren;
-}
\ No newline at end of file
+}
diff --git 
a/packages/merchant-backoffice-ui/src/components/form/useGroupField.tsx 
b/packages/merchant-backoffice-ui/src/components/form/useGroupField.tsx
index e6365e3ad..9a445eb32 100644
--- a/packages/merchant-backoffice-ui/src/components/form/useGroupField.tsx
+++ b/packages/merchant-backoffice-ui/src/components/form/useGroupField.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { useFormContext } from "./FormProvider.js";
 
@@ -27,14 +27,15 @@ interface Use {
 
 export function useGroupField<T>(name: keyof T): Use {
   const f = useFormContext<T>();
-  if (!f)
-    return {};
+  if (!f) return {};
 
   return {
-    hasError: readField(f.errors, String(name))
+    hasError: readField(f.errors, String(name)),
   };
 }
 
 const readField = (object: any, name: string) => {
-  return name.split('.').reduce((prev, current) => prev && prev[current], 
object)
-}
+  return name
+    .split(".")
+    .reduce((prev, current) => prev && prev[current], object);
+};
diff --git 
a/packages/merchant-backoffice-ui/src/components/menu/LangSelector.tsx 
b/packages/merchant-backoffice-ui/src/components/menu/LangSelector.tsx
index e5c6b6914..d618d6480 100644
--- a/packages/merchant-backoffice-ui/src/components/menu/LangSelector.tsx
+++ b/packages/merchant-backoffice-ui/src/components/menu/LangSelector.tsx
@@ -15,59 +15,78 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
-import langIcon from '../../assets/icons/languageicon.svg';
+import langIcon from "../../assets/icons/languageicon.svg";
 import { useTranslationContext } from "../../context/translation.js";
-import { strings as messages } from '../../i18n/strings'
+import { strings as messages } from "../../i18n/strings";
 
 type LangsNames = {
-  [P in keyof typeof messages]: string
-}
+  [P in keyof typeof messages]: string;
+};
 
 const names: LangsNames = {
-  es: 'Español [es]',
-  en: 'English [en]',
-  fr: 'Français [fr]',
-  de: 'Deutsch [de]',
-  sv: 'Svenska [sv]',
-  it: 'Italiano [it]',
-}
+  es: "Español [es]",
+  en: "English [en]",
+  fr: "Français [fr]",
+  de: "Deutsch [de]",
+  sv: "Svenska [sv]",
+  it: "Italiano [it]",
+};
 
 function getLangName(s: keyof LangsNames | string) {
-  if (names[s]) return names[s]
-  return s
+  if (names[s]) return names[s];
+  return s;
 }
 
 export function LangSelector(): VNode {
-  const [updatingLang, setUpdatingLang] = useState(false)
-  const { lang, changeLanguage } = useTranslationContext()
+  const [updatingLang, setUpdatingLang] = useState(false);
+  const { lang, changeLanguage } = useTranslationContext();
 
-  return <div class="dropdown is-active ">
-    <div class="dropdown-trigger">
-      <button class="button has-tooltip-left" 
-        data-tooltip="change language selection"
-        aria-haspopup="true" 
-        aria-controls="dropdown-menu" onClick={() => 
setUpdatingLang(!updatingLang)}>
-        <div class="icon is-small is-left">
-          <img src={langIcon} />
-        </div>
-        <span>{getLangName(lang)}</span>
-        <div class="icon is-right">
-          <i class="mdi mdi-chevron-down" />
+  return (
+    <div class="dropdown is-active ">
+      <div class="dropdown-trigger">
+        <button
+          class="button has-tooltip-left"
+          data-tooltip="change language selection"
+          aria-haspopup="true"
+          aria-controls="dropdown-menu"
+          onClick={() => setUpdatingLang(!updatingLang)}
+        >
+          <div class="icon is-small is-left">
+            <img src={langIcon} />
+          </div>
+          <span>{getLangName(lang)}</span>
+          <div class="icon is-right">
+            <i class="mdi mdi-chevron-down" />
+          </div>
+        </button>
+      </div>
+      {updatingLang && (
+        <div class="dropdown-menu" id="dropdown-menu" role="menu">
+          <div class="dropdown-content">
+            {Object.keys(messages)
+              .filter((l) => l !== lang)
+              .map((l) => (
+                <a
+                  key={l}
+                  class="dropdown-item"
+                  value={l}
+                  onClick={() => {
+                    changeLanguage(l);
+                    setUpdatingLang(false);
+                  }}
+                >
+                  {getLangName(l)}
+                </a>
+              ))}
+          </div>
         </div>
-      </button>
+      )}
     </div>
-    {updatingLang && <div class="dropdown-menu" id="dropdown-menu" role="menu">
-      <div class="dropdown-content">
-        {Object.keys(messages)
-          .filter((l) => l !== lang)
-          .map(l => <a key={l} class="dropdown-item" value={l} onClick={() => 
{ changeLanguage(l); setUpdatingLang(false) }}>{getLangName(l)}</a>)}
-      </div>
-    </div>}
-  </div>
-}
\ No newline at end of file
+  );
+}
diff --git 
a/packages/merchant-backoffice-ui/src/components/menu/NavigationBar.tsx 
b/packages/merchant-backoffice-ui/src/components/menu/NavigationBar.tsx
index 39d1b0e35..46c13adf0 100644
--- a/packages/merchant-backoffice-ui/src/components/menu/NavigationBar.tsx
+++ b/packages/merchant-backoffice-ui/src/components/menu/NavigationBar.tsx
@@ -15,12 +15,12 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode } from 'preact';
-import logo from '../../assets/logo.jpeg';
+import { h, VNode } from "preact";
+import logo from "../../assets/logo.jpeg";
 import { LangSelector } from "./LangSelector.js";
 
 interface Props {
@@ -29,30 +29,46 @@ interface Props {
 }
 
 export function NavigationBar({ onMobileMenu, title }: Props): VNode {
-  return (<nav class="navbar is-fixed-top" role="navigation" aria-label="main 
navigation">
-    <div class="navbar-brand">
-      <span class="navbar-item" style={{ fontSize: 24, fontWeight: 900 
}}>{title}</span>
-
-      <a role="button" class="navbar-burger" aria-label="menu" 
aria-expanded="false" onClick={(e) => {
-        onMobileMenu()
-        e.stopPropagation()
-      }}>
-        <span aria-hidden="true" />
-        <span aria-hidden="true" />
-        <span aria-hidden="true" />
-      </a>
-    </div>
-
-    <div class="navbar-menu ">
-      <a class="navbar-start is-justify-content-center is-flex-grow-1" 
href="https://taler.net";>
-        <img src={logo} style={{ height: 50, maxHeight: 50 }} />
-      </a>
-      <div class="navbar-end">
-        <div class="navbar-item" style={{ paddingTop: 4, paddingBottom: 4 }}>
-          <LangSelector />
+  return (
+    <nav
+      class="navbar is-fixed-top"
+      role="navigation"
+      aria-label="main navigation"
+    >
+      <div class="navbar-brand">
+        <span class="navbar-item" style={{ fontSize: 24, fontWeight: 900 }}>
+          {title}
+        </span>
+
+        <a
+          role="button"
+          class="navbar-burger"
+          aria-label="menu"
+          aria-expanded="false"
+          onClick={(e) => {
+            onMobileMenu();
+            e.stopPropagation();
+          }}
+        >
+          <span aria-hidden="true" />
+          <span aria-hidden="true" />
+          <span aria-hidden="true" />
+        </a>
+      </div>
+
+      <div class="navbar-menu ">
+        <a
+          class="navbar-start is-justify-content-center is-flex-grow-1"
+          href="https://taler.net";
+        >
+          <img src={logo} style={{ height: 50, maxHeight: 50 }} />
+        </a>
+        <div class="navbar-end">
+          <div class="navbar-item" style={{ paddingTop: 4, paddingBottom: 4 }}>
+            <LangSelector />
+          </div>
         </div>
       </div>
-    </div>
-  </nav>
+    </nav>
   );
-}
\ No newline at end of file
+}
diff --git a/packages/merchant-backoffice-ui/src/components/modal/index.tsx 
b/packages/merchant-backoffice-ui/src/components/modal/index.tsx
index 7c7e19316..6e5575f63 100644
--- a/packages/merchant-backoffice-ui/src/components/modal/index.tsx
+++ b/packages/merchant-backoffice-ui/src/components/modal/index.tsx
@@ -15,10 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
-
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { ComponentChildren, h, VNode } from "preact";
 import { useState } from "preact/hooks";
@@ -40,104 +39,220 @@ interface Props {
   disabled?: boolean;
 }
 
-export function ConfirmModal({ active, description, onCancel, onConfirm, 
children, danger, disabled, label = 'Confirm' }: Props): VNode {
-  return <div class={active ? "modal is-active" : "modal"}>
-    <div class="modal-background " onClick={onCancel} />
-    <div class="modal-card" style={{maxWidth: 700}}>
-      <header class="modal-card-head">
-        {!description ? null : <p 
class="modal-card-title"><b>{description}</b></p>}
-        <button class="delete " aria-label="close" onClick={onCancel} />
-      </header>
-      <section class="modal-card-body">
-        {children}
-      </section>
-      <footer class="modal-card-foot">
-        <div class="buttons is-right" style={{ width: '100%' }}>
-          <button class="button " onClick={onCancel} 
><Translate>Cancel</Translate></button>
-          <button class={danger ? "button is-danger " : "button is-info "} 
disabled={disabled} onClick={onConfirm} ><Translate>{label}</Translate></button>
-        </div>
-      </footer>
+export function ConfirmModal({
+  active,
+  description,
+  onCancel,
+  onConfirm,
+  children,
+  danger,
+  disabled,
+  label = "Confirm",
+}: Props): VNode {
+  return (
+    <div class={active ? "modal is-active" : "modal"}>
+      <div class="modal-background " onClick={onCancel} />
+      <div class="modal-card" style={{ maxWidth: 700 }}>
+        <header class="modal-card-head">
+          {!description ? null : (
+            <p class="modal-card-title">
+              <b>{description}</b>
+            </p>
+          )}
+          <button class="delete " aria-label="close" onClick={onCancel} />
+        </header>
+        <section class="modal-card-body">{children}</section>
+        <footer class="modal-card-foot">
+          <div class="buttons is-right" style={{ width: "100%" }}>
+            <button class="button " onClick={onCancel}>
+              <Translate>Cancel</Translate>
+            </button>
+            <button
+              class={danger ? "button is-danger " : "button is-info "}
+              disabled={disabled}
+              onClick={onConfirm}
+            >
+              <Translate>{label}</Translate>
+            </button>
+          </div>
+        </footer>
+      </div>
+      <button
+        class="modal-close is-large "
+        aria-label="close"
+        onClick={onCancel}
+      />
     </div>
-    <button class="modal-close is-large " aria-label="close" 
onClick={onCancel} />
-  </div>
+  );
 }
 
-export function ContinueModal({ active, description, onCancel, onConfirm, 
children, disabled }: Props): VNode {
-  return <div class={active ? "modal is-active" : "modal"}>
-    <div class="modal-background " onClick={onCancel} />
-    <div class="modal-card">
-      <header class="modal-card-head has-background-success">
-        {!description ? null : <p class="modal-card-title">{description}</p>}
-        <button class="delete " aria-label="close" onClick={onCancel} />
-      </header>
-      <section class="modal-card-body">
-        {children}
-      </section>
-      <footer class="modal-card-foot">
-        <div class="buttons is-right" style={{ width: '100%' }}>
-          <button class="button is-success " disabled={disabled} 
onClick={onConfirm} ><Translate>Continue</Translate></button>
-        </div>
-      </footer>
+export function ContinueModal({
+  active,
+  description,
+  onCancel,
+  onConfirm,
+  children,
+  disabled,
+}: Props): VNode {
+  return (
+    <div class={active ? "modal is-active" : "modal"}>
+      <div class="modal-background " onClick={onCancel} />
+      <div class="modal-card">
+        <header class="modal-card-head has-background-success">
+          {!description ? null : <p class="modal-card-title">{description}</p>}
+          <button class="delete " aria-label="close" onClick={onCancel} />
+        </header>
+        <section class="modal-card-body">{children}</section>
+        <footer class="modal-card-foot">
+          <div class="buttons is-right" style={{ width: "100%" }}>
+            <button
+              class="button is-success "
+              disabled={disabled}
+              onClick={onConfirm}
+            >
+              <Translate>Continue</Translate>
+            </button>
+          </div>
+        </footer>
+      </div>
+      <button
+        class="modal-close is-large "
+        aria-label="close"
+        onClick={onCancel}
+      />
     </div>
-    <button class="modal-close is-large " aria-label="close" 
onClick={onCancel} />
-  </div>
+  );
 }
 
 export function SimpleModal({ onCancel, children }: any): VNode {
-  return <div class="modal is-active">
-    <div class="modal-background " onClick={onCancel} />
-    <div class="modal-card">
-      <section class="modal-card-body is-main-section">
-        {children}
-      </section>
+  return (
+    <div class="modal is-active">
+      <div class="modal-background " onClick={onCancel} />
+      <div class="modal-card">
+        <section class="modal-card-body is-main-section">{children}</section>
+      </div>
+      <button
+        class="modal-close is-large "
+        aria-label="close"
+        onClick={onCancel}
+      />
     </div>
-    <button class="modal-close is-large " aria-label="close" 
onClick={onCancel} />
-  </div>
+  );
 }
 
-export function ClearConfirmModal({ description, onCancel, onClear, onConfirm, 
children }: Props & { onClear?: () => void }): VNode {
-  return <div class="modal is-active">
-    <div class="modal-background " onClick={onCancel} />
-    <div class="modal-card">
-      <header class="modal-card-head">
-        {!description ? null : <p class="modal-card-title">{description}</p>}
-        <button class="delete " aria-label="close" onClick={onCancel} />
-      </header>
-      <section class="modal-card-body is-main-section">
-        {children}
-      </section>
-      <footer class="modal-card-foot">
-        {onClear && <button class="button is-danger" onClick={onClear} 
disabled={onClear === undefined} ><Translate>Clear</Translate></button>}
-        <div class="buttons is-right" style={{ width: '100%' }}>
-          <button class="button " onClick={onCancel} 
><Translate>Cancel</Translate></button>
-          <button class="button is-info" onClick={onConfirm} 
disabled={onConfirm === undefined} ><Translate>Confirm</Translate></button>
-        </div>
-      </footer>
+export function ClearConfirmModal({
+  description,
+  onCancel,
+  onClear,
+  onConfirm,
+  children,
+}: Props & { onClear?: () => void }): VNode {
+  return (
+    <div class="modal is-active">
+      <div class="modal-background " onClick={onCancel} />
+      <div class="modal-card">
+        <header class="modal-card-head">
+          {!description ? null : <p class="modal-card-title">{description}</p>}
+          <button class="delete " aria-label="close" onClick={onCancel} />
+        </header>
+        <section class="modal-card-body is-main-section">{children}</section>
+        <footer class="modal-card-foot">
+          {onClear && (
+            <button
+              class="button is-danger"
+              onClick={onClear}
+              disabled={onClear === undefined}
+            >
+              <Translate>Clear</Translate>
+            </button>
+          )}
+          <div class="buttons is-right" style={{ width: "100%" }}>
+            <button class="button " onClick={onCancel}>
+              <Translate>Cancel</Translate>
+            </button>
+            <button
+              class="button is-info"
+              onClick={onConfirm}
+              disabled={onConfirm === undefined}
+            >
+              <Translate>Confirm</Translate>
+            </button>
+          </div>
+        </footer>
+      </div>
+      <button
+        class="modal-close is-large "
+        aria-label="close"
+        onClick={onCancel}
+      />
     </div>
-    <button class="modal-close is-large " aria-label="close" 
onClick={onCancel} />
-  </div>
+  );
 }
 
 interface DeleteModalProps {
-  element: { id: string, name: string };
+  element: { id: string; name: string };
   onCancel: () => void;
   onConfirm: (id: string) => void;
 }
 
-export function DeleteModal({ element, onCancel, onConfirm }: 
DeleteModalProps): VNode {
-  return <ConfirmModal label={`Delete instance`} description={`Delete the 
instance "${element.name}"`} danger active onCancel={onCancel} onConfirm={() => 
onConfirm(element.id)}>
-    <p>If you delete the instance named <b>"{element.name}"</b> (ID: 
<b>{element.id}</b>), the merchant will no longer be able to process orders or 
refunds</p>
-    <p>This action deletes the instance private key, but preserves all 
transaction data. You can still access that data after deleting the 
instance.</p>
-    <p class="warning">Deleting an instance <b>cannot be undone</b>.</p>
-  </ConfirmModal>
+export function DeleteModal({
+  element,
+  onCancel,
+  onConfirm,
+}: DeleteModalProps): VNode {
+  return (
+    <ConfirmModal
+      label={`Delete instance`}
+      description={`Delete the instance "${element.name}"`}
+      danger
+      active
+      onCancel={onCancel}
+      onConfirm={() => onConfirm(element.id)}
+    >
+      <p>
+        If you delete the instance named <b>"{element.name}"</b> (ID:{" "}
+        <b>{element.id}</b>), the merchant will no longer be able to process
+        orders or refunds
+      </p>
+      <p>
+        This action deletes the instance private key, but preserves all
+        transaction data. You can still access that data after deleting the
+        instance.
+      </p>
+      <p class="warning">
+        Deleting an instance <b>cannot be undone</b>.
+      </p>
+    </ConfirmModal>
+  );
 }
 
-export function PurgeModal({ element, onCancel, onConfirm }: 
DeleteModalProps): VNode {
-  return <ConfirmModal label={`Purge the instance`} description={`Purge the 
instance "${element.name}"`} danger active onCancel={onCancel} onConfirm={() => 
onConfirm(element.id)}>
-    <p>If you purge the instance named <b>"{element.name}"</b> (ID: 
<b>{element.id}</b>), you will also delete all it's transaction data.</p>
-    <p>The instance will disappear from your list, and you will no longer be 
able to access it's data.</p>
-    <p class="warning">Purging an instance <b>cannot be undone</b>.</p>
-  </ConfirmModal>
+export function PurgeModal({
+  element,
+  onCancel,
+  onConfirm,
+}: DeleteModalProps): VNode {
+  return (
+    <ConfirmModal
+      label={`Purge the instance`}
+      description={`Purge the instance "${element.name}"`}
+      danger
+      active
+      onCancel={onCancel}
+      onConfirm={() => onConfirm(element.id)}
+    >
+      <p>
+        If you purge the instance named <b>"{element.name}"</b> (ID:{" "}
+        <b>{element.id}</b>), you will also delete all it's transaction data.
+      </p>
+      <p>
+        The instance will disappear from your list, and you will no longer be
+        able to access it's data.
+      </p>
+      <p class="warning">
+        Purging an instance <b>cannot be undone</b>.
+      </p>
+    </ConfirmModal>
+  );
 }
 
 interface UpdateTokenModalProps {
@@ -148,115 +263,217 @@ interface UpdateTokenModalProps {
 }
 
 //FIXME: merge UpdateTokenModal with SetTokenNewInstanceModal
-export function UpdateTokenModal({ onCancel, onClear, onConfirm, oldToken }: 
UpdateTokenModalProps): VNode {
-  type State = { old_token: string, new_token: string, repeat_token: string }
+export function UpdateTokenModal({
+  onCancel,
+  onClear,
+  onConfirm,
+  oldToken,
+}: UpdateTokenModalProps): VNode {
+  type State = { old_token: string; new_token: string; repeat_token: string };
   const [form, setValue] = useState<Partial<State>>({
-    old_token: '', new_token: '', repeat_token: '',
-  })
-  const i18n = useTranslator()
+    old_token: "",
+    new_token: "",
+    repeat_token: "",
+  });
+  const i18n = useTranslator();
 
-  const hasInputTheCorrectOldToken = oldToken && oldToken !== form.old_token
+  const hasInputTheCorrectOldToken = oldToken && oldToken !== form.old_token;
   const errors = {
-    old_token: hasInputTheCorrectOldToken ? i18n`is not the same as the 
current access token` : undefined,
-    new_token: !form.new_token ? i18n`cannot be empty` : (form.new_token === 
form.old_token ? i18n`cannot be the same as the old token` : undefined),
-    repeat_token: form.new_token !== form.repeat_token ? i18n`is not the same` 
: undefined
-  }
+    old_token: hasInputTheCorrectOldToken
+      ? i18n`is not the same as the current access token`
+      : undefined,
+    new_token: !form.new_token
+      ? i18n`cannot be empty`
+      : form.new_token === form.old_token
+      ? i18n`cannot be the same as the old token`
+      : undefined,
+    repeat_token:
+      form.new_token !== form.repeat_token ? i18n`is not the same` : undefined,
+  };
 
-  const hasErrors = Object.keys(errors).some(k => (errors as any)[k] !== 
undefined)
+  const hasErrors = Object.keys(errors).some(
+    (k) => (errors as any)[k] !== undefined,
+  );
 
-  const instance = useInstanceContext()
+  const instance = useInstanceContext();
 
-  const text = i18n`You are updating the access token from instance with id 
${instance.id}`
+  const text = i18n`You are updating the access token from instance with id 
${instance.id}`;
 
-  return <ClearConfirmModal description={text}
-    onCancel={onCancel}
-    onConfirm={!hasErrors ? () => onConfirm(form.new_token!) : undefined}
-    onClear={!hasInputTheCorrectOldToken && oldToken ? onClear : undefined}
-  >
-    <div class="columns">
-      <div class="column" />
-      <div class="column is-four-fifths" >
-        <FormProvider errors={errors} object={form} valueHandler={setValue}>
-          {oldToken && <Input<State> name="old_token" label={i18n`Old access 
token`} tooltip={i18n`access token currently in use`} inputType="password" />}
-          <Input<State> name="new_token" label={i18n`New access token`} 
tooltip={i18n`next access token to be used`} inputType="password" />
-          <Input<State> name="repeat_token" label={i18n`Repeat access token`} 
tooltip={i18n`confirm the same access token`} inputType="password" />
-        </FormProvider>
-        <p><Translate>Clearing the access token will mean public access to the 
instance</Translate></p>
+  return (
+    <ClearConfirmModal
+      description={text}
+      onCancel={onCancel}
+      onConfirm={!hasErrors ? () => onConfirm(form.new_token!) : undefined}
+      onClear={!hasInputTheCorrectOldToken && oldToken ? onClear : undefined}
+    >
+      <div class="columns">
+        <div class="column" />
+        <div class="column is-four-fifths">
+          <FormProvider errors={errors} object={form} valueHandler={setValue}>
+            {oldToken && (
+              <Input<State>
+                name="old_token"
+                label={i18n`Old access token`}
+                tooltip={i18n`access token currently in use`}
+                inputType="password"
+              />
+            )}
+            <Input<State>
+              name="new_token"
+              label={i18n`New access token`}
+              tooltip={i18n`next access token to be used`}
+              inputType="password"
+            />
+            <Input<State>
+              name="repeat_token"
+              label={i18n`Repeat access token`}
+              tooltip={i18n`confirm the same access token`}
+              inputType="password"
+            />
+          </FormProvider>
+          <p>
+            <Translate>
+              Clearing the access token will mean public access to the instance
+            </Translate>
+          </p>
+        </div>
+        <div class="column" />
       </div>
-      <div class="column" />
-    </div>
-  </ClearConfirmModal>
+    </ClearConfirmModal>
+  );
 }
 
-export function SetTokenNewInstanceModal({ onCancel, onClear, onConfirm }: 
UpdateTokenModalProps): VNode {
-  type State = { old_token: string, new_token: string, repeat_token: string }
+export function SetTokenNewInstanceModal({
+  onCancel,
+  onClear,
+  onConfirm,
+}: UpdateTokenModalProps): VNode {
+  type State = { old_token: string; new_token: string; repeat_token: string };
   const [form, setValue] = useState<Partial<State>>({
-    new_token: '', repeat_token: '',
-  })
-  const i18n = useTranslator()
+    new_token: "",
+    repeat_token: "",
+  });
+  const i18n = useTranslator();
 
   const errors = {
-    new_token: !form.new_token ? i18n`cannot be empty` : (form.new_token === 
form.old_token ? i18n`cannot be the same as the old access token` : undefined),
-    repeat_token: form.new_token !== form.repeat_token ? i18n`is not the same` 
: undefined
-  }
-
-  const hasErrors = Object.keys(errors).some(k => (errors as any)[k] !== 
undefined)
+    new_token: !form.new_token
+      ? i18n`cannot be empty`
+      : form.new_token === form.old_token
+      ? i18n`cannot be the same as the old access token`
+      : undefined,
+    repeat_token:
+      form.new_token !== form.repeat_token ? i18n`is not the same` : undefined,
+  };
 
+  const hasErrors = Object.keys(errors).some(
+    (k) => (errors as any)[k] !== undefined,
+  );
 
-  return <div class="modal is-active">
-    <div class="modal-background " onClick={onCancel} />
-    <div class="modal-card">
-      <header class="modal-card-head">
-        <p class="modal-card-title">{i18n`You are setting the access token for 
the new instance`}</p>
-        <button class="delete " aria-label="close" onClick={onCancel} />
-      </header>
-      <section class="modal-card-body is-main-section">
-        <div class="columns">
-          <div class="column" />
-          <div class="column is-four-fifths" >
-            <FormProvider errors={errors} object={form} 
valueHandler={setValue}>
-              <Input<State> name="new_token" label={i18n`New access token`} 
tooltip={i18n`next access token to be used`} inputType="password" />
-              <Input<State> name="repeat_token" label={i18n`Repeat access 
token`} tooltip={i18n`confirm the same access token`} inputType="password" />
-            </FormProvider>
-            <p><Translate>With external authorization method no check will be 
done by the merchant backend</Translate></p>
+  return (
+    <div class="modal is-active">
+      <div class="modal-background " onClick={onCancel} />
+      <div class="modal-card">
+        <header class="modal-card-head">
+          <p class="modal-card-title">{i18n`You are setting the access token 
for the new instance`}</p>
+          <button class="delete " aria-label="close" onClick={onCancel} />
+        </header>
+        <section class="modal-card-body is-main-section">
+          <div class="columns">
+            <div class="column" />
+            <div class="column is-four-fifths">
+              <FormProvider
+                errors={errors}
+                object={form}
+                valueHandler={setValue}
+              >
+                <Input<State>
+                  name="new_token"
+                  label={i18n`New access token`}
+                  tooltip={i18n`next access token to be used`}
+                  inputType="password"
+                />
+                <Input<State>
+                  name="repeat_token"
+                  label={i18n`Repeat access token`}
+                  tooltip={i18n`confirm the same access token`}
+                  inputType="password"
+                />
+              </FormProvider>
+              <p>
+                <Translate>
+                  With external authorization method no check will be done by
+                  the merchant backend
+                </Translate>
+              </p>
+            </div>
+            <div class="column" />
           </div>
-          <div class="column" />
-        </div>
-      </section>
-      <footer class="modal-card-foot">
-        {onClear && <button class="button is-danger" onClick={onClear} 
disabled={onClear === undefined} ><Translate>Set external 
authorization</Translate></button>}
-        <div class="buttons is-right" style={{ width: '100%' }}>
-          <button class="button " onClick={onCancel} 
><Translate>Cancel</Translate></button>
-          <button class="button is-info" onClick={() => 
onConfirm(form.new_token!)} disabled={hasErrors} ><Translate>Set access 
token</Translate></button>
-        </div>
-      </footer>
+        </section>
+        <footer class="modal-card-foot">
+          {onClear && (
+            <button
+              class="button is-danger"
+              onClick={onClear}
+              disabled={onClear === undefined}
+            >
+              <Translate>Set external authorization</Translate>
+            </button>
+          )}
+          <div class="buttons is-right" style={{ width: "100%" }}>
+            <button class="button " onClick={onCancel}>
+              <Translate>Cancel</Translate>
+            </button>
+            <button
+              class="button is-info"
+              onClick={() => onConfirm(form.new_token!)}
+              disabled={hasErrors}
+            >
+              <Translate>Set access token</Translate>
+            </button>
+          </div>
+        </footer>
+      </div>
+      <button
+        class="modal-close is-large "
+        aria-label="close"
+        onClick={onCancel}
+      />
     </div>
-    <button class="modal-close is-large " aria-label="close" 
onClick={onCancel} />
-  </div>
+  );
 }
 
 export function LoadingModal({ onCancel }: { onCancel: () => void }): VNode {
-  const i18n = useTranslator()
-  return <div class="modal is-active">
-    <div class="modal-background " onClick={onCancel} />
-    <div class="modal-card">
-      <header class="modal-card-head">
-        <p class="modal-card-title"><Translate>Operation in 
progress...</Translate></p>
-      </header>
-      <section class="modal-card-body">
-        <div class="columns">
-          <div class="column" />
-          <Spinner />
-          <div class="column" />
-        </div>
-        <p>{i18n`The operation will be automatically canceled after 
${DEFAULT_REQUEST_TIMEOUT} seconds`}</p>
-      </section>
-      <footer class="modal-card-foot">
-        <div class="buttons is-right" style={{ width: '100%' }}>
-          <button class="button " onClick={onCancel} 
><Translate>Cancel</Translate></button>
-        </div>
-      </footer>
+  const i18n = useTranslator();
+  return (
+    <div class="modal is-active">
+      <div class="modal-background " onClick={onCancel} />
+      <div class="modal-card">
+        <header class="modal-card-head">
+          <p class="modal-card-title">
+            <Translate>Operation in progress...</Translate>
+          </p>
+        </header>
+        <section class="modal-card-body">
+          <div class="columns">
+            <div class="column" />
+            <Spinner />
+            <div class="column" />
+          </div>
+          <p>{i18n`The operation will be automatically canceled after 
${DEFAULT_REQUEST_TIMEOUT} seconds`}</p>
+        </section>
+        <footer class="modal-card-foot">
+          <div class="buttons is-right" style={{ width: "100%" }}>
+            <button class="button " onClick={onCancel}>
+              <Translate>Cancel</Translate>
+            </button>
+          </div>
+        </footer>
+      </div>
+      <button
+        class="modal-close is-large "
+        aria-label="close"
+        onClick={onCancel}
+      />
     </div>
-    <button class="modal-close is-large " aria-label="close" 
onClick={onCancel} />
-  </div>
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/components/notifications/CreatedSuccessfully.tsx
 
b/packages/merchant-backoffice-ui/src/components/notifications/CreatedSuccessfully.tsx
index 4089f2222..073382fb1 100644
--- 
a/packages/merchant-backoffice-ui/src/components/notifications/CreatedSuccessfully.tsx
+++ 
b/packages/merchant-backoffice-ui/src/components/notifications/CreatedSuccessfully.tsx
@@ -14,9 +14,9 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { ComponentChildren, h, VNode } from "preact";
 
 interface Props {
@@ -25,25 +25,33 @@ interface Props {
   children: ComponentChildren;
 }
 
-export function CreatedSuccessfully({ children, onConfirm, onCreateAnother }: 
Props): VNode {
-  return <div class="columns is-fullwidth is-vcentered mt-3">
-    <div class="column" />
-    <div class="column is-four-fifths">
-      <div class="card">
-        <header class="card-header has-background-success">
-          <p class="card-header-title has-text-white-ter">
-            Success.
-          </p>
-        </header>
-        <div class="card-content">
-          {children}
+export function CreatedSuccessfully({
+  children,
+  onConfirm,
+  onCreateAnother,
+}: Props): VNode {
+  return (
+    <div class="columns is-fullwidth is-vcentered mt-3">
+      <div class="column" />
+      <div class="column is-four-fifths">
+        <div class="card">
+          <header class="card-header has-background-success">
+            <p class="card-header-title has-text-white-ter">Success.</p>
+          </header>
+          <div class="card-content">{children}</div>
         </div>
-      </div>
         <div class="buttons is-right">
-          {onCreateAnother && <button class="button is-info" 
onClick={onCreateAnother}>Create another</button>}
-          <button class="button is-info" onClick={onConfirm}>Continue</button>
+          {onCreateAnother && (
+            <button class="button is-info" onClick={onCreateAnother}>
+              Create another
+            </button>
+          )}
+          <button class="button is-info" onClick={onConfirm}>
+            Continue
+          </button>
         </div>
+      </div>
+      <div class="column" />
     </div>
-    <div class="column" />
-  </div>
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/components/notifications/Notifications.stories.tsx
 
b/packages/merchant-backoffice-ui/src/components/notifications/Notifications.stories.tsx
index 8bc6818b7..af594de0f 100644
--- 
a/packages/merchant-backoffice-ui/src/components/notifications/Notifications.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/components/notifications/Notifications.stories.tsx
@@ -15,43 +15,48 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h } from 'preact';
+import { h } from "preact";
 import { Notifications } from "./index.js";
 
-
 export default {
-  title: 'Components/Notification',
+  title: "Components/Notification",
   component: Notifications,
   argTypes: {
-    removeNotification: { action: 'removeNotification' },
+    removeNotification: { action: "removeNotification" },
   },
 };
 
 export const Info = (a: any) => <Notifications {...a} />;
 Info.args = {
-  notifications: [{
-    message: 'Title',
-    description: 'Some large description',
-    type: 'INFO',
-  }]
-}
+  notifications: [
+    {
+      message: "Title",
+      description: "Some large description",
+      type: "INFO",
+    },
+  ],
+};
 export const Warn = (a: any) => <Notifications {...a} />;
 Warn.args = {
-  notifications: [{
-    message: 'Title',
-    description: 'Some large description',
-    type: 'WARN',
-  }]
-}
+  notifications: [
+    {
+      message: "Title",
+      description: "Some large description",
+      type: "WARN",
+    },
+  ],
+};
 export const Error = (a: any) => <Notifications {...a} />;
 Error.args = {
-  notifications: [{
-    message: 'Title',
-    description: 'Some large description',
-    type: 'ERROR',
-  }]
-}
+  notifications: [
+    {
+      message: "Title",
+      description: "Some large description",
+      type: "ERROR",
+    },
+  ],
+};
diff --git 
a/packages/merchant-backoffice-ui/src/components/notifications/index.tsx 
b/packages/merchant-backoffice-ui/src/components/notifications/index.tsx
index 7c4ab7e2d..235c75577 100644
--- a/packages/merchant-backoffice-ui/src/components/notifications/index.tsx
+++ b/packages/merchant-backoffice-ui/src/components/notifications/index.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { h, VNode } from "preact";
 import { MessageType, Notification } from "../../utils/types.js";
@@ -29,24 +29,37 @@ interface Props {
 
 function messageStyle(type: MessageType): string {
   switch (type) {
-    case "INFO": return "message is-info";
-    case "WARN": return "message is-warning";
-    case "ERROR": return "message is-danger";
-    case "SUCCESS": return "message is-success";
-    default: return "message"
+    case "INFO":
+      return "message is-info";
+    case "WARN":
+      return "message is-warning";
+    case "ERROR":
+      return "message is-danger";
+    case "SUCCESS":
+      return "message is-success";
+    default:
+      return "message";
   }
 }
 
-export function Notifications({ notifications, removeNotification }: Props): 
VNode {
-  return <div class="toast">
-    {notifications.map((n,i) => <article key={i} class={messageStyle(n.type)}>
-      <div class="message-header">
-        <p>{n.message}</p>
-        <button class="delete" onClick={() => removeNotification && 
removeNotification(n)} />
-      </div>
-      {n.description && <div class="message-body">
-        {n.description}
-      </div>}
-    </article>)}
-  </div>
-}
\ No newline at end of file
+export function Notifications({
+  notifications,
+  removeNotification,
+}: Props): VNode {
+  return (
+    <div class="toast">
+      {notifications.map((n, i) => (
+        <article key={i} class={messageStyle(n.type)}>
+          <div class="message-header">
+            <p>{n.message}</p>
+            <button
+              class="delete"
+              onClick={() => removeNotification && removeNotification(n)}
+            />
+          </div>
+          {n.description && <div class="message-body">{n.description}</div>}
+        </article>
+      ))}
+    </div>
+  );
+}
diff --git 
a/packages/merchant-backoffice-ui/src/components/picker/DatePicker.tsx 
b/packages/merchant-backoffice-ui/src/components/picker/DatePicker.tsx
index 79b4fa5b1..0bc629d46 100644
--- a/packages/merchant-backoffice-ui/src/components/picker/DatePicker.tsx
+++ b/packages/merchant-backoffice-ui/src/components/picker/DatePicker.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { h, Component } from "preact";
 
@@ -35,36 +35,33 @@ interface State {
 
 // inspired by https://codepen.io/m4r1vs/pen/MOOxyE
 export class DatePicker extends Component<Props, State> {
-
   closeDatePicker() {
     this.props.closeFunction && this.props.closeFunction(); // Function gets 
passed by parent
   }
 
   /**
-  * Gets fired when a day gets clicked.
-  * @param {object} e The event thrown by the <span /> element clicked
-  */
+   * Gets fired when a day gets clicked.
+   * @param {object} e The event thrown by the <span /> element clicked
+   */
   dayClicked(e: any) {
-
     const element = e.target; // the actual element clicked
 
-    if (element.innerHTML === '') return false; // don't continue if <span /> 
empty
+    if (element.innerHTML === "") return false; // don't continue if <span /> 
empty
 
     // get date from clicked element (gets attached when rendered)
-    const date = new Date(element.getAttribute('data-value'));
+    const date = new Date(element.getAttribute("data-value"));
 
     // update the state
     this.setState({ currentDate: date });
-    this.passDateToParent(date)
+    this.passDateToParent(date);
   }
 
   /**
-  * returns days in month as array
-  * @param {number} month the month to display
-  * @param {number} year the year to display
-  */
+   * returns days in month as array
+   * @param {number} month the month to display
+   * @param {number} year the year to display
+   */
   getDaysByMonth(month: number, year: number) {
-
     const calendar = [];
 
     const date = new Date(year, month, 1); // month to display
@@ -76,15 +73,17 @@ export class DatePicker extends Component<Props, State> {
 
     // the calendar is 7*6 fields big, so 42 loops
     for (let i = 0; i < 42; i++) {
-
       if (i >= firstDay && day !== null) day = day + 1;
       if (day !== null && day > lastDate) day = null;
 
       // append the calendar Array
       calendar.push({
-        day: (day === 0 || day === null) ? null : day, // null or number
-        date: (day === 0 || day === null) ? null : new Date(year, month, day), 
// null or Date()
-        today: (day === now.getDate() && month === now.getMonth() && year === 
now.getFullYear()) // boolean
+        day: day === 0 || day === null ? null : day, // null or number
+        date: day === 0 || day === null ? null : new Date(year, month, day), 
// null or Date()
+        today:
+          day === now.getDate() &&
+          month === now.getMonth() &&
+          year === now.getFullYear(), // boolean
       });
     }
 
@@ -92,51 +91,48 @@ export class DatePicker extends Component<Props, State> {
   }
 
   /**
-  * Display previous month by updating state
-  */
+   * Display previous month by updating state
+   */
   displayPrevMonth() {
     if (this.state.displayedMonth <= 0) {
       this.setState({
         displayedMonth: 11,
-        displayedYear: this.state.displayedYear - 1
+        displayedYear: this.state.displayedYear - 1,
       });
-    }
-    else {
+    } else {
       this.setState({
-        displayedMonth: this.state.displayedMonth - 1
+        displayedMonth: this.state.displayedMonth - 1,
       });
     }
   }
 
   /**
-  * Display next month by updating state
-  */
+   * Display next month by updating state
+   */
   displayNextMonth() {
     if (this.state.displayedMonth >= 11) {
       this.setState({
         displayedMonth: 0,
-        displayedYear: this.state.displayedYear + 1
+        displayedYear: this.state.displayedYear + 1,
       });
-    }
-    else {
+    } else {
       this.setState({
-        displayedMonth: this.state.displayedMonth + 1
+        displayedMonth: this.state.displayedMonth + 1,
       });
     }
   }
 
   /**
-  * Display the selected month (gets fired when clicking on the date string)
-  */
+   * Display the selected month (gets fired when clicking on the date string)
+   */
   displaySelectedMonth() {
     if (this.state.selectYearMode) {
       this.toggleYearSelector();
-    }
-    else {
+    } else {
       if (!this.state.currentDate) return false;
       this.setState({
         displayedMonth: this.state.currentDate.getMonth(),
-        displayedYear: this.state.currentDate.getFullYear()
+        displayedYear: this.state.currentDate.getFullYear(),
       });
     }
   }
@@ -148,23 +144,27 @@ export class DatePicker extends Component<Props, State> {
   changeDisplayedYear(e: any) {
     const element = e.target;
     this.toggleYearSelector();
-    this.setState({ displayedYear: parseInt(element.innerHTML, 10), 
displayedMonth: 0 });
+    this.setState({
+      displayedYear: parseInt(element.innerHTML, 10),
+      displayedMonth: 0,
+    });
   }
 
   /**
-  * Pass the selected date to parent when 'OK' is clicked
-  */
+   * Pass the selected date to parent when 'OK' is clicked
+   */
   passSavedDateDateToParent() {
-    this.passDateToParent(this.state.currentDate)
+    this.passDateToParent(this.state.currentDate);
   }
   passDateToParent(date: Date) {
-    if (typeof this.props.dateReceiver === 'function') 
this.props.dateReceiver(date);
+    if (typeof this.props.dateReceiver === "function")
+      this.props.dateReceiver(date);
     this.closeDatePicker();
   }
 
   componentDidUpdate() {
     if (this.state.selectYearMode) {
-      document.getElementsByClassName('selected')[0].scrollIntoView(); // 
works in every browser incl. IE, replace with scrollIntoViewIfNeeded when 
browsers support it
+      document.getElementsByClassName("selected")[0].scrollIntoView(); // 
works in every browser incl. IE, replace with scrollIntoViewIfNeeded when 
browsers support it
     }
   }
 
@@ -181,143 +181,168 @@ export class DatePicker extends Component<Props, State> 
{
     this.toggleYearSelector = this.toggleYearSelector.bind(this);
     this.displaySelectedMonth = this.displaySelectedMonth.bind(this);
 
-
     this.state = {
       currentDate: now,
       displayedMonth: now.getMonth(),
       displayedYear: now.getFullYear(),
-      selectYearMode: false
-    }
+      selectYearMode: false,
+    };
   }
 
   render() {
-
-    const { currentDate, displayedMonth, displayedYear, selectYearMode } = 
this.state;
+    const { currentDate, displayedMonth, displayedYear, selectYearMode } =
+      this.state;
 
     return (
       <div>
-        <div class={`datePicker ${  this.props.opened && 
"datePicker--opened"}`} >
-
+        <div class={`datePicker ${this.props.opened && "datePicker--opened"}`}>
           <div class="datePicker--titles">
-            <h3 style={{
-              color: selectYearMode ? 'rgba(255,255,255,.87)' : 
'rgba(255,255,255,.57)'
-            }} 
onClick={this.toggleYearSelector}>{currentDate.getFullYear()}</h3>
-            <h2 style={{
-              color: !selectYearMode ? 'rgba(255,255,255,.87)' : 
'rgba(255,255,255,.57)'
-            }} onClick={this.displaySelectedMonth}>
-              {dayArr[currentDate.getDay()]}, 
{monthArrShort[currentDate.getMonth()]} {currentDate.getDate()}
+            <h3
+              style={{
+                color: selectYearMode
+                  ? "rgba(255,255,255,.87)"
+                  : "rgba(255,255,255,.57)",
+              }}
+              onClick={this.toggleYearSelector}
+            >
+              {currentDate.getFullYear()}
+            </h3>
+            <h2
+              style={{
+                color: !selectYearMode
+                  ? "rgba(255,255,255,.87)"
+                  : "rgba(255,255,255,.57)",
+              }}
+              onClick={this.displaySelectedMonth}
+            >
+              {dayArr[currentDate.getDay()]},{" "}
+              {monthArrShort[currentDate.getMonth()]} {currentDate.getDate()}
             </h2>
           </div>
 
-          {!selectYearMode && <nav>
-            <span onClick={this.displayPrevMonth} class="icon"><i style={{ 
transform: 'rotate(180deg)' }} class="mdi mdi-forward" /></span>
-            <h4>{monthArrShortFull[displayedMonth]} {displayedYear}</h4>
-            <span onClick={this.displayNextMonth} class="icon"><i class="mdi 
mdi-forward" /></span>
-          </nav>}
+          {!selectYearMode && (
+            <nav>
+              <span onClick={this.displayPrevMonth} class="icon">
+                <i
+                  style={{ transform: "rotate(180deg)" }}
+                  class="mdi mdi-forward"
+                />
+              </span>
+              <h4>
+                {monthArrShortFull[displayedMonth]} {displayedYear}
+              </h4>
+              <span onClick={this.displayNextMonth} class="icon">
+                <i class="mdi mdi-forward" />
+              </span>
+            </nav>
+          )}
 
           <div class="datePicker--scroll">
-
-            {!selectYearMode && <div class="datePicker--calendar" >
-
-              <div class="datePicker--dayNames">
-                {['S', 'M', 'T', 'W', 'T', 'F', 'S'].map((day,i) => <span 
key={i}>{day}</span>)}
-              </div>
-
-              <div onClick={this.dayClicked} class="datePicker--days">
-
-                {/*
+            {!selectYearMode && (
+              <div class="datePicker--calendar">
+                <div class="datePicker--dayNames">
+                  {["S", "M", "T", "W", "T", "F", "S"].map((day, i) => (
+                    <span key={i}>{day}</span>
+                  ))}
+                </div>
+
+                <div onClick={this.dayClicked} class="datePicker--days">
+                  {/*
                   Loop through the calendar object returned by 
getDaysByMonth().
                 */}
 
-                {this.getDaysByMonth(this.state.displayedMonth, 
this.state.displayedYear)
-                  .map(
-                    day => {
-                      let selected = false;
-
-                      if (currentDate && day.date) selected = 
(currentDate.toLocaleDateString() === day.date.toLocaleDateString());
-
-                      return (<span key={day.day}
-                        class={(day.today ? 'datePicker--today ' : '') + 
(selected ? 'datePicker--selected' : '')}
+                  {this.getDaysByMonth(
+                    this.state.displayedMonth,
+                    this.state.displayedYear,
+                  ).map((day) => {
+                    let selected = false;
+
+                    if (currentDate && day.date)
+                      selected =
+                        currentDate.toLocaleDateString() ===
+                        day.date.toLocaleDateString();
+
+                    return (
+                      <span
+                        key={day.day}
+                        class={
+                          (day.today ? "datePicker--today " : "") +
+                          (selected ? "datePicker--selected" : "")
+                        }
                         disabled={!day.date}
                         data-value={day.date}
                       >
                         {day.day}
-                      </span>)
-                    }
-                  )
-                }
-
+                      </span>
+                    );
+                  })}
+                </div>
               </div>
-
-            </div>}
-
-            {selectYearMode && <div class="datePicker--selectYear">
-
-              {yearArr.map(year => (
-                <span key={year} class={(year === displayedYear) ? 'selected' 
: ''} onClick={this.changeDisplayedYear}>
-                  {year}
-                </span>
-              ))}
-
-            </div>}
-
+            )}
+
+            {selectYearMode && (
+              <div class="datePicker--selectYear">
+                {yearArr.map((year) => (
+                  <span
+                    key={year}
+                    class={year === displayedYear ? "selected" : ""}
+                    onClick={this.changeDisplayedYear}
+                  >
+                    {year}
+                  </span>
+                ))}
+              </div>
+            )}
           </div>
         </div>
 
-        <div class="datePicker--background" onClick={this.closeDatePicker} 
style={{
-          display: this.props.opened ? 'block' : 'none'
-        }}
+        <div
+          class="datePicker--background"
+          onClick={this.closeDatePicker}
+          style={{
+            display: this.props.opened ? "block" : "none",
+          }}
         />
-
       </div>
-    )
+    );
   }
 }
 
-
 const monthArrShortFull = [
-  'January',
-  'February',
-  'March',
-  'April',
-  'May',
-  'June',
-  'July',
-  'August',
-  'September',
-  'October',
-  'November',
-  'December'
-]
+  "January",
+  "February",
+  "March",
+  "April",
+  "May",
+  "June",
+  "July",
+  "August",
+  "September",
+  "October",
+  "November",
+  "December",
+];
 
 const monthArrShort = [
-  'Jan',
-  'Feb',
-  'Mar',
-  'Apr',
-  'May',
-  'Jun',
-  'Jul',
-  'Aug',
-  'Sep',
-  'Oct',
-  'Nov',
-  'Dec'
-]
-
-const dayArr = [
-  'Sun',
-  'Mon',
-  'Tue',
-  'Wed',
-  'Thu',
-  'Fri',
-  'Sat'
-]
-
-const now = new Date()
-
-const yearArr: number[] = []
+  "Jan",
+  "Feb",
+  "Mar",
+  "Apr",
+  "May",
+  "Jun",
+  "Jul",
+  "Aug",
+  "Sep",
+  "Oct",
+  "Nov",
+  "Dec",
+];
+
+const dayArr = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
+
+const now = new Date();
+
+const yearArr: number[] = [];
 
 for (let i = 2010; i <= now.getFullYear() + 10; i++) {
   yearArr.push(i);
diff --git 
a/packages/merchant-backoffice-ui/src/components/picker/DurationPicker.stories.tsx
 
b/packages/merchant-backoffice-ui/src/components/picker/DurationPicker.stories.tsx
index 888bf17b0..8f74d55ac 100644
--- 
a/packages/merchant-backoffice-ui/src/components/picker/DurationPicker.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/components/picker/DurationPicker.stories.tsx
@@ -15,36 +15,41 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, FunctionalComponent } from 'preact';
-import { useState } from 'preact/hooks';
+import { h, FunctionalComponent } from "preact";
+import { useState } from "preact/hooks";
 import { DurationPicker as TestedComponent } from "./DurationPicker.js";
 
-
 export default {
-  title: 'Components/Picker/Duration',
+  title: "Components/Picker/Duration",
   component: TestedComponent,
   argTypes: {
-    onCreate: { action: 'onCreate' },
-    goBack: { action: 'goBack' },
-  }
+    onCreate: { action: "onCreate" },
+    goBack: { action: "goBack" },
+  },
 };
 
-function createExample<Props>(Component: FunctionalComponent<Props>, props: 
Partial<Props>) {
-  const r = (args: any) => <Component {...args} />
-  r.args = props
-  return r
+function createExample<Props>(
+  Component: FunctionalComponent<Props>,
+  props: Partial<Props>,
+) {
+  const r = (args: any) => <Component {...args} />;
+  r.args = props;
+  return r;
 }
 
 export const Example = createExample(TestedComponent, {
-  days: true, minutes: true, hours: true, seconds: true,
-  value: 10000000
+  days: true,
+  minutes: true,
+  hours: true,
+  seconds: true,
+  value: 10000000,
 });
 
 export const WithState = () => {
-  const [v,s] = useState<number>(1000000)
-  return <TestedComponent value={v} onChange={s} days minutes hours seconds />
-}
+  const [v, s] = useState<number>(1000000);
+  return <TestedComponent value={v} onChange={s} days minutes hours seconds />;
+};
diff --git 
a/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.stories.tsx
 
b/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.stories.tsx
index 68bf7e438..2d5a54cde 100644
--- 
a/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.stories.tsx
@@ -15,44 +15,48 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode, FunctionalComponent } from 'preact';
+import { h, VNode, FunctionalComponent } from "preact";
 import { InventoryProductForm as TestedComponent } from 
"./InventoryProductForm.js";
 
-
 export default {
-  title: 'Components/Product/Add',
+  title: "Components/Product/Add",
   component: TestedComponent,
   argTypes: {
-    onAddProduct: { action: 'onAddProduct' },
+    onAddProduct: { action: "onAddProduct" },
   },
 };
 
-function createExample<Props>(Component: FunctionalComponent<Props>, props: 
Partial<Props>) {
-  const r = (args: any) => <Component {...args} />
-  r.args = props
-  return r
+function createExample<Props>(
+  Component: FunctionalComponent<Props>,
+  props: Partial<Props>,
+) {
+  const r = (args: any) => <Component {...args} />;
+  r.args = props;
+  return r;
 }
 
 export const WithASimpleList = createExample(TestedComponent, {
-  inventory:[{
-    id: 'this id',
-    description: 'this is the description',
-  } as any]
+  inventory: [
+    {
+      id: "this id",
+      description: "this is the description",
+    } as any,
+  ],
 });
 
 export const WithAProductSelected = createExample(TestedComponent, {
-  inventory:[],
+  inventory: [],
   currentProducts: {
     thisid: {
       quantity: 1,
       product: {
-        id: 'asd',
-        description: 'asdsadsad',
-      } as any
-    }
-  }
+        id: "asd",
+        description: "asdsadsad",
+      } as any,
+    },
+  },
 });
diff --git 
a/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.tsx
 
b/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.tsx
index e44044372..da47f1be3 100644
--- 
a/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.tsx
+++ 
b/packages/merchant-backoffice-ui/src/components/product/InventoryProductForm.tsx
@@ -23,24 +23,32 @@ import { Translate, useTranslator } from 
"../../i18n/index.js";
 import { ProductMap } from "../../paths/instance/orders/create/CreatePage.js";
 
 type Form = {
-  product: MerchantBackend.Products.ProductDetail & WithId,
+  product: MerchantBackend.Products.ProductDetail & WithId;
   quantity: number;
-}
+};
 
 interface Props {
-  currentProducts: ProductMap,
-  onAddProduct: (product: MerchantBackend.Products.ProductDetail & WithId, 
quantity: number) => void,
-  inventory: (MerchantBackend.Products.ProductDetail & WithId)[],
+  currentProducts: ProductMap;
+  onAddProduct: (
+    product: MerchantBackend.Products.ProductDetail & WithId,
+    quantity: number,
+  ) => void;
+  inventory: (MerchantBackend.Products.ProductDetail & WithId)[];
 }
 
-export function InventoryProductForm({ currentProducts, onAddProduct, 
inventory }: Props): VNode {
-  const initialState = { quantity: 1 }
-  const [state, setState] = useState<Partial<Form>>(initialState)
-  const [errors, setErrors] = useState<FormErrors<Form>>({})
+export function InventoryProductForm({
+  currentProducts,
+  onAddProduct,
+  inventory,
+}: Props): VNode {
+  const initialState = { quantity: 1 };
+  const [state, setState] = useState<Partial<Form>>(initialState);
+  const [errors, setErrors] = useState<FormErrors<Form>>({});
 
-  const i18n = useTranslator()
+  const i18n = useTranslator();
 
-  const productWithInfiniteStock = state.product && state.product.total_stock 
=== -1
+  const productWithInfiniteStock =
+    state.product && state.product.total_stock === -1;
 
   const submit = (): void => {
     if (!state.product) {
@@ -48,48 +56,68 @@ export function InventoryProductForm({ currentProducts, 
onAddProduct, inventory
       return;
     }
     if (productWithInfiniteStock) {
-      onAddProduct(state.product, 1)
+      onAddProduct(state.product, 1);
     } else {
       if (!state.quantity || state.quantity <= 0) {
         setErrors({ quantity: i18n`Quantity must be greater than 0!` });
         return;
       }
-      const currentStock = state.product.total_stock - 
state.product.total_lost - state.product.total_sold
-      const p = currentProducts[state.product.id]
+      const currentStock =
+        state.product.total_stock -
+        state.product.total_lost -
+        state.product.total_sold;
+      const p = currentProducts[state.product.id];
       if (p) {
         if (state.quantity + p.quantity > currentStock) {
           const left = currentStock - p.quantity;
-          setErrors({ quantity: i18n`This quantity exceeds remaining stock. 
Currently, only ${left} units remain unreserved in stock.` });
+          setErrors({
+            quantity: i18n`This quantity exceeds remaining stock. Currently, 
only ${left} units remain unreserved in stock.`,
+          });
           return;
         }
-        onAddProduct(state.product, state.quantity + p.quantity)
+        onAddProduct(state.product, state.quantity + p.quantity);
       } else {
         if (state.quantity > currentStock) {
           const left = currentStock;
-          setErrors({ quantity: i18n`This quantity exceeds remaining stock. 
Currently, only ${left} units remain unreserved in stock.` });
+          setErrors({
+            quantity: i18n`This quantity exceeds remaining stock. Currently, 
only ${left} units remain unreserved in stock.`,
+          });
           return;
         }
-        onAddProduct(state.product, state.quantity)
+        onAddProduct(state.product, state.quantity);
       }
     }
 
-    setState(initialState)
-  }
+    setState(initialState);
+  };
 
-  return <FormProvider<Form> errors={errors} object={state} 
valueHandler={setState}>
-    <InputSearchProduct selected={state.product} onChange={(p) => setState(v 
=> ({ ...v, product: p }))} products={inventory} />
-    { state.product && <div class="columns mt-5">
-      <div class="column is-two-thirds">
-        {!productWithInfiniteStock &&
-          <InputNumber<Form> name="quantity" label={i18n`Quantity`} 
tooltip={i18n`how many products will be added`} />
-        }
-      </div>
-      <div class="column">
-        <div class="buttons is-right">
-          <button class="button is-success" onClick={submit}><Translate>Add 
from inventory</Translate></button>
+  return (
+    <FormProvider<Form> errors={errors} object={state} valueHandler={setState}>
+      <InputSearchProduct
+        selected={state.product}
+        onChange={(p) => setState((v) => ({ ...v, product: p }))}
+        products={inventory}
+      />
+      {state.product && (
+        <div class="columns mt-5">
+          <div class="column is-two-thirds">
+            {!productWithInfiniteStock && (
+              <InputNumber<Form>
+                name="quantity"
+                label={i18n`Quantity`}
+                tooltip={i18n`how many products will be added`}
+              />
+            )}
+          </div>
+          <div class="column">
+            <div class="buttons is-right">
+              <button class="button is-success" onClick={submit}>
+                <Translate>Add from inventory</Translate>
+              </button>
+            </div>
+          </div>
         </div>
-      </div>
-    </div> }
-
-  </FormProvider>
+      )}
+    </FormProvider>
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/components/product/NonInventoryProductForm.tsx
 
b/packages/merchant-backoffice-ui/src/components/product/NonInventoryProductForm.tsx
index b468a4e86..fe9692c02 100644
--- 
a/packages/merchant-backoffice-ui/src/components/product/NonInventoryProductForm.tsx
+++ 
b/packages/merchant-backoffice-ui/src/components/product/NonInventoryProductForm.tsx
@@ -15,7 +15,7 @@
  */
 import { Fragment, h, VNode } from "preact";
 import { useCallback, useEffect, useState } from "preact/hooks";
-import * as yup from 'yup';
+import * as yup from "yup";
 import { FormErrors, FormProvider } from "../form/FormProvider.js";
 import { Input } from "../form/Input.js";
 import { InputCurrency } from "../form/InputCurrency.js";
@@ -25,67 +25,104 @@ import { InputTaxes } from "../form/InputTaxes.js";
 import { MerchantBackend } from "../../declaration.js";
 import { useListener } from "../../hooks/listener.js";
 import { Translate, useTranslator } from "../../i18n/index.js";
-import {
-  NonInventoryProductSchema as schema
-} from "../../schemas/index.js";
+import { NonInventoryProductSchema as schema } from "../../schemas/index.js";
 
-
-type Entity = MerchantBackend.Product
+type Entity = MerchantBackend.Product;
 
 interface Props {
   onAddProduct: (p: Entity) => Promise<void>;
   productToEdit?: Entity;
 }
-export function NonInventoryProductFrom({ productToEdit, onAddProduct }: 
Props): VNode {
-  const [showCreateProduct, setShowCreateProduct] = useState(false)
+export function NonInventoryProductFrom({
+  productToEdit,
+  onAddProduct,
+}: Props): VNode {
+  const [showCreateProduct, setShowCreateProduct] = useState(false);
 
-  const isEditing = !!productToEdit
+  const isEditing = !!productToEdit;
 
   useEffect(() => {
-    setShowCreateProduct(isEditing)
-  }, [isEditing])
+    setShowCreateProduct(isEditing);
+  }, [isEditing]);
 
-  const [submitForm, addFormSubmitter] = 
useListener<Partial<MerchantBackend.Product> | undefined>((result) => {
+  const [submitForm, addFormSubmitter] = useListener<
+    Partial<MerchantBackend.Product> | undefined
+  >((result) => {
     if (result) {
-      setShowCreateProduct(false)
+      setShowCreateProduct(false);
       return onAddProduct({
         quantity: result.quantity || 0,
         taxes: result.taxes || [],
-        description: result.description || '',
-        image: result.image || '',
-        price: result.price || '',
-        unit: result.unit || ''
-      })
+        description: result.description || "",
+        image: result.image || "",
+        price: result.price || "",
+        unit: result.unit || "",
+      });
     }
-    return Promise.resolve()
-  })
-
-  const i18n = useTranslator()
-
-  return <Fragment>
-    <div class="buttons">
-      <button class="button is-success" data-tooltip={i18n`describe and add a 
product that is not in the inventory list`} onClick={() => 
setShowCreateProduct(true)} ><Translate>Add custom product</Translate></button>
-    </div>
-    {showCreateProduct && <div class="modal is-active">
-      <div class="modal-background " onClick={() => 
setShowCreateProduct(false)} />
-      <div class="modal-card">
-        <header class="modal-card-head">
-          <p class="modal-card-title">{i18n`Complete information of the 
product`}</p>
-          <button class="delete " aria-label="close" onClick={() => 
setShowCreateProduct(false)} />
-        </header>
-        <section class="modal-card-body">
-          <ProductForm initial={productToEdit} onSubscribe={addFormSubmitter} 
/>
-        </section>
-        <footer class="modal-card-foot">
-          <div class="buttons is-right" style={{ width: '100%' }}>
-            <button class="button " onClick={() => 
setShowCreateProduct(false)} ><Translate>Cancel</Translate></button>
-            <button class="button is-info " disabled={!submitForm} 
onClick={submitForm} ><Translate>Confirm</Translate></button>
-          </div>
-        </footer>
+    return Promise.resolve();
+  });
+
+  const i18n = useTranslator();
+
+  return (
+    <Fragment>
+      <div class="buttons">
+        <button
+          class="button is-success"
+          data-tooltip={i18n`describe and add a product that is not in the 
inventory list`}
+          onClick={() => setShowCreateProduct(true)}
+        >
+          <Translate>Add custom product</Translate>
+        </button>
       </div>
-      <button class="modal-close is-large " aria-label="close" onClick={() => 
setShowCreateProduct(false)} />
-    </div>}
-  </Fragment>
+      {showCreateProduct && (
+        <div class="modal is-active">
+          <div
+            class="modal-background "
+            onClick={() => setShowCreateProduct(false)}
+          />
+          <div class="modal-card">
+            <header class="modal-card-head">
+              <p class="modal-card-title">{i18n`Complete information of the 
product`}</p>
+              <button
+                class="delete "
+                aria-label="close"
+                onClick={() => setShowCreateProduct(false)}
+              />
+            </header>
+            <section class="modal-card-body">
+              <ProductForm
+                initial={productToEdit}
+                onSubscribe={addFormSubmitter}
+              />
+            </section>
+            <footer class="modal-card-foot">
+              <div class="buttons is-right" style={{ width: "100%" }}>
+                <button
+                  class="button "
+                  onClick={() => setShowCreateProduct(false)}
+                >
+                  <Translate>Cancel</Translate>
+                </button>
+                <button
+                  class="button is-info "
+                  disabled={!submitForm}
+                  onClick={submitForm}
+                >
+                  <Translate>Confirm</Translate>
+                </button>
+              </div>
+            </footer>
+          </div>
+          <button
+            class="modal-close is-large "
+            aria-label="close"
+            onClick={() => setShowCreateProduct(false)}
+          />
+        </div>
+      )}
+    </Fragment>
+  );
 }
 
 interface ProductProps {
@@ -106,41 +143,73 @@ export function ProductForm({ onSubscribe, initial }: 
ProductProps): VNode {
   const [value, valueHandler] = useState<Partial<NonInventoryProduct>>({
     taxes: [],
     ...initial,
-  })
-  let errors: FormErrors<Entity> = {}
+  });
+  let errors: FormErrors<Entity> = {};
   try {
-    schema.validateSync(value, { abortEarly: false })
+    schema.validateSync(value, { abortEarly: false });
   } catch (err) {
     if (err instanceof yup.ValidationError) {
-      const yupErrors = err.inner as yup.ValidationError[]
-      errors = yupErrors.reduce((prev, cur) => !cur.path ? prev : ({ ...prev, 
[cur.path]: cur.message }), {})
+      const yupErrors = err.inner as yup.ValidationError[];
+      errors = yupErrors.reduce(
+        (prev, cur) =>
+          !cur.path ? prev : { ...prev, [cur.path]: cur.message },
+        {},
+      );
     }
   }
 
   const submit = useCallback((): Entity | undefined => {
-    return value as MerchantBackend.Product
-  }, [value])
+    return value as MerchantBackend.Product;
+  }, [value]);
 
-  const hasErrors = Object.keys(errors).some(k => (errors as any)[k] !== 
undefined)
+  const hasErrors = Object.keys(errors).some(
+    (k) => (errors as any)[k] !== undefined,
+  );
 
   useEffect(() => {
-    onSubscribe(hasErrors ? undefined : submit)
-  }, [submit, hasErrors])
-
-  const i18n = useTranslator()
-
-  return <div>
-    <FormProvider<NonInventoryProduct> name="product" errors={errors} 
object={value} valueHandler={valueHandler} >
-
-      <InputImage<NonInventoryProduct> name="image" label={i18n`Image`} 
tooltip={i18n`photo of the product`} />
-      <Input<NonInventoryProduct> name="description" inputType="multiline" 
label={i18n`Description`} tooltip={i18n`full product description`} />
-      <Input<NonInventoryProduct> name="unit" label={i18n`Unit`} 
tooltip={i18n`name of the product unit`} />
-      <InputCurrency<NonInventoryProduct> name="price" label={i18n`Price`} 
tooltip={i18n`amount in the current currency`} />
-
-      <InputNumber<NonInventoryProduct> name="quantity" label={i18n`Quantity`} 
tooltip={i18n`how many products will be added`} />
-
-      <InputTaxes<NonInventoryProduct> name="taxes" label={i18n`Taxes`} />
-
-    </FormProvider>
-  </div>
+    onSubscribe(hasErrors ? undefined : submit);
+  }, [submit, hasErrors]);
+
+  const i18n = useTranslator();
+
+  return (
+    <div>
+      <FormProvider<NonInventoryProduct>
+        name="product"
+        errors={errors}
+        object={value}
+        valueHandler={valueHandler}
+      >
+        <InputImage<NonInventoryProduct>
+          name="image"
+          label={i18n`Image`}
+          tooltip={i18n`photo of the product`}
+        />
+        <Input<NonInventoryProduct>
+          name="description"
+          inputType="multiline"
+          label={i18n`Description`}
+          tooltip={i18n`full product description`}
+        />
+        <Input<NonInventoryProduct>
+          name="unit"
+          label={i18n`Unit`}
+          tooltip={i18n`name of the product unit`}
+        />
+        <InputCurrency<NonInventoryProduct>
+          name="price"
+          label={i18n`Price`}
+          tooltip={i18n`amount in the current currency`}
+        />
+
+        <InputNumber<NonInventoryProduct>
+          name="quantity"
+          label={i18n`Quantity`}
+          tooltip={i18n`how many products will be added`}
+        />
+
+        <InputTaxes<NonInventoryProduct> name="taxes" label={i18n`Taxes`} />
+      </FormProvider>
+    </div>
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/components/product/ProductForm.tsx 
b/packages/merchant-backoffice-ui/src/components/product/ProductForm.tsx
index c078e7cee..a6bb090a5 100644
--- a/packages/merchant-backoffice-ui/src/components/product/ProductForm.tsx
+++ b/packages/merchant-backoffice-ui/src/components/product/ProductForm.tsx
@@ -77,12 +77,12 @@ export function ProductForm({ onSubscribe, initial, 
alreadyExist }: Props) {
       errors = yupErrors.reduce(
         (prev, cur) =>
           !cur.path ? prev : { ...prev, [cur.path]: cur.message },
-        {}
+        {},
       );
     }
   }
   const hasErrors = Object.keys(errors).some(
-    (k) => (errors as any)[k] !== undefined
+    (k) => (errors as any)[k] !== undefined,
   );
 
   const submit = useCallback((): Entity | undefined => {
diff --git 
a/packages/merchant-backoffice-ui/src/components/product/ProductList.tsx 
b/packages/merchant-backoffice-ui/src/components/product/ProductList.tsx
index d8b0104ea..774da8975 100644
--- a/packages/merchant-backoffice-ui/src/components/product/ProductList.tsx
+++ b/packages/merchant-backoffice-ui/src/components/product/ProductList.tsx
@@ -59,8 +59,8 @@ export function ProductList({ list, actions = [] }: Props): 
VNode {
               : Amounts.stringify(
                   Amounts.mult(
                     Amounts.parseOrThrow(entry.price),
-                    entry.quantity
-                  ).amount
+                    entry.quantity,
+                  ).amount,
                 );
 
             return (
diff --git a/packages/merchant-backoffice-ui/src/context/backend.ts 
b/packages/merchant-backoffice-ui/src/context/backend.ts
index 1d11a3aad..f8d1bc397 100644
--- a/packages/merchant-backoffice-ui/src/context/backend.ts
+++ b/packages/merchant-backoffice-ui/src/context/backend.ts
@@ -15,12 +15,12 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { createContext, h, VNode } from 'preact'
-import { useCallback, useContext, useState } from 'preact/hooks'
+import { createContext, h, VNode } from "preact";
+import { useCallback, useContext, useState } from "preact/hooks";
 import { useBackendDefaultToken, useBackendURL } from "../hooks/index.js";
 
 interface BackendContextType {
@@ -34,49 +34,76 @@ interface BackendContextType {
 }
 
 const BackendContext = createContext<BackendContextType>({
-  url: '',
+  url: "",
   token: undefined,
   triedToLog: false,
   resetBackend: () => null,
   clearAllTokens: () => null,
   addTokenCleaner: () => null,
   updateLoginStatus: () => null,
-})
-
-function useBackendContextState(defaultUrl?: string, initialToken?: string): 
BackendContextType {
-  const [url, triedToLog, changeBackend, resetBackend] = 
useBackendURL(defaultUrl);
+});
+
+function useBackendContextState(
+  defaultUrl?: string,
+  initialToken?: string,
+): BackendContextType {
+  const [url, triedToLog, changeBackend, resetBackend] =
+    useBackendURL(defaultUrl);
   const [token, _updateToken] = useBackendDefaultToken(initialToken);
   const updateToken = (t?: string) => {
-    _updateToken(t)
-  }
+    _updateToken(t);
+  };
 
-  const tokenCleaner = useCallback(() => { updateToken(undefined) }, [])
-  const [cleaners, setCleaners] = useState([tokenCleaner])
-  const addTokenCleaner = (c: () => void) => setCleaners(cs => [...cs, c])
-  const addTokenCleanerMemo = useCallback((c: () => void) => { 
addTokenCleaner(c) }, [tokenCleaner])
+  const tokenCleaner = useCallback(() => {
+    updateToken(undefined);
+  }, []);
+  const [cleaners, setCleaners] = useState([tokenCleaner]);
+  const addTokenCleaner = (c: () => void) => setCleaners((cs) => [...cs, c]);
+  const addTokenCleanerMemo = useCallback(
+    (c: () => void) => {
+      addTokenCleaner(c);
+    },
+    [tokenCleaner],
+  );
 
   const clearAllTokens = () => {
-    cleaners.forEach(c => c())
+    cleaners.forEach((c) => c());
     for (let i = 0; i < localStorage.length; i++) {
-      const k = localStorage.key(i)
-      if (k && /^backend-token/.test(k)) localStorage.removeItem(k)
+      const k = localStorage.key(i);
+      if (k && /^backend-token/.test(k)) localStorage.removeItem(k);
     }
-    resetBackend()
-  }
+    resetBackend();
+  };
 
   const updateLoginStatus = (url: string, token?: string) => {
     changeBackend(url);
     if (token) updateToken(token);
   };
 
-
-  return { url, token, triedToLog, updateLoginStatus, resetBackend, 
clearAllTokens, addTokenCleaner: addTokenCleanerMemo }
+  return {
+    url,
+    token,
+    triedToLog,
+    updateLoginStatus,
+    resetBackend,
+    clearAllTokens,
+    addTokenCleaner: addTokenCleanerMemo,
+  };
 }
 
-export const BackendContextProvider = ({ children, defaultUrl, initialToken }: 
{ children: any, defaultUrl?: string, initialToken?: string }): VNode => {
-  const value = useBackendContextState(defaultUrl, initialToken)
+export const BackendContextProvider = ({
+  children,
+  defaultUrl,
+  initialToken,
+}: {
+  children: any;
+  defaultUrl?: string;
+  initialToken?: string;
+}): VNode => {
+  const value = useBackendContextState(defaultUrl, initialToken);
 
   return h(BackendContext.Provider, { value, children });
-}
+};
 
-export const useBackendContext = (): BackendContextType => 
useContext(BackendContext);
+export const useBackendContext = (): BackendContextType =>
+  useContext(BackendContext);
diff --git a/packages/merchant-backoffice-ui/src/context/config.ts 
b/packages/merchant-backoffice-ui/src/context/config.ts
index a0d530830..040bd0341 100644
--- a/packages/merchant-backoffice-ui/src/context/config.ts
+++ b/packages/merchant-backoffice-ui/src/context/config.ts
@@ -15,18 +15,18 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { createContext } from 'preact'
-import { useContext } from 'preact/hooks'
+import { createContext } from "preact";
+import { useContext } from "preact/hooks";
 
 interface Type {
   currency: string;
   version: string;
 }
-const Context = createContext<Type>(null!)
+const Context = createContext<Type>(null!);
 
-export const ConfigContextProvider = Context.Provider
+export const ConfigContextProvider = Context.Provider;
 export const useConfigContext = (): Type => useContext(Context);
diff --git a/packages/merchant-backoffice-ui/src/context/instance.ts 
b/packages/merchant-backoffice-ui/src/context/instance.ts
index a45e8283c..9a25fe80c 100644
--- a/packages/merchant-backoffice-ui/src/context/instance.ts
+++ b/packages/merchant-backoffice-ui/src/context/instance.ts
@@ -15,21 +15,21 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { createContext } from 'preact'
-import { useContext } from 'preact/hooks'
+import { createContext } from "preact";
+import { useContext } from "preact/hooks";
 
 interface Type {
   id: string;
   token?: string;
   admin?: boolean;
-  changeToken: (t?:string) => void;
+  changeToken: (t?: string) => void;
 }
 
-const Context = createContext<Type>({} as any)
+const Context = createContext<Type>({} as any);
 
-export const InstanceContextProvider = Context.Provider
+export const InstanceContextProvider = Context.Provider;
 export const useInstanceContext = (): Type => useContext(Context);
diff --git a/packages/merchant-backoffice-ui/src/context/listener.ts 
b/packages/merchant-backoffice-ui/src/context/listener.ts
index 097810273..cf51bb718 100644
--- a/packages/merchant-backoffice-ui/src/context/listener.ts
+++ b/packages/merchant-backoffice-ui/src/context/listener.ts
@@ -15,21 +15,21 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { createContext } from 'preact'
-import { useContext } from 'preact/hooks'
+import { createContext } from "preact";
+import { useContext } from "preact/hooks";
 
 interface Type {
   id: string;
   token?: string;
   admin?: boolean;
-  changeToken: (t?:string) => void;
+  changeToken: (t?: string) => void;
 }
 
-const Context = createContext<Type>({} as any)
+const Context = createContext<Type>({} as any);
 
-export const ListenerContextProvider = Context.Provider
+export const ListenerContextProvider = Context.Provider;
 export const useListenerContext = (): Type => useContext(Context);
diff --git a/packages/merchant-backoffice-ui/src/context/translation.ts 
b/packages/merchant-backoffice-ui/src/context/translation.ts
index 88359a149..027eac14c 100644
--- a/packages/merchant-backoffice-ui/src/context/translation.ts
+++ b/packages/merchant-backoffice-ui/src/context/translation.ts
@@ -15,13 +15,13 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { createContext, h, VNode } from 'preact'
-import { useContext, useEffect } from 'preact/hooks'
-import { useLang } from '../hooks'
+import { createContext, h, VNode } from "preact";
+import { useContext, useEffect } from "preact/hooks";
+import { useLang } from "../hooks";
 import * as jedLib from "jed";
 import { strings } from "../i18n/strings";
 
@@ -31,29 +31,36 @@ interface Type {
   changeLanguage: (l: string) => void;
 }
 const initial = {
-  lang: 'en',
+  lang: "en",
   handler: null,
   changeLanguage: () => {
     // do not change anything
-  }
-}
-const Context = createContext<Type>(initial)
+  },
+};
+const Context = createContext<Type>(initial);
 
 interface Props {
-  initial?: string,
-  children: any,
-  forceLang?: string
+  initial?: string;
+  children: any;
+  forceLang?: string;
 }
 
-export const TranslationProvider = ({ initial, children, forceLang }: Props): 
VNode => {
-  const [lang, changeLanguage] = useLang(initial)
+export const TranslationProvider = ({
+  initial,
+  children,
+  forceLang,
+}: Props): VNode => {
+  const [lang, changeLanguage] = useLang(initial);
   useEffect(() => {
     if (forceLang) {
-      changeLanguage(forceLang)
+      changeLanguage(forceLang);
     }
-  })
+  });
   const handler = new jedLib.Jed(strings[lang]);
-  return h(Context.Provider, { value: { lang, handler, changeLanguage }, 
children });
-}
+  return h(Context.Provider, {
+    value: { lang, handler, changeLanguage },
+    children,
+  });
+};
 
-export const useTranslationContext = (): Type => useContext(Context);
\ No newline at end of file
+export const useTranslationContext = (): Type => useContext(Context);
diff --git a/packages/merchant-backoffice-ui/src/custom.d.ts 
b/packages/merchant-backoffice-ui/src/custom.d.ts
index e60fa0c83..e693c2951 100644
--- a/packages/merchant-backoffice-ui/src/custom.d.ts
+++ b/packages/merchant-backoffice-ui/src/custom.d.ts
@@ -13,11 +13,11 @@
  You should have received a copy of the GNU General Public License along with
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
-declare module '*.po' {
+declare module "*.po" {
   const content: any;
   export default content;
 }
-declare module 'jed' {
+declare module "jed" {
   const x: any;
   export = x;
 }
@@ -29,12 +29,12 @@ declare module "*.png" {
   const content: any;
   export default content;
 }
-declare module '*.svg' {
+declare module "*.svg" {
   const content: any;
   export default content;
 }
 
-declare module '*.scss' {
+declare module "*.scss" {
   const content: Record<string, string>;
   export default content;
 }
diff --git a/packages/merchant-backoffice-ui/src/declaration.d.ts 
b/packages/merchant-backoffice-ui/src/declaration.d.ts
index 7737c2cbc..75bc66201 100644
--- a/packages/merchant-backoffice-ui/src/declaration.d.ts
+++ b/packages/merchant-backoffice-ui/src/declaration.d.ts
@@ -15,10 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
-
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 type HashCode = string;
 type EddsaPublicKey = string;
@@ -28,21 +27,21 @@ type RelativeTime = Duration;
 type ImageDataUrl = string;
 
 export interface WithId {
-    id: string
+  id: string;
 }
 
 interface Timestamp {
-    // Milliseconds since epoch, or the special
-    // value "forever" to represent an event that will
-    // never happen.
-    t_s: number | "never";
+  // Milliseconds since epoch, or the special
+  // value "forever" to represent an event that will
+  // never happen.
+  t_s: number | "never";
 }
 interface Duration {
-    d_us: number | "forever";
+  d_us: number | "forever";
 }
 
 interface WithId {
-    id: string;
+  id: string;
 }
 
 type Amount = string;
@@ -50,1394 +49,1353 @@ type UUID = string;
 type Integer = number;
 
 export namespace ExchangeBackend {
-    interface WireResponse {
-
-        // Master public key of the exchange, must match the key returned in 
/keys.
-        master_public_key: EddsaPublicKey;
-
-        // Array of wire accounts operated by the exchange for
-        // incoming wire transfers.
-        accounts: WireAccount[];
-
-        // Object mapping names of wire methods (i.e. "sepa" or "x-taler-bank")
-        // to wire fees.
-        fees: { method: AggregateTransferFee };
-    }
-    interface WireAccount {
-        // payto:// URI identifying the account and wire method
-        payto_uri: string;
-
-        // Signature using the exchange's offline key
-        // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.
-        master_sig: EddsaSignature;
-    }
-    interface AggregateTransferFee {
-        // Per transfer wire transfer fee.
-        wire_fee: Amount;
-
-        // Per transfer closing fee.
-        closing_fee: Amount;
-
-        // What date (inclusive) does this fee go into effect?
-        // The different fees must cover the full time period in which
-        // any of the denomination keys are valid without overlap.
-        start_date: Timestamp;
-
-        // What date (exclusive) does this fee stop going into effect?
-        // The different fees must cover the full time period in which
-        // any of the denomination keys are valid without overlap.
-        end_date: Timestamp;
-
-        // Signature of TALER_MasterWireFeePS with
-        // purpose TALER_SIGNATURE_MASTER_WIRE_FEES.
-        sig: EddsaSignature;
-    }
-
+  interface WireResponse {
+    // Master public key of the exchange, must match the key returned in /keys.
+    master_public_key: EddsaPublicKey;
+
+    // Array of wire accounts operated by the exchange for
+    // incoming wire transfers.
+    accounts: WireAccount[];
+
+    // Object mapping names of wire methods (i.e. "sepa" or "x-taler-bank")
+    // to wire fees.
+    fees: { method: AggregateTransferFee };
+  }
+  interface WireAccount {
+    // payto:// URI identifying the account and wire method
+    payto_uri: string;
+
+    // Signature using the exchange's offline key
+    // with purpose TALER_SIGNATURE_MASTER_WIRE_DETAILS.
+    master_sig: EddsaSignature;
+  }
+  interface AggregateTransferFee {
+    // Per transfer wire transfer fee.
+    wire_fee: Amount;
+
+    // Per transfer closing fee.
+    closing_fee: Amount;
+
+    // What date (inclusive) does this fee go into effect?
+    // The different fees must cover the full time period in which
+    // any of the denomination keys are valid without overlap.
+    start_date: Timestamp;
+
+    // What date (exclusive) does this fee stop going into effect?
+    // The different fees must cover the full time period in which
+    // any of the denomination keys are valid without overlap.
+    end_date: Timestamp;
+
+    // Signature of TALER_MasterWireFeePS with
+    // purpose TALER_SIGNATURE_MASTER_WIRE_FEES.
+    sig: EddsaSignature;
+  }
 }
 export namespace MerchantBackend {
-    interface ErrorDetail {
-
-        // Numeric error code unique to the condition.
-        // The other arguments are specific to the error value reported here.
-        code: number;
+  interface ErrorDetail {
+    // Numeric error code unique to the condition.
+    // The other arguments are specific to the error value reported here.
+    code: number;
 
-        // Human-readable description of the error, i.e. "missing parameter", 
"commitment violation", ...
-        // Should give a human-readable hint about the error's nature. 
Optional, may change without notice!
-        hint?: string;
+    // Human-readable description of the error, i.e. "missing parameter", 
"commitment violation", ...
+    // Should give a human-readable hint about the error's nature. Optional, 
may change without notice!
+    hint?: string;
 
-        // Optional detail about the specific input value that failed. May 
change without notice!
-        detail?: string;
+    // Optional detail about the specific input value that failed. May change 
without notice!
+    detail?: string;
 
-        // Name of the parameter that was bogus (if applicable).
-        parameter?: string;
+    // Name of the parameter that was bogus (if applicable).
+    parameter?: string;
 
-        // Path to the argument that was bogus (if applicable).
-        path?: string;
+    // Path to the argument that was bogus (if applicable).
+    path?: string;
 
-        // Offset of the argument that was bogus (if applicable).
-        offset?: string;
+    // Offset of the argument that was bogus (if applicable).
+    offset?: string;
 
-        // Index of the argument that was bogus (if applicable).
-        index?: string;
+    // Index of the argument that was bogus (if applicable).
+    index?: string;
 
-        // Name of the object that was bogus (if applicable).
-        object?: string;
+    // Name of the object that was bogus (if applicable).
+    object?: string;
 
-        // Name of the currency than was problematic (if applicable).
-        currency?: string;
+    // Name of the currency than was problematic (if applicable).
+    currency?: string;
 
-        // Expected type (if applicable).
-        type_expected?: string;
-
-        // Type that was provided instead (if applicable).
-        type_actual?: string;
-    }
+    // Expected type (if applicable).
+    type_expected?: string;
 
+    // Type that was provided instead (if applicable).
+    type_actual?: string;
+  }
 
-    // Delivery location, loosely modeled as a subset of
-    // ISO20022's PostalAddress25.
-    interface Tax {
-        // the name of the tax
-        name: string;
+  // Delivery location, loosely modeled as a subset of
+  // ISO20022's PostalAddress25.
+  interface Tax {
+    // the name of the tax
+    name: string;
 
-        // amount paid in tax
-        tax: Amount;
-    }
+    // amount paid in tax
+    tax: Amount;
+  }
 
-    interface Auditor {
-        // official name
-        name: string;
+  interface Auditor {
+    // official name
+    name: string;
 
-        // Auditor's public key
-        auditor_pub: EddsaPublicKey;
+    // Auditor's public key
+    auditor_pub: EddsaPublicKey;
 
-        // Base URL of the auditor
-        url: string;
-    }
-    interface Exchange {
-        // the exchange's base URL
-        url: string;
+    // Base URL of the auditor
+    url: string;
+  }
+  interface Exchange {
+    // the exchange's base URL
+    url: string;
 
-        // master public key of the exchange
-        master_pub: EddsaPublicKey;
-    }
+    // master public key of the exchange
+    master_pub: EddsaPublicKey;
+  }
 
-    interface Product {
-        // merchant-internal identifier for the product.
-        product_id?: string;
+  interface Product {
+    // merchant-internal identifier for the product.
+    product_id?: string;
+
+    // Human-readable product description.
+    description: string;
+
+    // Map from IETF BCP 47 language tags to localized descriptions
+    description_i18n?: { [lang_tag: string]: string };
+
+    // The number of units of the product to deliver to the customer.
+    quantity: Integer;
+
+    // The unit in which the product is measured (liters, kilograms, packages, 
etc.)
+    unit: string;
+
+    // The price of the product; this is the total price for quantity times 
unit of this product.
+    price?: Amount;
+
+    // An optional base64-encoded product image
+    image: ImageDataUrl;
+
+    // a list of taxes paid by the merchant for this product. Can be empty.
+    taxes: Tax[];
+
+    // time indicating when this product should be delivered
+    delivery_date?: TalerProtocolTimestamp;
+
+    // Minimum age buyer must have (in years). Default is 0.
+    minimum_age?: Integer;
+  }
+  interface Merchant {
+    // label for a location with the business address of the merchant
+    address: Location;
+
+    // the merchant's legal name of business
+    name: string;
 
-        // Human-readable product description.
-        description: string;
+    // label for a location that denotes the jurisdiction for disputes.
+    // Some of the typical fields for a location (such as a street address) 
may be absent.
+    jurisdiction: Location;
+  }
 
-        // Map from IETF BCP 47 language tags to localized descriptions
-        description_i18n?: { [lang_tag: string]: string };
+  interface VersionResponse {
+    // libtool-style representation of the Merchant protocol version, see
+    // 
https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning
+    // The format is "current:revision:age".
+    version: string;
+
+    // Name of the protocol.
+    name: "taler-merchant";
+
+    // Currency supported by this backend.
+    currency: string;
+  }
+  interface Location {
+    // Nation with its own government.
+    country?: string;
+
+    // Identifies a subdivision of a country such as state, region, county.
+    country_subdivision?: string;
+
+    // Identifies a subdivision within a country sub-division.
+    district?: string;
+
+    // Name of a built-up area, with defined boundaries, and a local 
government.
+    town?: string;
+
+    // Specific location name within the town.
+    town_location?: string;
+
+    // Identifier consisting of a group of letters and/or numbers that
+    // is added to a postal address to assist the sorting of mail.
+    post_code?: string;
+
+    // Name of a street or thoroughfare.
+    street?: string;
+
+    // Name of the building or house.
+    building_name?: string;
+
+    // Number that identifies the position of a building on a street.
+    building_number?: string;
+
+    // Free-form address lines, should not exceed 7 elements.
+    address_lines?: string[];
+  }
+  namespace Instances {
+    //POST /private/instances/$INSTANCE/auth
+    interface InstanceAuthConfigurationMessage {
+      // Type of authentication.
+      // "external":  The mechant backend does not do
+      //   any authentication checks.  Instead an API
+      //   gateway must do the authentication.
+      // "token": The merchant checks an auth token.
+      //   See "token" for details.
+      method: "external" | "token";
+
+      // For method "external", this field is mandatory.
+      // The token MUST begin with the string "secret-token:".
+      // After the auth token has been set (with method "token"),
+      // the value must be provided in a "Authorization: Bearer $token"
+      // header.
+      token?: string;
+    }
+    //POST /private/instances
+    interface InstanceConfigurationMessage {
+      // The URI where the wallet will send coins.  A merchant may have
+      // multiple accounts, thus this is an array.  Note that by
+      // removing URIs from this list the respective account is set to
+      // inactive and thus unavailable for new contracts, but preserved
+      // in the database as existing offers and contracts may still refer
+      // to it.
+      payto_uris: string[];
+
+      // Name of the merchant instance to create (will become $INSTANCE).
+      id: string;
+
+      // Merchant name corresponding to this instance.
+      name: string;
+
+      email: string;
+      website: string;
+      // An optional base64-encoded logo image
+      logo: ImageDataUrl;
+
+      // "Authentication" header required to authorize management access the 
instance.
+      // Optional, if not given authentication will be disabled for
+      // this instance (hopefully authentication checks are still
+      // done by some reverse proxy).
+      auth: InstanceAuthConfigurationMessage;
+
+      // The merchant's physical address (to be put into contracts).
+      address: Location;
+
+      // The jurisdiction under which the merchant conducts its business
+      // (to be put into contracts).
+      jurisdiction: Location;
+
+      // Maximum wire fee this instance is willing to pay.
+      // Can be overridden by the frontend on a per-order basis.
+      default_max_wire_fee: Amount;
+
+      // Default factor for wire fee amortization calculations.
+      // Can be overridden by the frontend on a per-order basis.
+      default_wire_fee_amortization: Integer;
+
+      // Maximum deposit fee (sum over all coins) this instance is willing to 
pay.
+      // Can be overridden by the frontend on a per-order basis.
+      default_max_deposit_fee: Amount;
+
+      //  If the frontend does NOT specify an execution date, how long should
+      // we tell the exchange to wait to aggregate transactions before
+      // executing the wire transfer?  This delay is added to the current
+      // time when we generate the advisory execution time for the exchange.
+      default_wire_transfer_delay: RelativeTime;
+
+      // If the frontend does NOT specify a payment deadline, how long should
+      // offers we make be valid by default?
+      default_pay_delay: RelativeTime;
+    }
 
-        // The number of units of the product to deliver to the customer.
-        quantity: Integer;
+    // PATCH /private/instances/$INSTANCE
+    interface InstanceReconfigurationMessage {
+      // The URI where the wallet will send coins.  A merchant may have
+      // multiple accounts, thus this is an array.  Note that by
+      // removing URIs from this list
+      payto_uris: string[];
 
-        // The unit in which the product is measured (liters, kilograms, 
packages, etc.)
-        unit: string;
+      // Merchant name corresponding to this instance.
+      name: string;
 
-        // The price of the product; this is the total price for quantity 
times unit of this product.
-        price?: Amount;
+      // The merchant's physical address (to be put into contracts).
+      address: Location;
 
-        // An optional base64-encoded product image
-        image: ImageDataUrl;
+      // The jurisdiction under which the merchant conducts its business
+      // (to be put into contracts).
+      jurisdiction: Location;
 
-        // a list of taxes paid by the merchant for this product. Can be empty.
-        taxes: Tax[];
+      // Maximum wire fee this instance is willing to pay.
+      // Can be overridden by the frontend on a per-order basis.
+      default_max_wire_fee: Amount;
 
-        // time indicating when this product should be delivered
-        delivery_date?: TalerProtocolTimestamp;
+      // Default factor for wire fee amortization calculations.
+      // Can be overridden by the frontend on a per-order basis.
+      default_wire_fee_amortization: Integer;
 
-        // Minimum age buyer must have (in years). Default is 0.
-        minimum_age?: Integer;
-    }
-    interface Merchant {
-        // label for a location with the business address of the merchant
-        address: Location;
+      // Maximum deposit fee (sum over all coins) this instance is willing to 
pay.
+      // Can be overridden by the frontend on a per-order basis.
+      default_max_deposit_fee: Amount;
 
-        // the merchant's legal name of business
-        name: string;
+      //  If the frontend does NOT specify an execution date, how long should
+      // we tell the exchange to wait to aggregate transactions before
+      // executing the wire transfer?  This delay is added to the current
+      // time when we generate the advisory execution time for the exchange.
+      default_wire_transfer_delay: RelativeTime;
 
-        // label for a location that denotes the jurisdiction for disputes.
-        // Some of the typical fields for a location (such as a street 
address) may be absent.
-        jurisdiction: Location;
+      // If the frontend does NOT specify a payment deadline, how long should
+      // offers we make be valid by default?
+      default_pay_delay: RelativeTime;
     }
 
-    interface VersionResponse {
-        // libtool-style representation of the Merchant protocol version, see
-        // 
https://www.gnu.org/software/libtool/manual/html_node/Versioning.html#Versioning
-        // The format is "current:revision:age".
-        version: string;
-
-        // Name of the protocol.
-        name: "taler-merchant";
-
-        // Currency supported by this backend.
-        currency: string;
-
+    //   GET /private/instances
+    interface InstancesResponse {
+      // List of instances that are present in the backend (see Instance)
+      instances: Instance[];
     }
-    interface Location {
-        // Nation with its own government.
-        country?: string;
 
-        // Identifies a subdivision of a country such as state, region, county.
-        country_subdivision?: string;
+    interface Instance {
+      // Merchant name corresponding to this instance.
+      name: string;
 
-        // Identifies a subdivision within a country sub-division.
-        district?: string;
+      deleted?: boolean;
 
-        // Name of a built-up area, with defined boundaries, and a local 
government.
-        town?: string;
+      // Merchant instance this response is about ($INSTANCE)
+      id: string;
 
-        // Specific location name within the town.
-        town_location?: string;
+      // Public key of the merchant/instance, in Crockford Base32 encoding.
+      merchant_pub: EddsaPublicKey;
 
-        // Identifier consisting of a group of letters and/or numbers that
-        // is added to a postal address to assist the sorting of mail.
-        post_code?: string;
+      // List of the payment targets supported by this instance. Clients can
+      // specify the desired payment target in /order requests.  Note that
+      // front-ends do not have to support wallets selecting payment targets.
+      payment_targets: string[];
+    }
 
-        // Name of a street or thoroughfare.
-        street?: string;
+    //GET /private/instances/$INSTANCE/kyc
+    interface AccountKycRedirects {
+      // Array of pending KYCs.
+      pending_kycs: MerchantAccountKycRedirect[];
 
-        // Name of the building or house.
-        building_name?: string;
+      // Array of exchanges with no reply.
+      timeout_kycs: ExchangeKycTimeout[];
+    }
+    interface MerchantAccountKycRedirect {
+      // URL that the user should open in a browser to
+      // proceed with the KYC process (as returned
+      // by the exchange's /kyc-check/ endpoint).
+      kyc_url: string;
 
-        // Number that identifies the position of a building on a street.
-        building_number?: string;
+      // Base URL of the exchange this is about.
+      exchange_url: string;
 
-        // Free-form address lines, should not exceed 7 elements.
-        address_lines?: string[];
+      // Our bank wire account this is about.
+      payto_uri: string;
+    }
+    interface ExchangeKycTimeout {
+      // Base URL of the exchange this is about.
+      exchange_url: string;
+
+      // Numeric error code indicating errors the exchange
+      // returned, or TALER_EC_INVALID for none.
+      exchange_code: number;
+
+      // HTTP status code returned by the exchange when we asked for
+      // information about the KYC status.
+      // 0 if there was no response at all.
+      exchange_http_status: number;
     }
-    namespace Instances {
-
-        //POST /private/instances/$INSTANCE/auth
-        interface InstanceAuthConfigurationMessage {
-            // Type of authentication.
-            // "external":  The mechant backend does not do
-            //   any authentication checks.  Instead an API
-            //   gateway must do the authentication.
-            // "token": The merchant checks an auth token.
-            //   See "token" for details.
-            method: "external" | "token";
-
-            // For method "external", this field is mandatory.
-            // The token MUST begin with the string "secret-token:".
-            // After the auth token has been set (with method "token"),
-            // the value must be provided in a "Authorization: Bearer $token"
-            // header.
-            token?: string;
-
-        }
-        //POST /private/instances
-        interface InstanceConfigurationMessage {
-            // The URI where the wallet will send coins.  A merchant may have
-            // multiple accounts, thus this is an array.  Note that by
-            // removing URIs from this list the respective account is set to
-            // inactive and thus unavailable for new contracts, but preserved
-            // in the database as existing offers and contracts may still refer
-            // to it.
-            payto_uris: string[];
-
-            // Name of the merchant instance to create (will become $INSTANCE).
-            id: string;
-
-            // Merchant name corresponding to this instance.
-            name: string;
-
-            email: string;
-            website: string;
-            // An optional base64-encoded logo image
-            logo: ImageDataUrl;
-
-
-            // "Authentication" header required to authorize management access 
the instance.
-            // Optional, if not given authentication will be disabled for
-            // this instance (hopefully authentication checks are still
-            // done by some reverse proxy).
-            auth: InstanceAuthConfigurationMessage;
-
-            // The merchant's physical address (to be put into contracts).
-            address: Location;
-
-            // The jurisdiction under which the merchant conducts its business
-            // (to be put into contracts).
-            jurisdiction: Location;
-
-            // Maximum wire fee this instance is willing to pay.
-            // Can be overridden by the frontend on a per-order basis.
-            default_max_wire_fee: Amount;
-
-            // Default factor for wire fee amortization calculations.
-            // Can be overridden by the frontend on a per-order basis.
-            default_wire_fee_amortization: Integer;
-
-            // Maximum deposit fee (sum over all coins) this instance is 
willing to pay.
-            // Can be overridden by the frontend on a per-order basis.
-            default_max_deposit_fee: Amount;
-
-            //  If the frontend does NOT specify an execution date, how long 
should
-            // we tell the exchange to wait to aggregate transactions before
-            // executing the wire transfer?  This delay is added to the current
-            // time when we generate the advisory execution time for the 
exchange.
-            default_wire_transfer_delay: RelativeTime;
-
-            // If the frontend does NOT specify a payment deadline, how long 
should
-            // offers we make be valid by default?
-            default_pay_delay: RelativeTime;
-
-        }
-
-        // PATCH /private/instances/$INSTANCE
-        interface InstanceReconfigurationMessage {
-            // The URI where the wallet will send coins.  A merchant may have
-            // multiple accounts, thus this is an array.  Note that by
-            // removing URIs from this list
-            payto_uris: string[];
-
-            // Merchant name corresponding to this instance.
-            name: string;
-
-            // The merchant's physical address (to be put into contracts).
-            address: Location;
-
-            // The jurisdiction under which the merchant conducts its business
-            // (to be put into contracts).
-            jurisdiction: Location;
-
-            // Maximum wire fee this instance is willing to pay.
-            // Can be overridden by the frontend on a per-order basis.
-            default_max_wire_fee: Amount;
-
-            // Default factor for wire fee amortization calculations.
-            // Can be overridden by the frontend on a per-order basis.
-            default_wire_fee_amortization: Integer;
-
-            // Maximum deposit fee (sum over all coins) this instance is 
willing to pay.
-            // Can be overridden by the frontend on a per-order basis.
-            default_max_deposit_fee: Amount;
 
-            //  If the frontend does NOT specify an execution date, how long 
should
-            // we tell the exchange to wait to aggregate transactions before
-            // executing the wire transfer?  This delay is added to the current
-            // time when we generate the advisory execution time for the 
exchange.
-            default_wire_transfer_delay: RelativeTime;
+    //GET /private/instances/$INSTANCE
+    interface QueryInstancesResponse {
+      // The URI where the wallet will send coins.  A merchant may have
+      // multiple accounts, thus this is an array.
+      accounts: MerchantAccount[];
+
+      // Merchant name corresponding to this instance.
+      name: string;
+
+      // Public key of the merchant/instance, in Crockford Base32 encoding.
+      merchant_pub: EddsaPublicKey;
+
+      // The merchant's physical address (to be put into contracts).
+      address: Location;
+
+      // The jurisdiction under which the merchant conducts its business
+      // (to be put into contracts).
+      jurisdiction: Location;
+
+      // Maximum wire fee this instance is willing to pay.
+      // Can be overridden by the frontend on a per-order basis.
+      default_max_wire_fee: Amount;
+
+      // Default factor for wire fee amortization calculations.
+      // Can be overridden by the frontend on a per-order basis.
+      default_wire_fee_amortization: Integer;
+
+      // Maximum deposit fee (sum over all coins) this instance is willing to 
pay.
+      // Can be overridden by the frontend on a per-order basis.
+      default_max_deposit_fee: Amount;
+
+      //  If the frontend does NOT specify an execution date, how long should
+      // we tell the exchange to wait to aggregate transactions before
+      // executing the wire transfer?  This delay is added to the current
+      // time when we generate the advisory execution time for the exchange.
+      default_wire_transfer_delay: RelativeTime;
+
+      // If the frontend does NOT specify a payment deadline, how long should
+      // offers we make be valid by default?
+      default_pay_delay: RelativeTime;
+
+      // Authentication configuration.
+      // Does not contain the token when token auth is configured.
+      auth: {
+        method: "external" | "token";
+        token?: string;
+      };
+    }
 
-            // If the frontend does NOT specify a payment deadline, how long 
should
-            // offers we make be valid by default?
-            default_pay_delay: RelativeTime;
+    interface MerchantAccount {
+      // payto:// URI of the account.
+      payto_uri: string;
 
-        }
+      // Hash over the wire details (including over the salt)
+      h_wire: HashCode;
 
-        //   GET /private/instances
-        interface InstancesResponse {
-            // List of instances that are present in the backend (see Instance)
-            instances: Instance[];
-        }
+      // salt used to compute h_wire
+      salt: HashCode;
 
-        interface Instance {
-            // Merchant name corresponding to this instance.
-            name: string;
+      // true if this account is active,
+      // false if it is historic.
+      active: boolean;
+    }
 
-            deleted?: boolean;
+    //   DELETE /private/instances/$INSTANCE
+  }
 
-            // Merchant instance this response is about ($INSTANCE)
-            id: string;
+  namespace Products {
+    // POST /private/products
+    interface ProductAddDetail {
+      // product ID to use.
+      product_id: string;
 
-            // Public key of the merchant/instance, in Crockford Base32 
encoding.
-            merchant_pub: EddsaPublicKey;
+      // Human-readable product description.
+      description: string;
 
-            // List of the payment targets supported by this instance. Clients 
can
-            // specify the desired payment target in /order requests.  Note 
that
-            // front-ends do not have to support wallets selecting payment 
targets.
-            payment_targets: string[];
+      // Map from IETF BCP 47 language tags to localized descriptions
+      description_i18n: { [lang_tag: string]: string };
 
-        }
+      // unit in which the product is measured (liters, kilograms, packages, 
etc.)
+      unit: string;
 
-        //GET /private/instances/$INSTANCE/kyc
-        interface AccountKycRedirects {
-            // Array of pending KYCs.
-            pending_kycs: MerchantAccountKycRedirect[];
+      // The price for one unit of the product. Zero is used
+      // to imply that this product is not sold separately, or
+      // that the price is not fixed, and must be supplied by the
+      // front-end.  If non-zero, this price MUST include applicable
+      // taxes.
+      price: Amount;
 
-            // Array of exchanges with no reply.
-            timeout_kycs: ExchangeKycTimeout[];
+      // An optional base64-encoded product image
+      image: ImageDataUrl;
 
-        }
-        interface MerchantAccountKycRedirect {
+      // a list of taxes paid by the merchant for one unit of this product
+      taxes: Tax[];
 
-            // URL that the user should open in a browser to
-            // proceed with the KYC process (as returned
-            // by the exchange's /kyc-check/ endpoint).
-            kyc_url: string;
+      // Number of units of the product in stock in sum in total,
+      // including all existing sales ever. Given in product-specific
+      // units.
+      // A value of -1 indicates "infinite" (i.e. for "electronic" books).
+      total_stock: Integer;
 
-            // Base URL of the exchange this is about.
-            exchange_url: string;
+      // Identifies where the product is in stock.
+      address: Location;
 
-            // Our bank wire account this is about.
-            payto_uri: string;
+      // Identifies when we expect the next restocking to happen.
+      next_restock?: Timestamp;
 
-        }
-        interface ExchangeKycTimeout {
+      // Minimum age buyer must have (in years). Default is 0.
+      minimum_age?: Integer;
+    }
+    //   PATCH /private/products/$PRODUCT_ID
+    interface ProductPatchDetail {
+      // Human-readable product description.
+      description: string;
 
-            // Base URL of the exchange this is about.
-            exchange_url: string;
+      // Map from IETF BCP 47 language tags to localized descriptions
+      description_i18n: { [lang_tag: string]: string };
 
-            // Numeric error code indicating errors the exchange
-            // returned, or TALER_EC_INVALID for none.
-            exchange_code: number;
+      // unit in which the product is measured (liters, kilograms, packages, 
etc.)
+      unit: string;
 
-            // HTTP status code returned by the exchange when we asked for
-            // information about the KYC status.
-            // 0 if there was no response at all.
-            exchange_http_status: number;
+      // The price for one unit of the product. Zero is used
+      // to imply that this product is not sold separately, or
+      // that the price is not fixed, and must be supplied by the
+      // front-end.  If non-zero, this price MUST include applicable
+      // taxes.
+      price: Amount;
 
-        }
+      // An optional base64-encoded product image
+      image: ImageDataUrl;
 
-        //GET /private/instances/$INSTANCE
-        interface QueryInstancesResponse {
-            // The URI where the wallet will send coins.  A merchant may have
-            // multiple accounts, thus this is an array.
-            accounts: MerchantAccount[];
+      // a list of taxes paid by the merchant for one unit of this product
+      taxes: Tax[];
 
-            // Merchant name corresponding to this instance.
-            name: string;
+      // Number of units of the product in stock in sum in total,
+      // including all existing sales ever. Given in product-specific
+      // units.
+      // A value of -1 indicates "infinite" (i.e. for "electronic" books).
+      total_stock: Integer;
 
-            // Public key of the merchant/instance, in Crockford Base32 
encoding.
-            merchant_pub: EddsaPublicKey;
+      // Number of units of the product that were lost (spoiled, stolen, etc.)
+      total_lost: Integer;
 
-            // The merchant's physical address (to be put into contracts).
-            address: Location;
+      // Identifies where the product is in stock.
+      address: Location;
 
-            // The jurisdiction under which the merchant conducts its business
-            // (to be put into contracts).
-            jurisdiction: Location;
+      // Identifies when we expect the next restocking to happen.
+      next_restock?: Timestamp;
 
-            // Maximum wire fee this instance is willing to pay.
-            // Can be overridden by the frontend on a per-order basis.
-            default_max_wire_fee: Amount;
+      // Minimum age buyer must have (in years). Default is 0.
+      minimum_age?: Integer;
+    }
 
-            // Default factor for wire fee amortization calculations.
-            // Can be overridden by the frontend on a per-order basis.
-            default_wire_fee_amortization: Integer;
+    // GET /private/products
+    interface InventorySummaryResponse {
+      // List of products that are present in the inventory
+      products: InventoryEntry[];
+    }
+    interface InventoryEntry {
+      // Product identifier, as found in the product.
+      product_id: string;
+    }
 
-            // Maximum deposit fee (sum over all coins) this instance is 
willing to pay.
-            // Can be overridden by the frontend on a per-order basis.
-            default_max_deposit_fee: Amount;
+    // GET /private/products/$PRODUCT_ID
+    interface ProductDetail {
+      // Human-readable product description.
+      description: string;
 
-            //  If the frontend does NOT specify an execution date, how long 
should
-            // we tell the exchange to wait to aggregate transactions before
-            // executing the wire transfer?  This delay is added to the current
-            // time when we generate the advisory execution time for the 
exchange.
-            default_wire_transfer_delay: RelativeTime;
+      // Map from IETF BCP 47 language tags to localized descriptions
+      description_i18n: { [lang_tag: string]: string };
 
-            // If the frontend does NOT specify a payment deadline, how long 
should
-            // offers we make be valid by default?
-            default_pay_delay: RelativeTime;
+      // unit in which the product is measured (liters, kilograms, packages, 
etc.)
+      unit: string;
 
-            // Authentication configuration.
-            // Does not contain the token when token auth is configured.
-            auth: {
-                method: "external" | "token";
-                token?: string;
-            };
-        }
+      // The price for one unit of the product. Zero is used
+      // to imply that this product is not sold separately, or
+      // that the price is not fixed, and must be supplied by the
+      // front-end.  If non-zero, this price MUST include applicable
+      // taxes.
+      price: Amount;
 
-        interface MerchantAccount {
+      // An optional base64-encoded product image
+      image: ImageDataUrl;
 
-            // payto:// URI of the account.
-            payto_uri: string;
+      // a list of taxes paid by the merchant for one unit of this product
+      taxes: Tax[];
 
-            // Hash over the wire details (including over the salt)
-            h_wire: HashCode;
+      // Number of units of the product in stock in sum in total,
+      // including all existing sales ever. Given in product-specific
+      // units.
+      // A value of -1 indicates "infinite" (i.e. for "electronic" books).
+      total_stock: Integer;
 
-            // salt used to compute h_wire
-            salt: HashCode;
+      // Number of units of the product that have already been sold.
+      total_sold: Integer;
 
-            // true if this account is active,
-            // false if it is historic.
-            active: boolean;
-        }
+      // Number of units of the product that were lost (spoiled, stolen, etc.)
+      total_lost: Integer;
 
-        //   DELETE /private/instances/$INSTANCE
+      // Identifies where the product is in stock.
+      address: Location;
 
+      // Identifies when we expect the next restocking to happen.
+      next_restock?: Timestamp;
 
+      // Minimum age buyer must have (in years). Default is 0.
+      minimum_age?: Integer;
     }
 
-    namespace Products {
-        // POST /private/products
-        interface ProductAddDetail {
-
-            // product ID to use.
-            product_id: string;
+    // POST /private/products/$PRODUCT_ID/lock
+    interface LockRequest {
+      // UUID that identifies the frontend performing the lock
+      // It is suggested that clients use a timeflake for this,
+      // see https://github.com/anthonynsimon/timeflake
+      lock_uuid: UUID;
 
-            // Human-readable product description.
-            description: string;
+      // How long does the frontend intend to hold the lock
+      duration: RelativeTime;
 
-            // Map from IETF BCP 47 language tags to localized descriptions
-            description_i18n: { [lang_tag: string]: string };
+      // How many units should be locked?
+      quantity: Integer;
+    }
 
-            // unit in which the product is measured (liters, kilograms, 
packages, etc.)
-            unit: string;
+    //   DELETE /private/products/$PRODUCT_ID
+  }
 
-            // The price for one unit of the product. Zero is used
-            // to imply that this product is not sold separately, or
-            // that the price is not fixed, and must be supplied by the
-            // front-end.  If non-zero, this price MUST include applicable
-            // taxes.
-            price: Amount;
+  namespace Orders {
+    type MerchantOrderStatusResponse =
+      | CheckPaymentPaidResponse
+      | CheckPaymentClaimedResponse
+      | CheckPaymentUnpaidResponse;
+    interface CheckPaymentPaidResponse {
+      // The customer paid for this contract.
+      order_status: "paid";
 
-            // An optional base64-encoded product image
-            image: ImageDataUrl;
+      // Was the payment refunded (even partially)?
+      refunded: boolean;
 
-            // a list of taxes paid by the merchant for one unit of this 
product
-            taxes: Tax[];
+      // True if there are any approved refunds that the wallet has
+      // not yet obtained.
+      refund_pending: boolean;
 
-            // Number of units of the product in stock in sum in total,
-            // including all existing sales ever. Given in product-specific
-            // units.
-            // A value of -1 indicates "infinite" (i.e. for "electronic" 
books).
-            total_stock: Integer;
+      // Did the exchange wire us the funds?
+      wired: boolean;
 
-            // Identifies where the product is in stock.
-            address: Location;
+      // Total amount the exchange deposited into our bank account
+      // for this contract, excluding fees.
+      deposit_total: Amount;
 
-            // Identifies when we expect the next restocking to happen.
-            next_restock?: Timestamp;
+      // Numeric error code indicating errors the exchange
+      // encountered tracking the wire transfer for this purchase (before
+      // we even got to specific coin issues).
+      // 0 if there were no issues.
+      exchange_ec: number;
 
-            // Minimum age buyer must have (in years). Default is 0.
-            minimum_age?: Integer;
-        }
-        //   PATCH /private/products/$PRODUCT_ID
-        interface ProductPatchDetail {
+      // HTTP status code returned by the exchange when we asked for
+      // information to track the wire transfer for this purchase.
+      // 0 if there were no issues.
+      exchange_hc: number;
 
-            // Human-readable product description.
-            description: string;
+      // Total amount that was refunded, 0 if refunded is false.
+      refund_amount: Amount;
 
-            // Map from IETF BCP 47 language tags to localized descriptions
-            description_i18n: { [lang_tag: string]: string };
+      // Contract terms.
+      contract_terms: ContractTerms;
 
-            // unit in which the product is measured (liters, kilograms, 
packages, etc.)
-            unit: string;
+      // The wire transfer status from the exchange for this order if
+      // available, otherwise empty array.
+      wire_details: TransactionWireTransfer[];
 
-            // The price for one unit of the product. Zero is used
-            // to imply that this product is not sold separately, or
-            // that the price is not fixed, and must be supplied by the
-            // front-end.  If non-zero, this price MUST include applicable
-            // taxes.
-            price: Amount;
+      // Reports about trouble obtaining wire transfer details,
+      // empty array if no trouble were encountered.
+      wire_reports: TransactionWireReport[];
 
-            // An optional base64-encoded product image
-            image: ImageDataUrl;
+      // The refund details for this order.  One entry per
+      // refunded coin; empty array if there are no refunds.
+      refund_details: RefundDetails[];
 
-            // a list of taxes paid by the merchant for one unit of this 
product
-            taxes: Tax[];
+      // Status URL, can be used as a redirect target for the browser
+      // to show the order QR code / trigger the wallet.
+      order_status_url: string;
+    }
+    interface CheckPaymentClaimedResponse {
+      // A wallet claimed the order, but did not yet pay for the contract.
+      order_status: "claimed";
 
-            // Number of units of the product in stock in sum in total,
-            // including all existing sales ever. Given in product-specific
-            // units.
-            // A value of -1 indicates "infinite" (i.e. for "electronic" 
books).
-            total_stock: Integer;
+      // Contract terms.
+      contract_terms: ContractTerms;
+    }
+    interface CheckPaymentUnpaidResponse {
+      // The order was neither claimed nor paid.
+      order_status: "unpaid";
 
-            // Number of units of the product that were lost (spoiled, stolen, 
etc.)
-            total_lost: Integer;
+      // when was the order created
+      creation_time: Timestamp;
 
-            // Identifies where the product is in stock.
-            address: Location;
+      // Order summary text.
+      summary: string;
 
-            // Identifies when we expect the next restocking to happen.
-            next_restock?: Timestamp;
+      // Total amount of the order (to be paid by the customer).
+      total_amount: Amount;
 
-            // Minimum age buyer must have (in years). Default is 0.
-            minimum_age?: Integer;
-        }
+      // URI that the wallet must process to complete the payment.
+      taler_pay_uri: string;
 
-        // GET /private/products
-        interface InventorySummaryResponse {
-            // List of products that are present in the inventory
-            products: InventoryEntry[];
-        }
-        interface InventoryEntry {
-            // Product identifier, as found in the product.
-            product_id: string;
+      // Alternative order ID which was paid for already in the same session.
+      // Only given if the same product was purchased before in the same 
session.
+      already_paid_order_id?: string;
 
-        }
+      // Fulfillment URL of an already paid order. Only given if under this
+      // session an already paid order with a fulfillment URL exists.
+      already_paid_fulfillment_url?: string;
 
-        // GET /private/products/$PRODUCT_ID
-        interface ProductDetail {
+      // Status URL, can be used as a redirect target for the browser
+      // to show the order QR code / trigger the wallet.
+      order_status_url: string;
 
-            // Human-readable product description.
-            description: string;
+      // We do we NOT return the contract terms here because they may not
+      // exist in case the wallet did not yet claim them.
+    }
+    interface RefundDetails {
+      // Reason given for the refund.
+      reason: string;
 
-            // Map from IETF BCP 47 language tags to localized descriptions
-            description_i18n: { [lang_tag: string]: string };
+      // When was the refund approved.
+      timestamp: Timestamp;
 
-            // unit in which the product is measured (liters, kilograms, 
packages, etc.)
-            unit: string;
+      // Set to true if a refund is still available for the wallet for this 
payment.
+      pending: boolean;
 
-            // The price for one unit of the product. Zero is used
-            // to imply that this product is not sold separately, or
-            // that the price is not fixed, and must be supplied by the
-            // front-end.  If non-zero, this price MUST include applicable
-            // taxes.
-            price: Amount;
+      // Total amount that was refunded (minus a refund fee).
+      amount: Amount;
+    }
+    interface TransactionWireTransfer {
+      // Responsible exchange.
+      exchange_url: string;
 
-            // An optional base64-encoded product image
-            image: ImageDataUrl;
+      // 32-byte wire transfer identifier.
+      wtid: Base32;
 
-            // a list of taxes paid by the merchant for one unit of this 
product
-            taxes: Tax[];
+      // Execution time of the wire transfer.
+      execution_time: Timestamp;
 
-            // Number of units of the product in stock in sum in total,
-            // including all existing sales ever. Given in product-specific
-            // units.
-            // A value of -1 indicates "infinite" (i.e. for "electronic" 
books).
-            total_stock: Integer;
+      // Total amount that has been wire transferred
+      // to the merchant.
+      amount: Amount;
 
-            // Number of units of the product that have already been sold.
-            total_sold: Integer;
+      // Was this transfer confirmed by the merchant via the
+      // POST /transfers API, or is it merely claimed by the exchange?
+      confirmed: boolean;
+    }
+    interface TransactionWireReport {
+      // Numerical error code.
+      code: number;
 
-            // Number of units of the product that were lost (spoiled, stolen, 
etc.)
-            total_lost: Integer;
+      // Human-readable error description.
+      hint: string;
 
-            // Identifies where the product is in stock.
-            address: Location;
+      // Numerical error code from the exchange.
+      exchange_ec: number;
 
-            // Identifies when we expect the next restocking to happen.
-            next_restock?: Timestamp;
+      // HTTP status code received from the exchange.
+      exchange_hc: number;
 
-            // Minimum age buyer must have (in years). Default is 0.
-            minimum_age?: Integer;
-        }
+      // Public key of the coin for which we got the exchange error.
+      coin_pub: CoinPublicKey;
+    }
 
-        // POST /private/products/$PRODUCT_ID/lock
-        interface LockRequest {
+    interface OrderHistory {
+      // timestamp-sorted array of all orders matching the query.
+      // The order of the sorting depends on the sign of delta.
+      orders: OrderHistoryEntry[];
+    }
+    interface OrderHistoryEntry {
+      // order ID of the transaction related to this entry.
+      order_id: string;
 
-            // UUID that identifies the frontend performing the lock
-            // It is suggested that clients use a timeflake for this,
-            // see https://github.com/anthonynsimon/timeflake
-            lock_uuid: UUID;
+      // row ID of the order in the database
+      row_id: number;
 
-            // How long does the frontend intend to hold the lock
-            duration: RelativeTime;
+      // when the order was created
+      timestamp: Timestamp;
 
-            // How many units should be locked?
-            quantity: Integer;
+      // the amount of money the order is for
+      amount: Amount;
 
-        }
+      // the summary of the order
+      summary: string;
 
-        //   DELETE /private/products/$PRODUCT_ID
+      // whether some part of the order is refundable,
+      // that is the refund deadline has not yet expired
+      // and the total amount refunded so far is below
+      // the value of the original transaction.
+      refundable: boolean;
 
+      // whether the order has been paid or not
+      paid: boolean;
     }
 
-    namespace Orders {
-
-        type MerchantOrderStatusResponse = CheckPaymentPaidResponse |
-            CheckPaymentClaimedResponse |
-            CheckPaymentUnpaidResponse;
-        interface CheckPaymentPaidResponse {
-            // The customer paid for this contract.
-            order_status: "paid";
-
-            // Was the payment refunded (even partially)?
-            refunded: boolean;
-
-            // True if there are any approved refunds that the wallet has
-            // not yet obtained.
-            refund_pending: boolean;
+    interface PostOrderRequest {
+      // The order must at least contain the minimal
+      // order detail, but can override all
+      order: Order;
+
+      // if set, the backend will then set the refund deadline to the current
+      // time plus the specified delay.  If it's not set, refunds will not be
+      // possible.
+      refund_delay?: RelativeTime;
+
+      // specifies the payment target preferred by the client. Can be used
+      // to select among the various (active) wire methods supported by the 
instance.
+      payment_target?: string;
+
+      // specifies that some products are to be included in the
+      // order from the inventory.  For these inventory management
+      // is performed (so the products must be in stock) and
+      // details are completed from the product data of the backend.
+      inventory_products?: MinimalInventoryProduct[];
+
+      // Specifies a lock identifier that was used to
+      // lock a product in the inventory.  Only useful if
+      // manage_inventory is set.  Used in case a frontend
+      // reserved quantities of the individual products while
+      // the shopping card was being built.  Multiple UUIDs can
+      // be used in case different UUIDs were used for different
+      // products (i.e. in case the user started with multiple
+      // shopping sessions that were combined during checkout).
+      lock_uuids?: UUID[];
+
+      // Should a token for claiming the order be generated?
+      // False can make sense if the ORDER_ID is sufficiently
+      // high entropy to prevent adversarial claims (like it is
+      // if the backend auto-generates one). Default is 'true'.
+      create_token?: boolean;
+    }
+    type Order = MinimalOrderDetail | ContractTerms;
+
+    interface MinimalOrderDetail {
+      // Amount to be paid by the customer
+      amount: Amount;
+
+      // Short summary of the order
+      summary: string;
+
+      // URL that will show that the order was successful after
+      // it has been paid for.  Optional. When POSTing to the
+      // merchant, the placeholder "${ORDER_ID}" will be
+      // replaced with the actual order ID (useful if the
+      // order ID is generated server-side and needs to be
+      // in the URL).
+      fulfillment_url?: string;
+    }
 
-            // Did the exchange wire us the funds?
-            wired: boolean;
+    interface MinimalInventoryProduct {
+      // Which product is requested (here mandatory!)
+      product_id: string;
 
-            // Total amount the exchange deposited into our bank account
-            // for this contract, excluding fees.
-            deposit_total: Amount;
+      // How many units of the product are requested
+      quantity: Integer;
+    }
+    interface PostOrderResponse {
+      // Order ID of the response that was just created
+      order_id: string;
+
+      // Token that authorizes the wallet to claim the order.
+      // Provided only if "create_token" was set to 'true'
+      // in the request.
+      token?: ClaimToken;
+    }
+    interface OutOfStockResponse {
+      // Product ID of an out-of-stock item
+      product_id: string;
 
-            // Numeric error code indicating errors the exchange
-            // encountered tracking the wire transfer for this purchase (before
-            // we even got to specific coin issues).
-            // 0 if there were no issues.
-            exchange_ec: number;
-
-            // HTTP status code returned by the exchange when we asked for
-            // information to track the wire transfer for this purchase.
-            // 0 if there were no issues.
-            exchange_hc: number;
+      // Requested quantity
+      requested_quantity: Integer;
 
-            // Total amount that was refunded, 0 if refunded is false.
-            refund_amount: Amount;
+      // Available quantity (must be below requested_quanitity)
+      available_quantity: Integer;
 
-            // Contract terms.
-            contract_terms: ContractTerms;
+      // When do we expect the product to be again in stock?
+      // Optional, not given if unknown.
+      restock_expected?: Timestamp;
+    }
 
-            // The wire transfer status from the exchange for this order if
-            // available, otherwise empty array.
-            wire_details: TransactionWireTransfer[];
+    interface ForgetRequest {
+      // Array of valid JSON paths to forgettable fields in the order's
+      // contract terms.
+      fields: string[];
+    }
+    interface RefundRequest {
+      // Amount to be refunded
+      refund: Amount;
 
-            // Reports about trouble obtaining wire transfer details,
-            // empty array if no trouble were encountered.
-            wire_reports: TransactionWireReport[];
-
-            // The refund details for this order.  One entry per
-            // refunded coin; empty array if there are no refunds.
-            refund_details: RefundDetails[];
-
-            // Status URL, can be used as a redirect target for the browser
-            // to show the order QR code / trigger the wallet.
-            order_status_url: string;
-        }
-        interface CheckPaymentClaimedResponse {
-            // A wallet claimed the order, but did not yet pay for the 
contract.
-            order_status: "claimed";
+      // Human-readable refund justification
+      reason: string;
+    }
+    interface MerchantRefundResponse {
+      // URL (handled by the backend) that the wallet should access to
+      // trigger refund processing.
+      // taler://refund/...
+      taler_refund_uri: string;
+
+      // Contract hash that a client may need to authenticate an
+      // HTTP request to obtain the above URI in a wallet-friendly way.
+      h_contract: HashCode;
+    }
+  }
 
-            // Contract terms.
-            contract_terms: ContractTerms;
+  namespace Tips {
+    // GET /private/reserves
+    interface TippingReserveStatus {
+      // Array of all known reserves (possibly empty!)
+      reserves: ReserveStatusEntry[];
+    }
+    interface ReserveStatusEntry {
+      // Public key of the reserve
+      reserve_pub: EddsaPublicKey;
 
-        }
-        interface CheckPaymentUnpaidResponse {
-            // The order was neither claimed nor paid.
-            order_status: "unpaid";
+      // Timestamp when it was established
+      creation_time: Timestamp;
 
-            // when was the order created
-            creation_time: Timestamp;
+      // Timestamp when it expires
+      expiration_time: Timestamp;
 
-            // Order summary text.
-            summary: string;
+      // Initial amount as per reserve creation call
+      merchant_initial_amount: Amount;
 
-            // Total amount of the order (to be paid by the customer).
-            total_amount: Amount;
+      // Initial amount as per exchange, 0 if exchange did
+      // not confirm reserve creation yet.
+      exchange_initial_amount: Amount;
 
-            // URI that the wallet must process to complete the payment.
-            taler_pay_uri: string;
+      // Amount picked up so far.
+      pickup_amount: Amount;
 
-            // Alternative order ID which was paid for already in the same 
session.
-            // Only given if the same product was purchased before in the same 
session.
-            already_paid_order_id?: string;
-
-            // Fulfillment URL of an already paid order. Only given if under 
this
-            // session an already paid order with a fulfillment URL exists.
-            already_paid_fulfillment_url?: string;
-
-            // Status URL, can be used as a redirect target for the browser
-            // to show the order QR code / trigger the wallet.
-            order_status_url: string;
-
-            // We do we NOT return the contract terms here because they may not
-            // exist in case the wallet did not yet claim them.
-        }
-        interface RefundDetails {
-            // Reason given for the refund.
-            reason: string;
-
-            // When was the refund approved.
-            timestamp: Timestamp;
-
-            // Set to true if a refund is still available for the wallet for 
this payment.
-            pending: boolean;
-
-            // Total amount that was refunded (minus a refund fee).
-            amount: Amount;
-        }
-        interface TransactionWireTransfer {
-            // Responsible exchange.
-            exchange_url: string;
-
-            // 32-byte wire transfer identifier.
-            wtid: Base32;
-
-            // Execution time of the wire transfer.
-            execution_time: Timestamp;
-
-            // Total amount that has been wire transferred
-            // to the merchant.
-            amount: Amount;
-
-            // Was this transfer confirmed by the merchant via the
-            // POST /transfers API, or is it merely claimed by the exchange?
-            confirmed: boolean;
-        }
-        interface TransactionWireReport {
-            // Numerical error code.
-            code: number;
-
-            // Human-readable error description.
-            hint: string;
-
-            // Numerical error code from the exchange.
-            exchange_ec: number;
-
-            // HTTP status code received from the exchange.
-            exchange_hc: number;
-
-            // Public key of the coin for which we got the exchange error.
-            coin_pub: CoinPublicKey;
-        }
-
-        interface OrderHistory {
-            // timestamp-sorted array of all orders matching the query.
-            // The order of the sorting depends on the sign of delta.
-            orders: OrderHistoryEntry[];
-        }
-        interface OrderHistoryEntry {
-
-            // order ID of the transaction related to this entry.
-            order_id: string;
-
-            // row ID of the order in the database
-            row_id: number;
-
-            // when the order was created
-            timestamp: Timestamp;
-
-            // the amount of money the order is for
-            amount: Amount;
-
-            // the summary of the order
-            summary: string;
-
-            // whether some part of the order is refundable,
-            // that is the refund deadline has not yet expired
-            // and the total amount refunded so far is below
-            // the value of the original transaction.
-            refundable: boolean;
-
-            // whether the order has been paid or not
-            paid: boolean;
-        }
-
-        interface PostOrderRequest {
-            // The order must at least contain the minimal
-            // order detail, but can override all
-            order: Order;
-
-            // if set, the backend will then set the refund deadline to the 
current
-            // time plus the specified delay.  If it's not set, refunds will 
not be
-            // possible.
-            refund_delay?: RelativeTime;
-
-            // specifies the payment target preferred by the client. Can be 
used
-            // to select among the various (active) wire methods supported by 
the instance.
-            payment_target?: string;
-
-            // specifies that some products are to be included in the
-            // order from the inventory.  For these inventory management
-            // is performed (so the products must be in stock) and
-            // details are completed from the product data of the backend.
-            inventory_products?: MinimalInventoryProduct[];
-
-            // Specifies a lock identifier that was used to
-            // lock a product in the inventory.  Only useful if
-            // manage_inventory is set.  Used in case a frontend
-            // reserved quantities of the individual products while
-            // the shopping card was being built.  Multiple UUIDs can
-            // be used in case different UUIDs were used for different
-            // products (i.e. in case the user started with multiple
-            // shopping sessions that were combined during checkout).
-            lock_uuids?: UUID[];
-
-            // Should a token for claiming the order be generated?
-            // False can make sense if the ORDER_ID is sufficiently
-            // high entropy to prevent adversarial claims (like it is
-            // if the backend auto-generates one). Default is 'true'.
-            create_token?: boolean;
-
-        }
-        type Order = MinimalOrderDetail | ContractTerms;
-
-        interface MinimalOrderDetail {
-            // Amount to be paid by the customer
-            amount: Amount;
-
-            // Short summary of the order
-            summary: string;
-
-            // URL that will show that the order was successful after
-            // it has been paid for.  Optional. When POSTing to the
-            // merchant, the placeholder "${ORDER_ID}" will be
-            // replaced with the actual order ID (useful if the
-            // order ID is generated server-side and needs to be
-            // in the URL).
-            fulfillment_url?: string;
-        }
-
-        interface MinimalInventoryProduct {
-            // Which product is requested (here mandatory!)
-            product_id: string;
-
-            // How many units of the product are requested
-            quantity: Integer;
-        }
-        interface PostOrderResponse {
-            // Order ID of the response that was just created
-            order_id: string;
-
-            // Token that authorizes the wallet to claim the order.
-            // Provided only if "create_token" was set to 'true'
-            // in the request.
-            token?: ClaimToken;
-        }
-        interface OutOfStockResponse {
-
-            // Product ID of an out-of-stock item
-            product_id: string;
-
-            // Requested quantity
-            requested_quantity: Integer;
-
-            // Available quantity (must be below requested_quanitity)
-            available_quantity: Integer;
-
-            // When do we expect the product to be again in stock?
-            // Optional, not given if unknown.
-            restock_expected?: Timestamp;
-        }
-
-        interface ForgetRequest {
-
-            // Array of valid JSON paths to forgettable fields in the order's
-            // contract terms.
-            fields: string[];
-        }
-        interface RefundRequest {
-            // Amount to be refunded
-            refund: Amount;
-
-            // Human-readable refund justification
-            reason: string;
-        }
-        interface MerchantRefundResponse {
-
-            // URL (handled by the backend) that the wallet should access to
-            // trigger refund processing.
-            // taler://refund/...
-            taler_refund_uri: string;
-
-            // Contract hash that a client may need to authenticate an
-            // HTTP request to obtain the above URI in a wallet-friendly way.
-            h_contract: HashCode;
-        }
+      // Amount approved for tips that exceeds the pickup_amount.
+      committed_amount: Amount;
 
+      // Is this reserve active (false if it was deleted but not purged)
+      active: boolean;
     }
 
-    namespace Tips {
+    interface ReserveCreateRequest {
+      // Amount that the merchant promises to put into the reserve
+      initial_balance: Amount;
 
-        // GET /private/reserves
-        interface TippingReserveStatus {
-            // Array of all known reserves (possibly empty!)
-            reserves: ReserveStatusEntry[];
-        }
-        interface ReserveStatusEntry {
-            // Public key of the reserve
-            reserve_pub: EddsaPublicKey;
+      // Exchange the merchant intends to use for tipping
+      exchange_url: string;
 
-            // Timestamp when it was established
-            creation_time: Timestamp;
+      // Desired wire method, for example "iban" or "x-taler-bank"
+      wire_method: string;
+    }
+    interface ReserveCreateConfirmation {
+      // Public key identifying the reserve
+      reserve_pub: EddsaPublicKey;
 
-            // Timestamp when it expires
-            expiration_time: Timestamp;
+      // Wire account of the exchange where to transfer the funds
+      payto_uri: string;
+    }
+    interface TipCreateRequest {
+      // Amount that the customer should be tipped
+      amount: Amount;
 
-            // Initial amount as per reserve creation call
-            merchant_initial_amount: Amount;
+      // Justification for giving the tip
+      justification: string;
 
-            // Initial amount as per exchange, 0 if exchange did
-            // not confirm reserve creation yet.
-            exchange_initial_amount: Amount;
+      // URL that the user should be directed to after tipping,
+      // will be included in the tip_token.
+      next_url: string;
+    }
+    interface TipCreateConfirmation {
+      // Unique tip identifier for the tip that was created.
+      tip_id: HashCode;
 
-            // Amount picked up so far.
-            pickup_amount: Amount;
+      // taler://tip URI for the tip
+      taler_tip_uri: string;
 
-            // Amount approved for tips that exceeds the pickup_amount.
-            committed_amount: Amount;
+      // URL that will directly trigger processing
+      // the tip when the browser is redirected to it
+      tip_status_url: string;
 
-            // Is this reserve active (false if it was deleted but not purged)
-            active: boolean;
-        }
+      // when does the tip expire
+      tip_expiration: Timestamp;
+    }
 
-        interface ReserveCreateRequest {
-            // Amount that the merchant promises to put into the reserve
-            initial_balance: Amount;
+    interface ReserveDetail {
+      // Timestamp when it was established.
+      creation_time: Timestamp;
 
-            // Exchange the merchant intends to use for tipping
-            exchange_url: string;
+      // Timestamp when it expires.
+      expiration_time: Timestamp;
 
-            // Desired wire method, for example "iban" or "x-taler-bank"
-            wire_method: string;
-        }
-        interface ReserveCreateConfirmation {
-            // Public key identifying the reserve
-            reserve_pub: EddsaPublicKey;
+      // Initial amount as per reserve creation call.
+      merchant_initial_amount: Amount;
 
-            // Wire account of the exchange where to transfer the funds
-            payto_uri: string;
-        }
-        interface TipCreateRequest {
-            // Amount that the customer should be tipped
-            amount: Amount;
+      // Initial amount as per exchange, 0 if exchange did
+      // not confirm reserve creation yet.
+      exchange_initial_amount: Amount;
 
-            // Justification for giving the tip
-            justification: string;
+      // Amount picked up so far.
+      pickup_amount: Amount;
 
-            // URL that the user should be directed to after tipping,
-            // will be included in the tip_token.
-            next_url: string;
-        }
-        interface TipCreateConfirmation {
-            // Unique tip identifier for the tip that was created.
-            tip_id: HashCode;
+      // Amount approved for tips that exceeds the pickup_amount.
+      committed_amount: Amount;
 
-            // taler://tip URI for the tip
-            taler_tip_uri: string;
+      // Array of all tips created by this reserves (possibly empty!).
+      // Only present if asked for explicitly.
+      tips?: TipStatusEntry[];
 
-            // URL that will directly trigger processing
-            // the tip when the browser is redirected to it
-            tip_status_url: string;
+      // Is this reserve active (false if it was deleted but not purged)?
+      active: boolean;
 
-            // when does the tip expire
-            tip_expiration: Timestamp;
-        }
+      // URI to use to fill the reserve, can be NULL
+      // if the reserve is inactive or was already filled
+      payto_uri: string;
 
-        interface ReserveDetail {
-            // Timestamp when it was established.
-            creation_time: Timestamp;
+      // URL of the exchange hosting the reserve,
+      // NULL if the reserve is inactive
+      exchange_url: string;
+    }
 
-            // Timestamp when it expires.
-            expiration_time: Timestamp;
+    interface TipStatusEntry {
+      // Unique identifier for the tip.
+      tip_id: HashCode;
 
-            // Initial amount as per reserve creation call.
-            merchant_initial_amount: Amount;
+      // Total amount of the tip that can be withdrawn.
+      total_amount: Amount;
 
-            // Initial amount as per exchange, 0 if exchange did
-            // not confirm reserve creation yet.
-            exchange_initial_amount: Amount;
+      // Human-readable reason for why the tip was granted.
+      reason: string;
+    }
 
-            // Amount picked up so far.
-            pickup_amount: Amount;
+    interface TipDetails {
+      // Amount that we authorized for this tip.
+      total_authorized: Amount;
 
-            // Amount approved for tips that exceeds the pickup_amount.
-            committed_amount: Amount;
+      // Amount that was picked up by the user already.
+      total_picked_up: Amount;
 
-            // Array of all tips created by this reserves (possibly empty!).
-            // Only present if asked for explicitly.
-            tips?: TipStatusEntry[];
+      // Human-readable reason given when authorizing the tip.
+      reason: string;
 
-            // Is this reserve active (false if it was deleted but not purged)?
-            active: boolean;
+      // Timestamp indicating when the tip is set to expire (may be in the 
past).
+      expiration: Timestamp;
 
-            // URI to use to fill the reserve, can be NULL
-            // if the reserve is inactive or was already filled
-            payto_uri: string;
+      // Reserve public key from which the tip is funded.
+      reserve_pub: EddsaPublicKey;
 
-            // URL of the exchange hosting the reserve,
-            // NULL if the reserve is inactive
-            exchange_url: string;
+      // Array showing the pickup operations of the wallet (possibly empty!).
+      // Only present if asked for explicitly.
+      pickups?: PickupDetail[];
+    }
+    interface PickupDetail {
+      // Unique identifier for the pickup operation.
+      pickup_id: HashCode;
 
-        }
+      // Number of planchets involved.
+      num_planchets: Integer;
 
-        interface TipStatusEntry {
+      // Total amount requested for this pickup_id.
+      requested_amount: Amount;
+    }
+  }
 
-            // Unique identifier for the tip.
-            tip_id: HashCode;
+  namespace Transfers {
+    interface TransferList {
+      // list of all the transfers that fit the filter that we know
+      transfers: TransferDetails[];
+    }
+    interface TransferDetails {
+      // how much was wired to the merchant (minus fees)
+      credit_amount: Amount;
 
-            // Total amount of the tip that can be withdrawn.
-            total_amount: Amount;
+      // raw wire transfer identifier identifying the wire transfer (a 
base32-encoded value)
+      wtid: string;
 
-            // Human-readable reason for why the tip was granted.
-            reason: string;
-        }
+      // target account that received the wire transfer
+      payto_uri: string;
 
-        interface TipDetails {
-            // Amount that we authorized for this tip.
-            total_authorized: Amount;
+      // base URL of the exchange that made the wire transfer
+      exchange_url: string;
 
-            // Amount that was picked up by the user already.
-            total_picked_up: Amount;
+      // Serial number identifying the transfer in the merchant backend.
+      // Used for filgering via offset.
+      transfer_serial_id: number;
 
-            // Human-readable reason given when authorizing the tip.
-            reason: string;
+      // Time of the execution of the wire transfer by the exchange, according 
to the exchange
+      // Only provided if we did get an answer from the exchange.
+      execution_time?: Timestamp;
 
-            // Timestamp indicating when the tip is set to expire (may be in 
the past).
-            expiration: Timestamp;
+      // True if we checked the exchange's answer and are happy with it.
+      // False if we have an answer and are unhappy, missing if we
+      // do not have an answer from the exchange.
+      verified?: boolean;
 
-            // Reserve public key from which the tip is funded.
-            reserve_pub: EddsaPublicKey;
+      // True if the merchant uses the POST /transfers API to confirm
+      // that this wire transfer took place (and it is thus not
+      // something merely claimed by the exchange).
+      confirmed?: boolean;
+    }
 
-            // Array showing the pickup operations of the wallet (possibly 
empty!).
-            // Only present if asked for explicitly.
-            pickups?: PickupDetail[];
-        }
-        interface PickupDetail {
-            // Unique identifier for the pickup operation.
-            pickup_id: HashCode;
+    interface TransferInformation {
+      // how much was wired to the merchant (minus fees)
+      credit_amount: Amount;
 
-            // Number of planchets involved.
-            num_planchets: Integer;
+      // raw wire transfer identifier identifying the wire transfer (a 
base32-encoded value)
+      wtid: WireTransferIdentifierRawP;
 
-            // Total amount requested for this pickup_id.
-            requested_amount: Amount;
-        }
+      // target account that received the wire transfer
+      payto_uri: string;
 
+      // base URL of the exchange that made the wire transfer
+      exchange_url: string;
     }
+    interface MerchantTrackTransferResponse {
+      // Total amount transferred
+      total: Amount;
 
-    namespace Transfers {
-
-        interface TransferList {
-            // list of all the transfers that fit the filter that we know
-            transfers: TransferDetails[];
-        }
-        interface TransferDetails {
-            // how much was wired to the merchant (minus fees)
-            credit_amount: Amount;
-
-            // raw wire transfer identifier identifying the wire transfer (a 
base32-encoded value)
-            wtid: string;
+      // Applicable wire fee that was charged
+      wire_fee: Amount;
 
-            // target account that received the wire transfer
-            payto_uri: string;
+      // Time of the execution of the wire transfer by the exchange, according 
to the exchange
+      execution_time: Timestamp;
 
-            // base URL of the exchange that made the wire transfer
-            exchange_url: string;
-
-            // Serial number identifying the transfer in the merchant backend.
-            // Used for filgering via offset.
-            transfer_serial_id: number;
-
-            // Time of the execution of the wire transfer by the exchange, 
according to the exchange
-            // Only provided if we did get an answer from the exchange.
-            execution_time?: Timestamp;
-
-            // True if we checked the exchange's answer and are happy with it.
-            // False if we have an answer and are unhappy, missing if we
-            // do not have an answer from the exchange.
-            verified?: boolean;
-
-            // True if the merchant uses the POST /transfers API to confirm
-            // that this wire transfer took place (and it is thus not
-            // something merely claimed by the exchange).
-            confirmed?: boolean;
-        }
-
-        interface TransferInformation {
-            // how much was wired to the merchant (minus fees)
-            credit_amount: Amount;
-
-            // raw wire transfer identifier identifying the wire transfer (a 
base32-encoded value)
-            wtid: WireTransferIdentifierRawP;
-
-            // target account that received the wire transfer
-            payto_uri: string;
-
-            // base URL of the exchange that made the wire transfer
-            exchange_url: string;
-        }
-        interface MerchantTrackTransferResponse {
-            // Total amount transferred
-            total: Amount;
-
-            // Applicable wire fee that was charged
-            wire_fee: Amount;
-
-            // Time of the execution of the wire transfer by the exchange, 
according to the exchange
-            execution_time: Timestamp;
-
-            // details about the deposits
-            deposits_sums: MerchantTrackTransferDetail[];
-        }
-        interface MerchantTrackTransferDetail {
-            // Business activity associated with the wire transferred amount
-            // deposit_value.
-            order_id: string;
-
-            // The total amount the exchange paid back for order_id.
-            deposit_value: Amount;
-
-            // applicable fees for the deposit
-            deposit_fee: Amount;
-        }
-
-        type ExchangeConflictDetails = WireFeeConflictDetails | 
TrackTransferConflictDetails
-        // Note: this is not the full 'proof' of missbehavior, as
-        // the bogus message from the exchange with a signature
-        // over the 'different' wire fee is missing.
-        //
-        // This information is NOT provided by the current implementation,
-        // because this would be quite expensive to generate and is
-        // hardly needed _here_. Once we add automated reports for
-        // the Taler auditor, we need to generate this data anyway
-        // and should probably return it here as well.
-        interface WireFeeConflictDetails {
-            // Numerical error code:
-            code: "TALER_EC_MERCHANT_PRIVATE_POST_TRANSFERS_BAD_WIRE_FEE";
+      // details about the deposits
+      deposits_sums: MerchantTrackTransferDetail[];
+    }
+    interface MerchantTrackTransferDetail {
+      // Business activity associated with the wire transferred amount
+      // deposit_value.
+      order_id: string;
 
-            // Text describing the issue for humans.
-            hint: string;
-
-
-            // Wire fee (wrongly) charged by the exchange, breaking the
-            // contract affirmed by the exchange_sig.
-            wire_fee: Amount;
-
-            // Timestamp of the wire transfer
-            execution_time: Timestamp;
-
-            // The expected wire fee (as signed by the exchange)
-            expected_wire_fee: Amount;
-
-            // Expected closing fee (needed to verify signature)
-            expected_closing_fee: Amount;
-
-            // Start date of the expected fee structure
-            start_date: Timestamp;
+      // The total amount the exchange paid back for order_id.
+      deposit_value: Amount;
 
-            // End date of the expected fee structure
-            end_date: Timestamp;
+      // applicable fees for the deposit
+      deposit_fee: Amount;
+    }
 
-            // Signature of the exchange affirming the expected fee structure
-            master_sig: EddsaSignature;
-
-            // Master public key of the exchange
-            master_pub: EddsaPublicKey;
-        }
-        interface TrackTransferConflictDetails {
-            // Numerical error code
-            code: 
"TALER_EC_MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_REPORTS";
-
-            // Text describing the issue for humans.
-            hint: string;
-
-            // Offset in the exchange_transfer where the
-            // exchange's response fails to match the exchange_deposit_proof.
-            conflict_offset: number;
-
-            // The response from the exchange which tells us when the
-            // coin was returned to us, except that it does not match
-            // the expected value of the coin.
-            //
-            // This field is NOT provided by the current implementation,
-            // because this would be quite expensive to generate and is
-            // hardly needed _here_. Once we add automated reports for
-            // the Taler auditor, we need to generate this data anyway
-            // and should probably return it here as well.
-            // exchange_transfer?: TrackTransferResponse;
+    type ExchangeConflictDetails =
+      | WireFeeConflictDetails
+      | TrackTransferConflictDetails;
+    // Note: this is not the full 'proof' of missbehavior, as
+    // the bogus message from the exchange with a signature
+    // over the 'different' wire fee is missing.
+    //
+    // This information is NOT provided by the current implementation,
+    // because this would be quite expensive to generate and is
+    // hardly needed _here_. Once we add automated reports for
+    // the Taler auditor, we need to generate this data anyway
+    // and should probably return it here as well.
+    interface WireFeeConflictDetails {
+      // Numerical error code:
+      code: "TALER_EC_MERCHANT_PRIVATE_POST_TRANSFERS_BAD_WIRE_FEE";
+
+      // Text describing the issue for humans.
+      hint: string;
+
+      // Wire fee (wrongly) charged by the exchange, breaking the
+      // contract affirmed by the exchange_sig.
+      wire_fee: Amount;
+
+      // Timestamp of the wire transfer
+      execution_time: Timestamp;
+
+      // The expected wire fee (as signed by the exchange)
+      expected_wire_fee: Amount;
+
+      // Expected closing fee (needed to verify signature)
+      expected_closing_fee: Amount;
+
+      // Start date of the expected fee structure
+      start_date: Timestamp;
+
+      // End date of the expected fee structure
+      end_date: Timestamp;
+
+      // Signature of the exchange affirming the expected fee structure
+      master_sig: EddsaSignature;
+
+      // Master public key of the exchange
+      master_pub: EddsaPublicKey;
+    }
+    interface TrackTransferConflictDetails {
+      // Numerical error code
+      code: "TALER_EC_MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_REPORTS";
 
-            // Public key of the exchange used to sign the response to
-            // our deposit request.
-            deposit_exchange_pub: EddsaPublicKey;
+      // Text describing the issue for humans.
+      hint: string;
 
-            // Signature of the exchange signing the (conflicting) response.
-            // Signs over a struct TALER_DepositConfirmationPS.
-            deposit_exchange_sig: EddsaSignature;
-
-            // Hash of the merchant's bank account the wire transfer went to
-            h_wire: HashCode;
-
-            // Hash of the contract terms with the conflicting deposit.
-            h_contract_terms: HashCode;
+      // Offset in the exchange_transfer where the
+      // exchange's response fails to match the exchange_deposit_proof.
+      conflict_offset: number;
 
-            // At what time the exchange received the deposit.  Needed
-            // to verify the \exchange_sig\.
-            deposit_timestamp: Timestamp;
-
-            // At what time the refund possibility expired (needed to verify 
exchange_sig).
-            refund_deadline: Timestamp;
-
-            // Public key of the coin for which we have conflicting 
information.
-            coin_pub: EddsaPublicKey;
+      // The response from the exchange which tells us when the
+      // coin was returned to us, except that it does not match
+      // the expected value of the coin.
+      //
+      // This field is NOT provided by the current implementation,
+      // because this would be quite expensive to generate and is
+      // hardly needed _here_. Once we add automated reports for
+      // the Taler auditor, we need to generate this data anyway
+      // and should probably return it here as well.
+      // exchange_transfer?: TrackTransferResponse;
 
-            // Amount the exchange counted the coin for in the transfer.
-            amount_with_fee: Amount;
+      // Public key of the exchange used to sign the response to
+      // our deposit request.
+      deposit_exchange_pub: EddsaPublicKey;
 
-            // Expected value of the coin.
-            coin_value: Amount;
+      // Signature of the exchange signing the (conflicting) response.
+      // Signs over a struct TALER_DepositConfirmationPS.
+      deposit_exchange_sig: EddsaSignature;
 
-            // Expected deposit fee of the coin.
-            coin_fee: Amount;
+      // Hash of the merchant's bank account the wire transfer went to
+      h_wire: HashCode;
 
-            // Expected deposit fee of the coin.
-            deposit_fee: Amount;
+      // Hash of the contract terms with the conflicting deposit.
+      h_contract_terms: HashCode;
 
-        }
+      // At what time the exchange received the deposit.  Needed
+      // to verify the \exchange_sig\.
+      deposit_timestamp: Timestamp;
 
-        // interface TrackTransferProof {
-        //     // signature from the exchange made with purpose
-        //     // TALER_SIGNATURE_EXCHANGE_CONFIRM_WIRE_DEPOSIT
-        //     exchange_sig: EddsaSignature;
+      // At what time the refund possibility expired (needed to verify 
exchange_sig).
+      refund_deadline: Timestamp;
 
-        //     // public EdDSA key of the exchange that was used to generate 
the signature.
-        //     // Should match one of the exchange's signing keys from /keys.  
Again given
-        //     // explicitly as the client might otherwise be confused by 
clock skew as to
-        //     // which signing key was used.
-        //     exchange_pub: EddsaSignature;
+      // Public key of the coin for which we have conflicting information.
+      coin_pub: EddsaPublicKey;
 
-        //     // hash of the wire details (identical for all deposits)
-        //     // Needed to check the exchange_sig
-        //     h_wire: HashCode;
-        // }
+      // Amount the exchange counted the coin for in the transfer.
+      amount_with_fee: Amount;
 
-    }
+      // Expected value of the coin.
+      coin_value: Amount;
 
+      // Expected deposit fee of the coin.
+      coin_fee: Amount;
 
-    interface ContractTerms {
-        // Human-readable description of the whole purchase
-        summary: string;
-
-        // Map from IETF BCP 47 language tags to localized summaries
-        summary_i18n?: { [lang_tag: string]: string };
-
-        // Unique, free-form identifier for the proposal.
-        // Must be unique within a merchant instance.
-        // For merchants that do not store proposals in their DB
-        // before the customer paid for them, the order_id can be used
-        // by the frontend to restore a proposal from the information
-        // encoded in it (such as a short product identifier and timestamp).
-        order_id: string;
-
-        // Total price for the transaction.
-        // The exchange will subtract deposit fees from that amount
-        // before transferring it to the merchant.
-        amount: Amount;
-
-        // The URL for this purchase.  Every time is is visited, the merchant
-        // will send back to the customer the same proposal.  Clearly, this URL
-        // can be bookmarked and shared by users.
-        fulfillment_url?: string;
-
-        // Maximum total deposit fee accepted by the merchant for this contract
-        max_fee: Amount;
-
-        // Maximum wire fee accepted by the merchant (customer share to be
-        // divided by the 'wire_fee_amortization' factor, and further reduced
-        // if deposit fees are below 'max_fee').  Default if missing is zero.
-        max_wire_fee: Amount;
-
-        // Over how many customer transactions does the merchant expect to
-        // amortize wire fees on average?  If the exchange's wire fee is
-        // above 'max_wire_fee', the difference is divided by this number
-        // to compute the expected customer's contribution to the wire fee.
-        // The customer's contribution may further be reduced by the difference
-        // between the 'max_fee' and the sum of the actual deposit fees.
-        // Optional, default value if missing is 1.  0 and negative values are
-        // invalid and also interpreted as 1.
-        wire_fee_amortization: number;
-
-        // List of products that are part of the purchase (see Product).
-        products: Product[];
-
-        // Time when this contract was generated
-        timestamp: TalerProtocolTimestamp;
-
-        // After this deadline has passed, no refunds will be accepted.
-        refund_deadline: TalerProtocolTimestamp;
-
-        // After this deadline, the merchant won't accept payments for the 
contact
-        pay_deadline: TalerProtocolTimestamp;
-
-        // Transfer deadline for the exchange.  Must be in the
-        // deposit permissions of coins used to pay for this order.
-        wire_transfer_deadline: TalerProtocolTimestamp;
-
-        // Merchant's public key used to sign this proposal; this information
-        // is typically added by the backend Note that this can be an 
ephemeral key.
-        merchant_pub: EddsaPublicKey;
-
-        // Base URL of the (public!) merchant backend API.
-        // Must be an absolute URL that ends with a slash.
-        merchant_base_url: string;
-
-        // More info about the merchant, see below
-        merchant: Merchant;
-
-        // The hash of the merchant instance's wire details.
-        h_wire: HashCode;
-
-        // Wire transfer method identifier for the wire method associated with 
h_wire.
-        // The wallet may only select exchanges via a matching auditor if the
-        // exchange also supports this wire method.
-        // The wire transfer fees must be added based on this wire transfer 
method.
-        wire_method: string;
-
-        // Any exchanges audited by these auditors are accepted by the 
merchant.
-        auditors: Auditor[];
-
-        // Exchanges that the merchant accepts even if it does not accept any 
auditors that audit them.
-        exchanges: Exchange[];
-
-        // Delivery location for (all!) products.
-        delivery_location?: Location;
-
-        // Time indicating when the order should be delivered.
-        // May be overwritten by individual products.
-        delivery_date?: TalerProtocolTimestamp;
-
-        // Nonce generated by the wallet and echoed by the merchant
-        // in this field when the proposal is generated.
-        nonce: string;
-
-        // Specifies for how long the wallet should try to get an
-        // automatic refund for the purchase. If this field is
-        // present, the wallet should wait for a few seconds after
-        // the purchase and then automatically attempt to obtain
-        // a refund.  The wallet should probe until "delay"
-        // after the payment was successful (i.e. via long polling
-        // or via explicit requests with exponential back-off).
-        //
-        // In particular, if the wallet is offline
-        // at that time, it MUST repeat the request until it gets
-        // one response from the merchant after the delay has expired.
-        // If the refund is granted, the wallet MUST automatically
-        // recover the payment.  This is used in case a merchant
-        // knows that it might be unable to satisfy the contract and
-        // desires for the wallet to attempt to get the refund without any
-        // customer interaction.  Note that it is NOT an error if the
-        // merchant does not grant a refund.
-        auto_refund?: RelativeTime;
-
-        // Extra data that is only interpreted by the merchant frontend.
-        // Useful when the merchant needs to store extra information on a
-        // contract without storing it separately in their database.
-        extra?: any;
-
-        // Minimum age buyer must have (in years). Default is 0.
-        minimum_age?: Integer;
+      // Expected deposit fee of the coin.
+      deposit_fee: Amount;
     }
 
+    // interface TrackTransferProof {
+    //     // signature from the exchange made with purpose
+    //     // TALER_SIGNATURE_EXCHANGE_CONFIRM_WIRE_DEPOSIT
+    //     exchange_sig: EddsaSignature;
+
+    //     // public EdDSA key of the exchange that was used to generate the 
signature.
+    //     // Should match one of the exchange's signing keys from /keys.  
Again given
+    //     // explicitly as the client might otherwise be confused by clock 
skew as to
+    //     // which signing key was used.
+    //     exchange_pub: EddsaSignature;
+
+    //     // hash of the wire details (identical for all deposits)
+    //     // Needed to check the exchange_sig
+    //     h_wire: HashCode;
+    // }
+  }
+
+  interface ContractTerms {
+    // Human-readable description of the whole purchase
+    summary: string;
+
+    // Map from IETF BCP 47 language tags to localized summaries
+    summary_i18n?: { [lang_tag: string]: string };
+
+    // Unique, free-form identifier for the proposal.
+    // Must be unique within a merchant instance.
+    // For merchants that do not store proposals in their DB
+    // before the customer paid for them, the order_id can be used
+    // by the frontend to restore a proposal from the information
+    // encoded in it (such as a short product identifier and timestamp).
+    order_id: string;
+
+    // Total price for the transaction.
+    // The exchange will subtract deposit fees from that amount
+    // before transferring it to the merchant.
+    amount: Amount;
+
+    // The URL for this purchase.  Every time is is visited, the merchant
+    // will send back to the customer the same proposal.  Clearly, this URL
+    // can be bookmarked and shared by users.
+    fulfillment_url?: string;
+
+    // Maximum total deposit fee accepted by the merchant for this contract
+    max_fee: Amount;
+
+    // Maximum wire fee accepted by the merchant (customer share to be
+    // divided by the 'wire_fee_amortization' factor, and further reduced
+    // if deposit fees are below 'max_fee').  Default if missing is zero.
+    max_wire_fee: Amount;
+
+    // Over how many customer transactions does the merchant expect to
+    // amortize wire fees on average?  If the exchange's wire fee is
+    // above 'max_wire_fee', the difference is divided by this number
+    // to compute the expected customer's contribution to the wire fee.
+    // The customer's contribution may further be reduced by the difference
+    // between the 'max_fee' and the sum of the actual deposit fees.
+    // Optional, default value if missing is 1.  0 and negative values are
+    // invalid and also interpreted as 1.
+    wire_fee_amortization: number;
+
+    // List of products that are part of the purchase (see Product).
+    products: Product[];
+
+    // Time when this contract was generated
+    timestamp: TalerProtocolTimestamp;
+
+    // After this deadline has passed, no refunds will be accepted.
+    refund_deadline: TalerProtocolTimestamp;
+
+    // After this deadline, the merchant won't accept payments for the contact
+    pay_deadline: TalerProtocolTimestamp;
+
+    // Transfer deadline for the exchange.  Must be in the
+    // deposit permissions of coins used to pay for this order.
+    wire_transfer_deadline: TalerProtocolTimestamp;
+
+    // Merchant's public key used to sign this proposal; this information
+    // is typically added by the backend Note that this can be an ephemeral 
key.
+    merchant_pub: EddsaPublicKey;
+
+    // Base URL of the (public!) merchant backend API.
+    // Must be an absolute URL that ends with a slash.
+    merchant_base_url: string;
+
+    // More info about the merchant, see below
+    merchant: Merchant;
+
+    // The hash of the merchant instance's wire details.
+    h_wire: HashCode;
+
+    // Wire transfer method identifier for the wire method associated with 
h_wire.
+    // The wallet may only select exchanges via a matching auditor if the
+    // exchange also supports this wire method.
+    // The wire transfer fees must be added based on this wire transfer method.
+    wire_method: string;
+
+    // Any exchanges audited by these auditors are accepted by the merchant.
+    auditors: Auditor[];
+
+    // Exchanges that the merchant accepts even if it does not accept any 
auditors that audit them.
+    exchanges: Exchange[];
+
+    // Delivery location for (all!) products.
+    delivery_location?: Location;
+
+    // Time indicating when the order should be delivered.
+    // May be overwritten by individual products.
+    delivery_date?: TalerProtocolTimestamp;
+
+    // Nonce generated by the wallet and echoed by the merchant
+    // in this field when the proposal is generated.
+    nonce: string;
+
+    // Specifies for how long the wallet should try to get an
+    // automatic refund for the purchase. If this field is
+    // present, the wallet should wait for a few seconds after
+    // the purchase and then automatically attempt to obtain
+    // a refund.  The wallet should probe until "delay"
+    // after the payment was successful (i.e. via long polling
+    // or via explicit requests with exponential back-off).
+    //
+    // In particular, if the wallet is offline
+    // at that time, it MUST repeat the request until it gets
+    // one response from the merchant after the delay has expired.
+    // If the refund is granted, the wallet MUST automatically
+    // recover the payment.  This is used in case a merchant
+    // knows that it might be unable to satisfy the contract and
+    // desires for the wallet to attempt to get the refund without any
+    // customer interaction.  Note that it is NOT an error if the
+    // merchant does not grant a refund.
+    auto_refund?: RelativeTime;
+
+    // Extra data that is only interpreted by the merchant frontend.
+    // Useful when the merchant needs to store extra information on a
+    // contract without storing it separately in their database.
+    extra?: any;
+
+    // Minimum age buyer must have (in years). Default is 0.
+    minimum_age?: Integer;
+  }
 }
diff --git a/packages/merchant-backoffice-ui/src/hooks/async.ts 
b/packages/merchant-backoffice-ui/src/hooks/async.ts
index a842c73e4..6c116e628 100644
--- a/packages/merchant-backoffice-ui/src/hooks/async.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/async.ts
@@ -15,38 +15,41 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { useState } from "preact/hooks";
 import { cancelPendingRequest } from "./backend.js";
 
 export interface Options {
-  slowTolerance: number,
+  slowTolerance: number;
 }
 
 export interface AsyncOperationApi<T> {
-  request: (...a: any) => void,
-  cancel: () => void,
-  data: T | undefined,
-  isSlow: boolean,
-  isLoading: boolean,
-  error: string | undefined
+  request: (...a: any) => void;
+  cancel: () => void;
+  data: T | undefined;
+  isSlow: boolean;
+  isLoading: boolean;
+  error: string | undefined;
 }
 
-export function useAsync<T>(fn?: (...args: any) => Promise<T>, { 
slowTolerance: tooLong }: Options = { slowTolerance: 1000 }): 
AsyncOperationApi<T> {
+export function useAsync<T>(
+  fn?: (...args: any) => Promise<T>,
+  { slowTolerance: tooLong }: Options = { slowTolerance: 1000 },
+): AsyncOperationApi<T> {
   const [data, setData] = useState<T | undefined>(undefined);
   const [isLoading, setLoading] = useState<boolean>(false);
   const [error, setError] = useState<any>(undefined);
-  const [isSlow, setSlow] = useState(false)
+  const [isSlow, setSlow] = useState(false);
 
   const request = async (...args: any) => {
     if (!fn) return;
     setLoading(true);
 
     const handler = setTimeout(() => {
-      setSlow(true)
-    }, tooLong)
+      setSlow(true);
+    }, tooLong);
 
     try {
       const result = await fn(...args);
@@ -55,14 +58,14 @@ export function useAsync<T>(fn?: (...args: any) => 
Promise<T>, { slowTolerance:
       setError(error);
     }
     setLoading(false);
-    setSlow(false)
-    clearTimeout(handler)
+    setSlow(false);
+    clearTimeout(handler);
   };
 
   function cancel() {
-    cancelPendingRequest()
+    cancelPendingRequest();
     setLoading(false);
-    setSlow(false)
+    setSlow(false);
   }
 
   return {
@@ -71,6 +74,6 @@ export function useAsync<T>(fn?: (...args: any) => 
Promise<T>, { slowTolerance:
     data,
     isSlow,
     isLoading,
-    error
+    error,
   };
 }
diff --git a/packages/merchant-backoffice-ui/src/hooks/backend.ts 
b/packages/merchant-backoffice-ui/src/hooks/backend.ts
index 0c844700b..cbfac35de 100644
--- a/packages/merchant-backoffice-ui/src/hooks/backend.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/backend.ts
@@ -25,17 +25,20 @@ import { MerchantBackend } from "../declaration.js";
 import { useBackendContext } from "../context/backend.js";
 import { useEffect, useState } from "preact/hooks";
 import { DEFAULT_REQUEST_TIMEOUT } from "../utils/constants.js";
-import { axiosHandler, removeAxiosCancelToken } from 
"../utils/switchableAxios.js";
+import {
+  axiosHandler,
+  removeAxiosCancelToken,
+} from "../utils/switchableAxios.js";
 
 export function useMatchMutate(): (
   re: RegExp,
-  value?: unknown
+  value?: unknown,
 ) => Promise<any> {
   const { cache, mutate } = useSWRConfig();
 
   if (!(cache instanceof Map)) {
     throw new Error(
-      "matchMutate requires the cache provider to be a Map instance"
+      "matchMutate requires the cache provider to be a Map instance",
     );
   }
 
@@ -154,7 +157,7 @@ interface RequestOptions {
 function buildRequestOk<T>(
   res: AxiosResponse<T>,
   url: string,
-  hasToken: boolean
+  hasToken: boolean,
 ): HttpResponseOk<T> {
   return {
     ok: true,
@@ -177,7 +180,7 @@ function buildRequestOk<T>(
 function buildRequestFailed(
   ex: AxiosError<MerchantBackend.ErrorDetail>,
   url: string,
-  hasToken: boolean
+  hasToken: boolean,
 ):
   | HttpResponseClientError
   | HttpResponseServerError
@@ -236,14 +239,14 @@ export function cancelPendingRequest(): void {
 }
 
 export function isAxiosError<T>(
-  error: AxiosError | any
+  error: AxiosError | any,
 ): error is AxiosError<T> {
   return error && error.isAxiosError;
 }
 
 export async function request<T>(
   url: string,
-  options: RequestOptions = {}
+  options: RequestOptions = {},
 ): Promise<HttpResponseOk<T>> {
   const headers = options.token
     ? { Authorization: `Bearer ${options.token}` }
@@ -273,7 +276,7 @@ export async function request<T>(
 export function multiFetcher<T>(
   urls: string[],
   token: string,
-  backend: string
+  backend: string,
 ): Promise<HttpResponseOk<T>[]> {
   return Promise.all(urls.map((url) => fetcher<T>(url, token, backend)));
 }
@@ -281,7 +284,7 @@ export function multiFetcher<T>(
 export function fetcher<T>(
   url: string,
   token: string,
-  backend: string
+  backend: string,
 ): Promise<HttpResponseOk<T>> {
   return request<T>(`${backend}${url}`, { token });
 }
diff --git a/packages/merchant-backoffice-ui/src/hooks/index.ts 
b/packages/merchant-backoffice-ui/src/hooks/index.ts
index 9194ec0e9..0581d9938 100644
--- a/packages/merchant-backoffice-ui/src/hooks/index.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/index.ts
@@ -15,81 +15,109 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { StateUpdater, useCallback, useState } from "preact/hooks";
 import { ValueOrFunction } from "../utils/types.js";
 
-
 const calculateRootPath = () => {
-  const rootPath = typeof window !== undefined ? window.location.origin + 
window.location.pathname : '/'
-  return rootPath
-}
-
-export function useBackendURL(url?: string): [string, boolean, 
StateUpdater<string>, () => void] {
-  const [value, setter] = useNotNullLocalStorage('backend-url', url || 
calculateRootPath())
-  const [triedToLog, setTriedToLog] = useLocalStorage('tried-login')
+  const rootPath =
+    typeof window !== undefined
+      ? window.location.origin + window.location.pathname
+      : "/";
+  return rootPath;
+};
+
+export function useBackendURL(
+  url?: string,
+): [string, boolean, StateUpdater<string>, () => void] {
+  const [value, setter] = useNotNullLocalStorage(
+    "backend-url",
+    url || calculateRootPath(),
+  );
+  const [triedToLog, setTriedToLog] = useLocalStorage("tried-login");
 
   const checkedSetter = (v: ValueOrFunction<string>) => {
-    setTriedToLog('yes')
-    return setter(p => (v instanceof Function ? v(p) : v).replace(/\/$/, ''))
-  }
+    setTriedToLog("yes");
+    return setter((p) => (v instanceof Function ? v(p) : v).replace(/\/$/, 
""));
+  };
 
   const resetBackend = () => {
-    setTriedToLog(undefined)
-  }
-  return [value, !!triedToLog, checkedSetter, resetBackend]
+    setTriedToLog(undefined);
+  };
+  return [value, !!triedToLog, checkedSetter, resetBackend];
 }
 
-export function useBackendDefaultToken(initialValue?: string): [string | 
undefined, StateUpdater<string | undefined>] {
-  return useLocalStorage('backend-token', initialValue)
+export function useBackendDefaultToken(
+  initialValue?: string,
+): [string | undefined, StateUpdater<string | undefined>] {
+  return useLocalStorage("backend-token", initialValue);
 }
 
-export function useBackendInstanceToken(id: string): [string | undefined, 
StateUpdater<string | undefined>] {
-  const [token, setToken] = useLocalStorage(`backend-token-${id}`)
-  const [defaultToken, defaultSetToken] = useBackendDefaultToken()
+export function useBackendInstanceToken(
+  id: string,
+): [string | undefined, StateUpdater<string | undefined>] {
+  const [token, setToken] = useLocalStorage(`backend-token-${id}`);
+  const [defaultToken, defaultSetToken] = useBackendDefaultToken();
 
   // instance named 'default' use the default token
-  if (id === 'default') {
-    return [defaultToken, defaultSetToken]
+  if (id === "default") {
+    return [defaultToken, defaultSetToken];
   }
 
-  return [token, setToken]
+  return [token, setToken];
 }
 
 export function useLang(initial?: string): [string, StateUpdater<string>] {
-  const browserLang = typeof window !== "undefined" ? navigator.language || 
(navigator as any).userLanguage : undefined;
-  const defaultLang = (browserLang || initial || 'en').substring(0, 2)
-  return useNotNullLocalStorage('lang-preference', defaultLang)
+  const browserLang =
+    typeof window !== "undefined"
+      ? navigator.language || (navigator as any).userLanguage
+      : undefined;
+  const defaultLang = (browserLang || initial || "en").substring(0, 2);
+  return useNotNullLocalStorage("lang-preference", defaultLang);
 }
 
-export function useLocalStorage(key: string, initialValue?: string): [string | 
undefined, StateUpdater<string | undefined>] {
-  const [storedValue, setStoredValue] = useState<string | undefined>((): 
string | undefined => {
-    return typeof window !== "undefined" ? window.localStorage.getItem(key) || 
initialValue : initialValue;
-  });
-
-  const setValue = (value?: string | ((val?: string) => string | undefined)) 
=> {
-    setStoredValue(p => {
-      const toStore = value instanceof Function ? value(p) : value
+export function useLocalStorage(
+  key: string,
+  initialValue?: string,
+): [string | undefined, StateUpdater<string | undefined>] {
+  const [storedValue, setStoredValue] = useState<string | undefined>(
+    (): string | undefined => {
+      return typeof window !== "undefined"
+        ? window.localStorage.getItem(key) || initialValue
+        : initialValue;
+    },
+  );
+
+  const setValue = (
+    value?: string | ((val?: string) => string | undefined),
+  ) => {
+    setStoredValue((p) => {
+      const toStore = value instanceof Function ? value(p) : value;
       if (typeof window !== "undefined") {
         if (!toStore) {
-          window.localStorage.removeItem(key)
+          window.localStorage.removeItem(key);
         } else {
           window.localStorage.setItem(key, toStore);
         }
       }
-      return toStore
-    })
+      return toStore;
+    });
   };
 
   return [storedValue, setValue];
 }
 
-export function useNotNullLocalStorage(key: string, initialValue: string): 
[string, StateUpdater<string>] {
+export function useNotNullLocalStorage(
+  key: string,
+  initialValue: string,
+): [string, StateUpdater<string>] {
   const [storedValue, setStoredValue] = useState<string>((): string => {
-    return typeof window !== "undefined" ? window.localStorage.getItem(key) || 
initialValue : initialValue;
+    return typeof window !== "undefined"
+      ? window.localStorage.getItem(key) || initialValue
+      : initialValue;
   });
 
   const setValue = (value: string | ((val: string) => string)) => {
@@ -97,7 +125,7 @@ export function useNotNullLocalStorage(key: string, 
initialValue: string): [stri
     setStoredValue(valueToStore);
     if (typeof window !== "undefined") {
       if (!valueToStore) {
-        window.localStorage.removeItem(key)
+        window.localStorage.removeItem(key);
       } else {
         window.localStorage.setItem(key, valueToStore);
       }
@@ -106,5 +134,3 @@ export function useNotNullLocalStorage(key: string, 
initialValue: string): [stri
 
   return [storedValue, setValue];
 }
-
-
diff --git a/packages/merchant-backoffice-ui/src/hooks/instance.ts 
b/packages/merchant-backoffice-ui/src/hooks/instance.ts
index 7564f8ef6..ab59487de 100644
--- a/packages/merchant-backoffice-ui/src/hooks/instance.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/instance.ts
@@ -28,7 +28,7 @@ import {
 
 interface InstanceAPI {
   updateInstance: (
-    data: MerchantBackend.Instances.InstanceReconfigurationMessage
+    data: MerchantBackend.Instances.InstanceReconfigurationMessage,
   ) => Promise<void>;
   deleteInstance: () => Promise<void>;
   clearToken: () => Promise<void>;
@@ -40,7 +40,7 @@ export function useAdminAPI(): AdminAPI {
   const mutateAll = useMatchMutate();
 
   const createInstance = async (
-    instance: MerchantBackend.Instances.InstanceConfigurationMessage
+    instance: MerchantBackend.Instances.InstanceConfigurationMessage,
   ): Promise<void> => {
     await request(`${url}/management/instances`, {
       method: "post",
@@ -77,7 +77,7 @@ export function useAdminAPI(): AdminAPI {
 
 export interface AdminAPI {
   createInstance: (
-    data: MerchantBackend.Instances.InstanceConfigurationMessage
+    data: MerchantBackend.Instances.InstanceConfigurationMessage,
   ) => Promise<void>;
   deleteInstance: (id: string) => Promise<void>;
   purgeInstance: (id: string) => Promise<void>;
@@ -88,7 +88,7 @@ export function useManagementAPI(instanceId: string): 
InstanceAPI {
   const { url, token, updateLoginStatus } = useBackendContext();
 
   const updateInstance = async (
-    instance: MerchantBackend.Instances.InstanceReconfigurationMessage
+    instance: MerchantBackend.Instances.InstanceReconfigurationMessage,
   ): Promise<void> => {
     await request(`${url}/management/instances/${instanceId}`, {
       method: "patch",
@@ -125,7 +125,7 @@ export function useManagementAPI(instanceId: string): 
InstanceAPI {
       data: { method: "token", token: newToken },
     });
 
-    updateLoginStatus(url, newToken)
+    updateLoginStatus(url, newToken);
     mutateAll(/\/management\/instances/);
   };
 
@@ -134,7 +134,11 @@ export function useManagementAPI(instanceId: string): 
InstanceAPI {
 
 export function useInstanceAPI(): InstanceAPI {
   const { mutate } = useSWRConfig();
-  const { url: baseUrl, token: adminToken, updateLoginStatus } = 
useBackendContext();
+  const {
+    url: baseUrl,
+    token: adminToken,
+    updateLoginStatus,
+  } = useBackendContext();
   const { token: instanceToken, id, admin } = useInstanceContext();
 
   const { url, token } = !admin
@@ -142,7 +146,7 @@ export function useInstanceAPI(): InstanceAPI {
     : { url: `${baseUrl}/instances/${id}`, token: instanceToken };
 
   const updateInstance = async (
-    instance: MerchantBackend.Instances.InstanceReconfigurationMessage
+    instance: MerchantBackend.Instances.InstanceReconfigurationMessage,
   ): Promise<void> => {
     await request(`${url}/private/`, {
       method: "patch",
@@ -181,7 +185,7 @@ export function useInstanceAPI(): InstanceAPI {
       data: { method: "token", token: newToken },
     });
 
-    updateLoginStatus(baseUrl, newToken)
+    updateLoginStatus(baseUrl, newToken);
     mutate([`/private/`, token, url], null);
   };
 
@@ -252,7 +256,7 @@ export function useInstanceKYCDetails(): 
HttpResponse<KYCStatus> {
 }
 
 export function useManagedInstanceDetails(
-  instanceId: string
+  instanceId: string,
 ): HttpResponse<MerchantBackend.Instances.QueryInstancesResponse> {
   const { url, token } = useBackendContext();
 
diff --git a/packages/merchant-backoffice-ui/src/hooks/listener.ts 
b/packages/merchant-backoffice-ui/src/hooks/listener.ts
index df037de7f..d101f7bb8 100644
--- a/packages/merchant-backoffice-ui/src/hooks/listener.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/listener.ts
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { useState } from "preact/hooks";
 
@@ -26,25 +26,27 @@ import { useState } from "preact/hooks";
  * an action (a button) and other child have the action implemented (like
  * gathering information with a form). The difference with other approaches is
  * that in this case the parent component is not holding the state.
- * 
- * It will return a subscriber and activator. 
- * 
+ *
+ * It will return a subscriber and activator.
+ *
  * The activator may be undefined, if it is undefined it is indicating that the
  * subscriber is not ready to be called.
  *
  * The subscriber will receive a function (the listener) that will be call 
when the
  * activator runs. The listener must return the collected information.
- * 
+ *
  * As a result, when the activator is triggered by a child component, the
  * @action function is called receives the information from the listener 
defined by other
- * child component 
+ * child component
  *
  * @param action from <T> to <R>
  * @returns activator and subscriber, undefined activator means that there is 
not subscriber
  */
 
-export function useListener<T, R = any>(action: (r: T) => Promise<R>): 
[undefined | (() => Promise<R>), (listener?: () => T) => void] {
-  type RunnerHandler = { toBeRan?: () => Promise<R>; };
+export function useListener<T, R = any>(
+  action: (r: T) => Promise<R>,
+): [undefined | (() => Promise<R>), (listener?: () => T) => void] {
+  type RunnerHandler = { toBeRan?: () => Promise<R> };
   const [state, setState] = useState<RunnerHandler>({});
 
   /**
@@ -58,24 +60,26 @@ export function useListener<T, R = any>(action: (r: T) => 
Promise<R>): [undefine
         toBeRan: () => {
           const whatWeGetFromTheListener = listener();
           return action(whatWeGetFromTheListener);
-        }
+        },
       });
     } else {
       setState({
-        toBeRan: undefined
-      })
+        toBeRan: undefined,
+      });
     }
   };
 
   /**
    * activator will call runner if there is someone subscribed
    */
-  const activator = state.toBeRan ? async () => {
-    if (state.toBeRan) {
-      return state.toBeRan();
-    }
-    return Promise.reject();
-  } : undefined;
+  const activator = state.toBeRan
+    ? async () => {
+        if (state.toBeRan) {
+          return state.toBeRan();
+        }
+        return Promise.reject();
+      }
+    : undefined;
 
   return [activator, subscriber];
 }
diff --git a/packages/merchant-backoffice-ui/src/hooks/notifications.ts 
b/packages/merchant-backoffice-ui/src/hooks/notifications.ts
index 63b1e5e16..133ddd80b 100644
--- a/packages/merchant-backoffice-ui/src/hooks/notifications.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/notifications.ts
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { useState } from "preact/hooks";
 import { Notification } from "../utils/types.js";
@@ -28,21 +28,29 @@ interface Result {
   removeNotification: (n: Notification) => void;
 }
 
-type NotificationWithDate = Notification & { since: Date }
+type NotificationWithDate = Notification & { since: Date };
 
-export function useNotifications(initial: Notification[] = [], timeout = 
3000): Result {
-  const [notifications, setNotifications] = 
useState<(NotificationWithDate)[]>(initial.map(i => ({...i, since: new Date() 
})))
+export function useNotifications(
+  initial: Notification[] = [],
+  timeout = 3000,
+): Result {
+  const [notifications, setNotifications] = useState<NotificationWithDate[]>(
+    initial.map((i) => ({ ...i, since: new Date() })),
+  );
 
   const pushNotification = (n: Notification): void => {
-    const entry = { ...n, since: new Date() }
-    setNotifications(ns => [...ns, entry])
-    if (n.type !== 'ERROR') setTimeout(() => {
-      setNotifications(ns => ns.filter(x => x.since !== entry.since))
-    }, timeout)
-  }
+    const entry = { ...n, since: new Date() };
+    setNotifications((ns) => [...ns, entry]);
+    if (n.type !== "ERROR")
+      setTimeout(() => {
+        setNotifications((ns) => ns.filter((x) => x.since !== entry.since));
+      }, timeout);
+  };
 
   const removeNotification = (notif: Notification) => {
-    setNotifications((ns: NotificationWithDate[]) => ns.filter(n => n !== 
notif))
-  }
-  return { notifications, pushNotification, removeNotification }
+    setNotifications((ns: NotificationWithDate[]) =>
+      ns.filter((n) => n !== notif),
+    );
+  };
+  return { notifications, pushNotification, removeNotification };
 }
diff --git a/packages/merchant-backoffice-ui/src/hooks/order.ts 
b/packages/merchant-backoffice-ui/src/hooks/order.ts
index 75c474187..d1e26b671 100644
--- a/packages/merchant-backoffice-ui/src/hooks/order.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/order.ts
@@ -32,15 +32,15 @@ import {
 export interface OrderAPI {
   //FIXME: add OutOfStockResponse on 410
   createOrder: (
-    data: MerchantBackend.Orders.PostOrderRequest
+    data: MerchantBackend.Orders.PostOrderRequest,
   ) => Promise<HttpResponseOk<MerchantBackend.Orders.PostOrderResponse>>;
   forgetOrder: (
     id: string,
-    data: MerchantBackend.Orders.ForgetRequest
+    data: MerchantBackend.Orders.ForgetRequest,
   ) => Promise<HttpResponseOk<void>>;
   refundOrder: (
     id: string,
-    data: MerchantBackend.Orders.RefundRequest
+    data: MerchantBackend.Orders.RefundRequest,
   ) => Promise<HttpResponseOk<MerchantBackend.Orders.MerchantRefundResponse>>;
   deleteOrder: (id: string) => Promise<HttpResponseOk<void>>;
   getPaymentURL: (id: string) => Promise<HttpResponseOk<string>>;
@@ -56,7 +56,7 @@ export function orderFetcher<T>(
   refunded?: YesOrNo,
   wired?: YesOrNo,
   searchDate?: Date,
-  delta?: number
+  delta?: number,
 ): Promise<HttpResponseOk<T>> {
   const date_ms =
     delta && delta < 0 && searchDate
@@ -78,16 +78,16 @@ export function useOrderAPI(): OrderAPI {
 
   const { url, token } = !admin
     ? {
-      url: baseUrl,
-      token: adminToken,
-    }
+        url: baseUrl,
+        token: adminToken,
+      }
     : {
-      url: `${baseUrl}/instances/${id}`,
-      token: instanceToken,
-    };
+        url: `${baseUrl}/instances/${id}`,
+        token: instanceToken,
+      };
 
   const createOrder = async (
-    data: MerchantBackend.Orders.PostOrderRequest
+    data: MerchantBackend.Orders.PostOrderRequest,
   ): Promise<HttpResponseOk<MerchantBackend.Orders.PostOrderResponse>> => {
     const res = await request<MerchantBackend.Orders.PostOrderResponse>(
       `${url}/private/orders`,
@@ -95,7 +95,7 @@ export function useOrderAPI(): OrderAPI {
         method: "post",
         token,
         data,
-      }
+      },
     );
     await mutateAll(/.*private\/orders.*/);
     // mutate('')
@@ -103,7 +103,7 @@ export function useOrderAPI(): OrderAPI {
   };
   const refundOrder = async (
     orderId: string,
-    data: MerchantBackend.Orders.RefundRequest
+    data: MerchantBackend.Orders.RefundRequest,
   ): Promise<HttpResponseOk<MerchantBackend.Orders.MerchantRefundResponse>> => 
{
     mutateAll(/@"\/private\/orders"@/);
     const res = request<MerchantBackend.Orders.MerchantRefundResponse>(
@@ -112,17 +112,17 @@ export function useOrderAPI(): OrderAPI {
         method: "post",
         token,
         data,
-      }
+      },
     );
 
     // order list returns refundable information, so we must evict everything
     await mutateAll(/.*private\/orders.*/);
-    return res
+    return res;
   };
 
   const forgetOrder = async (
     orderId: string,
-    data: MerchantBackend.Orders.ForgetRequest
+    data: MerchantBackend.Orders.ForgetRequest,
   ): Promise<HttpResponseOk<void>> => {
     mutateAll(/@"\/private\/orders"@/);
     const res = request<void>(`${url}/private/orders/${orderId}/forget`, {
@@ -132,10 +132,10 @@ export function useOrderAPI(): OrderAPI {
     });
     // we may be forgetting some fields that are pare of the listing, so we 
must evict everything
     await mutateAll(/.*private\/orders.*/);
-    return res
+    return res;
   };
   const deleteOrder = async (
-    orderId: string
+    orderId: string,
   ): Promise<HttpResponseOk<void>> => {
     mutateAll(/@"\/private\/orders"@/);
     const res = request<void>(`${url}/private/orders/${orderId}`, {
@@ -143,18 +143,18 @@ export function useOrderAPI(): OrderAPI {
       token,
     });
     await mutateAll(/.*private\/orders.*/);
-    return res
+    return res;
   };
 
   const getPaymentURL = async (
-    orderId: string
+    orderId: string,
   ): Promise<HttpResponseOk<string>> => {
     return request<MerchantBackend.Orders.MerchantOrderStatusResponse>(
       `${url}/private/orders/${orderId}`,
       {
         method: "get",
         token,
-      }
+      },
     ).then((res) => {
       const url =
         res.data.order_status === "unpaid"
@@ -170,14 +170,14 @@ export function useOrderAPI(): OrderAPI {
 }
 
 export function useOrderDetails(
-  oderId: string
+  oderId: string,
 ): HttpResponse<MerchantBackend.Orders.MerchantOrderStatusResponse> {
   const { url: baseUrl, token: baseToken } = useBackendContext();
   const { token: instanceToken, id, admin } = useInstanceContext();
 
   const { url, token } = !admin
-    ? { url: baseUrl, token: baseToken, }
-    : { url: `${baseUrl}/instances/${id}`, token: instanceToken, };
+    ? { url: baseUrl, token: baseToken }
+    : { url: `${baseUrl}/instances/${id}`, token: instanceToken };
 
   const { data, error, isValidating } = useSWR<
     HttpResponseOk<MerchantBackend.Orders.MerchantOrderStatusResponse>,
@@ -205,14 +205,14 @@ export interface InstanceOrderFilter {
 
 export function useInstanceOrders(
   args?: InstanceOrderFilter,
-  updateFilter?: (d: Date) => void
+  updateFilter?: (d: Date) => void,
 ): HttpResponsePaginated<MerchantBackend.Orders.OrderHistory> {
   const { url: baseUrl, token: baseToken } = useBackendContext();
   const { token: instanceToken, id, admin } = useInstanceContext();
 
   const { url, token } = !admin
-    ? { url: baseUrl, token: baseToken, }
-    : { url: `${baseUrl}/instances/${id}`, token: instanceToken, };
+    ? { url: baseUrl, token: baseToken }
+    : { url: `${baseUrl}/instances/${id}`, token: instanceToken };
 
   const [pageBefore, setPageBefore] = useState(1);
   const [pageAfter, setPageAfter] = useState(1);
@@ -241,7 +241,7 @@ export function useInstanceOrders(
       args?.date,
       totalBefore,
     ],
-    orderFetcher
+    orderFetcher,
   );
   const {
     data: afterData,
@@ -258,7 +258,7 @@ export function useInstanceOrders(
       args?.date,
       -totalAfter,
     ],
-    orderFetcher
+    orderFetcher,
   );
 
   //this will save last result
@@ -278,7 +278,8 @@ export function useInstanceOrders(
 
   // if the query returns less that we ask, then we have reach the end or 
beginning
   const isReachingEnd = afterData && afterData.data.orders.length < totalAfter;
-  const isReachingStart = args?.date === undefined ||
+  const isReachingStart =
+    args?.date === undefined ||
     (beforeData && beforeData.data.orders.length < totalBefore);
 
   const pagination = {
@@ -290,9 +291,9 @@ export function useInstanceOrders(
         setPageAfter(pageAfter + 1);
       } else {
         const from =
-          afterData.data.orders[afterData.data.orders.length - 1].timestamp
-            .t_s;
-        if (from && from !== "never" && updateFilter) updateFilter(new 
Date(from * 1000));
+          afterData.data.orders[afterData.data.orders.length - 
1].timestamp.t_s;
+        if (from && from !== "never" && updateFilter)
+          updateFilter(new Date(from * 1000));
       }
     },
     loadMorePrev: () => {
@@ -303,7 +304,8 @@ export function useInstanceOrders(
         const from =
           beforeData.data.orders[beforeData.data.orders.length - 1].timestamp
             .t_s;
-        if (from && from !== "never" && updateFilter) updateFilter(new 
Date(from * 1000));
+        if (from && from !== "never" && updateFilter)
+          updateFilter(new Date(from * 1000));
       }
     },
   };
@@ -312,9 +314,9 @@ export function useInstanceOrders(
     !beforeData || !afterData
       ? []
       : (beforeData || lastBefore).data.orders
-        .slice()
-        .reverse()
-        .concat((afterData || lastAfter).data.orders);
+          .slice()
+          .reverse()
+          .concat((afterData || lastAfter).data.orders);
   if (loadingAfter || loadingBefore) return { loading: true, data: { orders } 
};
   if (beforeData && afterData) {
     return { ok: true, data: { orders }, ...pagination };
diff --git a/packages/merchant-backoffice-ui/src/hooks/product.ts 
b/packages/merchant-backoffice-ui/src/hooks/product.ts
index 7a0c4dec1..fb7889834 100644
--- a/packages/merchant-backoffice-ui/src/hooks/product.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/product.ts
@@ -24,21 +24,21 @@ import {
   HttpResponseOk,
   multiFetcher,
   request,
-  useMatchMutate
+  useMatchMutate,
 } from "./backend.js";
 
 export interface ProductAPI {
   createProduct: (
-    data: MerchantBackend.Products.ProductAddDetail
+    data: MerchantBackend.Products.ProductAddDetail,
   ) => Promise<void>;
   updateProduct: (
     id: string,
-    data: MerchantBackend.Products.ProductPatchDetail
+    data: MerchantBackend.Products.ProductPatchDetail,
   ) => Promise<void>;
   deleteProduct: (id: string) => Promise<void>;
   lockProduct: (
     id: string,
-    data: MerchantBackend.Products.LockRequest
+    data: MerchantBackend.Products.LockRequest,
   ) => Promise<void>;
 }
 
@@ -49,11 +49,11 @@ export function useProductAPI(): ProductAPI {
   const { token: instanceToken, id, admin } = useInstanceContext();
 
   const { url, token } = !admin
-    ? { url: baseUrl, token: adminToken, }
-    : { url: `${baseUrl}/instances/${id}`, token: instanceToken, };
+    ? { url: baseUrl, token: adminToken }
+    : { url: `${baseUrl}/instances/${id}`, token: instanceToken };
 
   const createProduct = async (
-    data: MerchantBackend.Products.ProductAddDetail
+    data: MerchantBackend.Products.ProductAddDetail,
   ): Promise<void> => {
     const res = await request(`${url}/private/products`, {
       method: "post",
@@ -66,7 +66,7 @@ export function useProductAPI(): ProductAPI {
 
   const updateProduct = async (
     productId: string,
-    data: MerchantBackend.Products.ProductPatchDetail
+    data: MerchantBackend.Products.ProductPatchDetail,
   ): Promise<void> => {
     const r = await request(`${url}/private/products/${productId}`, {
       method: "patch",
@@ -87,7 +87,7 @@ export function useProductAPI(): ProductAPI {
 
   const lockProduct = async (
     productId: string,
-    data: MerchantBackend.Products.LockRequest
+    data: MerchantBackend.Products.LockRequest,
   ): Promise<void> => {
     await request(`${url}/private/products/${productId}/lock`, {
       method: "post",
@@ -108,8 +108,8 @@ export function useInstanceProducts(): HttpResponse<
   const { token: instanceToken, id, admin } = useInstanceContext();
 
   const { url, token } = !admin
-    ? { url: baseUrl, token: baseToken, }
-    : { url: `${baseUrl}/instances/${id}`, token: instanceToken, };
+    ? { url: baseUrl, token: baseToken }
+    : { url: `${baseUrl}/instances/${id}`, token: instanceToken };
 
   const { data: list, error: listError } = useSWR<
     HttpResponseOk<MerchantBackend.Products.InventorySummaryResponse>,
@@ -123,7 +123,7 @@ export function useInstanceProducts(): HttpResponse<
   });
 
   const paths = (list?.data.products || []).map(
-    (p) => `/private/products/${p.product_id}`
+    (p) => `/private/products/${p.product_id}`,
   );
   const { data: products, error: productError } = useSWR<
     HttpResponseOk<MerchantBackend.Products.ProductDetail>[],
@@ -136,7 +136,6 @@ export function useInstanceProducts(): HttpResponse<
     refreshWhenOffline: false,
   });
 
-
   if (listError) return listError;
   if (productError) return productError;
 
@@ -154,20 +153,20 @@ export function useInstanceProducts(): HttpResponse<
 }
 
 export function useProductDetails(
-  productId: string
+  productId: string,
 ): HttpResponse<MerchantBackend.Products.ProductDetail> {
   const { url: baseUrl, token: baseToken } = useBackendContext();
   const { token: instanceToken, id, admin } = useInstanceContext();
 
   const { url, token } = !admin
     ? {
-      url: baseUrl,
-      token: baseToken,
-    }
+        url: baseUrl,
+        token: baseToken,
+      }
     : {
-      url: `${baseUrl}/instances/${id}`,
-      token: instanceToken,
-    };
+        url: `${baseUrl}/instances/${id}`,
+        token: instanceToken,
+      };
 
   const { data, error, isValidating } = useSWR<
     HttpResponseOk<MerchantBackend.Products.ProductDetail>,
diff --git a/packages/merchant-backoffice-ui/src/hooks/reserves.ts 
b/packages/merchant-backoffice-ui/src/hooks/reserves.ts
index 0810ad26c..f6d77f113 100644
--- a/packages/merchant-backoffice-ui/src/hooks/reserves.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/reserves.ts
@@ -33,11 +33,11 @@ export function useReservesAPI(): ReserveMutateAPI {
   const { token: instanceToken, id, admin } = useInstanceContext();
 
   const { url, token } = !admin
-    ? { url: baseUrl, token: adminToken, }
-    : { url: `${baseUrl}/instances/${id}`, token: instanceToken, };
+    ? { url: baseUrl, token: adminToken }
+    : { url: `${baseUrl}/instances/${id}`, token: instanceToken };
 
   const createReserve = async (
-    data: MerchantBackend.Tips.ReserveCreateRequest
+    data: MerchantBackend.Tips.ReserveCreateRequest,
   ): Promise<
     HttpResponseOk<MerchantBackend.Tips.ReserveCreateConfirmation>
   > => {
@@ -47,7 +47,7 @@ export function useReservesAPI(): ReserveMutateAPI {
         method: "post",
         token,
         data,
-      }
+      },
     );
 
     //evict reserve list query
@@ -58,7 +58,7 @@ export function useReservesAPI(): ReserveMutateAPI {
 
   const authorizeTipReserve = async (
     pub: string,
-    data: MerchantBackend.Tips.TipCreateRequest
+    data: MerchantBackend.Tips.TipCreateRequest,
   ): Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>> => {
     const res = await request<MerchantBackend.Tips.TipCreateConfirmation>(
       `${url}/private/reserves/${pub}/authorize-tip`,
@@ -66,7 +66,7 @@ export function useReservesAPI(): ReserveMutateAPI {
         method: "post",
         token,
         data,
-      }
+      },
     );
 
     //evict reserve details query
@@ -76,7 +76,7 @@ export function useReservesAPI(): ReserveMutateAPI {
   };
 
   const authorizeTip = async (
-    data: MerchantBackend.Tips.TipCreateRequest
+    data: MerchantBackend.Tips.TipCreateRequest,
   ): Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>> => {
     const res = await request<MerchantBackend.Tips.TipCreateConfirmation>(
       `${url}/private/tips`,
@@ -84,7 +84,7 @@ export function useReservesAPI(): ReserveMutateAPI {
         method: "post",
         token,
         data,
-      }
+      },
     );
 
     //evict all details query
@@ -110,14 +110,14 @@ export function useReservesAPI(): ReserveMutateAPI {
 
 export interface ReserveMutateAPI {
   createReserve: (
-    data: MerchantBackend.Tips.ReserveCreateRequest
+    data: MerchantBackend.Tips.ReserveCreateRequest,
   ) => Promise<HttpResponseOk<MerchantBackend.Tips.ReserveCreateConfirmation>>;
   authorizeTipReserve: (
     id: string,
-    data: MerchantBackend.Tips.TipCreateRequest
+    data: MerchantBackend.Tips.TipCreateRequest,
   ) => Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>>;
   authorizeTip: (
-    data: MerchantBackend.Tips.TipCreateRequest
+    data: MerchantBackend.Tips.TipCreateRequest,
   ) => Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>>;
   deleteReserve: (id: string) => Promise<HttpResponse<void>>;
 }
@@ -127,8 +127,8 @@ export function useInstanceReserves(): 
HttpResponse<MerchantBackend.Tips.Tipping
   const { token: instanceToken, id, admin } = useInstanceContext();
 
   const { url, token } = !admin
-    ? { url: baseUrl, token: baseToken, }
-    : { url: `${baseUrl}/instances/${id}`, token: instanceToken, };
+    ? { url: baseUrl, token: baseToken }
+    : { url: `${baseUrl}/instances/${id}`, token: instanceToken };
 
   const { data, error, isValidating } = useSWR<
     HttpResponseOk<MerchantBackend.Tips.TippingReserveStatus>,
@@ -142,7 +142,7 @@ export function useInstanceReserves(): 
HttpResponse<MerchantBackend.Tips.Tipping
 }
 
 export function useReserveDetails(
-  reserveId: string
+  reserveId: string,
 ): HttpResponse<MerchantBackend.Tips.ReserveDetail> {
   const { url: baseUrl } = useBackendContext();
   const { token, id: instanceId, admin } = useInstanceContext();
@@ -167,7 +167,7 @@ export function useReserveDetails(
 }
 
 export function useTipDetails(
-  tipId: string
+  tipId: string,
 ): HttpResponse<MerchantBackend.Tips.TipDetails> {
   const { url: baseUrl } = useBackendContext();
   const { token, id: instanceId, admin } = useInstanceContext();
@@ -194,7 +194,7 @@ export function useTipDetails(
 function reserveDetailFetcher<T>(
   url: string,
   token: string,
-  backend: string
+  backend: string,
 ): Promise<HttpResponseOk<T>> {
   return request<T>(`${backend}${url}`, {
     token,
@@ -207,7 +207,7 @@ function reserveDetailFetcher<T>(
 function tipsDetailFetcher<T>(
   url: string,
   token: string,
-  backend: string
+  backend: string,
 ): Promise<HttpResponseOk<T>> {
   return request<T>(`${backend}${url}`, {
     token,
diff --git a/packages/merchant-backoffice-ui/src/hooks/transfer.ts 
b/packages/merchant-backoffice-ui/src/hooks/transfer.ts
index 2ab22b1a1..d1ac2c285 100644
--- a/packages/merchant-backoffice-ui/src/hooks/transfer.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/transfer.ts
@@ -35,7 +35,7 @@ async function transferFetcher<T>(
   payto_uri?: string,
   verified?: string,
   position?: string,
-  delta?: number
+  delta?: number,
 ): Promise<HttpResponseOk<T>> {
   const params: any = {};
   if (payto_uri !== undefined) params.payto_uri = payto_uri;
@@ -55,28 +55,31 @@ export function useTransferAPI(): TransferAPI {
 
   const { url, token } = !admin
     ? {
-      url: baseUrl,
-      token: adminToken,
-    }
+        url: baseUrl,
+        token: adminToken,
+      }
     : {
-      url: `${baseUrl}/instances/${id}`,
-      token: instanceToken,
-    };
+        url: `${baseUrl}/instances/${id}`,
+        token: instanceToken,
+      };
 
   const informTransfer = async (
-    data: MerchantBackend.Transfers.TransferInformation
+    data: MerchantBackend.Transfers.TransferInformation,
   ): Promise<
     HttpResponseOk<MerchantBackend.Transfers.MerchantTrackTransferResponse>
   > => {
-    const res = await 
request<MerchantBackend.Transfers.MerchantTrackTransferResponse>(
-      `${url}/private/transfers`, {
-      method: "post",
-      token,
-      data,
-    });
+    const res =
+      await request<MerchantBackend.Transfers.MerchantTrackTransferResponse>(
+        `${url}/private/transfers`,
+        {
+          method: "post",
+          token,
+          data,
+        },
+      );
 
     await mutateAll(/.*private\/transfers.*/);
-    return res
+    return res;
   };
 
   return { informTransfer };
@@ -84,7 +87,7 @@ export function useTransferAPI(): TransferAPI {
 
 export interface TransferAPI {
   informTransfer: (
-    data: MerchantBackend.Transfers.TransferInformation
+    data: MerchantBackend.Transfers.TransferInformation,
   ) => Promise<
     HttpResponseOk<MerchantBackend.Transfers.MerchantTrackTransferResponse>
   >;
@@ -98,7 +101,7 @@ export interface InstanceTransferFilter {
 
 export function useInstanceTransfers(
   args?: InstanceTransferFilter,
-  updatePosition?: (id: string) => void
+  updatePosition?: (id: string) => void,
 ): HttpResponsePaginated<MerchantBackend.Transfers.TransferList> {
   const { url: baseUrl, token: baseToken } = useBackendContext();
   const { token: instanceToken, id, admin } = useInstanceContext();
@@ -133,7 +136,7 @@ export function useInstanceTransfers(
       args?.position,
       totalBefore,
     ],
-    transferFetcher
+    transferFetcher,
   );
   const {
     data: afterData,
@@ -149,7 +152,7 @@ export function useInstanceTransfers(
       args?.position,
       -totalAfter,
     ],
-    transferFetcher
+    transferFetcher,
   );
 
   //this will save last result
@@ -168,8 +171,10 @@ export function useInstanceTransfers(
   if (afterError) return afterError;
 
   // if the query returns less that we ask, then we have reach the end or 
beginning
-  const isReachingEnd = afterData && afterData.data.transfers.length < 
totalAfter;
-  const isReachingStart = args?.position === undefined ||
+  const isReachingEnd =
+    afterData && afterData.data.transfers.length < totalAfter;
+  const isReachingStart =
+    args?.position === undefined ||
     (beforeData && beforeData.data.transfers.length < totalBefore);
 
   const pagination = {
@@ -180,10 +185,10 @@ export function useInstanceTransfers(
       if (afterData.data.transfers.length < MAX_RESULT_SIZE) {
         setPageAfter(pageAfter + 1);
       } else {
-        const from =
-          `${afterData.data
-            .transfers[afterData.data.transfers.length - 1]
-            .transfer_serial_id}`;
+        const from = `${
+          afterData.data.transfers[afterData.data.transfers.length - 1]
+            .transfer_serial_id
+        }`;
         if (from && updatePosition) updatePosition(from);
       }
     },
@@ -192,10 +197,10 @@ export function useInstanceTransfers(
       if (beforeData.data.transfers.length < MAX_RESULT_SIZE) {
         setPageBefore(pageBefore + 1);
       } else if (beforeData) {
-        const from =
-          `${beforeData.data
-            .transfers[beforeData.data.transfers.length - 1]
-            .transfer_serial_id}`;
+        const from = `${
+          beforeData.data.transfers[beforeData.data.transfers.length - 1]
+            .transfer_serial_id
+        }`;
         if (from && updatePosition) updatePosition(from);
       }
     },
@@ -205,9 +210,9 @@ export function useInstanceTransfers(
     !beforeData || !afterData
       ? []
       : (beforeData || lastBefore).data.transfers
-        .slice()
-        .reverse()
-        .concat((afterData || lastAfter).data.transfers);
+          .slice()
+          .reverse()
+          .concat((afterData || lastAfter).data.transfers);
   if (loadingAfter || loadingBefore)
     return { loading: true, data: { transfers } };
   if (beforeData && afterData) {
diff --git a/packages/merchant-backoffice-ui/src/i18n/index.tsx 
b/packages/merchant-backoffice-ui/src/i18n/index.tsx
index 4afbfe2ba..da8d2dece 100644
--- a/packages/merchant-backoffice-ui/src/i18n/index.tsx
+++ b/packages/merchant-backoffice-ui/src/i18n/index.tsx
@@ -93,7 +93,7 @@ interface TranslateProps {
 
 function getTranslatedChildren(
   translation: string,
-  children: ComponentChildren
+  children: ComponentChildren,
 ): ComponentChild[] {
   const tr = translation.split(/%(\d+)\$s/);
   const childArray = children instanceof Array ? children : [children];
@@ -167,7 +167,7 @@ export function TranslateSwitch({ children, target }: 
TranslateSwitchProps) {
         if (child.type === TranslateSingular) {
           singular = child;
         }
-      }
+      },
     );
   }
   if (!singular || !plural) {
diff --git a/packages/merchant-backoffice-ui/src/i18n/strings.ts 
b/packages/merchant-backoffice-ui/src/i18n/strings.ts
index 0b270cb3c..f3049ec4c 100644
--- a/packages/merchant-backoffice-ui/src/i18n/strings.ts
+++ b/packages/merchant-backoffice-ui/src/i18n/strings.ts
@@ -15,3431 +15,1272 @@
  */
 
 /*eslint quote-props: ["error", "consistent"]*/
-export const strings: {[s: string]: any} = {};
+export const strings: { [s: string]: any } = {};
 
-strings['de'] = {
-  "domain": "messages",
-  "locale_data": {
-    "messages": {
+strings["de"] = {
+  domain: "messages",
+  locale_data: {
+    messages: {
       "": {
-        "domain": "messages",
-        "plural_forms": "nplurals=2; plural=(n != 1);",
-        "lang": ""
+        domain: "messages",
+        plural_forms: "nplurals=2; plural=(n != 1);",
+        lang: "",
       },
-      "Access denied": [
-        ""
-      ],
-      "Check your token is valid": [
-        ""
-      ],
-      "Couldn't access the server.": [
-        ""
-      ],
-      "Could not infer instance id from url %1$s": [
-        ""
-      ],
-      "HTTP status #%1$s: Server reported a problem": [
-        ""
-      ],
-      "Got message: \"%1$s\" from: %2$s": [
-        ""
-      ],
-      "No default instance": [
-        ""
-      ],
-      "in order to use merchant backoffice, you should create the default 
instance": [
-        ""
-      ],
-      "Server reported a problem: HTTP status #%1$s": [
-        ""
-      ],
-      "Got message: %1$s from: %2$s": [
-        ""
-      ],
-      "Login required": [
-        ""
-      ],
-      "Please enter your auth token. Token should have \"secret-token:\" and 
start with Bearer or ApiKey": [
-        ""
-      ],
-      "Confirm": [
-        ""
-      ],
-      "The value %1$s is invalid for a payment url": [
-        ""
-      ],
-      "pick a date": [
-        ""
-      ],
-      "clear": [
-        ""
-      ],
-      "never": [
-        ""
-      ],
-      "Image should be smaller than 1 MB": [
-        ""
-      ],
-      "Country": [
-        ""
-      ],
-      "Address": [
-        ""
-      ],
-      "Building number": [
-        ""
-      ],
-      "Building name": [
-        ""
-      ],
-      "Street": [
-        ""
-      ],
-      "Post code": [
-        ""
-      ],
-      "Town location": [
-        ""
-      ],
-      "Town": [
-        ""
-      ],
-      "District": [
-        ""
-      ],
-      "Country subdivision": [
-        ""
-      ],
-      "Product id": [
-        ""
-      ],
-      "Description": [
-        ""
-      ],
-      "Name": [
-        ""
-      ],
-      "loading...": [
-        ""
-      ],
-      "no products found": [
-        ""
-      ],
-      "no results": [
-        ""
-      ],
-      "Deleting": [
-        ""
-      ],
-      "Changing": [
-        ""
-      ],
-      "Manage token": [
-        ""
-      ],
-      "Update": [
-        ""
-      ],
-      "Remove": [
-        ""
-      ],
-      "Cancel": [
-        ""
-      ],
-      "Manage stock": [
-        ""
-      ],
-      "Infinite": [
-        ""
-      ],
-      "lost cannot be greater that current + incoming (max %1$s)": [
-        ""
-      ],
-      "current stock will change from %1$s to %2$s": [
-        ""
-      ],
-      "current stock will stay at %1$s": [
-        ""
-      ],
-      "Incoming": [
-        ""
-      ],
-      "Lost": [
-        ""
-      ],
-      "Current": [
-        ""
-      ],
-      "without stock": [
-        ""
-      ],
-      "Next restock": [
-        ""
-      ],
-      "Delivery address": [
-        ""
-      ],
-      "this product has no taxes": [
-        ""
-      ],
-      "Amount": [
-        ""
-      ],
-      "currency and value separated with colon": [
-        ""
-      ],
-      "Add": [
-        ""
-      ],
-      "Instance": [
-        ""
-      ],
-      "Settings": [
-        ""
-      ],
-      "Orders": [
-        ""
-      ],
-      "Products": [
-        ""
-      ],
-      "Transfers": [
-        ""
-      ],
-      "Connection": [
-        ""
-      ],
-      "Instances": [
-        ""
-      ],
-      "New": [
-        ""
-      ],
-      "List": [
-        ""
-      ],
-      "Log out": [
-        ""
-      ],
-      "Clear": [
-        ""
-      ],
-      "should be the same": [
-        ""
-      ],
-      "cannot be the same as before": [
-        ""
-      ],
-      "You are updating the authorization token from instance %1$s with id 
%2$s": [
-        ""
-      ],
-      "Old token": [
-        ""
-      ],
-      "New token": [
-        ""
-      ],
-      "Clearing the auth token will mean public access to the instance": [
-        ""
-      ],
-      "ID": [
-        ""
-      ],
-      "Image": [
-        ""
-      ],
-      "Unit": [
-        ""
-      ],
-      "Price": [
-        ""
-      ],
-      "Stock": [
-        ""
-      ],
-      "Taxes": [
-        ""
-      ],
-      "Server not found": [
-        ""
-      ],
-      "Couldn't access the server": [
-        ""
-      ],
-      "Got message %1$s from %2$s": [
-        ""
-      ],
-      "Unexpected Error": [
-        ""
-      ],
-      "Auth token": [
-        ""
-      ],
-      "Account address": [
-        ""
-      ],
-      "Default max deposit fee": [
-        ""
-      ],
-      "Default max wire fee": [
-        ""
-      ],
-      "Default wire fee amortization": [
-        ""
-      ],
-      "Jurisdiction": [
-        ""
-      ],
-      "Default pay delay": [
-        ""
-      ],
-      "Default wire transfer delay": [
-        ""
-      ],
-      "could not create instance": [
-        ""
-      ],
-      "Delete": [
-        ""
-      ],
-      "Edit": [
-        ""
-      ],
-      "There is no instances yet, add more pressing the + sign": [
-        ""
-      ],
-      "Inventory products": [
-        ""
-      ],
-      "Total price": [
-        ""
-      ],
-      "Total tax": [
-        ""
-      ],
-      "Order price": [
-        ""
-      ],
-      "Net": [
-        ""
-      ],
-      "Summary": [
-        ""
-      ],
-      "Payments options": [
-        ""
-      ],
-      "Auto refund deadline": [
-        ""
-      ],
-      "Refund deadline": [
-        ""
-      ],
-      "Pay deadline": [
-        ""
-      ],
-      "Delivery date": [
-        ""
-      ],
-      "Location": [
-        ""
-      ],
-      "Max fee": [
-        ""
-      ],
-      "Max wire fee": [
-        ""
-      ],
-      "Wire fee amortization": [
-        ""
-      ],
-      "Fullfilment url": [
-        ""
-      ],
-      "Extra information": [
-        ""
-      ],
-      "select a product first": [
-        ""
-      ],
-      "should be greater than 0": [
-        ""
-      ],
-      "cannot be greater than current stock and quantity previously added. 
max: %1$s": [
-        ""
-      ],
-      "cannot be greater than current stock %1$s": [
-        ""
-      ],
-      "Quantity": [
-        ""
-      ],
-      "Order": [
-        ""
-      ],
-      "claimed": [
-        ""
-      ],
-      "copy url": [
-        ""
-      ],
-      "pay at": [
-        ""
-      ],
-      "created at": [
-        ""
-      ],
-      "Timeline": [
-        ""
-      ],
-      "Payment details": [
-        ""
-      ],
-      "Order status": [
-        ""
-      ],
-      "Product list": [
-        ""
-      ],
-      "paid": [
-        ""
-      ],
-      "wired": [
-        ""
-      ],
-      "refunded": [
-        ""
-      ],
-      "refund": [
-        ""
-      ],
-      "Refunded amount": [
-        ""
-      ],
-      "Deposit total": [
-        ""
-      ],
-      "unpaid": [
-        ""
-      ],
-      "Order status URL": [
-        ""
-      ],
-      "Pay URI": [
-        ""
-      ],
-      "Unknown order status. This is an error, please contact the 
administrator.": [
-        ""
-      ],
-      "refund created successfully": [
-        ""
-      ],
-      "could not create the refund": [
-        ""
-      ],
-      "load newer orders": [
-        ""
-      ],
-      "Date": [
-        ""
-      ],
-      "Refund": [
-        ""
-      ],
-      "load older orders": [
-        ""
-      ],
-      "No orders has been found": [
-        ""
-      ],
-      "date": [
-        ""
-      ],
-      "amount": [
-        ""
-      ],
-      "reason": [
-        ""
-      ],
-      "Max refundable:": [
-        ""
-      ],
-      "Reason": [
-        ""
-      ],
-      "duplicated": [
-        ""
-      ],
-      "requested by the customer": [
-        ""
-      ],
-      "other": [
-        ""
-      ],
-      "go to order id": [
-        ""
-      ],
-      "Paid": [
-        ""
-      ],
-      "Refunded": [
-        ""
-      ],
-      "Not wired": [
-        ""
-      ],
-      "All": [
-        ""
-      ],
-      "could not create product": [
-        ""
-      ],
-      "Sell": [
-        ""
-      ],
-      "Profit": [
-        ""
-      ],
-      "Sold": [
-        ""
-      ],
-      "product updated successfully": [
-        ""
-      ],
-      "could not update the product": [
-        ""
-      ],
-      "product delete successfully": [
-        ""
-      ],
-      "could not delete the product": [
-        ""
-      ],
-      "Tips": [
-        ""
-      ],
-      "Committed amount": [
-        ""
-      ],
-      "Exchange initial amount": [
-        ""
-      ],
-      "Merchant initial amount": [
-        ""
-      ],
-      "There is no tips yet, add more pressing the + sign": [
-        ""
-      ],
-      "cannot be empty": [
-        ""
-      ],
-      "check the id, doest look valid": [
-        ""
-      ],
-      "should have 52 characters, current %1$s": [
-        ""
-      ],
-      "URL doesn't have the right format": [
-        ""
-      ],
-      "Transfer ID": [
-        ""
-      ],
-      "Account Address": [
-        ""
-      ],
-      "Exchange URL": [
-        ""
-      ],
-      "could not inform transfer": [
-        ""
-      ],
-      "load newer transfers": [
-        ""
-      ],
-      "Credit": [
-        ""
-      ],
-      "Confirmed": [
-        ""
-      ],
-      "Verified": [
-        ""
-      ],
-      "Executed at": [
-        ""
-      ],
-      "yes": [
-        ""
-      ],
-      "no": [
-        ""
-      ],
-      "unknown": [
-        ""
-      ],
-      "load older transfers": [
-        ""
-      ],
-      "There is no transfer yet, add more pressing the + sign": [
-        ""
-      ]
-    }
-  }
-};
-
-strings['en'] = {
-  "domain": "messages",
-  "locale_data": {
-    "messages": {
-      "": {
-        "domain": "messages",
-        "plural_forms": "nplurals=2; plural=(n != 1);",
-        "lang": ""
-      },
-      "Access denied": [
-        ""
-      ],
-      "Check your token is valid": [
-        ""
-      ],
-      "Couldn't access the server.": [
-        ""
-      ],
-      "Could not infer instance id from url %1$s": [
-        ""
-      ],
-      "HTTP status #%1$s: Server reported a problem": [
-        ""
-      ],
-      "Got message: \"%1$s\" from: %2$s": [
-        ""
-      ],
-      "No default instance": [
-        ""
-      ],
-      "in order to use merchant backoffice, you should create the default 
instance": [
-        ""
-      ],
-      "Server reported a problem: HTTP status #%1$s": [
-        ""
-      ],
-      "Got message: %1$s from: %2$s": [
-        ""
-      ],
-      "Login required": [
-        ""
-      ],
-      "Please enter your auth token. Token should have \"secret-token:\" and 
start with Bearer or ApiKey": [
-        ""
-      ],
-      "Confirm": [
-        ""
-      ],
-      "The value %1$s is invalid for a payment url": [
-        ""
-      ],
-      "pick a date": [
-        ""
-      ],
-      "clear": [
-        ""
-      ],
-      "never": [
-        ""
-      ],
-      "Image should be smaller than 1 MB": [
-        ""
-      ],
-      "Country": [
-        ""
-      ],
-      "Address": [
-        ""
-      ],
-      "Building number": [
-        ""
-      ],
-      "Building name": [
-        ""
-      ],
-      "Street": [
-        ""
-      ],
-      "Post code": [
-        ""
-      ],
-      "Town location": [
-        ""
-      ],
-      "Town": [
-        ""
-      ],
-      "District": [
-        ""
-      ],
-      "Country subdivision": [
-        ""
-      ],
-      "Product id": [
-        ""
-      ],
-      "Description": [
-        ""
-      ],
-      "Name": [
-        ""
-      ],
-      "loading...": [
-        ""
-      ],
-      "no products found": [
-        ""
-      ],
-      "no results": [
-        ""
-      ],
-      "Deleting": [
-        ""
-      ],
-      "Changing": [
-        ""
-      ],
-      "Manage token": [
-        ""
-      ],
-      "Update": [
-        ""
-      ],
-      "Remove": [
-        ""
-      ],
-      "Cancel": [
-        ""
-      ],
-      "Manage stock": [
-        ""
-      ],
-      "Infinite": [
-        ""
-      ],
-      "lost cannot be greater that current + incoming (max %1$s)": [
-        ""
-      ],
-      "current stock will change from %1$s to %2$s": [
-        ""
-      ],
-      "current stock will stay at %1$s": [
-        ""
-      ],
-      "Incoming": [
-        ""
-      ],
-      "Lost": [
-        ""
-      ],
-      "Current": [
-        ""
-      ],
-      "without stock": [
-        ""
-      ],
-      "Next restock": [
-        ""
-      ],
-      "Delivery address": [
-        ""
-      ],
-      "this product has no taxes": [
-        ""
-      ],
-      "Amount": [
-        ""
-      ],
-      "currency and value separated with colon": [
-        ""
-      ],
-      "Add": [
-        ""
-      ],
-      "Instance": [
-        ""
-      ],
-      "Settings": [
-        ""
-      ],
-      "Orders": [
-        ""
-      ],
-      "Products": [
-        ""
-      ],
-      "Transfers": [
-        ""
-      ],
-      "Connection": [
-        ""
-      ],
-      "Instances": [
-        ""
-      ],
-      "New": [
-        ""
-      ],
-      "List": [
-        ""
-      ],
-      "Log out": [
-        ""
-      ],
-      "Clear": [
-        ""
-      ],
-      "should be the same": [
-        ""
-      ],
-      "cannot be the same as before": [
-        ""
-      ],
-      "You are updating the authorization token from instance %1$s with id 
%2$s": [
-        ""
-      ],
-      "Old token": [
-        ""
-      ],
-      "New token": [
-        ""
-      ],
-      "Clearing the auth token will mean public access to the instance": [
-        ""
-      ],
-      "ID": [
-        ""
-      ],
-      "Image": [
-        ""
-      ],
-      "Unit": [
-        ""
-      ],
-      "Price": [
-        ""
-      ],
-      "Stock": [
-        ""
-      ],
-      "Taxes": [
-        ""
-      ],
-      "Server not found": [
-        ""
-      ],
-      "Couldn't access the server": [
-        ""
-      ],
-      "Got message %1$s from %2$s": [
-        ""
-      ],
-      "Unexpected Error": [
-        ""
-      ],
-      "Auth token": [
-        ""
-      ],
-      "Account address": [
-        ""
-      ],
-      "Default max deposit fee": [
-        ""
-      ],
-      "Default max wire fee": [
-        ""
-      ],
-      "Default wire fee amortization": [
-        ""
-      ],
-      "Jurisdiction": [
-        ""
-      ],
-      "Default pay delay": [
-        ""
-      ],
-      "Default wire transfer delay": [
-        ""
-      ],
-      "could not create instance": [
-        ""
-      ],
-      "Delete": [
-        ""
-      ],
-      "Edit": [
-        ""
-      ],
-      "There is no instances yet, add more pressing the + sign": [
-        ""
-      ],
-      "Inventory products": [
-        ""
-      ],
-      "Total price": [
-        ""
-      ],
-      "Total tax": [
-        ""
-      ],
-      "Order price": [
-        ""
-      ],
-      "Net": [
-        ""
-      ],
-      "Summary": [
-        ""
-      ],
-      "Payments options": [
-        ""
-      ],
-      "Auto refund deadline": [
-        ""
-      ],
-      "Refund deadline": [
-        ""
-      ],
-      "Pay deadline": [
-        ""
-      ],
-      "Delivery date": [
-        ""
-      ],
-      "Location": [
-        ""
-      ],
-      "Max fee": [
-        ""
-      ],
-      "Max wire fee": [
-        ""
-      ],
-      "Wire fee amortization": [
-        ""
-      ],
-      "Fullfilment url": [
-        ""
-      ],
-      "Extra information": [
-        ""
-      ],
-      "select a product first": [
-        ""
-      ],
-      "should be greater than 0": [
-        ""
-      ],
-      "cannot be greater than current stock and quantity previously added. 
max: %1$s": [
-        ""
-      ],
-      "cannot be greater than current stock %1$s": [
-        ""
-      ],
-      "Quantity": [
-        ""
-      ],
-      "Order": [
-        ""
-      ],
-      "claimed": [
-        ""
-      ],
-      "copy url": [
-        ""
-      ],
-      "pay at": [
-        ""
-      ],
-      "created at": [
-        ""
-      ],
-      "Timeline": [
-        ""
-      ],
-      "Payment details": [
-        ""
-      ],
-      "Order status": [
-        ""
-      ],
-      "Product list": [
-        ""
-      ],
-      "paid": [
-        ""
-      ],
-      "wired": [
-        ""
-      ],
-      "refunded": [
-        ""
-      ],
-      "refund": [
-        ""
-      ],
-      "Refunded amount": [
-        ""
-      ],
-      "Deposit total": [
-        ""
-      ],
-      "unpaid": [
-        ""
-      ],
-      "Order status URL": [
-        ""
-      ],
-      "Pay URI": [
-        ""
-      ],
-      "Unknown order status. This is an error, please contact the 
administrator.": [
-        ""
-      ],
-      "refund created successfully": [
-        ""
-      ],
-      "could not create the refund": [
-        ""
-      ],
-      "load newer orders": [
-        ""
-      ],
-      "Date": [
-        ""
-      ],
-      "Refund": [
-        ""
-      ],
-      "load older orders": [
-        ""
-      ],
-      "No orders has been found": [
-        ""
-      ],
-      "date": [
-        ""
-      ],
-      "amount": [
-        ""
-      ],
-      "reason": [
-        ""
-      ],
-      "Max refundable:": [
-        ""
-      ],
-      "Reason": [
-        ""
-      ],
-      "duplicated": [
-        ""
-      ],
-      "requested by the customer": [
-        ""
-      ],
-      "other": [
-        ""
-      ],
-      "go to order id": [
-        ""
-      ],
-      "Paid": [
-        ""
-      ],
-      "Refunded": [
-        ""
-      ],
-      "Not wired": [
-        ""
-      ],
-      "All": [
-        ""
-      ],
-      "could not create product": [
-        ""
-      ],
-      "Sell": [
-        ""
-      ],
-      "Profit": [
-        ""
-      ],
-      "Sold": [
-        ""
-      ],
-      "product updated successfully": [
-        ""
-      ],
-      "could not update the product": [
-        ""
-      ],
-      "product delete successfully": [
-        ""
-      ],
-      "could not delete the product": [
-        ""
-      ],
-      "Tips": [
-        ""
-      ],
-      "Committed amount": [
-        ""
-      ],
-      "Exchange initial amount": [
-        ""
-      ],
-      "Merchant initial amount": [
-        ""
-      ],
-      "There is no tips yet, add more pressing the + sign": [
-        ""
-      ],
-      "cannot be empty": [
-        ""
-      ],
-      "check the id, doest look valid": [
-        ""
-      ],
-      "should have 52 characters, current %1$s": [
-        ""
-      ],
-      "URL doesn't have the right format": [
-        ""
-      ],
-      "Transfer ID": [
-        ""
-      ],
-      "Account Address": [
-        ""
-      ],
-      "Exchange URL": [
-        ""
-      ],
-      "could not inform transfer": [
-        ""
-      ],
-      "load newer transfers": [
-        ""
-      ],
-      "Credit": [
-        ""
-      ],
-      "Confirmed": [
-        ""
-      ],
-      "Verified": [
-        ""
-      ],
-      "Executed at": [
-        ""
-      ],
-      "yes": [
-        ""
-      ],
-      "no": [
-        ""
-      ],
-      "unknown": [
-        ""
-      ],
-      "load older transfers": [
-        ""
-      ],
-      "There is no transfer yet, add more pressing the + sign": [
-        ""
-      ]
-    }
-  }
-};
-
-strings['es'] = {
-  "domain": "messages",
-  "locale_data": {
-    "messages": {
-      "": {
-        "domain": "messages",
-        "plural_forms": "nplurals=2; plural=(n != 1);",
-        "lang": ""
-      },
-      "Access denied": [
-        "Acceso denegado"
-      ],
-      "Check your token is valid": [
-        "Verifica que el token sea valido"
-      ],
-      "Couldn't access the server.": [
-        "No se pudo acceder al servidor"
-      ],
-      "Could not infer instance id from url %1$s": [
-        "No se pudo inferir el id de la instancia con la url %1$s"
-      ],
-      "HTTP status #%1$s: Server reported a problem": [
-        "HTTP status #%1$s: Servidor reporto un problema"
-      ],
-      "Got message: \"%1$s\" from: %2$s": [
-        "Recivimos el mensaje %1$s desde %2$s"
-      ],
-      "No default instance": [
-        "Sin instancia default"
-      ],
-      "in order to use merchant backoffice, you should create the default 
instance": [
-        "para usar el merchant backoffice, debería crear la instancia default"
-      ],
-      "Server reported a problem: HTTP status #%1$s": [
-        "Servidir reporto un problema: HTTP status #%1$s"
-      ],
-      "Got message: %1$s from: %2$s": [
-        "Recivimos el mensaje %1$s desde %2$s"
-      ],
-      "Login required": [
-        "Login necesario"
-      ],
-      "Please enter your auth token. Token should have \"secret-token:\" and 
start with Bearer or ApiKey": [
-        "Por favor ingrese su token de autorización. El token debe tener 
\"secret-token\" y comenzar con Bearer o ApiKey"
-      ],
-      "Confirm": [
-        "Confirmar"
-      ],
-      "The value %1$s is invalid for a payment url": [
-        "El valor %1$s es invalido para una URL de pago"
-      ],
-      "pick a date": [
-        "elegir una fecha"
-      ],
-      "clear": [
-        "Limpiar"
-      ],
-      "never": [
-        "nunca"
-      ],
-      "Image should be smaller than 1 MB": [
-        "La imagen debe ser mas chica que 1 MB"
-      ],
-      "Country": [
-        "País"
-      ],
-      "Address": [
-        "Dirección"
-      ],
-      "Building number": [
-        "Número de edificio"
-      ],
-      "Building name": [
-        "Nombre de edificio"
-      ],
-      "Street": [
-        "Calle"
-      ],
-      "Post code": [
-        "Código postal"
-      ],
-      "Town location": [
-        "Ubicación de ciudad"
-      ],
-      "Town": [
-        "Ciudad"
-      ],
-      "District": [
-        "Distrito"
-      ],
-      "Country subdivision": [
-        "Provincia"
-      ],
-      "Product id": [
-        "Id de producto"
-      ],
-      "Description": [
-        "Descripcion"
-      ],
-      "Name": [
-        "Nombre"
-      ],
-      "loading...": [
-        "Cargando..."
-      ],
-      "no products found": [
-        "No se encontraron productos"
-      ],
-      "no results": [
-        "Sin resultados"
-      ],
-      "Deleting": [
-        "Borrando"
-      ],
-      "Changing": [
-        "Cambiando"
-      ],
-      "Manage token": [
-        "Administrar token"
-      ],
-      "Update": [
-        "Actualizar"
-      ],
-      "Remove": [
-        "Eliminar"
-      ],
-      "Cancel": [
-        "Cancelar"
-      ],
-      "Manage stock": [
-        "Administrar stock"
-      ],
-      "Infinite": [
-        "Inifinito"
-      ],
-      "lost cannot be greater that current + incoming (max %1$s)": [
-        "no puede ser mayor al stock actual %1$s"
-      ],
-      "current stock will change from %1$s to %2$s": [
-        "stock actual cambiará desde %1$s a %2$s"
-      ],
-      "current stock will stay at %1$s": [
-        "stock actual seguirá en %1$s"
-      ],
-      "Incoming": [
-        "Ingresando"
-      ],
-      "Lost": [
-        "Perdido"
-      ],
-      "Current": [
-        "Actual"
-      ],
-      "without stock": [
-        "sin stock"
-      ],
-      "Next restock": [
-        "Próximo reabastecimiento"
-      ],
-      "Delivery address": [
-        "Dirección de entrega"
-      ],
-      "this product has no taxes": [
-        "este producto no tiene impuestos"
-      ],
-      "Amount": [
-        "Monto"
-      ],
-      "currency and value separated with colon": [
-        "Moneda y valor separado por dos puntos"
-      ],
-      "Add": [
-        "Agregar"
-      ],
-      "Instance": [
-        "Instancia"
-      ],
-      "Settings": [
-        "Configuración"
-      ],
-      "Orders": [
-        "Ordenes"
-      ],
-      "Products": [
-        "Productos"
-      ],
-      "Transfers": [
-        "Transferencias"
-      ],
-      "Connection": [
-        "Conexión"
-      ],
-      "Instances": [
-        "Instancias"
-      ],
-      "New": [
-        "Nuevo"
-      ],
-      "List": [
-        "Lista"
-      ],
-      "Log out": [
-        "Salir"
-      ],
-      "Clear": [
-        "Limpiar"
-      ],
-      "should be the same": [
-        "deberían ser iguales"
-      ],
-      "cannot be the same as before": [
-        "no puede ser igual al anterior"
-      ],
-      "You are updating the authorization token from instance %1$s with id 
%2$s": [
-        "Está actualizando el token de autorización para la instancia %1$s con 
id %2$s"
-      ],
-      "Old token": [
-        "Viejo token"
-      ],
-      "New token": [
-        "Nuevo token"
-      ],
-      "Clearing the auth token will mean public access to the instance": [
-        "Limpiar el token de autorización significa acceso publico a la 
instancia"
-      ],
-      "ID": [
-        "ID"
-      ],
-      "Image": [
-        "Imagen"
-      ],
-      "Unit": [
-        "Unidad"
-      ],
-      "Price": [
-        "Precio"
-      ],
-      "Stock": [
-        "Stock"
-      ],
-      "Taxes": [
-        "Impuesto"
-      ],
-      "Server not found": [
-        "Servidor no encontrado"
-      ],
-      "Couldn't access the server": [
-        "No se pudo aceder al servidor"
-      ],
-      "Got message %1$s from %2$s": [
-        "Recivimos el mensaje %1$s desde %2$s"
-      ],
-      "Unexpected Error": [
-        "Error inesperado"
-      ],
-      "Auth token": [
-        "Token de autorización"
-      ],
-      "Account address": [
-        "Dirección de cuenta"
-      ],
-      "Default max deposit fee": [
-        "Impuesto máximo de deposito por omisión"
-      ],
-      "Default max wire fee": [
-        "Impuesto máximo de transferencia por omisión"
-      ],
-      "Default wire fee amortization": [
-        "Amortización de impuesto de transferencia por omisión"
-      ],
-      "Jurisdiction": [
-        "Jurisdicción"
-      ],
-      "Default pay delay": [
-        "Retrazo de pago por omisión"
-      ],
-      "Default wire transfer delay": [
-        "Retrazo de transferencia por omisión"
-      ],
-      "could not create instance": [
-        "no se pudo crear la instancia"
-      ],
-      "Delete": [
-        "Borrando"
-      ],
-      "Edit": [
-        ""
-      ],
-      "There is no instances yet, add more pressing the + sign": [
-        "No hay instancias todavían, agregue mas presionando el signo +"
-      ],
-      "Inventory products": [
-        "Productos de inventario"
-      ],
-      "Total price": [
-        "Precio total"
-      ],
-      "Total tax": [
-        "Impuesto total"
-      ],
-      "Order price": [
-        "Precio de la orden"
-      ],
-      "Net": [
-        "Neto"
-      ],
-      "Summary": [
-        "Resumen"
-      ],
-      "Payments options": [
-        "Opciones de pago"
-      ],
-      "Auto refund deadline": [
-        "Plazo de reembolso automático"
-      ],
-      "Refund deadline": [
-        "Plazo de reembolso"
-      ],
-      "Pay deadline": [
-        "Plazo de pago"
-      ],
-      "Delivery date": [
-        "Fecha de entrega"
-      ],
-      "Location": [
-        "Ubicación"
-      ],
-      "Max fee": [
-        "Impuesto máximo"
-      ],
-      "Max wire fee": [
-        "Impuesto de transferencia máximo"
-      ],
-      "Wire fee amortization": [
-        "Amortización de impuesto de transferencia"
-      ],
-      "Fullfilment url": [
-        "URL de completitud"
-      ],
-      "Extra information": [
-        "Información extra"
-      ],
-      "select a product first": [
-        "seleccione un producto primero"
-      ],
-      "should be greater than 0": [
-        "La imagen debe ser mas chica que 1 MB"
-      ],
-      "cannot be greater than current stock and quantity previously added. 
max: %1$s": [
-        "no puede ser mayor al stock actual y la cantidad previamente 
agregada. máximo: %1$s"
-      ],
-      "cannot be greater than current stock %1$s": [
-        "no puede ser mayor al stock actual %1$s"
-      ],
-      "Quantity": [
-        "Cantidad"
-      ],
-      "Order": [
-        "Orden"
-      ],
-      "claimed": [
-        "reclamado"
-      ],
-      "copy url": [
-        "copiar url"
-      ],
-      "pay at": [
-        "pagar en"
-      ],
-      "created at": [
-        "creado"
-      ],
-      "Timeline": [
-        "Cronología"
-      ],
-      "Payment details": [
-        "Detalles de pago"
-      ],
-      "Order status": [
-        "Estado de orden"
-      ],
-      "Product list": [
-        "Lista de producto"
-      ],
-      "paid": [
-        "pagados"
-      ],
-      "wired": [
-        "transferido"
-      ],
-      "refunded": [
-        "reembolzado"
-      ],
-      "refund": [
-        "reembolzar"
-      ],
-      "Refunded amount": [
-        "Monto reembolzado"
-      ],
-      "Deposit total": [
-        "Total depositado"
-      ],
-      "unpaid": [
-        "impago"
-      ],
-      "Order status URL": [
-        "URL de estado de orden"
-      ],
-      "Pay URI": [
-        "URI de pago"
-      ],
-      "Unknown order status. This is an error, please contact the 
administrator.": [
-        "Estado de orden desconocido. Esto es un error, por favor contacte a 
su administrador"
-      ],
-      "refund created successfully": [
-        "reembolzo creado satisfactoriamente"
-      ],
-      "could not create the refund": [
-        "No se pudo aceder al servidor"
-      ],
-      "load newer orders": [
-        "cargar nuevas ordenes"
-      ],
-      "Date": [
-        "Fecha"
-      ],
-      "Refund": [
-        "Reembolzar"
-      ],
-      "load older orders": [
-        "cargar viejas ordenes"
-      ],
-      "No orders has been found": [
-        "No se enconraron ordenes"
-      ],
-      "date": [
-        "fecha"
-      ],
-      "amount": [
-        "monto"
-      ],
-      "reason": [
-        "razón"
-      ],
-      "Max refundable:": [
-        "Máximo reembolzable:"
-      ],
-      "Reason": [
-        "Razón"
-      ],
-      "duplicated": [
-        "duplicado"
-      ],
-      "requested by the customer": [
-        "pedido por el consumidor"
-      ],
-      "other": [
-        "otro"
-      ],
-      "go to order id": [
-        "ir a id de orden"
-      ],
-      "Paid": [
-        "Pagado"
-      ],
-      "Refunded": [
-        "Reembolzado"
-      ],
-      "Not wired": [
-        "No transferido"
-      ],
-      "All": [
-        "Todo"
-      ],
-      "could not create product": [
-        "no se pudo crear el producto"
-      ],
-      "Sell": [
-        "Venta"
-      ],
-      "Profit": [
-        "Ganancia"
-      ],
-      "Sold": [
-        "Vendido"
-      ],
-      "product updated successfully": [
-        "producto actualizado correctamente"
-      ],
-      "could not update the product": [
-        "no se pudo actualizar el producto"
-      ],
-      "product delete successfully": [
-        "producto fue eliminado correctamente"
-      ],
-      "could not delete the product": [
-        "no se pudo eliminar el producto"
-      ],
-      "Tips": [
-        "Propinas"
-      ],
-      "Committed amount": [
-        ""
-      ],
-      "Exchange initial amount": [
-        ""
-      ],
-      "Merchant initial amount": [
-        ""
-      ],
-      "There is no tips yet, add more pressing the + sign": [
-        "No hay propinas todavía, agregar mas presionando el signo +"
-      ],
-      "cannot be empty": [
-        "no puede ser vacío"
-      ],
-      "check the id, doest look valid": [
-        "verificar el id, no parece válido"
-      ],
-      "should have 52 characters, current %1$s": [
-        "debería tener 52 caracteres, actualmente %1$s"
-      ],
-      "URL doesn't have the right format": [
-        "La URL no tiene el formato correcto"
-      ],
-      "Transfer ID": [
-        "Transferencias"
-      ],
-      "Account Address": [
-        "Dirección de cuenta"
-      ],
-      "Exchange URL": [
-        "URL del Exchange"
-      ],
-      "could not inform transfer": [
-        "no se pudo crear la instancia"
-      ],
-      "load newer transfers": [
-        "cargar nuevas ordenes"
-      ],
-      "Credit": [
-        "Crédito"
-      ],
-      "Confirmed": [
-        "Confirmar"
-      ],
-      "Verified": [
-        "Verificado"
-      ],
-      "Executed at": [
-        "creado"
-      ],
-      "yes": [
-        "si"
-      ],
-      "no": [
-        "no"
-      ],
-      "unknown": [
-        "desconocido"
-      ],
-      "load older transfers": [
-        "cargar viejas transferencias"
-      ],
-      "There is no transfer yet, add more pressing the + sign": [
-        "No hay transferencias todavía, agregar mas presionando el signo +"
-      ]
-    }
-  }
-};
-
-strings['fr'] = {
-  "domain": "messages",
-  "locale_data": {
-    "messages": {
-      "": {
-        "domain": "messages",
-        "plural_forms": "nplurals=2; plural=(n != 1);",
-        "lang": ""
-      },
-      "Access denied": [
-        ""
-      ],
-      "Check your token is valid": [
-        ""
-      ],
-      "Couldn't access the server.": [
-        ""
-      ],
-      "Could not infer instance id from url %1$s": [
-        ""
-      ],
-      "HTTP status #%1$s: Server reported a problem": [
-        ""
-      ],
-      "Got message: \"%1$s\" from: %2$s": [
-        ""
-      ],
-      "No default instance": [
-        ""
-      ],
-      "in order to use merchant backoffice, you should create the default 
instance": [
-        ""
-      ],
-      "Server reported a problem: HTTP status #%1$s": [
-        ""
-      ],
-      "Got message: %1$s from: %2$s": [
-        ""
-      ],
-      "Login required": [
-        ""
-      ],
-      "Please enter your auth token. Token should have \"secret-token:\" and 
start with Bearer or ApiKey": [
-        ""
-      ],
-      "Confirm": [
-        ""
-      ],
-      "The value %1$s is invalid for a payment url": [
-        ""
-      ],
-      "pick a date": [
-        ""
-      ],
-      "clear": [
-        ""
-      ],
-      "never": [
-        ""
-      ],
-      "Image should be smaller than 1 MB": [
-        ""
-      ],
-      "Country": [
-        ""
-      ],
-      "Address": [
-        ""
-      ],
-      "Building number": [
-        ""
-      ],
-      "Building name": [
-        ""
-      ],
-      "Street": [
-        ""
-      ],
-      "Post code": [
-        ""
-      ],
-      "Town location": [
-        ""
-      ],
-      "Town": [
-        ""
-      ],
-      "District": [
-        ""
-      ],
-      "Country subdivision": [
-        ""
-      ],
-      "Product id": [
-        ""
-      ],
-      "Description": [
-        ""
-      ],
-      "Name": [
-        ""
-      ],
-      "loading...": [
-        ""
-      ],
-      "no products found": [
-        ""
-      ],
-      "no results": [
-        ""
-      ],
-      "Deleting": [
-        ""
-      ],
-      "Changing": [
-        ""
-      ],
-      "Manage token": [
-        ""
-      ],
-      "Update": [
-        ""
-      ],
-      "Remove": [
-        ""
-      ],
-      "Cancel": [
-        ""
-      ],
-      "Manage stock": [
-        ""
-      ],
-      "Infinite": [
-        ""
-      ],
-      "lost cannot be greater that current + incoming (max %1$s)": [
-        ""
-      ],
-      "current stock will change from %1$s to %2$s": [
-        ""
-      ],
-      "current stock will stay at %1$s": [
-        ""
-      ],
-      "Incoming": [
-        ""
-      ],
-      "Lost": [
-        ""
-      ],
-      "Current": [
-        ""
-      ],
-      "without stock": [
-        ""
-      ],
-      "Next restock": [
-        ""
-      ],
-      "Delivery address": [
-        ""
-      ],
-      "this product has no taxes": [
-        ""
-      ],
-      "Amount": [
-        ""
-      ],
-      "currency and value separated with colon": [
-        ""
-      ],
-      "Add": [
-        ""
-      ],
-      "Instance": [
-        ""
-      ],
-      "Settings": [
-        ""
-      ],
-      "Orders": [
-        ""
-      ],
-      "Products": [
-        ""
-      ],
-      "Transfers": [
-        ""
-      ],
-      "Connection": [
-        ""
-      ],
-      "Instances": [
-        ""
-      ],
-      "New": [
-        ""
-      ],
-      "List": [
-        ""
-      ],
-      "Log out": [
-        ""
-      ],
-      "Clear": [
-        ""
-      ],
-      "should be the same": [
-        ""
-      ],
-      "cannot be the same as before": [
-        ""
-      ],
-      "You are updating the authorization token from instance %1$s with id 
%2$s": [
-        ""
-      ],
-      "Old token": [
-        ""
-      ],
-      "New token": [
-        ""
-      ],
-      "Clearing the auth token will mean public access to the instance": [
-        ""
-      ],
-      "ID": [
-        ""
-      ],
-      "Image": [
-        ""
-      ],
-      "Unit": [
-        ""
-      ],
-      "Price": [
-        ""
-      ],
-      "Stock": [
-        ""
-      ],
-      "Taxes": [
-        ""
-      ],
-      "Server not found": [
-        ""
-      ],
-      "Couldn't access the server": [
-        ""
-      ],
-      "Got message %1$s from %2$s": [
-        ""
-      ],
-      "Unexpected Error": [
-        ""
-      ],
-      "Auth token": [
-        ""
-      ],
-      "Account address": [
-        ""
-      ],
-      "Default max deposit fee": [
-        ""
-      ],
-      "Default max wire fee": [
-        ""
-      ],
-      "Default wire fee amortization": [
-        ""
-      ],
-      "Jurisdiction": [
-        ""
-      ],
-      "Default pay delay": [
-        ""
-      ],
-      "Default wire transfer delay": [
-        ""
-      ],
-      "could not create instance": [
-        ""
-      ],
-      "Delete": [
-        ""
-      ],
-      "Edit": [
-        ""
-      ],
-      "There is no instances yet, add more pressing the + sign": [
-        ""
-      ],
-      "Inventory products": [
-        ""
-      ],
-      "Total price": [
-        ""
-      ],
-      "Total tax": [
-        ""
-      ],
-      "Order price": [
-        ""
-      ],
-      "Net": [
-        ""
-      ],
-      "Summary": [
-        ""
-      ],
-      "Payments options": [
-        ""
-      ],
-      "Auto refund deadline": [
-        ""
-      ],
-      "Refund deadline": [
-        ""
-      ],
-      "Pay deadline": [
-        ""
-      ],
-      "Delivery date": [
-        ""
-      ],
-      "Location": [
-        ""
-      ],
-      "Max fee": [
-        ""
-      ],
-      "Max wire fee": [
-        ""
-      ],
-      "Wire fee amortization": [
-        ""
-      ],
-      "Fullfilment url": [
-        ""
-      ],
-      "Extra information": [
-        ""
-      ],
-      "select a product first": [
-        ""
-      ],
-      "should be greater than 0": [
-        ""
-      ],
-      "cannot be greater than current stock and quantity previously added. 
max: %1$s": [
-        ""
-      ],
-      "cannot be greater than current stock %1$s": [
-        ""
-      ],
-      "Quantity": [
-        ""
-      ],
-      "Order": [
-        ""
-      ],
-      "claimed": [
-        ""
-      ],
-      "copy url": [
-        ""
-      ],
-      "pay at": [
-        ""
-      ],
-      "created at": [
-        ""
-      ],
-      "Timeline": [
-        ""
-      ],
-      "Payment details": [
-        ""
-      ],
-      "Order status": [
-        ""
-      ],
-      "Product list": [
-        ""
-      ],
-      "paid": [
-        ""
-      ],
-      "wired": [
-        ""
-      ],
-      "refunded": [
-        ""
-      ],
-      "refund": [
-        ""
-      ],
-      "Refunded amount": [
-        ""
-      ],
-      "Deposit total": [
-        ""
-      ],
-      "unpaid": [
-        ""
-      ],
-      "Order status URL": [
-        ""
-      ],
-      "Pay URI": [
-        ""
-      ],
-      "Unknown order status. This is an error, please contact the 
administrator.": [
-        ""
-      ],
-      "refund created successfully": [
-        ""
-      ],
-      "could not create the refund": [
-        ""
-      ],
-      "load newer orders": [
-        ""
-      ],
-      "Date": [
-        ""
-      ],
-      "Refund": [
-        ""
-      ],
-      "load older orders": [
-        ""
-      ],
-      "No orders has been found": [
-        ""
-      ],
-      "date": [
-        ""
-      ],
-      "amount": [
-        ""
-      ],
-      "reason": [
-        ""
-      ],
-      "Max refundable:": [
-        ""
-      ],
-      "Reason": [
-        ""
-      ],
-      "duplicated": [
-        ""
-      ],
-      "requested by the customer": [
-        ""
-      ],
-      "other": [
-        ""
-      ],
-      "go to order id": [
-        ""
-      ],
-      "Paid": [
-        ""
-      ],
-      "Refunded": [
-        ""
-      ],
-      "Not wired": [
-        ""
-      ],
-      "All": [
-        ""
-      ],
-      "could not create product": [
-        ""
-      ],
-      "Sell": [
-        ""
-      ],
-      "Profit": [
-        ""
-      ],
-      "Sold": [
-        ""
-      ],
-      "product updated successfully": [
-        ""
-      ],
-      "could not update the product": [
-        ""
-      ],
-      "product delete successfully": [
-        ""
-      ],
-      "could not delete the product": [
-        ""
-      ],
-      "Tips": [
-        ""
-      ],
-      "Committed amount": [
-        ""
-      ],
-      "Exchange initial amount": [
-        ""
-      ],
-      "Merchant initial amount": [
-        ""
-      ],
-      "There is no tips yet, add more pressing the + sign": [
-        ""
-      ],
-      "cannot be empty": [
-        ""
-      ],
-      "check the id, doest look valid": [
-        ""
-      ],
-      "should have 52 characters, current %1$s": [
-        ""
-      ],
-      "URL doesn't have the right format": [
-        ""
-      ],
-      "Transfer ID": [
-        ""
-      ],
-      "Account Address": [
-        ""
-      ],
-      "Exchange URL": [
-        ""
-      ],
-      "could not inform transfer": [
-        ""
-      ],
-      "load newer transfers": [
-        ""
-      ],
-      "Credit": [
-        ""
-      ],
-      "Confirmed": [
-        ""
-      ],
-      "Verified": [
-        ""
-      ],
-      "Executed at": [
-        ""
-      ],
-      "yes": [
-        ""
-      ],
-      "no": [
-        ""
-      ],
-      "unknown": [
-        ""
-      ],
-      "load older transfers": [
-        ""
-      ],
-      "There is no transfer yet, add more pressing the + sign": [
-        ""
-      ]
-    }
-  }
-};
-
-strings['it'] = {
-  "domain": "messages",
-  "locale_data": {
-    "messages": {
-      "": {
-        "domain": "messages",
-        "plural_forms": "nplurals=2; plural=(n != 1);",
-        "lang": ""
-      },
-      "Access denied": [
-        ""
-      ],
-      "Check your token is valid": [
-        ""
-      ],
-      "Couldn't access the server.": [
-        ""
-      ],
-      "Could not infer instance id from url %1$s": [
-        ""
-      ],
-      "HTTP status #%1$s: Server reported a problem": [
-        ""
-      ],
-      "Got message: \"%1$s\" from: %2$s": [
-        ""
-      ],
-      "No default instance": [
-        ""
-      ],
-      "in order to use merchant backoffice, you should create the default 
instance": [
-        ""
-      ],
-      "Server reported a problem: HTTP status #%1$s": [
-        ""
-      ],
-      "Got message: %1$s from: %2$s": [
-        ""
-      ],
-      "Login required": [
-        ""
-      ],
-      "Please enter your auth token. Token should have \"secret-token:\" and 
start with Bearer or ApiKey": [
-        ""
-      ],
-      "Confirm": [
-        ""
-      ],
-      "The value %1$s is invalid for a payment url": [
-        ""
-      ],
-      "pick a date": [
-        ""
-      ],
-      "clear": [
-        ""
-      ],
-      "never": [
-        ""
-      ],
-      "Image should be smaller than 1 MB": [
-        ""
-      ],
-      "Country": [
-        ""
-      ],
-      "Address": [
-        ""
-      ],
-      "Building number": [
-        ""
-      ],
-      "Building name": [
-        ""
-      ],
-      "Street": [
-        ""
-      ],
-      "Post code": [
-        ""
-      ],
-      "Town location": [
-        ""
-      ],
-      "Town": [
-        ""
-      ],
-      "District": [
-        ""
-      ],
-      "Country subdivision": [
-        ""
-      ],
-      "Product id": [
-        ""
-      ],
-      "Description": [
-        ""
-      ],
-      "Name": [
-        ""
-      ],
-      "loading...": [
-        ""
-      ],
-      "no products found": [
-        ""
-      ],
-      "no results": [
-        ""
-      ],
-      "Deleting": [
-        ""
-      ],
-      "Changing": [
-        ""
-      ],
-      "Manage token": [
-        ""
-      ],
-      "Update": [
-        ""
-      ],
-      "Remove": [
-        ""
-      ],
-      "Cancel": [
-        ""
-      ],
-      "Manage stock": [
-        ""
-      ],
-      "Infinite": [
-        ""
-      ],
-      "lost cannot be greater that current + incoming (max %1$s)": [
-        ""
-      ],
-      "current stock will change from %1$s to %2$s": [
-        ""
-      ],
-      "current stock will stay at %1$s": [
-        ""
-      ],
-      "Incoming": [
-        ""
-      ],
-      "Lost": [
-        ""
-      ],
-      "Current": [
-        ""
-      ],
-      "without stock": [
-        ""
-      ],
-      "Next restock": [
-        ""
-      ],
-      "Delivery address": [
-        ""
-      ],
-      "this product has no taxes": [
-        ""
-      ],
-      "Amount": [
-        ""
-      ],
-      "currency and value separated with colon": [
-        ""
-      ],
-      "Add": [
-        ""
-      ],
-      "Instance": [
-        ""
-      ],
-      "Settings": [
-        ""
-      ],
-      "Orders": [
-        ""
-      ],
-      "Products": [
-        ""
-      ],
-      "Transfers": [
-        ""
-      ],
-      "Connection": [
-        ""
-      ],
-      "Instances": [
-        ""
-      ],
-      "New": [
-        ""
-      ],
-      "List": [
-        ""
-      ],
-      "Log out": [
-        ""
-      ],
-      "Clear": [
-        ""
-      ],
-      "should be the same": [
-        ""
-      ],
-      "cannot be the same as before": [
-        ""
-      ],
-      "You are updating the authorization token from instance %1$s with id 
%2$s": [
-        ""
-      ],
-      "Old token": [
-        ""
-      ],
-      "New token": [
-        ""
-      ],
-      "Clearing the auth token will mean public access to the instance": [
-        ""
-      ],
-      "ID": [
-        ""
-      ],
-      "Image": [
-        ""
-      ],
-      "Unit": [
-        ""
-      ],
-      "Price": [
-        ""
-      ],
-      "Stock": [
-        ""
-      ],
-      "Taxes": [
-        ""
-      ],
-      "Server not found": [
-        ""
-      ],
-      "Couldn't access the server": [
-        ""
-      ],
-      "Got message %1$s from %2$s": [
-        ""
-      ],
-      "Unexpected Error": [
-        ""
-      ],
-      "Auth token": [
-        ""
-      ],
-      "Account address": [
-        ""
-      ],
-      "Default max deposit fee": [
-        ""
-      ],
-      "Default max wire fee": [
-        ""
-      ],
-      "Default wire fee amortization": [
-        ""
-      ],
-      "Jurisdiction": [
-        ""
-      ],
-      "Default pay delay": [
-        ""
-      ],
-      "Default wire transfer delay": [
-        ""
-      ],
-      "could not create instance": [
-        ""
-      ],
-      "Delete": [
-        ""
-      ],
-      "Edit": [
-        ""
-      ],
-      "There is no instances yet, add more pressing the + sign": [
-        ""
-      ],
-      "Inventory products": [
-        ""
-      ],
-      "Total price": [
-        ""
-      ],
-      "Total tax": [
-        ""
-      ],
-      "Order price": [
-        ""
-      ],
-      "Net": [
-        ""
-      ],
-      "Summary": [
-        ""
-      ],
-      "Payments options": [
-        ""
-      ],
-      "Auto refund deadline": [
-        ""
-      ],
-      "Refund deadline": [
-        ""
-      ],
-      "Pay deadline": [
-        ""
-      ],
-      "Delivery date": [
-        ""
-      ],
-      "Location": [
-        ""
-      ],
-      "Max fee": [
-        ""
-      ],
-      "Max wire fee": [
-        ""
-      ],
-      "Wire fee amortization": [
-        ""
-      ],
-      "Fullfilment url": [
-        ""
-      ],
-      "Extra information": [
-        ""
-      ],
-      "select a product first": [
-        ""
-      ],
-      "should be greater than 0": [
-        ""
-      ],
-      "cannot be greater than current stock and quantity previously added. 
max: %1$s": [
-        ""
-      ],
-      "cannot be greater than current stock %1$s": [
-        ""
-      ],
-      "Quantity": [
-        ""
-      ],
-      "Order": [
-        ""
-      ],
-      "claimed": [
-        ""
-      ],
-      "copy url": [
-        ""
-      ],
-      "pay at": [
-        ""
-      ],
-      "created at": [
-        ""
-      ],
-      "Timeline": [
-        ""
-      ],
-      "Payment details": [
-        ""
-      ],
-      "Order status": [
-        ""
-      ],
-      "Product list": [
-        ""
-      ],
-      "paid": [
-        ""
-      ],
-      "wired": [
-        ""
-      ],
-      "refunded": [
-        ""
-      ],
-      "refund": [
-        ""
-      ],
-      "Refunded amount": [
-        ""
-      ],
-      "Deposit total": [
-        ""
-      ],
-      "unpaid": [
-        ""
-      ],
-      "Order status URL": [
-        ""
-      ],
-      "Pay URI": [
-        ""
-      ],
-      "Unknown order status. This is an error, please contact the 
administrator.": [
-        ""
-      ],
-      "refund created successfully": [
-        ""
-      ],
-      "could not create the refund": [
-        ""
-      ],
-      "load newer orders": [
-        ""
-      ],
-      "Date": [
-        ""
-      ],
-      "Refund": [
-        ""
-      ],
-      "load older orders": [
-        ""
-      ],
-      "No orders has been found": [
-        ""
-      ],
-      "date": [
-        ""
-      ],
-      "amount": [
-        ""
-      ],
-      "reason": [
-        ""
-      ],
-      "Max refundable:": [
-        ""
-      ],
-      "Reason": [
-        ""
-      ],
-      "duplicated": [
-        ""
-      ],
-      "requested by the customer": [
-        ""
-      ],
-      "other": [
-        ""
-      ],
-      "go to order id": [
-        ""
-      ],
-      "Paid": [
-        ""
-      ],
-      "Refunded": [
-        ""
-      ],
-      "Not wired": [
-        ""
-      ],
-      "All": [
-        ""
-      ],
-      "could not create product": [
-        ""
-      ],
-      "Sell": [
-        ""
-      ],
-      "Profit": [
-        ""
-      ],
-      "Sold": [
-        ""
-      ],
-      "product updated successfully": [
-        ""
-      ],
-      "could not update the product": [
-        ""
-      ],
-      "product delete successfully": [
-        ""
-      ],
-      "could not delete the product": [
-        ""
-      ],
-      "Tips": [
-        ""
-      ],
-      "Committed amount": [
-        ""
-      ],
-      "Exchange initial amount": [
-        ""
-      ],
-      "Merchant initial amount": [
-        ""
-      ],
-      "There is no tips yet, add more pressing the + sign": [
-        ""
-      ],
-      "cannot be empty": [
-        ""
-      ],
-      "check the id, doest look valid": [
-        ""
-      ],
-      "should have 52 characters, current %1$s": [
-        ""
-      ],
-      "URL doesn't have the right format": [
-        ""
-      ],
-      "Transfer ID": [
-        ""
-      ],
-      "Account Address": [
-        ""
-      ],
-      "Exchange URL": [
-        ""
-      ],
-      "could not inform transfer": [
-        ""
-      ],
-      "load newer transfers": [
-        ""
-      ],
-      "Credit": [
-        ""
-      ],
-      "Confirmed": [
-        ""
-      ],
-      "Verified": [
-        ""
-      ],
-      "Executed at": [
-        ""
-      ],
-      "yes": [
-        ""
-      ],
-      "no": [
-        ""
-      ],
-      "unknown": [
-        ""
-      ],
-      "load older transfers": [
-        ""
-      ],
-      "There is no transfer yet, add more pressing the + sign": [
-        ""
-      ]
-    }
-  }
+      "Access denied": [""],
+      "Check your token is valid": [""],
+      "Couldn't access the server.": [""],
+      "Could not infer instance id from url %1$s": [""],
+      "HTTP status #%1$s: Server reported a problem": [""],
+      'Got message: "%1$s" from: %2$s': [""],
+      "No default instance": [""],
+      "in order to use merchant backoffice, you should create the default 
instance":
+        [""],
+      "Server reported a problem: HTTP status #%1$s": [""],
+      "Got message: %1$s from: %2$s": [""],
+      "Login required": [""],
+      'Please enter your auth token. Token should have "secret-token:" and 
start with Bearer or ApiKey':
+        [""],
+      Confirm: [""],
+      "The value %1$s is invalid for a payment url": [""],
+      "pick a date": [""],
+      clear: [""],
+      never: [""],
+      "Image should be smaller than 1 MB": [""],
+      Country: [""],
+      Address: [""],
+      "Building number": [""],
+      "Building name": [""],
+      Street: [""],
+      "Post code": [""],
+      "Town location": [""],
+      Town: [""],
+      District: [""],
+      "Country subdivision": [""],
+      "Product id": [""],
+      Description: [""],
+      Name: [""],
+      "loading...": [""],
+      "no products found": [""],
+      "no results": [""],
+      Deleting: [""],
+      Changing: [""],
+      "Manage token": [""],
+      Update: [""],
+      Remove: [""],
+      Cancel: [""],
+      "Manage stock": [""],
+      Infinite: [""],
+      "lost cannot be greater that current + incoming (max %1$s)": [""],
+      "current stock will change from %1$s to %2$s": [""],
+      "current stock will stay at %1$s": [""],
+      Incoming: [""],
+      Lost: [""],
+      Current: [""],
+      "without stock": [""],
+      "Next restock": [""],
+      "Delivery address": [""],
+      "this product has no taxes": [""],
+      Amount: [""],
+      "currency and value separated with colon": [""],
+      Add: [""],
+      Instance: [""],
+      Settings: [""],
+      Orders: [""],
+      Products: [""],
+      Transfers: [""],
+      Connection: [""],
+      Instances: [""],
+      New: [""],
+      List: [""],
+      "Log out": [""],
+      Clear: [""],
+      "should be the same": [""],
+      "cannot be the same as before": [""],
+      "You are updating the authorization token from instance %1$s with id 
%2$s":
+        [""],
+      "Old token": [""],
+      "New token": [""],
+      "Clearing the auth token will mean public access to the instance": [""],
+      ID: [""],
+      Image: [""],
+      Unit: [""],
+      Price: [""],
+      Stock: [""],
+      Taxes: [""],
+      "Server not found": [""],
+      "Couldn't access the server": [""],
+      "Got message %1$s from %2$s": [""],
+      "Unexpected Error": [""],
+      "Auth token": [""],
+      "Account address": [""],
+      "Default max deposit fee": [""],
+      "Default max wire fee": [""],
+      "Default wire fee amortization": [""],
+      Jurisdiction: [""],
+      "Default pay delay": [""],
+      "Default wire transfer delay": [""],
+      "could not create instance": [""],
+      Delete: [""],
+      Edit: [""],
+      "There is no instances yet, add more pressing the + sign": [""],
+      "Inventory products": [""],
+      "Total price": [""],
+      "Total tax": [""],
+      "Order price": [""],
+      Net: [""],
+      Summary: [""],
+      "Payments options": [""],
+      "Auto refund deadline": [""],
+      "Refund deadline": [""],
+      "Pay deadline": [""],
+      "Delivery date": [""],
+      Location: [""],
+      "Max fee": [""],
+      "Max wire fee": [""],
+      "Wire fee amortization": [""],
+      "Fullfilment url": [""],
+      "Extra information": [""],
+      "select a product first": [""],
+      "should be greater than 0": [""],
+      "cannot be greater than current stock and quantity previously added. 
max: %1$s":
+        [""],
+      "cannot be greater than current stock %1$s": [""],
+      Quantity: [""],
+      Order: [""],
+      claimed: [""],
+      "copy url": [""],
+      "pay at": [""],
+      "created at": [""],
+      Timeline: [""],
+      "Payment details": [""],
+      "Order status": [""],
+      "Product list": [""],
+      paid: [""],
+      wired: [""],
+      refunded: [""],
+      refund: [""],
+      "Refunded amount": [""],
+      "Deposit total": [""],
+      unpaid: [""],
+      "Order status URL": [""],
+      "Pay URI": [""],
+      "Unknown order status. This is an error, please contact the 
administrator.":
+        [""],
+      "refund created successfully": [""],
+      "could not create the refund": [""],
+      "load newer orders": [""],
+      Date: [""],
+      Refund: [""],
+      "load older orders": [""],
+      "No orders has been found": [""],
+      date: [""],
+      amount: [""],
+      reason: [""],
+      "Max refundable:": [""],
+      Reason: [""],
+      duplicated: [""],
+      "requested by the customer": [""],
+      other: [""],
+      "go to order id": [""],
+      Paid: [""],
+      Refunded: [""],
+      "Not wired": [""],
+      All: [""],
+      "could not create product": [""],
+      Sell: [""],
+      Profit: [""],
+      Sold: [""],
+      "product updated successfully": [""],
+      "could not update the product": [""],
+      "product delete successfully": [""],
+      "could not delete the product": [""],
+      Tips: [""],
+      "Committed amount": [""],
+      "Exchange initial amount": [""],
+      "Merchant initial amount": [""],
+      "There is no tips yet, add more pressing the + sign": [""],
+      "cannot be empty": [""],
+      "check the id, doest look valid": [""],
+      "should have 52 characters, current %1$s": [""],
+      "URL doesn't have the right format": [""],
+      "Transfer ID": [""],
+      "Account Address": [""],
+      "Exchange URL": [""],
+      "could not inform transfer": [""],
+      "load newer transfers": [""],
+      Credit: [""],
+      Confirmed: [""],
+      Verified: [""],
+      "Executed at": [""],
+      yes: [""],
+      no: [""],
+      unknown: [""],
+      "load older transfers": [""],
+      "There is no transfer yet, add more pressing the + sign": [""],
+    },
+  },
 };
 
-strings['sv'] = {
-  "domain": "messages",
-  "locale_data": {
-    "messages": {
+strings["en"] = {
+  domain: "messages",
+  locale_data: {
+    messages: {
       "": {
-        "domain": "messages",
-        "plural_forms": "nplurals=2; plural=(n != 1);",
-        "lang": ""
+        domain: "messages",
+        plural_forms: "nplurals=2; plural=(n != 1);",
+        lang: "",
       },
-      "Access denied": [
-        ""
-      ],
-      "Check your token is valid": [
-        ""
-      ],
-      "Couldn't access the server.": [
-        ""
-      ],
+      "Access denied": [""],
+      "Check your token is valid": [""],
+      "Couldn't access the server.": [""],
+      "Could not infer instance id from url %1$s": [""],
+      "HTTP status #%1$s: Server reported a problem": [""],
+      'Got message: "%1$s" from: %2$s': [""],
+      "No default instance": [""],
+      "in order to use merchant backoffice, you should create the default 
instance":
+        [""],
+      "Server reported a problem: HTTP status #%1$s": [""],
+      "Got message: %1$s from: %2$s": [""],
+      "Login required": [""],
+      'Please enter your auth token. Token should have "secret-token:" and 
start with Bearer or ApiKey':
+        [""],
+      Confirm: [""],
+      "The value %1$s is invalid for a payment url": [""],
+      "pick a date": [""],
+      clear: [""],
+      never: [""],
+      "Image should be smaller than 1 MB": [""],
+      Country: [""],
+      Address: [""],
+      "Building number": [""],
+      "Building name": [""],
+      Street: [""],
+      "Post code": [""],
+      "Town location": [""],
+      Town: [""],
+      District: [""],
+      "Country subdivision": [""],
+      "Product id": [""],
+      Description: [""],
+      Name: [""],
+      "loading...": [""],
+      "no products found": [""],
+      "no results": [""],
+      Deleting: [""],
+      Changing: [""],
+      "Manage token": [""],
+      Update: [""],
+      Remove: [""],
+      Cancel: [""],
+      "Manage stock": [""],
+      Infinite: [""],
+      "lost cannot be greater that current + incoming (max %1$s)": [""],
+      "current stock will change from %1$s to %2$s": [""],
+      "current stock will stay at %1$s": [""],
+      Incoming: [""],
+      Lost: [""],
+      Current: [""],
+      "without stock": [""],
+      "Next restock": [""],
+      "Delivery address": [""],
+      "this product has no taxes": [""],
+      Amount: [""],
+      "currency and value separated with colon": [""],
+      Add: [""],
+      Instance: [""],
+      Settings: [""],
+      Orders: [""],
+      Products: [""],
+      Transfers: [""],
+      Connection: [""],
+      Instances: [""],
+      New: [""],
+      List: [""],
+      "Log out": [""],
+      Clear: [""],
+      "should be the same": [""],
+      "cannot be the same as before": [""],
+      "You are updating the authorization token from instance %1$s with id 
%2$s":
+        [""],
+      "Old token": [""],
+      "New token": [""],
+      "Clearing the auth token will mean public access to the instance": [""],
+      ID: [""],
+      Image: [""],
+      Unit: [""],
+      Price: [""],
+      Stock: [""],
+      Taxes: [""],
+      "Server not found": [""],
+      "Couldn't access the server": [""],
+      "Got message %1$s from %2$s": [""],
+      "Unexpected Error": [""],
+      "Auth token": [""],
+      "Account address": [""],
+      "Default max deposit fee": [""],
+      "Default max wire fee": [""],
+      "Default wire fee amortization": [""],
+      Jurisdiction: [""],
+      "Default pay delay": [""],
+      "Default wire transfer delay": [""],
+      "could not create instance": [""],
+      Delete: [""],
+      Edit: [""],
+      "There is no instances yet, add more pressing the + sign": [""],
+      "Inventory products": [""],
+      "Total price": [""],
+      "Total tax": [""],
+      "Order price": [""],
+      Net: [""],
+      Summary: [""],
+      "Payments options": [""],
+      "Auto refund deadline": [""],
+      "Refund deadline": [""],
+      "Pay deadline": [""],
+      "Delivery date": [""],
+      Location: [""],
+      "Max fee": [""],
+      "Max wire fee": [""],
+      "Wire fee amortization": [""],
+      "Fullfilment url": [""],
+      "Extra information": [""],
+      "select a product first": [""],
+      "should be greater than 0": [""],
+      "cannot be greater than current stock and quantity previously added. 
max: %1$s":
+        [""],
+      "cannot be greater than current stock %1$s": [""],
+      Quantity: [""],
+      Order: [""],
+      claimed: [""],
+      "copy url": [""],
+      "pay at": [""],
+      "created at": [""],
+      Timeline: [""],
+      "Payment details": [""],
+      "Order status": [""],
+      "Product list": [""],
+      paid: [""],
+      wired: [""],
+      refunded: [""],
+      refund: [""],
+      "Refunded amount": [""],
+      "Deposit total": [""],
+      unpaid: [""],
+      "Order status URL": [""],
+      "Pay URI": [""],
+      "Unknown order status. This is an error, please contact the 
administrator.":
+        [""],
+      "refund created successfully": [""],
+      "could not create the refund": [""],
+      "load newer orders": [""],
+      Date: [""],
+      Refund: [""],
+      "load older orders": [""],
+      "No orders has been found": [""],
+      date: [""],
+      amount: [""],
+      reason: [""],
+      "Max refundable:": [""],
+      Reason: [""],
+      duplicated: [""],
+      "requested by the customer": [""],
+      other: [""],
+      "go to order id": [""],
+      Paid: [""],
+      Refunded: [""],
+      "Not wired": [""],
+      All: [""],
+      "could not create product": [""],
+      Sell: [""],
+      Profit: [""],
+      Sold: [""],
+      "product updated successfully": [""],
+      "could not update the product": [""],
+      "product delete successfully": [""],
+      "could not delete the product": [""],
+      Tips: [""],
+      "Committed amount": [""],
+      "Exchange initial amount": [""],
+      "Merchant initial amount": [""],
+      "There is no tips yet, add more pressing the + sign": [""],
+      "cannot be empty": [""],
+      "check the id, doest look valid": [""],
+      "should have 52 characters, current %1$s": [""],
+      "URL doesn't have the right format": [""],
+      "Transfer ID": [""],
+      "Account Address": [""],
+      "Exchange URL": [""],
+      "could not inform transfer": [""],
+      "load newer transfers": [""],
+      Credit: [""],
+      Confirmed: [""],
+      Verified: [""],
+      "Executed at": [""],
+      yes: [""],
+      no: [""],
+      unknown: [""],
+      "load older transfers": [""],
+      "There is no transfer yet, add more pressing the + sign": [""],
+    },
+  },
+};
+
+strings["es"] = {
+  domain: "messages",
+  locale_data: {
+    messages: {
+      "": {
+        domain: "messages",
+        plural_forms: "nplurals=2; plural=(n != 1);",
+        lang: "",
+      },
+      "Access denied": ["Acceso denegado"],
+      "Check your token is valid": ["Verifica que el token sea valido"],
+      "Couldn't access the server.": ["No se pudo acceder al servidor"],
       "Could not infer instance id from url %1$s": [
-        ""
+        "No se pudo inferir el id de la instancia con la url %1$s",
       ],
       "HTTP status #%1$s: Server reported a problem": [
-        ""
-      ],
-      "Got message: \"%1$s\" from: %2$s": [
-        ""
+        "HTTP status #%1$s: Servidor reporto un problema",
       ],
-      "No default instance": [
-        ""
-      ],
-      "in order to use merchant backoffice, you should create the default 
instance": [
-        ""
+      'Got message: "%1$s" from: %2$s': [
+        "Recivimos el mensaje %1$s desde %2$s",
       ],
+      "No default instance": ["Sin instancia default"],
+      "in order to use merchant backoffice, you should create the default 
instance":
+        [
+          "para usar el merchant backoffice, debería crear la instancia 
default",
+        ],
       "Server reported a problem: HTTP status #%1$s": [
-        ""
-      ],
-      "Got message: %1$s from: %2$s": [
-        ""
-      ],
-      "Login required": [
-        ""
-      ],
-      "Please enter your auth token. Token should have \"secret-token:\" and 
start with Bearer or ApiKey": [
-        ""
-      ],
-      "Confirm": [
-        ""
-      ],
+        "Servidir reporto un problema: HTTP status #%1$s",
+      ],
+      "Got message: %1$s from: %2$s": ["Recivimos el mensaje %1$s desde %2$s"],
+      "Login required": ["Login necesario"],
+      'Please enter your auth token. Token should have "secret-token:" and 
start with Bearer or ApiKey':
+        [
+          'Por favor ingrese su token de autorización. El token debe tener 
"secret-token" y comenzar con Bearer o ApiKey',
+        ],
+      Confirm: ["Confirmar"],
       "The value %1$s is invalid for a payment url": [
-        ""
-      ],
-      "pick a date": [
-        ""
-      ],
-      "clear": [
-        ""
-      ],
-      "never": [
-        ""
+        "El valor %1$s es invalido para una URL de pago",
       ],
+      "pick a date": ["elegir una fecha"],
+      clear: ["Limpiar"],
+      never: ["nunca"],
       "Image should be smaller than 1 MB": [
-        ""
-      ],
-      "Country": [
-        ""
-      ],
-      "Address": [
-        ""
-      ],
-      "Building number": [
-        ""
-      ],
-      "Building name": [
-        ""
-      ],
-      "Street": [
-        ""
-      ],
-      "Post code": [
-        ""
-      ],
-      "Town location": [
-        ""
-      ],
-      "Town": [
-        ""
-      ],
-      "District": [
-        ""
-      ],
-      "Country subdivision": [
-        ""
-      ],
-      "Product id": [
-        ""
-      ],
-      "Description": [
-        ""
-      ],
-      "Name": [
-        ""
-      ],
-      "loading...": [
-        ""
-      ],
-      "no products found": [
-        ""
-      ],
-      "no results": [
-        ""
-      ],
-      "Deleting": [
-        ""
-      ],
-      "Changing": [
-        ""
-      ],
-      "Manage token": [
-        ""
-      ],
-      "Update": [
-        ""
-      ],
-      "Remove": [
-        ""
-      ],
-      "Cancel": [
-        ""
-      ],
-      "Manage stock": [
-        ""
-      ],
-      "Infinite": [
-        ""
-      ],
+        "La imagen debe ser mas chica que 1 MB",
+      ],
+      Country: ["País"],
+      Address: ["Dirección"],
+      "Building number": ["Número de edificio"],
+      "Building name": ["Nombre de edificio"],
+      Street: ["Calle"],
+      "Post code": ["Código postal"],
+      "Town location": ["Ubicación de ciudad"],
+      Town: ["Ciudad"],
+      District: ["Distrito"],
+      "Country subdivision": ["Provincia"],
+      "Product id": ["Id de producto"],
+      Description: ["Descripcion"],
+      Name: ["Nombre"],
+      "loading...": ["Cargando..."],
+      "no products found": ["No se encontraron productos"],
+      "no results": ["Sin resultados"],
+      Deleting: ["Borrando"],
+      Changing: ["Cambiando"],
+      "Manage token": ["Administrar token"],
+      Update: ["Actualizar"],
+      Remove: ["Eliminar"],
+      Cancel: ["Cancelar"],
+      "Manage stock": ["Administrar stock"],
+      Infinite: ["Inifinito"],
       "lost cannot be greater that current + incoming (max %1$s)": [
-        ""
+        "no puede ser mayor al stock actual %1$s",
       ],
       "current stock will change from %1$s to %2$s": [
-        ""
-      ],
-      "current stock will stay at %1$s": [
-        ""
-      ],
-      "Incoming": [
-        ""
-      ],
-      "Lost": [
-        ""
-      ],
-      "Current": [
-        ""
-      ],
-      "without stock": [
-        ""
-      ],
-      "Next restock": [
-        ""
-      ],
-      "Delivery address": [
-        ""
-      ],
-      "this product has no taxes": [
-        ""
-      ],
-      "Amount": [
-        ""
-      ],
+        "stock actual cambiará desde %1$s a %2$s",
+      ],
+      "current stock will stay at %1$s": ["stock actual seguirá en %1$s"],
+      Incoming: ["Ingresando"],
+      Lost: ["Perdido"],
+      Current: ["Actual"],
+      "without stock": ["sin stock"],
+      "Next restock": ["Próximo reabastecimiento"],
+      "Delivery address": ["Dirección de entrega"],
+      "this product has no taxes": ["este producto no tiene impuestos"],
+      Amount: ["Monto"],
       "currency and value separated with colon": [
-        ""
-      ],
-      "Add": [
-        ""
-      ],
-      "Instance": [
-        ""
-      ],
-      "Settings": [
-        ""
-      ],
-      "Orders": [
-        ""
-      ],
-      "Products": [
-        ""
-      ],
-      "Transfers": [
-        ""
-      ],
-      "Connection": [
-        ""
-      ],
-      "Instances": [
-        ""
-      ],
-      "New": [
-        ""
-      ],
-      "List": [
-        ""
-      ],
-      "Log out": [
-        ""
-      ],
-      "Clear": [
-        ""
-      ],
-      "should be the same": [
-        ""
-      ],
-      "cannot be the same as before": [
-        ""
-      ],
-      "You are updating the authorization token from instance %1$s with id 
%2$s": [
-        ""
-      ],
-      "Old token": [
-        ""
-      ],
-      "New token": [
-        ""
-      ],
+        "Moneda y valor separado por dos puntos",
+      ],
+      Add: ["Agregar"],
+      Instance: ["Instancia"],
+      Settings: ["Configuración"],
+      Orders: ["Ordenes"],
+      Products: ["Productos"],
+      Transfers: ["Transferencias"],
+      Connection: ["Conexión"],
+      Instances: ["Instancias"],
+      New: ["Nuevo"],
+      List: ["Lista"],
+      "Log out": ["Salir"],
+      Clear: ["Limpiar"],
+      "should be the same": ["deberían ser iguales"],
+      "cannot be the same as before": ["no puede ser igual al anterior"],
+      "You are updating the authorization token from instance %1$s with id 
%2$s":
+        [
+          "Está actualizando el token de autorización para la instancia %1$s 
con id %2$s",
+        ],
+      "Old token": ["Viejo token"],
+      "New token": ["Nuevo token"],
       "Clearing the auth token will mean public access to the instance": [
-        ""
-      ],
-      "ID": [
-        ""
-      ],
-      "Image": [
-        ""
-      ],
-      "Unit": [
-        ""
-      ],
-      "Price": [
-        ""
-      ],
-      "Stock": [
-        ""
-      ],
-      "Taxes": [
-        ""
-      ],
-      "Server not found": [
-        ""
-      ],
-      "Couldn't access the server": [
-        ""
-      ],
-      "Got message %1$s from %2$s": [
-        ""
-      ],
-      "Unexpected Error": [
-        ""
-      ],
-      "Auth token": [
-        ""
-      ],
-      "Account address": [
-        ""
-      ],
-      "Default max deposit fee": [
-        ""
-      ],
-      "Default max wire fee": [
-        ""
-      ],
+        "Limpiar el token de autorización significa acceso publico a la 
instancia",
+      ],
+      ID: ["ID"],
+      Image: ["Imagen"],
+      Unit: ["Unidad"],
+      Price: ["Precio"],
+      Stock: ["Stock"],
+      Taxes: ["Impuesto"],
+      "Server not found": ["Servidor no encontrado"],
+      "Couldn't access the server": ["No se pudo aceder al servidor"],
+      "Got message %1$s from %2$s": ["Recivimos el mensaje %1$s desde %2$s"],
+      "Unexpected Error": ["Error inesperado"],
+      "Auth token": ["Token de autorización"],
+      "Account address": ["Dirección de cuenta"],
+      "Default max deposit fee": ["Impuesto máximo de deposito por omisión"],
+      "Default max wire fee": ["Impuesto máximo de transferencia por omisión"],
       "Default wire fee amortization": [
-        ""
-      ],
-      "Jurisdiction": [
-        ""
-      ],
-      "Default pay delay": [
-        ""
-      ],
-      "Default wire transfer delay": [
-        ""
-      ],
-      "could not create instance": [
-        ""
-      ],
-      "Delete": [
-        ""
-      ],
-      "Edit": [
-        ""
-      ],
+        "Amortización de impuesto de transferencia por omisión",
+      ],
+      Jurisdiction: ["Jurisdicción"],
+      "Default pay delay": ["Retrazo de pago por omisión"],
+      "Default wire transfer delay": ["Retrazo de transferencia por omisión"],
+      "could not create instance": ["no se pudo crear la instancia"],
+      Delete: ["Borrando"],
+      Edit: [""],
       "There is no instances yet, add more pressing the + sign": [
-        ""
-      ],
-      "Inventory products": [
-        ""
-      ],
-      "Total price": [
-        ""
-      ],
-      "Total tax": [
-        ""
-      ],
-      "Order price": [
-        ""
-      ],
-      "Net": [
-        ""
-      ],
-      "Summary": [
-        ""
-      ],
-      "Payments options": [
-        ""
-      ],
-      "Auto refund deadline": [
-        ""
-      ],
-      "Refund deadline": [
-        ""
-      ],
-      "Pay deadline": [
-        ""
-      ],
-      "Delivery date": [
-        ""
-      ],
-      "Location": [
-        ""
-      ],
-      "Max fee": [
-        ""
-      ],
-      "Max wire fee": [
-        ""
-      ],
-      "Wire fee amortization": [
-        ""
-      ],
-      "Fullfilment url": [
-        ""
-      ],
-      "Extra information": [
-        ""
-      ],
-      "select a product first": [
-        ""
-      ],
-      "should be greater than 0": [
-        ""
-      ],
-      "cannot be greater than current stock and quantity previously added. 
max: %1$s": [
-        ""
-      ],
+        "No hay instancias todavían, agregue mas presionando el signo +",
+      ],
+      "Inventory products": ["Productos de inventario"],
+      "Total price": ["Precio total"],
+      "Total tax": ["Impuesto total"],
+      "Order price": ["Precio de la orden"],
+      Net: ["Neto"],
+      Summary: ["Resumen"],
+      "Payments options": ["Opciones de pago"],
+      "Auto refund deadline": ["Plazo de reembolso automático"],
+      "Refund deadline": ["Plazo de reembolso"],
+      "Pay deadline": ["Plazo de pago"],
+      "Delivery date": ["Fecha de entrega"],
+      Location: ["Ubicación"],
+      "Max fee": ["Impuesto máximo"],
+      "Max wire fee": ["Impuesto de transferencia máximo"],
+      "Wire fee amortization": ["Amortización de impuesto de transferencia"],
+      "Fullfilment url": ["URL de completitud"],
+      "Extra information": ["Información extra"],
+      "select a product first": ["seleccione un producto primero"],
+      "should be greater than 0": ["La imagen debe ser mas chica que 1 MB"],
+      "cannot be greater than current stock and quantity previously added. 
max: %1$s":
+        [
+          "no puede ser mayor al stock actual y la cantidad previamente 
agregada. máximo: %1$s",
+        ],
       "cannot be greater than current stock %1$s": [
-        ""
-      ],
-      "Quantity": [
-        ""
-      ],
-      "Order": [
-        ""
-      ],
-      "claimed": [
-        ""
-      ],
-      "copy url": [
-        ""
-      ],
-      "pay at": [
-        ""
-      ],
-      "created at": [
-        ""
-      ],
-      "Timeline": [
-        ""
-      ],
-      "Payment details": [
-        ""
-      ],
-      "Order status": [
-        ""
-      ],
-      "Product list": [
-        ""
-      ],
-      "paid": [
-        ""
-      ],
-      "wired": [
-        ""
-      ],
-      "refunded": [
-        ""
-      ],
-      "refund": [
-        ""
-      ],
-      "Refunded amount": [
-        ""
-      ],
-      "Deposit total": [
-        ""
-      ],
-      "unpaid": [
-        ""
-      ],
-      "Order status URL": [
-        ""
-      ],
-      "Pay URI": [
-        ""
-      ],
-      "Unknown order status. This is an error, please contact the 
administrator.": [
-        ""
-      ],
-      "refund created successfully": [
-        ""
-      ],
-      "could not create the refund": [
-        ""
-      ],
-      "load newer orders": [
-        ""
-      ],
-      "Date": [
-        ""
-      ],
-      "Refund": [
-        ""
-      ],
-      "load older orders": [
-        ""
-      ],
-      "No orders has been found": [
-        ""
-      ],
-      "date": [
-        ""
-      ],
-      "amount": [
-        ""
-      ],
-      "reason": [
-        ""
-      ],
-      "Max refundable:": [
-        ""
-      ],
-      "Reason": [
-        ""
-      ],
-      "duplicated": [
-        ""
-      ],
-      "requested by the customer": [
-        ""
-      ],
-      "other": [
-        ""
-      ],
-      "go to order id": [
-        ""
-      ],
-      "Paid": [
-        ""
-      ],
-      "Refunded": [
-        ""
-      ],
-      "Not wired": [
-        ""
-      ],
-      "All": [
-        ""
-      ],
-      "could not create product": [
-        ""
-      ],
-      "Sell": [
-        ""
-      ],
-      "Profit": [
-        ""
-      ],
-      "Sold": [
-        ""
-      ],
-      "product updated successfully": [
-        ""
-      ],
-      "could not update the product": [
-        ""
-      ],
-      "product delete successfully": [
-        ""
-      ],
-      "could not delete the product": [
-        ""
-      ],
-      "Tips": [
-        ""
-      ],
-      "Committed amount": [
-        ""
-      ],
-      "Exchange initial amount": [
-        ""
-      ],
-      "Merchant initial amount": [
-        ""
-      ],
+        "no puede ser mayor al stock actual %1$s",
+      ],
+      Quantity: ["Cantidad"],
+      Order: ["Orden"],
+      claimed: ["reclamado"],
+      "copy url": ["copiar url"],
+      "pay at": ["pagar en"],
+      "created at": ["creado"],
+      Timeline: ["Cronología"],
+      "Payment details": ["Detalles de pago"],
+      "Order status": ["Estado de orden"],
+      "Product list": ["Lista de producto"],
+      paid: ["pagados"],
+      wired: ["transferido"],
+      refunded: ["reembolzado"],
+      refund: ["reembolzar"],
+      "Refunded amount": ["Monto reembolzado"],
+      "Deposit total": ["Total depositado"],
+      unpaid: ["impago"],
+      "Order status URL": ["URL de estado de orden"],
+      "Pay URI": ["URI de pago"],
+      "Unknown order status. This is an error, please contact the 
administrator.":
+        [
+          "Estado de orden desconocido. Esto es un error, por favor contacte a 
su administrador",
+        ],
+      "refund created successfully": ["reembolzo creado satisfactoriamente"],
+      "could not create the refund": ["No se pudo aceder al servidor"],
+      "load newer orders": ["cargar nuevas ordenes"],
+      Date: ["Fecha"],
+      Refund: ["Reembolzar"],
+      "load older orders": ["cargar viejas ordenes"],
+      "No orders has been found": ["No se enconraron ordenes"],
+      date: ["fecha"],
+      amount: ["monto"],
+      reason: ["razón"],
+      "Max refundable:": ["Máximo reembolzable:"],
+      Reason: ["Razón"],
+      duplicated: ["duplicado"],
+      "requested by the customer": ["pedido por el consumidor"],
+      other: ["otro"],
+      "go to order id": ["ir a id de orden"],
+      Paid: ["Pagado"],
+      Refunded: ["Reembolzado"],
+      "Not wired": ["No transferido"],
+      All: ["Todo"],
+      "could not create product": ["no se pudo crear el producto"],
+      Sell: ["Venta"],
+      Profit: ["Ganancia"],
+      Sold: ["Vendido"],
+      "product updated successfully": ["producto actualizado correctamente"],
+      "could not update the product": ["no se pudo actualizar el producto"],
+      "product delete successfully": ["producto fue eliminado correctamente"],
+      "could not delete the product": ["no se pudo eliminar el producto"],
+      Tips: ["Propinas"],
+      "Committed amount": [""],
+      "Exchange initial amount": [""],
+      "Merchant initial amount": [""],
       "There is no tips yet, add more pressing the + sign": [
-        ""
-      ],
-      "cannot be empty": [
-        ""
-      ],
-      "check the id, doest look valid": [
-        ""
+        "No hay propinas todavía, agregar mas presionando el signo +",
       ],
+      "cannot be empty": ["no puede ser vacío"],
+      "check the id, doest look valid": ["verificar el id, no parece válido"],
       "should have 52 characters, current %1$s": [
-        ""
+        "debería tener 52 caracteres, actualmente %1$s",
       ],
       "URL doesn't have the right format": [
-        ""
-      ],
-      "Transfer ID": [
-        ""
-      ],
-      "Account Address": [
-        ""
-      ],
-      "Exchange URL": [
-        ""
-      ],
-      "could not inform transfer": [
-        ""
-      ],
-      "load newer transfers": [
-        ""
-      ],
-      "Credit": [
-        ""
-      ],
-      "Confirmed": [
-        ""
-      ],
-      "Verified": [
-        ""
-      ],
-      "Executed at": [
-        ""
-      ],
-      "yes": [
-        ""
-      ],
-      "no": [
-        ""
-      ],
-      "unknown": [
-        ""
-      ],
-      "load older transfers": [
-        ""
-      ],
+        "La URL no tiene el formato correcto",
+      ],
+      "Transfer ID": ["Transferencias"],
+      "Account Address": ["Dirección de cuenta"],
+      "Exchange URL": ["URL del Exchange"],
+      "could not inform transfer": ["no se pudo crear la instancia"],
+      "load newer transfers": ["cargar nuevas ordenes"],
+      Credit: ["Crédito"],
+      Confirmed: ["Confirmar"],
+      Verified: ["Verificado"],
+      "Executed at": ["creado"],
+      yes: ["si"],
+      no: ["no"],
+      unknown: ["desconocido"],
+      "load older transfers": ["cargar viejas transferencias"],
       "There is no transfer yet, add more pressing the + sign": [
-        ""
-      ]
-    }
-  }
+        "No hay transferencias todavía, agregar mas presionando el signo +",
+      ],
+    },
+  },
+};
+
+strings["fr"] = {
+  domain: "messages",
+  locale_data: {
+    messages: {
+      "": {
+        domain: "messages",
+        plural_forms: "nplurals=2; plural=(n != 1);",
+        lang: "",
+      },
+      "Access denied": [""],
+      "Check your token is valid": [""],
+      "Couldn't access the server.": [""],
+      "Could not infer instance id from url %1$s": [""],
+      "HTTP status #%1$s: Server reported a problem": [""],
+      'Got message: "%1$s" from: %2$s': [""],
+      "No default instance": [""],
+      "in order to use merchant backoffice, you should create the default 
instance":
+        [""],
+      "Server reported a problem: HTTP status #%1$s": [""],
+      "Got message: %1$s from: %2$s": [""],
+      "Login required": [""],
+      'Please enter your auth token. Token should have "secret-token:" and 
start with Bearer or ApiKey':
+        [""],
+      Confirm: [""],
+      "The value %1$s is invalid for a payment url": [""],
+      "pick a date": [""],
+      clear: [""],
+      never: [""],
+      "Image should be smaller than 1 MB": [""],
+      Country: [""],
+      Address: [""],
+      "Building number": [""],
+      "Building name": [""],
+      Street: [""],
+      "Post code": [""],
+      "Town location": [""],
+      Town: [""],
+      District: [""],
+      "Country subdivision": [""],
+      "Product id": [""],
+      Description: [""],
+      Name: [""],
+      "loading...": [""],
+      "no products found": [""],
+      "no results": [""],
+      Deleting: [""],
+      Changing: [""],
+      "Manage token": [""],
+      Update: [""],
+      Remove: [""],
+      Cancel: [""],
+      "Manage stock": [""],
+      Infinite: [""],
+      "lost cannot be greater that current + incoming (max %1$s)": [""],
+      "current stock will change from %1$s to %2$s": [""],
+      "current stock will stay at %1$s": [""],
+      Incoming: [""],
+      Lost: [""],
+      Current: [""],
+      "without stock": [""],
+      "Next restock": [""],
+      "Delivery address": [""],
+      "this product has no taxes": [""],
+      Amount: [""],
+      "currency and value separated with colon": [""],
+      Add: [""],
+      Instance: [""],
+      Settings: [""],
+      Orders: [""],
+      Products: [""],
+      Transfers: [""],
+      Connection: [""],
+      Instances: [""],
+      New: [""],
+      List: [""],
+      "Log out": [""],
+      Clear: [""],
+      "should be the same": [""],
+      "cannot be the same as before": [""],
+      "You are updating the authorization token from instance %1$s with id 
%2$s":
+        [""],
+      "Old token": [""],
+      "New token": [""],
+      "Clearing the auth token will mean public access to the instance": [""],
+      ID: [""],
+      Image: [""],
+      Unit: [""],
+      Price: [""],
+      Stock: [""],
+      Taxes: [""],
+      "Server not found": [""],
+      "Couldn't access the server": [""],
+      "Got message %1$s from %2$s": [""],
+      "Unexpected Error": [""],
+      "Auth token": [""],
+      "Account address": [""],
+      "Default max deposit fee": [""],
+      "Default max wire fee": [""],
+      "Default wire fee amortization": [""],
+      Jurisdiction: [""],
+      "Default pay delay": [""],
+      "Default wire transfer delay": [""],
+      "could not create instance": [""],
+      Delete: [""],
+      Edit: [""],
+      "There is no instances yet, add more pressing the + sign": [""],
+      "Inventory products": [""],
+      "Total price": [""],
+      "Total tax": [""],
+      "Order price": [""],
+      Net: [""],
+      Summary: [""],
+      "Payments options": [""],
+      "Auto refund deadline": [""],
+      "Refund deadline": [""],
+      "Pay deadline": [""],
+      "Delivery date": [""],
+      Location: [""],
+      "Max fee": [""],
+      "Max wire fee": [""],
+      "Wire fee amortization": [""],
+      "Fullfilment url": [""],
+      "Extra information": [""],
+      "select a product first": [""],
+      "should be greater than 0": [""],
+      "cannot be greater than current stock and quantity previously added. 
max: %1$s":
+        [""],
+      "cannot be greater than current stock %1$s": [""],
+      Quantity: [""],
+      Order: [""],
+      claimed: [""],
+      "copy url": [""],
+      "pay at": [""],
+      "created at": [""],
+      Timeline: [""],
+      "Payment details": [""],
+      "Order status": [""],
+      "Product list": [""],
+      paid: [""],
+      wired: [""],
+      refunded: [""],
+      refund: [""],
+      "Refunded amount": [""],
+      "Deposit total": [""],
+      unpaid: [""],
+      "Order status URL": [""],
+      "Pay URI": [""],
+      "Unknown order status. This is an error, please contact the 
administrator.":
+        [""],
+      "refund created successfully": [""],
+      "could not create the refund": [""],
+      "load newer orders": [""],
+      Date: [""],
+      Refund: [""],
+      "load older orders": [""],
+      "No orders has been found": [""],
+      date: [""],
+      amount: [""],
+      reason: [""],
+      "Max refundable:": [""],
+      Reason: [""],
+      duplicated: [""],
+      "requested by the customer": [""],
+      other: [""],
+      "go to order id": [""],
+      Paid: [""],
+      Refunded: [""],
+      "Not wired": [""],
+      All: [""],
+      "could not create product": [""],
+      Sell: [""],
+      Profit: [""],
+      Sold: [""],
+      "product updated successfully": [""],
+      "could not update the product": [""],
+      "product delete successfully": [""],
+      "could not delete the product": [""],
+      Tips: [""],
+      "Committed amount": [""],
+      "Exchange initial amount": [""],
+      "Merchant initial amount": [""],
+      "There is no tips yet, add more pressing the + sign": [""],
+      "cannot be empty": [""],
+      "check the id, doest look valid": [""],
+      "should have 52 characters, current %1$s": [""],
+      "URL doesn't have the right format": [""],
+      "Transfer ID": [""],
+      "Account Address": [""],
+      "Exchange URL": [""],
+      "could not inform transfer": [""],
+      "load newer transfers": [""],
+      Credit: [""],
+      Confirmed: [""],
+      Verified: [""],
+      "Executed at": [""],
+      yes: [""],
+      no: [""],
+      unknown: [""],
+      "load older transfers": [""],
+      "There is no transfer yet, add more pressing the + sign": [""],
+    },
+  },
+};
+
+strings["it"] = {
+  domain: "messages",
+  locale_data: {
+    messages: {
+      "": {
+        domain: "messages",
+        plural_forms: "nplurals=2; plural=(n != 1);",
+        lang: "",
+      },
+      "Access denied": [""],
+      "Check your token is valid": [""],
+      "Couldn't access the server.": [""],
+      "Could not infer instance id from url %1$s": [""],
+      "HTTP status #%1$s: Server reported a problem": [""],
+      'Got message: "%1$s" from: %2$s': [""],
+      "No default instance": [""],
+      "in order to use merchant backoffice, you should create the default 
instance":
+        [""],
+      "Server reported a problem: HTTP status #%1$s": [""],
+      "Got message: %1$s from: %2$s": [""],
+      "Login required": [""],
+      'Please enter your auth token. Token should have "secret-token:" and 
start with Bearer or ApiKey':
+        [""],
+      Confirm: [""],
+      "The value %1$s is invalid for a payment url": [""],
+      "pick a date": [""],
+      clear: [""],
+      never: [""],
+      "Image should be smaller than 1 MB": [""],
+      Country: [""],
+      Address: [""],
+      "Building number": [""],
+      "Building name": [""],
+      Street: [""],
+      "Post code": [""],
+      "Town location": [""],
+      Town: [""],
+      District: [""],
+      "Country subdivision": [""],
+      "Product id": [""],
+      Description: [""],
+      Name: [""],
+      "loading...": [""],
+      "no products found": [""],
+      "no results": [""],
+      Deleting: [""],
+      Changing: [""],
+      "Manage token": [""],
+      Update: [""],
+      Remove: [""],
+      Cancel: [""],
+      "Manage stock": [""],
+      Infinite: [""],
+      "lost cannot be greater that current + incoming (max %1$s)": [""],
+      "current stock will change from %1$s to %2$s": [""],
+      "current stock will stay at %1$s": [""],
+      Incoming: [""],
+      Lost: [""],
+      Current: [""],
+      "without stock": [""],
+      "Next restock": [""],
+      "Delivery address": [""],
+      "this product has no taxes": [""],
+      Amount: [""],
+      "currency and value separated with colon": [""],
+      Add: [""],
+      Instance: [""],
+      Settings: [""],
+      Orders: [""],
+      Products: [""],
+      Transfers: [""],
+      Connection: [""],
+      Instances: [""],
+      New: [""],
+      List: [""],
+      "Log out": [""],
+      Clear: [""],
+      "should be the same": [""],
+      "cannot be the same as before": [""],
+      "You are updating the authorization token from instance %1$s with id 
%2$s":
+        [""],
+      "Old token": [""],
+      "New token": [""],
+      "Clearing the auth token will mean public access to the instance": [""],
+      ID: [""],
+      Image: [""],
+      Unit: [""],
+      Price: [""],
+      Stock: [""],
+      Taxes: [""],
+      "Server not found": [""],
+      "Couldn't access the server": [""],
+      "Got message %1$s from %2$s": [""],
+      "Unexpected Error": [""],
+      "Auth token": [""],
+      "Account address": [""],
+      "Default max deposit fee": [""],
+      "Default max wire fee": [""],
+      "Default wire fee amortization": [""],
+      Jurisdiction: [""],
+      "Default pay delay": [""],
+      "Default wire transfer delay": [""],
+      "could not create instance": [""],
+      Delete: [""],
+      Edit: [""],
+      "There is no instances yet, add more pressing the + sign": [""],
+      "Inventory products": [""],
+      "Total price": [""],
+      "Total tax": [""],
+      "Order price": [""],
+      Net: [""],
+      Summary: [""],
+      "Payments options": [""],
+      "Auto refund deadline": [""],
+      "Refund deadline": [""],
+      "Pay deadline": [""],
+      "Delivery date": [""],
+      Location: [""],
+      "Max fee": [""],
+      "Max wire fee": [""],
+      "Wire fee amortization": [""],
+      "Fullfilment url": [""],
+      "Extra information": [""],
+      "select a product first": [""],
+      "should be greater than 0": [""],
+      "cannot be greater than current stock and quantity previously added. 
max: %1$s":
+        [""],
+      "cannot be greater than current stock %1$s": [""],
+      Quantity: [""],
+      Order: [""],
+      claimed: [""],
+      "copy url": [""],
+      "pay at": [""],
+      "created at": [""],
+      Timeline: [""],
+      "Payment details": [""],
+      "Order status": [""],
+      "Product list": [""],
+      paid: [""],
+      wired: [""],
+      refunded: [""],
+      refund: [""],
+      "Refunded amount": [""],
+      "Deposit total": [""],
+      unpaid: [""],
+      "Order status URL": [""],
+      "Pay URI": [""],
+      "Unknown order status. This is an error, please contact the 
administrator.":
+        [""],
+      "refund created successfully": [""],
+      "could not create the refund": [""],
+      "load newer orders": [""],
+      Date: [""],
+      Refund: [""],
+      "load older orders": [""],
+      "No orders has been found": [""],
+      date: [""],
+      amount: [""],
+      reason: [""],
+      "Max refundable:": [""],
+      Reason: [""],
+      duplicated: [""],
+      "requested by the customer": [""],
+      other: [""],
+      "go to order id": [""],
+      Paid: [""],
+      Refunded: [""],
+      "Not wired": [""],
+      All: [""],
+      "could not create product": [""],
+      Sell: [""],
+      Profit: [""],
+      Sold: [""],
+      "product updated successfully": [""],
+      "could not update the product": [""],
+      "product delete successfully": [""],
+      "could not delete the product": [""],
+      Tips: [""],
+      "Committed amount": [""],
+      "Exchange initial amount": [""],
+      "Merchant initial amount": [""],
+      "There is no tips yet, add more pressing the + sign": [""],
+      "cannot be empty": [""],
+      "check the id, doest look valid": [""],
+      "should have 52 characters, current %1$s": [""],
+      "URL doesn't have the right format": [""],
+      "Transfer ID": [""],
+      "Account Address": [""],
+      "Exchange URL": [""],
+      "could not inform transfer": [""],
+      "load newer transfers": [""],
+      Credit: [""],
+      Confirmed: [""],
+      Verified: [""],
+      "Executed at": [""],
+      yes: [""],
+      no: [""],
+      unknown: [""],
+      "load older transfers": [""],
+      "There is no transfer yet, add more pressing the + sign": [""],
+    },
+  },
 };
 
+strings["sv"] = {
+  domain: "messages",
+  locale_data: {
+    messages: {
+      "": {
+        domain: "messages",
+        plural_forms: "nplurals=2; plural=(n != 1);",
+        lang: "",
+      },
+      "Access denied": [""],
+      "Check your token is valid": [""],
+      "Couldn't access the server.": [""],
+      "Could not infer instance id from url %1$s": [""],
+      "HTTP status #%1$s: Server reported a problem": [""],
+      'Got message: "%1$s" from: %2$s': [""],
+      "No default instance": [""],
+      "in order to use merchant backoffice, you should create the default 
instance":
+        [""],
+      "Server reported a problem: HTTP status #%1$s": [""],
+      "Got message: %1$s from: %2$s": [""],
+      "Login required": [""],
+      'Please enter your auth token. Token should have "secret-token:" and 
start with Bearer or ApiKey':
+        [""],
+      Confirm: [""],
+      "The value %1$s is invalid for a payment url": [""],
+      "pick a date": [""],
+      clear: [""],
+      never: [""],
+      "Image should be smaller than 1 MB": [""],
+      Country: [""],
+      Address: [""],
+      "Building number": [""],
+      "Building name": [""],
+      Street: [""],
+      "Post code": [""],
+      "Town location": [""],
+      Town: [""],
+      District: [""],
+      "Country subdivision": [""],
+      "Product id": [""],
+      Description: [""],
+      Name: [""],
+      "loading...": [""],
+      "no products found": [""],
+      "no results": [""],
+      Deleting: [""],
+      Changing: [""],
+      "Manage token": [""],
+      Update: [""],
+      Remove: [""],
+      Cancel: [""],
+      "Manage stock": [""],
+      Infinite: [""],
+      "lost cannot be greater that current + incoming (max %1$s)": [""],
+      "current stock will change from %1$s to %2$s": [""],
+      "current stock will stay at %1$s": [""],
+      Incoming: [""],
+      Lost: [""],
+      Current: [""],
+      "without stock": [""],
+      "Next restock": [""],
+      "Delivery address": [""],
+      "this product has no taxes": [""],
+      Amount: [""],
+      "currency and value separated with colon": [""],
+      Add: [""],
+      Instance: [""],
+      Settings: [""],
+      Orders: [""],
+      Products: [""],
+      Transfers: [""],
+      Connection: [""],
+      Instances: [""],
+      New: [""],
+      List: [""],
+      "Log out": [""],
+      Clear: [""],
+      "should be the same": [""],
+      "cannot be the same as before": [""],
+      "You are updating the authorization token from instance %1$s with id 
%2$s":
+        [""],
+      "Old token": [""],
+      "New token": [""],
+      "Clearing the auth token will mean public access to the instance": [""],
+      ID: [""],
+      Image: [""],
+      Unit: [""],
+      Price: [""],
+      Stock: [""],
+      Taxes: [""],
+      "Server not found": [""],
+      "Couldn't access the server": [""],
+      "Got message %1$s from %2$s": [""],
+      "Unexpected Error": [""],
+      "Auth token": [""],
+      "Account address": [""],
+      "Default max deposit fee": [""],
+      "Default max wire fee": [""],
+      "Default wire fee amortization": [""],
+      Jurisdiction: [""],
+      "Default pay delay": [""],
+      "Default wire transfer delay": [""],
+      "could not create instance": [""],
+      Delete: [""],
+      Edit: [""],
+      "There is no instances yet, add more pressing the + sign": [""],
+      "Inventory products": [""],
+      "Total price": [""],
+      "Total tax": [""],
+      "Order price": [""],
+      Net: [""],
+      Summary: [""],
+      "Payments options": [""],
+      "Auto refund deadline": [""],
+      "Refund deadline": [""],
+      "Pay deadline": [""],
+      "Delivery date": [""],
+      Location: [""],
+      "Max fee": [""],
+      "Max wire fee": [""],
+      "Wire fee amortization": [""],
+      "Fullfilment url": [""],
+      "Extra information": [""],
+      "select a product first": [""],
+      "should be greater than 0": [""],
+      "cannot be greater than current stock and quantity previously added. 
max: %1$s":
+        [""],
+      "cannot be greater than current stock %1$s": [""],
+      Quantity: [""],
+      Order: [""],
+      claimed: [""],
+      "copy url": [""],
+      "pay at": [""],
+      "created at": [""],
+      Timeline: [""],
+      "Payment details": [""],
+      "Order status": [""],
+      "Product list": [""],
+      paid: [""],
+      wired: [""],
+      refunded: [""],
+      refund: [""],
+      "Refunded amount": [""],
+      "Deposit total": [""],
+      unpaid: [""],
+      "Order status URL": [""],
+      "Pay URI": [""],
+      "Unknown order status. This is an error, please contact the 
administrator.":
+        [""],
+      "refund created successfully": [""],
+      "could not create the refund": [""],
+      "load newer orders": [""],
+      Date: [""],
+      Refund: [""],
+      "load older orders": [""],
+      "No orders has been found": [""],
+      date: [""],
+      amount: [""],
+      reason: [""],
+      "Max refundable:": [""],
+      Reason: [""],
+      duplicated: [""],
+      "requested by the customer": [""],
+      other: [""],
+      "go to order id": [""],
+      Paid: [""],
+      Refunded: [""],
+      "Not wired": [""],
+      All: [""],
+      "could not create product": [""],
+      Sell: [""],
+      Profit: [""],
+      Sold: [""],
+      "product updated successfully": [""],
+      "could not update the product": [""],
+      "product delete successfully": [""],
+      "could not delete the product": [""],
+      Tips: [""],
+      "Committed amount": [""],
+      "Exchange initial amount": [""],
+      "Merchant initial amount": [""],
+      "There is no tips yet, add more pressing the + sign": [""],
+      "cannot be empty": [""],
+      "check the id, doest look valid": [""],
+      "should have 52 characters, current %1$s": [""],
+      "URL doesn't have the right format": [""],
+      "Transfer ID": [""],
+      "Account Address": [""],
+      "Exchange URL": [""],
+      "could not inform transfer": [""],
+      "load newer transfers": [""],
+      Credit: [""],
+      Confirmed: [""],
+      Verified: [""],
+      "Executed at": [""],
+      yes: [""],
+      no: [""],
+      unknown: [""],
+      "load older transfers": [""],
+      "There is no transfer yet, add more pressing the + sign": [""],
+    },
+  },
+};
diff --git a/packages/merchant-backoffice-ui/src/index.html 
b/packages/merchant-backoffice-ui/src/index.html
index 5f7080df8..3e027f056 100644
--- a/packages/merchant-backoffice-ui/src/index.html
+++ b/packages/merchant-backoffice-ui/src/index.html
@@ -16,7 +16,10 @@
  @author Sebastian Javier Marchano
 -->
 <!DOCTYPE html>
-<html lang="en" class="has-aside-left has-aside-mobile-transition 
has-navbar-fixed-top has-aside-expanded">
+<html
+  lang="en"
+  class="has-aside-left has-aside-mobile-transition has-navbar-fixed-top 
has-aside-expanded"
+>
   <head>
     <meta charset="utf-8" />
     <meta http-equiv="content-type" content="text/html; charset=utf-8" />
@@ -24,8 +27,11 @@
     <meta name="mobile-web-app-capable" content="yes" />
     <meta name="apple-mobile-web-app-capable" content="yes" />
 
-               <link rel="icon" 
href="data:;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAD///////////////////////////////////////////////////////////////////////////////////////////////////7//v38//78/P/+/fz//vz7///+/v/+/f3//vz7///+/v/+/fz//v38///////////////////////+/v3///7+/////////////////////////////////////////////////////////v3//v79///////+/v3///////r28v/ct5//06SG/9Gffv/Xqo7/7N/V/9e2nf/bsJb/6uDW/9Sskf/euKH/+/j2///////+/v3//////+3azv+/eE3/2rWd/9Kkhv/Vr5
 [...]
-               <link rel="shortcut icon" href="data:image/x-icon;," 
type="image/x-icon" />
+    <link
+      rel="icon"
+      
href="data:;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAD///////////////////////////////////////////////////////////////////////////////////////////////////7//v38//78/P/+/fz//vz7///+/v/+/f3//vz7///+/v/+/fz//v38///////////////////////+/v3///7+/////////////////////////////////////////////////////////v3//v79///////+/v3///////r28v/ct5//06SG/9Gffv/Xqo7/7N/V/9e2nf/bsJb/6uDW/9Sskf/euKH/+/j2///////+/v3//////+3azv+/eE3/2rWd/9Kkhv/Vr5T/48i2/8J+VP/
 [...]
+    />
+    <link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon" />
     <title>Merchant Backoffice</title>
     <!-- Optional customization script.  -->
     <script src="merchant-backoffice-ui-settings.js"></script>
diff --git a/packages/merchant-backoffice-ui/src/index.tsx 
b/packages/merchant-backoffice-ui/src/index.tsx
index c60471099..87ed8e26f 100644
--- a/packages/merchant-backoffice-ui/src/index.tsx
+++ b/packages/merchant-backoffice-ui/src/index.tsx
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import {Application} from "./Application.js";
+import { Application } from "./Application.js";
 
 import { h, render } from "preact";
 import "./scss/main.scss";
diff --git a/packages/merchant-backoffice-ui/src/manifest.json 
b/packages/merchant-backoffice-ui/src/manifest.json
index d0d3ea463..2c3de2339 100644
--- a/packages/merchant-backoffice-ui/src/manifest.json
+++ b/packages/merchant-backoffice-ui/src/manifest.json
@@ -18,4 +18,4 @@
       "sizes": "512x512"
     }
   ]
-}
\ No newline at end of file
+}
diff --git 
a/packages/merchant-backoffice-ui/src/paths/admin/create/Create.stories.tsx 
b/packages/merchant-backoffice-ui/src/paths/admin/create/Create.stories.tsx
index cb62b0224..052d61544 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/create/Create.stories.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/create/Create.stories.tsx
@@ -15,31 +15,32 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode, FunctionalComponent } from 'preact';
+import { h, VNode, FunctionalComponent } from "preact";
 import { CreatePage as TestedComponent } from "./CreatePage.js";
 
-
 export default {
-  title: 'Pages/Instance/Create',
+  title: "Pages/Instance/Create",
   component: TestedComponent,
   argTypes: {
-    onCreate: { action: 'onCreate' },
-    goBack: { action: 'goBack' },
-  }
+    onCreate: { action: "onCreate" },
+    goBack: { action: "goBack" },
+  },
 };
 
-function createExample<Props>(Component: FunctionalComponent<Props>, props: 
Partial<Props>) {
-  const r = (args: any) => <Component {...args} />
-  r.args = props
-  return r
+function createExample<Props>(
+  Component: FunctionalComponent<Props>,
+  props: Partial<Props>,
+) {
+  const r = (args: any) => <Component {...args} />;
+  r.args = props;
+  return r;
 }
 
-export const Example = createExample(TestedComponent, {
-});
+export const Example = createExample(TestedComponent, {});
 // export const Example = (a: any): VNode => <CreatePage {...a} />;
 // Example.args = {
 //   isLoading: false
diff --git 
a/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx 
b/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx
index 089d4ea80..6fcabb18b 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/create/CreatePage.tsx
@@ -76,7 +76,7 @@ export function CreatePage({ onCreate, onBack, forceId }: 
Props): VNode {
         : undefinedIfEmpty(
             value.payto_uris.map((p) => {
               return !PAYTO_REGEX.test(p) ? i18n`is not valid` : undefined;
-            })
+            }),
           ),
     default_max_deposit_fee: !value.default_max_deposit_fee
       ? i18n`required`
@@ -115,7 +115,7 @@ export function CreatePage({ onCreate, onBack, forceId }: 
Props): VNode {
   };
 
   const hasErrors = Object.keys(errors).some(
-    (k) => (errors as any)[k] !== undefined
+    (k) => (errors as any)[k] !== undefined,
   );
 
   const submit = (): Promise<void> => {
diff --git 
a/packages/merchant-backoffice-ui/src/paths/admin/create/InstanceCreatedSuccessfully.tsx
 
b/packages/merchant-backoffice-ui/src/paths/admin/create/InstanceCreatedSuccessfully.tsx
index fde2410e9..c620c6482 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/admin/create/InstanceCreatedSuccessfully.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/admin/create/InstanceCreatedSuccessfully.tsx
@@ -14,52 +14,61 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { h, VNode } from "preact";
 import { CreatedSuccessfully } from 
"../../../components/notifications/CreatedSuccessfully.js";
 import { Entity } from "./index.js";
 
-export function InstanceCreatedSuccessfully({ entity, onConfirm }: { entity: 
Entity; onConfirm: () => void; }): VNode {
-  return <CreatedSuccessfully onConfirm={onConfirm}>
-    <div class="field is-horizontal">
-      <div class="field-label is-normal">
-        <label class="label">ID</label>
-      </div>
-      <div class="field-body is-flex-grow-3">
-        <div class="field">
-          <p class="control">
-            <input class="input" readonly value={entity.id} />
-          </p>
+export function InstanceCreatedSuccessfully({
+  entity,
+  onConfirm,
+}: {
+  entity: Entity;
+  onConfirm: () => void;
+}): VNode {
+  return (
+    <CreatedSuccessfully onConfirm={onConfirm}>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label class="label">ID</label>
         </div>
-      </div>
-    </div>
-    <div class="field is-horizontal">
-      <div class="field-label is-normal">
-        <label class="label">Business Name</label>
-      </div>
-      <div class="field-body is-flex-grow-3">
-        <div class="field">
-          <p class="control">
-            <input class="input" readonly value={entity.name} />
-          </p>
+        <div class="field-body is-flex-grow-3">
+          <div class="field">
+            <p class="control">
+              <input class="input" readonly value={entity.id} />
+            </p>
+          </div>
         </div>
       </div>
-    </div>
-    <div class="field is-horizontal">
-      <div class="field-label is-normal">
-        <label class="label">Access token</label>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label class="label">Business Name</label>
+        </div>
+        <div class="field-body is-flex-grow-3">
+          <div class="field">
+            <p class="control">
+              <input class="input" readonly value={entity.name} />
+            </p>
+          </div>
+        </div>
       </div>
-      <div class="field-body is-flex-grow-3">
-        <div class="field">
-          <p class="control">
-            {entity.auth.method === 'external' && 'external'}
-            {entity.auth.method === 'token' &&
-              <input class="input" readonly value={entity.auth.token} />}
-          </p>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label class="label">Access token</label>
+        </div>
+        <div class="field-body is-flex-grow-3">
+          <div class="field">
+            <p class="control">
+              {entity.auth.method === "external" && "external"}
+              {entity.auth.method === "token" && (
+                <input class="input" readonly value={entity.auth.token} />
+              )}
+            </p>
+          </div>
         </div>
       </div>
-    </div>
-  </CreatedSuccessfully>;
+    </CreatedSuccessfully>
+  );
 }
diff --git a/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx
index 8e83b75ff..ed2f3f068 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx
@@ -54,7 +54,7 @@ export default function Create({ onBack, onConfirm, forceId 
}: Props): VNode {
         onBack={onBack}
         forceId={forceId}
         onCreate={(
-          d: MerchantBackend.Instances.InstanceConfigurationMessage
+          d: MerchantBackend.Instances.InstanceConfigurationMessage,
         ) => {
           return createInstance(d)
             .then(() => {
diff --git 
a/packages/merchant-backoffice-ui/src/paths/admin/list/TableActive.tsx 
b/packages/merchant-backoffice-ui/src/paths/admin/list/TableActive.tsx
index 8f2829112..546f34f3a 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/list/TableActive.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/list/TableActive.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { h, VNode } from "preact";
 import { StateUpdater, useEffect, useState } from "preact/hooks";
@@ -34,57 +34,96 @@ interface Props {
   setInstanceName: (s: string) => void;
 }
 
-export function CardTable({ instances, onCreate, onUpdate, onPurge, 
setInstanceName, onDelete, selected }: Props): VNode {
+export function CardTable({
+  instances,
+  onCreate,
+  onUpdate,
+  onPurge,
+  setInstanceName,
+  onDelete,
+  selected,
+}: Props): VNode {
   const [actionQueue, actionQueueHandler] = useState<Actions[]>([]);
-  const [rowSelection, rowSelectionHandler] = useState<string[]>([])
+  const [rowSelection, rowSelectionHandler] = useState<string[]>([]);
 
   useEffect(() => {
-    if (actionQueue.length > 0 && !selected && actionQueue[0].type == 
'DELETE') {
-      onDelete(actionQueue[0].element)
-      actionQueueHandler(actionQueue.slice(1))
+    if (
+      actionQueue.length > 0 &&
+      !selected &&
+      actionQueue[0].type == "DELETE"
+    ) {
+      onDelete(actionQueue[0].element);
+      actionQueueHandler(actionQueue.slice(1));
     }
-  }, [actionQueue, selected, onDelete])
+  }, [actionQueue, selected, onDelete]);
 
   useEffect(() => {
-    if (actionQueue.length > 0 && !selected && actionQueue[0].type == 
'UPDATE') {
-      onUpdate(actionQueue[0].element.id)
-      actionQueueHandler(actionQueue.slice(1))
+    if (
+      actionQueue.length > 0 &&
+      !selected &&
+      actionQueue[0].type == "UPDATE"
+    ) {
+      onUpdate(actionQueue[0].element.id);
+      actionQueueHandler(actionQueue.slice(1));
     }
-  }, [actionQueue, selected, onUpdate])
-
-  const i18n = useTranslator()
+  }, [actionQueue, selected, onUpdate]);
 
-  return <div class="card has-table">
-    <header class="card-header">
-      <p class="card-header-title"><span class="icon"><i class="mdi 
mdi-desktop-mac" /></span><Translate>Instances</Translate></p>
+  const i18n = useTranslator();
 
-      <div class="card-header-icon" aria-label="more options">
+  return (
+    <div class="card has-table">
+      <header class="card-header">
+        <p class="card-header-title">
+          <span class="icon">
+            <i class="mdi mdi-desktop-mac" />
+          </span>
+          <Translate>Instances</Translate>
+        </p>
 
-        <button class={rowSelection.length > 0 ? "button is-danger" : 
"is-hidden"}
-          type="button" onClick={(): void => 
actionQueueHandler(buildActions(instances, rowSelection, 'DELETE'))} >
-          <Translate>Delete</Translate>
-        </button>
-      </div>
-      <div class="card-header-icon" aria-label="more options">
-        <span class="has-tooltip-left" data-tooltip={i18n`add new instance`}>
-          <button class="button is-info" type="button" onClick={onCreate}>
-            <span class="icon is-small" ><i class="mdi mdi-plus mdi-36px" 
/></span>
+        <div class="card-header-icon" aria-label="more options">
+          <button
+            class={rowSelection.length > 0 ? "button is-danger" : "is-hidden"}
+            type="button"
+            onClick={(): void =>
+              actionQueueHandler(
+                buildActions(instances, rowSelection, "DELETE"),
+              )
+            }
+          >
+            <Translate>Delete</Translate>
           </button>
-        </span>
-      </div>
-
-    </header>
-    <div class="card-content">
-      <div class="b-table has-pagination">
-        <div class="table-wrapper has-mobile-cards">
-          {instances.length > 0 ?
-            <Table instances={instances} onPurge={onPurge} onUpdate={onUpdate} 
setInstanceName={setInstanceName} onDelete={onDelete} 
rowSelection={rowSelection} rowSelectionHandler={rowSelectionHandler} /> :
-            <EmptyTable />
-          }
+        </div>
+        <div class="card-header-icon" aria-label="more options">
+          <span class="has-tooltip-left" data-tooltip={i18n`add new instance`}>
+            <button class="button is-info" type="button" onClick={onCreate}>
+              <span class="icon is-small">
+                <i class="mdi mdi-plus mdi-36px" />
+              </span>
+            </button>
+          </span>
+        </div>
+      </header>
+      <div class="card-content">
+        <div class="b-table has-pagination">
+          <div class="table-wrapper has-mobile-cards">
+            {instances.length > 0 ? (
+              <Table
+                instances={instances}
+                onPurge={onPurge}
+                onUpdate={onUpdate}
+                setInstanceName={setInstanceName}
+                onDelete={onDelete}
+                rowSelection={rowSelection}
+                rowSelectionHandler={rowSelectionHandler}
+              />
+            ) : (
+              <EmptyTable />
+            )}
+          </div>
         </div>
       </div>
     </div>
-  </div>
+  );
 }
 interface TableProps {
   rowSelection: string[];
@@ -93,14 +132,23 @@ interface TableProps {
   onDelete: (id: MerchantBackend.Instances.Instance) => void;
   onPurge: (id: MerchantBackend.Instances.Instance) => void;
   rowSelectionHandler: StateUpdater<string[]>;
-  setInstanceName: (s:string) => void;
+  setInstanceName: (s: string) => void;
 }
 
 function toggleSelected<T>(id: T): (prev: T[]) => T[] {
-  return (prev: T[]): T[] => prev.indexOf(id) == -1 ? [...prev, id] : 
prev.filter(e => e != id)
+  return (prev: T[]): T[] =>
+    prev.indexOf(id) == -1 ? [...prev, id] : prev.filter((e) => e != id);
 }
 
-function Table({ rowSelection, rowSelectionHandler, setInstanceName, 
instances, onUpdate, onDelete, onPurge }: TableProps): VNode {
+function Table({
+  rowSelection,
+  rowSelectionHandler,
+  setInstanceName,
+  instances,
+  onUpdate,
+  onDelete,
+  onPurge,
+}: TableProps): VNode {
   return (
     <div class="table-container">
       <table class="table is-fullwidth is-striped is-hoverable is-fullwidth">
@@ -108,75 +156,127 @@ function Table({ rowSelection, rowSelectionHandler, 
setInstanceName, instances,
           <tr>
             <th class="is-checkbox-cell">
               <label class="b-checkbox checkbox">
-                <input type="checkbox" checked={rowSelection.length === 
instances.length} onClick={(): void => rowSelectionHandler(rowSelection.length 
=== instances.length ? [] : instances.map(i => i.id))} />
+                <input
+                  type="checkbox"
+                  checked={rowSelection.length === instances.length}
+                  onClick={(): void =>
+                    rowSelectionHandler(
+                      rowSelection.length === instances.length
+                        ? []
+                        : instances.map((i) => i.id),
+                    )
+                  }
+                />
                 <span class="check" />
               </label>
             </th>
-            <th><Translate>ID</Translate></th>
-            <th><Translate>Name</Translate></th>
+            <th>
+              <Translate>ID</Translate>
+            </th>
+            <th>
+              <Translate>Name</Translate>
+            </th>
             <th />
           </tr>
         </thead>
         <tbody>
-          {instances.map(i => {
-            return <tr key={i.id}>
-              <td class="is-checkbox-cell">
-                <label class="b-checkbox checkbox">
-                  <input type="checkbox" checked={rowSelection.indexOf(i.id) 
!= -1} onClick={(): void => rowSelectionHandler(toggleSelected(i.id))} />
-                  <span class="check" />
-                </label>
-              </td>
-              <td><a href={`#/orders?instance=${i.id}`} onClick={(e) => {
-                setInstanceName(i.id);
-              }}>{i.id}</a></td>
-              <td >{i.name}</td>
-              <td class="is-actions-cell right-sticky">
-                <div class="buttons is-right">
-                  <button class="button is-small is-success jb-modal" 
type="button" onClick={(): void => onUpdate(i.id)}>
-                    <Translate>Edit</Translate>
-                  </button>
-                  {!i.deleted &&
-                  <button class="button is-small is-danger jb-modal 
is-outlined" type="button" onClick={(): void => onDelete(i)}>
-                    <Translate>Delete</Translate>
-                  </button>
-                  }
-                  {i.deleted &&
-                  <button class="button is-small is-danger jb-modal" 
type="button" onClick={(): void => onPurge(i)}>
-                    <Translate>Purge</Translate>
-                  </button>
-                  }
-                </div>
-              </td>
-            </tr>
+          {instances.map((i) => {
+            return (
+              <tr key={i.id}>
+                <td class="is-checkbox-cell">
+                  <label class="b-checkbox checkbox">
+                    <input
+                      type="checkbox"
+                      checked={rowSelection.indexOf(i.id) != -1}
+                      onClick={(): void =>
+                        rowSelectionHandler(toggleSelected(i.id))
+                      }
+                    />
+                    <span class="check" />
+                  </label>
+                </td>
+                <td>
+                  <a
+                    href={`#/orders?instance=${i.id}`}
+                    onClick={(e) => {
+                      setInstanceName(i.id);
+                    }}
+                  >
+                    {i.id}
+                  </a>
+                </td>
+                <td>{i.name}</td>
+                <td class="is-actions-cell right-sticky">
+                  <div class="buttons is-right">
+                    <button
+                      class="button is-small is-success jb-modal"
+                      type="button"
+                      onClick={(): void => onUpdate(i.id)}
+                    >
+                      <Translate>Edit</Translate>
+                    </button>
+                    {!i.deleted && (
+                      <button
+                        class="button is-small is-danger jb-modal is-outlined"
+                        type="button"
+                        onClick={(): void => onDelete(i)}
+                      >
+                        <Translate>Delete</Translate>
+                      </button>
+                    )}
+                    {i.deleted && (
+                      <button
+                        class="button is-small is-danger jb-modal"
+                        type="button"
+                        onClick={(): void => onPurge(i)}
+                      >
+                        <Translate>Purge</Translate>
+                      </button>
+                    )}
+                  </div>
+                </td>
+              </tr>
+            );
           })}
-
         </tbody>
       </table>
     </div>
-  )
+  );
 }
 
 function EmptyTable(): VNode {
-  return <div class="content has-text-grey has-text-centered">
-    <p>
-      <span class="icon is-large"><i class="mdi mdi-emoticon-sad mdi-48px" 
/></span>
-    </p>
-    <p><Translate>There is no instances yet, add more pressing the + 
sign</Translate></p>
-  </div>
+  return (
+    <div class="content has-text-grey has-text-centered">
+      <p>
+        <span class="icon is-large">
+          <i class="mdi mdi-emoticon-sad mdi-48px" />
+        </span>
+      </p>
+      <p>
+        <Translate>
+          There is no instances yet, add more pressing the + sign
+        </Translate>
+      </p>
+    </div>
+  );
 }
 
-
 interface Actions {
   element: MerchantBackend.Instances.Instance;
-  type: 'DELETE' | 'UPDATE';
+  type: "DELETE" | "UPDATE";
 }
 
 function notEmpty<TValue>(value: TValue | null | undefined): value is TValue {
   return value !== null && value !== undefined;
 }
 
-function buildActions(instances: MerchantBackend.Instances.Instance[], 
selected: string[], action: 'DELETE'): Actions[] {
-  return selected.map(id => instances.find(i => i.id === id))
+function buildActions(
+  instances: MerchantBackend.Instances.Instance[],
+  selected: string[],
+  action: "DELETE",
+): Actions[] {
+  return selected
+    .map((id) => instances.find((i) => i.id === id))
     .filter(notEmpty)
-    .map(id => ({ element: id, type: action }))
+    .map((id) => ({ element: id, type: action }));
 }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/admin/list/View.stories.tsx 
b/packages/merchant-backoffice-ui/src/paths/admin/list/View.stories.tsx
index 87d68232a..e0f5d5430 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/list/View.stories.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/list/View.stories.tsx
@@ -15,68 +15,76 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h } from 'preact';
+import { h } from "preact";
 import { View } from "./View.js";
 
-
 export default {
-  title: 'Pages/Instance/List',
+  title: "Pages/Instance/List",
   component: View,
   argTypes: {
-    onSelect: { action: 'onSelect' },
+    onSelect: { action: "onSelect" },
   },
 };
 
 export const Empty = (a: any) => <View {...a} />;
 Empty.args = {
-  instances: []
-}
+  instances: [],
+};
 
 export const WithDefaultInstance = (a: any) => <View {...a} />;
 WithDefaultInstance.args = {
-  instances: [{
-    id: 'default',
-    name: 'the default instance',
-    merchant_pub: 'abcdef',
-    payment_targets: []
-  }]
-}
+  instances: [
+    {
+      id: "default",
+      name: "the default instance",
+      merchant_pub: "abcdef",
+      payment_targets: [],
+    },
+  ],
+};
 
 export const WithFiveInstance = (a: any) => <View {...a} />;
 WithFiveInstance.args = {
-  instances: [{
-    id: 'first',
-    name: 'the first instance',
-    merchant_pub: 'abcdefgh',
-    payment_targets: ['asd']
-  }, {
-    id: 'second',
-    name: 'the second instance',
-    merchant_pub: 'zxczxcz',
-    payment_targets: ['asd']
-  }, {
-    id: 'third',
-    name: 'the third instance',
-    merchant_pub: 'QWEQWEWQE',
-    payment_targets: ['asd']
-  }, {
-    id: 'other',
-    name: 'the other instance',
-    merchant_pub: 'FHJHGJGHJ',
-    payment_targets: ['asd']
-  }, {
-    id: 'another',
-    name: 'the another instance',
-    merchant_pub: 'abcd3423423efgh',
-    payment_targets: ['asd']
-  }, {
-    id: 'last',
-    name: 'last instance',
-    merchant_pub: 'zxcvvbnm',
-    payment_targets: ['pay-to', 'asd']
-  }]
-}
+  instances: [
+    {
+      id: "first",
+      name: "the first instance",
+      merchant_pub: "abcdefgh",
+      payment_targets: ["asd"],
+    },
+    {
+      id: "second",
+      name: "the second instance",
+      merchant_pub: "zxczxcz",
+      payment_targets: ["asd"],
+    },
+    {
+      id: "third",
+      name: "the third instance",
+      merchant_pub: "QWEQWEWQE",
+      payment_targets: ["asd"],
+    },
+    {
+      id: "other",
+      name: "the other instance",
+      merchant_pub: "FHJHGJGHJ",
+      payment_targets: ["asd"],
+    },
+    {
+      id: "another",
+      name: "the another instance",
+      merchant_pub: "abcd3423423efgh",
+      payment_targets: ["asd"],
+    },
+    {
+      id: "last",
+      name: "last instance",
+      merchant_pub: "zxcvvbnm",
+      payment_targets: ["pay-to", "asd"],
+    },
+  ],
+};
diff --git a/packages/merchant-backoffice-ui/src/paths/admin/list/View.tsx 
b/packages/merchant-backoffice-ui/src/paths/admin/list/View.tsx
index 2af9dea71..5180c671c 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/list/View.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/list/View.tsx
@@ -15,14 +15,14 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { h, VNode } from "preact";
 import { MerchantBackend } from "../../../declaration.js";
 import { CardTable as CardTableActive } from "./TableActive.js";
-import { useState } from 'preact/hooks';
+import { useState } from "preact/hooks";
 import { Translate, useTranslator } from "../../../i18n/index.js";
 
 interface Props {
@@ -35,46 +35,78 @@ interface Props {
   setInstanceName: (s: string) => void;
 }
 
-export function View({ instances, onCreate, onDelete, onPurge, onUpdate, 
setInstanceName, selected }: Props): VNode {
+export function View({
+  instances,
+  onCreate,
+  onDelete,
+  onPurge,
+  onUpdate,
+  setInstanceName,
+  selected,
+}: Props): VNode {
   const [show, setShow] = useState<"active" | "deleted" | null>("active");
-  const showIsActive = show === 'active' ? "is-active" : ''
-  const showIsDeleted = show === 'deleted' ? "is-active" : ''
-  const showAll = show === null ? "is-active" : ''
-  const i18n = useTranslator()
+  const showIsActive = show === "active" ? "is-active" : "";
+  const showIsDeleted = show === "deleted" ? "is-active" : "";
+  const showAll = show === null ? "is-active" : "";
+  const i18n = useTranslator();
 
-  const showingInstances = showIsDeleted ? 
-    instances.filter(i => i.deleted) : (showIsActive ?
-      instances.filter(i => !i.deleted) :
-      instances)
-  
-  return <div id="app">
+  const showingInstances = showIsDeleted
+    ? instances.filter((i) => i.deleted)
+    : showIsActive
+    ? instances.filter((i) => !i.deleted)
+    : instances;
 
-    <section class="section is-main-section">
-      <div class="columns">
-        <div class="column is-two-thirds">
-          <div class="tabs" style={{ overflow: 'inherit' }}>
-            <ul>
-              <li class={showIsActive}>
-                <div class="has-tooltip-right" data-tooltip={i18n`Only show 
active instances`}>
-                  <a onClick={() => 
setShow("active")}><Translate>Active</Translate></a>
-                </div>
-              </li>
-              <li class={showIsDeleted}>
-                <div class="has-tooltip-right" data-tooltip={i18n`Only show 
deleted instances`}>
-                  <a onClick={() => 
setShow("deleted")}><Translate>Deleted</Translate></a>
-                </div>
-              </li>
-              <li class={showAll}>
-                <div class="has-tooltip-right" data-tooltip={i18n`Show all 
instances`}>
-                  <a onClick={() => 
setShow(null)}><Translate>All</Translate></a>
-                </div>
-              </li>
-            </ul>
+  return (
+    <div id="app">
+      <section class="section is-main-section">
+        <div class="columns">
+          <div class="column is-two-thirds">
+            <div class="tabs" style={{ overflow: "inherit" }}>
+              <ul>
+                <li class={showIsActive}>
+                  <div
+                    class="has-tooltip-right"
+                    data-tooltip={i18n`Only show active instances`}
+                  >
+                    <a onClick={() => setShow("active")}>
+                      <Translate>Active</Translate>
+                    </a>
+                  </div>
+                </li>
+                <li class={showIsDeleted}>
+                  <div
+                    class="has-tooltip-right"
+                    data-tooltip={i18n`Only show deleted instances`}
+                  >
+                    <a onClick={() => setShow("deleted")}>
+                      <Translate>Deleted</Translate>
+                    </a>
+                  </div>
+                </li>
+                <li class={showAll}>
+                  <div
+                    class="has-tooltip-right"
+                    data-tooltip={i18n`Show all instances`}
+                  >
+                    <a onClick={() => setShow(null)}>
+                      <Translate>All</Translate>
+                    </a>
+                  </div>
+                </li>
+              </ul>
+            </div>
           </div>
         </div>
-      </div>
-      <CardTableActive instances={showingInstances} onDelete={onDelete} 
onPurge={onPurge} setInstanceName={setInstanceName} onUpdate={onUpdate} 
selected={selected} onCreate={onCreate} />
-    </section>
-
-  </div >
+        <CardTableActive
+          instances={showingInstances}
+          onDelete={onDelete}
+          onPurge={onPurge}
+          setInstanceName={setInstanceName}
+          onUpdate={onUpdate}
+          selected={selected}
+          onCreate={onCreate}
+        />
+      </section>
+    </div>
+  );
 }
diff --git a/packages/merchant-backoffice-ui/src/paths/index.stories.ts 
b/packages/merchant-backoffice-ui/src/paths/index.stories.ts
index b3811fd4f..ecf28445b 100644
--- a/packages/merchant-backoffice-ui/src/paths/index.stories.ts
+++ b/packages/merchant-backoffice-ui/src/paths/index.stories.ts
@@ -1,2 +1,2 @@
 export * as a1 from "./admin/create/Create.stories.js";
-export * as a2 from "./instance/details/Details.stories.js";
\ No newline at end of file
+export * as a2 from "./instance/details/Details.stories.js";
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/details/DetailPage.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/details/DetailPage.tsx
index 01e7771cf..59aa7a1d2 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/details/DetailPage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/details/DetailPage.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
@@ -33,55 +33,57 @@ interface Props {
   selected: MerchantBackend.Instances.QueryInstancesResponse;
 }
 
-function convert(from: MerchantBackend.Instances.QueryInstancesResponse): 
Entity {
-  const { accounts, ...rest } = from
-  const payto_uris = accounts.filter(a => a.active).map(a => a.payto_uri)
+function convert(
+  from: MerchantBackend.Instances.QueryInstancesResponse,
+): Entity {
+  const { accounts, ...rest } = from;
+  const payto_uris = accounts.filter((a) => a.active).map((a) => a.payto_uri);
   const defaults = {
     default_wire_fee_amortization: 1,
     default_pay_delay: { d_us: 1000 * 60 * 60 }, //one hour
     default_wire_transfer_delay: { d_us: 1000 * 60 * 60 * 2 }, //two hours
-  }
+  };
   return { ...defaults, ...rest, payto_uris };
 }
 
 export function DetailPage({ selected }: Props): VNode {
-  const [value, valueHandler] = useState<Partial<Entity>>(convert(selected))
+  const [value, valueHandler] = useState<Partial<Entity>>(convert(selected));
+
+  const i18n = useTranslator();
 
-  const i18n = useTranslator()
-  
-  return <div>
-    <section class="hero is-hero-bar">
-      <div class="hero-body">
-        <div class="level">
-          <div class="level-left">
-            <div class="level-item">
-              <h1 class="title">
-                Here goes the instance description
-              </h1>
+  return (
+    <div>
+      <section class="hero is-hero-bar">
+        <div class="hero-body">
+          <div class="level">
+            <div class="level-left">
+              <div class="level-item">
+                <h1 class="title">Here goes the instance description</h1>
+              </div>
+            </div>
+            <div class="level-right" style="display: none;">
+              <div class="level-item" />
             </div>
-          </div>
-          <div class="level-right" style="display: none;">
-            <div class="level-item" />
           </div>
         </div>
-      </div>
-    </section>
-
-    <section class="section is-main-section">
-      <div class="columns">
-        <div class="column" />
-        <div class="column is-6">
-          <FormProvider<Entity> object={value} valueHandler={valueHandler} >
+      </section>
 
-            <Input<Entity> name="name" readonly label={i18n`Name`} />
-            <Input<Entity> name="payto_uris" readonly label={i18n`Account 
address`} />
-
-          </FormProvider>
+      <section class="section is-main-section">
+        <div class="columns">
+          <div class="column" />
+          <div class="column is-6">
+            <FormProvider<Entity> object={value} valueHandler={valueHandler}>
+              <Input<Entity> name="name" readonly label={i18n`Name`} />
+              <Input<Entity>
+                name="payto_uris"
+                readonly
+                label={i18n`Account address`}
+              />
+            </FormProvider>
+          </div>
+          <div class="column" />
         </div>
-        <div class="column" />
-      </div>
-    </section>
-
-  </div>
-
-}
\ No newline at end of file
+      </section>
+    </div>
+  );
+}
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/details/Details.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/details/Details.stories.tsx
index f7772895f..9ac1c4381 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/details/Details.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/details/Details.stories.tsx
@@ -33,7 +33,7 @@ export default {
 
 function createExample<Props>(
   Component: FunctionalComponent<Props>,
-  props: Partial<Props>
+  props: Partial<Props>,
 ) {
   const r = (args: any) => <Component {...args} />;
   r.args = props;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/details/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/details/index.tsx
index 09b692e00..49b64262b 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/details/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/details/index.tsx
@@ -30,36 +30,44 @@ interface Props {
   onDelete: () => void;
 }
 
-export default function Detail({ onUpdate, onLoadError, onUnauthorized, 
onDelete, onNotFound }: Props): VNode {
-  const { id } = useInstanceContext()
-  const result = useInstanceDetails()
-  const [deleting, setDeleting] = useState<boolean>(false)
+export default function Detail({
+  onUpdate,
+  onLoadError,
+  onUnauthorized,
+  onDelete,
+  onNotFound,
+}: Props): VNode {
+  const { id } = useInstanceContext();
+  const result = useInstanceDetails();
+  const [deleting, setDeleting] = useState<boolean>(false);
 
-  const { deleteInstance } = useInstanceAPI()
+  const { deleteInstance } = useInstanceAPI();
 
-  if (result.clientError && result.isUnauthorized) return onUnauthorized()
-  if (result.clientError && result.isNotfound) return onNotFound()
-  if (result.loading) return <Loading />
-  if (!result.ok) return onLoadError(result)
+  if (result.clientError && result.isUnauthorized) return onUnauthorized();
+  if (result.clientError && result.isNotfound) return onNotFound();
+  if (result.loading) return <Loading />;
+  if (!result.ok) return onLoadError(result);
 
-  return <Fragment>
-    <DetailPage
-      selected={result.data}
-      onUpdate={onUpdate}
-      onDelete={() => setDeleting(true)}
-    />
-    {deleting && <DeleteModal
-      element={{ name: result.data.name, id }}
-      onCancel={() => setDeleting(false)}
-      onConfirm={async (): Promise<void> => {
-        try {
-          await deleteInstance()
-          onDelete()
-        } catch (error) {
-        }
-        setDeleting(false)
-      }}
-    />}
-
-  </Fragment>
-}
\ No newline at end of file
+  return (
+    <Fragment>
+      <DetailPage
+        selected={result.data}
+        onUpdate={onUpdate}
+        onDelete={() => setDeleting(true)}
+      />
+      {deleting && (
+        <DeleteModal
+          element={{ name: result.data.name, id }}
+          onCancel={() => setDeleting(false)}
+          onConfirm={async (): Promise<void> => {
+            try {
+              await deleteInstance();
+              onDelete();
+            } catch (error) {}
+            setDeleting(false);
+          }}
+        />
+      )}
+    </Fragment>
+  );
+}
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/Create.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/Create.stories.tsx
index 4ce2eb43d..5f8dbbdd9 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/Create.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/Create.stories.tsx
@@ -33,7 +33,7 @@ export default {
 
 function createExample<Props>(
   Component: FunctionalComponent<Props>,
-  props: Partial<Props>
+  props: Partial<Props>,
 ) {
   const r = (args: any) => <Component {...args} />;
   r.args = props;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
index 379c5eab5..145df717d 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx
@@ -166,7 +166,7 @@ export function CreatePage({
         : value.payments.wire_transfer_deadline &&
           isBefore(
             value.payments.wire_transfer_deadline,
-            value.payments.refund_deadline
+            value.payments.refund_deadline,
           )
         ? i18n`wire transfer deadline cannot be before refund deadline`
         : undefined,
@@ -177,7 +177,7 @@ export function CreatePage({
         : value.payments.wire_transfer_deadline &&
           isBefore(
             value.payments.wire_transfer_deadline,
-            value.payments.pay_deadline
+            value.payments.pay_deadline,
           )
         ? i18n`wire transfer deadline cannot be before pay deadline`
         : undefined,
@@ -189,7 +189,7 @@ export function CreatePage({
         ? i18n`should have a refund deadline`
         : !isAfter(
             value.payments.refund_deadline,
-            value.payments.auto_refund_deadline
+            value.payments.auto_refund_deadline,
           )
         ? i18n`auto refund cannot be after refund deadline`
         : undefined,
@@ -203,7 +203,7 @@ export function CreatePage({
     }),
   };
   const hasErrors = Object.keys(errors).some(
-    (k) => (errors as any)[k] !== undefined
+    (k) => (errors as any)[k] !== undefined,
   );
 
   const submit = (): void => {
@@ -225,7 +225,7 @@ export function CreatePage({
         wire_transfer_deadline: value.payments.wire_transfer_deadline
           ? {
               t_s: Math.floor(
-                value.payments.wire_transfer_deadline.getTime() / 1000
+                value.payments.wire_transfer_deadline.getTime() / 1000,
               ),
             }
           : undefined,
@@ -237,7 +237,7 @@ export function CreatePage({
         auto_refund: value.payments.auto_refund_deadline
           ? {
               d_us: Math.floor(
-                value.payments.auto_refund_deadline.getTime() * 1000
+                value.payments.auto_refund_deadline.getTime() * 1000,
               ),
             }
           : undefined,
@@ -264,7 +264,7 @@ export function CreatePage({
 
   const addProductToTheInventoryList = (
     product: MerchantBackend.Products.ProductDetail & WithId,
-    quantity: number
+    quantity: number,
   ) => {
     valueHandler((v) => {
       const inventoryProducts = { ...v.inventoryProducts };
@@ -332,13 +332,13 @@ export function CreatePage({
 
   const discountOrRise = rate(
     value.pricing?.order_price || `${config.currency}:0`,
-    totalAsString
+    totalAsString,
   );
 
   const minAgeByProducts = allProducts.reduce(
     (cur, prev) =>
       !prev.minimum_age || cur > prev.minimum_age ? cur : prev.minimum_age,
-    0
+    0,
   );
   return (
     <div>
@@ -415,7 +415,7 @@ export function CreatePage({
                       discountOrRise > 0 &&
                       (discountOrRise < 1
                         ? `discount of %${Math.round(
-                            (1 - discountOrRise) * 100
+                            (1 - discountOrRise) * 100,
                           )}`
                         : `rise of %${Math.round((discountOrRise - 1) * 100)}`)
                     }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx
index bd63ca371..6d3ac311a 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/OrderCreatedSuccessfully.tsx
@@ -26,64 +26,89 @@ interface Props {
   onCreateAnother?: () => void;
 }
 
-export function OrderCreatedSuccessfully({ entity, onConfirm, onCreateAnother 
}: Props): VNode {
-  const { getPaymentURL } = useOrderAPI()
-  const [url, setURL] = useState<string | undefined>(undefined)
+export function OrderCreatedSuccessfully({
+  entity,
+  onConfirm,
+  onCreateAnother,
+}: Props): VNode {
+  const { getPaymentURL } = useOrderAPI();
+  const [url, setURL] = useState<string | undefined>(undefined);
 
   useEffect(() => {
-    getPaymentURL(entity.response.order_id).then(response => {
-      setURL(response.data)
-    })
-  }, [getPaymentURL, entity.response.order_id])
+    getPaymentURL(entity.response.order_id).then((response) => {
+      setURL(response.data);
+    });
+  }, [getPaymentURL, entity.response.order_id]);
 
-  return <CreatedSuccessfully onConfirm={onConfirm} 
onCreateAnother={onCreateAnother}>
-    <div class="field is-horizontal">
-      <div class="field-label is-normal">
-        <label class="label"><Translate>Amount</Translate></label>
-      </div>
-      <div class="field-body is-flex-grow-3">
-        <div class="field">
-          <p class="control">
-            <input class="input" readonly value={entity.request.order.amount} 
/>
-          </p>
+  return (
+    <CreatedSuccessfully
+      onConfirm={onConfirm}
+      onCreateAnother={onCreateAnother}
+    >
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label class="label">
+            <Translate>Amount</Translate>
+          </label>
         </div>
-      </div>
-    </div>
-    <div class="field is-horizontal">
-      <div class="field-label is-normal">
-        <label class="label"><Translate>Summary</Translate></label>
-      </div>
-      <div class="field-body is-flex-grow-3">
-        <div class="field">
-          <p class="control">
-            <input class="input" readonly value={entity.request.order.summary} 
/>
-          </p>
+        <div class="field-body is-flex-grow-3">
+          <div class="field">
+            <p class="control">
+              <input
+                class="input"
+                readonly
+                value={entity.request.order.amount}
+              />
+            </p>
+          </div>
         </div>
       </div>
-    </div>
-    <div class="field is-horizontal">
-      <div class="field-label is-normal">
-        <label class="label"><Translate>Order ID</Translate></label>
-      </div>
-      <div class="field-body is-flex-grow-3">
-        <div class="field">
-          <p class="control">
-            <input class="input" readonly value={entity.response.order_id} />
-          </p>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label class="label">
+            <Translate>Summary</Translate>
+          </label>
+        </div>
+        <div class="field-body is-flex-grow-3">
+          <div class="field">
+            <p class="control">
+              <input
+                class="input"
+                readonly
+                value={entity.request.order.summary}
+              />
+            </p>
+          </div>
         </div>
       </div>
-    </div>
-    <div class="field is-horizontal">
-      <div class="field-label is-normal">
-        <label class="label"><Translate>Payment URL</Translate></label>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label class="label">
+            <Translate>Order ID</Translate>
+          </label>
+        </div>
+        <div class="field-body is-flex-grow-3">
+          <div class="field">
+            <p class="control">
+              <input class="input" readonly value={entity.response.order_id} />
+            </p>
+          </div>
+        </div>
       </div>
-      <div class="field-body is-flex-grow-3">
-        <div class="field">
-          <p class="control">
-            <input class="input" readonly value={url} />
-          </p>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label class="label">
+            <Translate>Payment URL</Translate>
+          </label>
+        </div>
+        <div class="field-body is-flex-grow-3">
+          <div class="field">
+            <p class="control">
+              <input class="input" readonly value={url} />
+            </p>
+          </div>
         </div>
       </div>
-    </div>
-  </CreatedSuccessfully>;
+    </CreatedSuccessfully>
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx
index feb75aa25..95232da92 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx
@@ -15,12 +15,12 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { Fragment, h, VNode } from 'preact';
-import { useState } from 'preact/hooks';
+import { Fragment, h, VNode } from "preact";
+import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
 import { MerchantBackend } from "../../../../declaration.js";
@@ -33,9 +33,9 @@ import { CreatePage } from "./CreatePage.js";
 import { OrderCreatedSuccessfully } from "./OrderCreatedSuccessfully.js";
 
 export type Entity = {
-  request: MerchantBackend.Orders.PostOrderRequest,
-  response: MerchantBackend.Orders.PostOrderResponse
-}
+  request: MerchantBackend.Orders.PostOrderRequest;
+  response: MerchantBackend.Orders.PostOrderResponse;
+};
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
@@ -43,40 +43,53 @@ interface Props {
   onNotFound: () => VNode;
   onLoadError: (error: HttpError) => VNode;
 }
-export default function OrderCreate({ onConfirm, onBack, onLoadError, 
onNotFound, onUnauthorized }: Props): VNode {
-  const { createOrder } = useOrderAPI()
-  const [notif, setNotif] = useState<Notification | undefined>(undefined)
+export default function OrderCreate({
+  onConfirm,
+  onBack,
+  onLoadError,
+  onNotFound,
+  onUnauthorized,
+}: Props): VNode {
+  const { createOrder } = useOrderAPI();
+  const [notif, setNotif] = useState<Notification | undefined>(undefined);
 
-  const detailsResult = useInstanceDetails()
-  const inventoryResult = useInstanceProducts()
+  const detailsResult = useInstanceDetails();
+  const inventoryResult = useInstanceProducts();
 
-  if (detailsResult.clientError && detailsResult.isUnauthorized) return 
onUnauthorized()
-  if (detailsResult.clientError && detailsResult.isNotfound) return 
onNotFound()
-  if (detailsResult.loading) return <Loading />
-  if (!detailsResult.ok) return onLoadError(detailsResult)
+  if (detailsResult.clientError && detailsResult.isUnauthorized)
+    return onUnauthorized();
+  if (detailsResult.clientError && detailsResult.isNotfound)
+    return onNotFound();
+  if (detailsResult.loading) return <Loading />;
+  if (!detailsResult.ok) return onLoadError(detailsResult);
 
-  if (inventoryResult.clientError && inventoryResult.isUnauthorized) return 
onUnauthorized()
-  if (inventoryResult.clientError && inventoryResult.isNotfound) return 
onNotFound()
-  if (inventoryResult.loading) return <Loading />
-  if (!inventoryResult.ok) return onLoadError(inventoryResult)
+  if (inventoryResult.clientError && inventoryResult.isUnauthorized)
+    return onUnauthorized();
+  if (inventoryResult.clientError && inventoryResult.isNotfound)
+    return onNotFound();
+  if (inventoryResult.loading) return <Loading />;
+  if (!inventoryResult.ok) return onLoadError(inventoryResult);
 
-  return <Fragment>
-    
-    <NotificationCard notification={notif} />
+  return (
+    <Fragment>
+      <NotificationCard notification={notif} />
 
-    <CreatePage
-      onBack={onBack}
-      onCreate={(request: MerchantBackend.Orders.PostOrderRequest) => {
-        createOrder(request).then(onConfirm).catch((error) => {
-          setNotif({
-            message: 'could not create order',
-            type: "ERROR",
-            description: error.message
-          })
-        })
-      }} 
-      instanceConfig={detailsResult.data}
-      instanceInventory={inventoryResult.data}
+      <CreatePage
+        onBack={onBack}
+        onCreate={(request: MerchantBackend.Orders.PostOrderRequest) => {
+          createOrder(request)
+            .then(onConfirm)
+            .catch((error) => {
+              setNotif({
+                message: "could not create order",
+                type: "ERROR",
+                description: error.message,
+              });
+            });
+        }}
+        instanceConfig={detailsResult.data}
+        instanceInventory={inventoryResult.data}
       />
-  </Fragment>
+    </Fragment>
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/Detail.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/Detail.stories.tsx
index 878ee7bde..e430ede56 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/Detail.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/Detail.stories.tsx
@@ -35,7 +35,7 @@ export default {
 
 function createExample<Props>(
   Component: FunctionalComponent<Props>,
-  props: Partial<Props>
+  props: Partial<Props>,
 ) {
   const r = (args: any) => <Component {...args} />;
   r.args = props;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx
index 2074eeb32..e8927dd70 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/DetailPage.tsx
@@ -248,7 +248,7 @@ function ClaimedPage({
                           </b>{" "}
                           {format(
                             new Date(order.contract_terms.timestamp.t_s * 
1000),
-                            "yyyy-MM-dd HH:mm:ss"
+                            "yyyy-MM-dd HH:mm:ss",
                           )}
                         </p>
                       </div>
@@ -519,7 +519,7 @@ function PaidPage({
                         <p>
                           {format(
                             new Date(order.contract_terms.timestamp.t_s * 
1000),
-                            "yyyy/MM/dd HH:mm:ss"
+                            "yyyy/MM/dd HH:mm:ss",
                           )}
                         </p>
                       </div>
@@ -669,7 +669,7 @@ function UnpaidPage({
                       ? "never"
                       : format(
                           new Date(order.creation_time.t_s * 1000),
-                          "yyyy-MM-dd HH:mm:ss"
+                          "yyyy-MM-dd HH:mm:ss",
                         )}
                   </p>
                 </div>
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx
index dbf1b685a..4633688ba 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx
@@ -32,36 +32,49 @@ export interface Props {
   onLoadError: (error: HttpError) => VNode;
 }
 
-export default function Update({ oid, onBack, onLoadError, onNotFound, 
onUnauthorized }: Props): VNode {
+export default function Update({
+  oid,
+  onBack,
+  onLoadError,
+  onNotFound,
+  onUnauthorized,
+}: Props): VNode {
   const { refundOrder } = useOrderAPI();
-  const result = useOrderDetails(oid)
-  const [notif, setNotif] = useState<Notification | undefined>(undefined)
+  const result = useOrderDetails(oid);
+  const [notif, setNotif] = useState<Notification | undefined>(undefined);
 
-  const i18n = useTranslator()
+  const i18n = useTranslator();
 
-  if (result.clientError && result.isUnauthorized) return onUnauthorized()
-  if (result.clientError && result.isNotfound) return onNotFound()
-  if (result.loading) return <Loading />
-  if (!result.ok) return onLoadError(result)
+  if (result.clientError && result.isUnauthorized) return onUnauthorized();
+  if (result.clientError && result.isNotfound) return onNotFound();
+  if (result.loading) return <Loading />;
+  if (!result.ok) return onLoadError(result);
 
-  return <Fragment>
+  return (
+    <Fragment>
+      <NotificationCard notification={notif} />
 
-    <NotificationCard notification={notif} />
-
-    <DetailPage
-      onBack={onBack}
-      id={oid}
-      onRefund={(id, value) => refundOrder(id, value)
-        .then(() => setNotif({
-          message: i18n`refund created successfully`,
-          type: "SUCCESS"
-        })).catch((error) => setNotif({
-          message: i18n`could not create the refund`,
-          type: "ERROR",
-          description: error.message
-        }))
-      }
-      selected={result.data}
-    />
-  </Fragment>
-}
\ No newline at end of file
+      <DetailPage
+        onBack={onBack}
+        id={oid}
+        onRefund={(id, value) =>
+          refundOrder(id, value)
+            .then(() =>
+              setNotif({
+                message: i18n`refund created successfully`,
+                type: "SUCCESS",
+              }),
+            )
+            .catch((error) =>
+              setNotif({
+                message: i18n`could not create the refund`,
+                type: "ERROR",
+                description: error.message,
+              }),
+            )
+        }
+        selected={result.data}
+      />
+    </Fragment>
+  );
+}
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/List.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/List.stories.tsx
index 8cddd7fd6..156c577f4 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/List.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/List.stories.tsx
@@ -43,7 +43,7 @@ export default {
 
 function createExample<Props>(
   Component: FunctionalComponent<Props>,
-  props: Partial<Props>
+  props: Partial<Props>,
 ) {
   const r = (args: any) => <Component {...args} />;
   r.args = props;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx
index 60be23c21..bca90e352 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/ListPage.tsx
@@ -15,33 +15,33 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { format } from 'date-fns';
-import { h, VNode } from 'preact';
-import { useState } from 'preact/hooks';
+import { format } from "date-fns";
+import { h, VNode } from "preact";
+import { useState } from "preact/hooks";
 import { DatePicker } from "../../../../components/picker/DatePicker.js";
 import { MerchantBackend, WithId } from "../../../../declaration.js";
-import { Translate, useTranslator } from '../../../../i18n/index.js';
+import { Translate, useTranslator } from "../../../../i18n/index.js";
 import { CardTable } from "./Table.js";
 
 export interface ListPageProps {
-  errorOrderId: string | undefined,
+  errorOrderId: string | undefined;
 
-  onShowAll: () => void,
-  onShowPaid: () => void,
-  onShowRefunded: () => void,
-  onShowNotWired: () => void,
+  onShowAll: () => void;
+  onShowPaid: () => void;
+  onShowRefunded: () => void;
+  onShowNotWired: () => void;
   onCopyURL: (id: string) => void;
-  isAllActive: string,
-  isPaidActive: string,
-  isRefundedActive: string,
-  isNotWiredActive: string,
+  isAllActive: string;
+  isPaidActive: string;
+  isRefundedActive: string;
+  isNotWiredActive: string;
 
-  jumpToDate?: Date,
-  onSelectDate: (date?: Date) => void,
+  jumpToDate?: Date;
+  onSelectDate: (date?: Date) => void;
 
   orders: (MerchantBackend.Orders.OrderHistoryEntry & WithId)[];
   onLoadMoreBefore?: () => void;
@@ -55,92 +55,168 @@ export interface ListPageProps {
   onCreate: () => void;
 }
 
-export function ListPage({ orders, errorOrderId, isAllActive, onSelectOrder, 
onRefundOrder, onSearchOrderById, jumpToDate, onCopyURL, onShowAll, onShowPaid, 
onShowRefunded, onShowNotWired, onSelectDate, isPaidActive, isRefundedActive, 
isNotWiredActive, onCreate }: ListPageProps): VNode {
+export function ListPage({
+  orders,
+  errorOrderId,
+  isAllActive,
+  onSelectOrder,
+  onRefundOrder,
+  onSearchOrderById,
+  jumpToDate,
+  onCopyURL,
+  onShowAll,
+  onShowPaid,
+  onShowRefunded,
+  onShowNotWired,
+  onSelectDate,
+  isPaidActive,
+  isRefundedActive,
+  isNotWiredActive,
+  onCreate,
+}: ListPageProps): VNode {
   const i18n = useTranslator();
   const dateTooltip = i18n`select date to show nearby orders`;
   const [pickDate, setPickDate] = useState(false);
-  const [orderId, setOrderId] = useState<string>('');
-
-  return <section class="section is-main-section">
+  const [orderId, setOrderId] = useState<string>("");
 
-    <div class="level">
-      <div class="level-left">
-        <div class="level-item">
-          <div class="field has-addons">
-            <div class="control">
-              <input class={errorOrderId ? "input is-danger" : "input"} 
type="text" value={orderId} onChange={e => setOrderId(e.currentTarget.value)} 
placeholder={i18n`order id`} />
-              {errorOrderId && <p class="help is-danger">{errorOrderId}</p>}
+  return (
+    <section class="section is-main-section">
+      <div class="level">
+        <div class="level-left">
+          <div class="level-item">
+            <div class="field has-addons">
+              <div class="control">
+                <input
+                  class={errorOrderId ? "input is-danger" : "input"}
+                  type="text"
+                  value={orderId}
+                  onChange={(e) => setOrderId(e.currentTarget.value)}
+                  placeholder={i18n`order id`}
+                />
+                {errorOrderId && <p class="help is-danger">{errorOrderId}</p>}
+              </div>
+              <span
+                class="has-tooltip-bottom"
+                data-tooltip={i18n`jump to order with the given order ID`}
+              >
+                <button
+                  class="button"
+                  onClick={(e) => onSearchOrderById(orderId)}
+                >
+                  <span class="icon">
+                    <i class="mdi mdi-arrow-right" />
+                  </span>
+                </button>
+              </span>
             </div>
-            <span class="has-tooltip-bottom" data-tooltip={i18n`jump to order 
with the given order ID`}>
-              <button class="button" onClick={(e) => 
onSearchOrderById(orderId)}>
-                <span class="icon"><i class="mdi mdi-arrow-right" /></span>
-              </button>
-            </span>
           </div>
         </div>
       </div>
-    </div>
-    <div class="columns">
-      <div class="column is-two-thirds">
-        <div class="tabs" style={{overflow:'inherit'}}>
-          <ul>
-            <li class={isAllActive}>
-              <div class="has-tooltip-right" data-tooltip={i18n`remove all 
filters`}>
-                <a onClick={onShowAll}><Translate>All</Translate></a>
-              </div>
-            </li>
-            <li class={isPaidActive}>
-              <div class="has-tooltip-right" data-tooltip={i18n`only show paid 
orders`}>
-                <a onClick={onShowPaid}><Translate>Paid</Translate></a>
-              </div>
-            </li>
-            <li class={isRefundedActive}>
-              <div class="has-tooltip-right" data-tooltip={i18n`only show 
orders with refunds`}>
-                <a onClick={onShowRefunded}><Translate>Refunded</Translate></a>
+      <div class="columns">
+        <div class="column is-two-thirds">
+          <div class="tabs" style={{ overflow: "inherit" }}>
+            <ul>
+              <li class={isAllActive}>
+                <div
+                  class="has-tooltip-right"
+                  data-tooltip={i18n`remove all filters`}
+                >
+                  <a onClick={onShowAll}>
+                    <Translate>All</Translate>
+                  </a>
+                </div>
+              </li>
+              <li class={isPaidActive}>
+                <div
+                  class="has-tooltip-right"
+                  data-tooltip={i18n`only show paid orders`}
+                >
+                  <a onClick={onShowPaid}>
+                    <Translate>Paid</Translate>
+                  </a>
+                </div>
+              </li>
+              <li class={isRefundedActive}>
+                <div
+                  class="has-tooltip-right"
+                  data-tooltip={i18n`only show orders with refunds`}
+                >
+                  <a onClick={onShowRefunded}>
+                    <Translate>Refunded</Translate>
+                  </a>
+                </div>
+              </li>
+              <li class={isNotWiredActive}>
+                <div
+                  class="has-tooltip-left"
+                  data-tooltip={i18n`only show orders where customers paid, 
but wire payments from payment provider are still pending`}
+                >
+                  <a onClick={onShowNotWired}>
+                    <Translate>Not wired</Translate>
+                  </a>
+                </div>
+              </li>
+            </ul>
+          </div>
+        </div>
+        <div class="column ">
+          <div class="buttons is-right">
+            <div class="field has-addons">
+              {jumpToDate && (
+                <div class="control">
+                  <a class="button" onClick={() => onSelectDate(undefined)}>
+                    <span class="icon" data-tooltip={i18n`clear date filter`}>
+                      <i class="mdi mdi-close" />
+                    </span>
+                  </a>
+                </div>
+              )}
+              <div class="control">
+                <span class="has-tooltip-top" data-tooltip={dateTooltip}>
+                  <input
+                    class="input"
+                    type="text"
+                    readonly
+                    value={!jumpToDate ? "" : format(jumpToDate, "yyyy/MM/dd")}
+                    placeholder={i18n`date (YYYY/MM/DD)`}
+                    onClick={() => {
+                      setPickDate(true);
+                    }}
+                  />
+                </span>
               </div>
-            </li>
-            <li class={isNotWiredActive}>
-              <div class="has-tooltip-left" data-tooltip={i18n`only show 
orders where customers paid, but wire payments from payment provider are still 
pending`}>
-                <a onClick={onShowNotWired}><Translate>Not 
wired</Translate></a>
+              <div class="control">
+                <span class="has-tooltip-left" data-tooltip={dateTooltip}>
+                  <a
+                    class="button"
+                    onClick={() => {
+                      setPickDate(true);
+                    }}
+                  >
+                    <span class="icon">
+                      <i class="mdi mdi-calendar" />
+                    </span>
+                  </a>
+                </span>
               </div>
-            </li>
-          </ul>
-        </div>
-      </div>
-      <div class="column ">
-        <div class="buttons is-right">
-          <div class="field has-addons">
-            {jumpToDate && <div class="control">
-              <a class="button" onClick={() => onSelectDate(undefined)}>
-                <span class="icon" data-tooltip={i18n`clear date filter`}><i 
class="mdi mdi-close" /></span>
-              </a>
-            </div>}
-            <div class="control">
-              <span class="has-tooltip-top" data-tooltip={dateTooltip}>
-                <input class="input" type="text" readonly value={!jumpToDate ? 
'' : format(jumpToDate, 'yyyy/MM/dd')} placeholder={i18n`date (YYYY/MM/DD)`} 
onClick={() => { setPickDate(true); }} />
-              </span>
-            </div>
-            <div class="control">
-              <span class="has-tooltip-left" data-tooltip={dateTooltip}>
-                <a class="button" onClick={() => { setPickDate(true); }}>
-                  <span class="icon"><i class="mdi mdi-calendar" /></span>
-                </a>
-              </span>
             </div>
           </div>
         </div>
       </div>
-    </div>
 
-    <DatePicker
-      opened={pickDate}
-      closeFunction={() => setPickDate(false)}
-      dateReceiver={onSelectDate} />
+      <DatePicker
+        opened={pickDate}
+        closeFunction={() => setPickDate(false)}
+        dateReceiver={onSelectDate}
+      />
 
-    <CardTable orders={orders}
-      onCreate={onCreate}
-      onCopyURL={onCopyURL}
-      onSelect={onSelectOrder}
-      onRefund={onRefundOrder} />
-  </section>;
+      <CardTable
+        orders={orders}
+        onCreate={onCreate}
+        onCopyURL={onCopyURL}
+        onSelect={onSelectOrder}
+        onRefund={onRefundOrder}
+      />
+    </section>
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx
index 924d09682..a1ec8d291 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/Table.tsx
@@ -173,7 +173,7 @@ function Table({
                     ? "never"
                     : format(
                         new Date(i.timestamp.t_s * 1000),
-                        "yyyy/MM/dd HH:mm:ss"
+                        "yyyy/MM/dd HH:mm:ss",
                       )}
                 </td>
                 <td
@@ -268,7 +268,7 @@ export function RefundModal({
     .map((r) => r.amount)
     .reduce(
       (p, c) => Amounts.add(p, Amounts.parseOrThrow(c)).amount,
-      Amounts.zeroOfCurrency(config.currency)
+      Amounts.zeroOfCurrency(config.currency),
     );
   const orderPrice =
     order.order_status === "paid"
@@ -298,7 +298,7 @@ export function RefundModal({
       : undefined,
   };
   const hasErrors = Object.keys(errors).some(
-    (k) => (errors as any)[k] !== undefined
+    (k) => (errors as any)[k] !== undefined,
   );
 
   const validateAndConfirm = () => {
@@ -306,7 +306,7 @@ export function RefundModal({
       if (!form.refund) return;
       onConfirm({
         refund: Amounts.stringify(
-          Amounts.add(Amounts.parse(form.refund)!, totalRefunded).amount
+          Amounts.add(Amounts.parse(form.refund)!, totalRefunded).amount,
         ),
         reason:
           form.description === undefined
@@ -358,7 +358,7 @@ export function RefundModal({
                             ? "never"
                             : format(
                                 new Date(r.timestamp.t_s * 1000),
-                                "yyyy-MM-dd HH:mm:ss"
+                                "yyyy-MM-dd HH:mm:ss",
                               )}
                         </td>
                         <td>{r.amount}</td>
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx
index a033e7b3a..b5fe7611c 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx
@@ -15,18 +15,23 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode, Fragment } from 'preact';
-import { useState } from 'preact/hooks';
+import { h, VNode, Fragment } from "preact";
+import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
 import { MerchantBackend, WithId } from "../../../../declaration.js";
 import { HttpError } from "../../../../hooks/backend.js";
-import { InstanceOrderFilter, useInstanceOrders, useOrderAPI, useOrderDetails 
} from "../../../../hooks/order.js";
-import { useTranslator } from '../../../../i18n/index.js';
+import {
+  InstanceOrderFilter,
+  useInstanceOrders,
+  useOrderAPI,
+  useOrderDetails,
+} from "../../../../hooks/order.js";
+import { useTranslator } from "../../../../i18n/index.js";
 import { Notification } from "../../../../utils/types.js";
 import { RefundModal } from "./Table.js";
 import { ListPage } from "./ListPage.js";
@@ -39,107 +44,133 @@ interface Props {
   onCreate: () => void;
 }
 
-export default function ({ onUnauthorized, onLoadError, onCreate, onSelect, 
onNotFound }: Props): VNode {
-  const [filter, setFilter] = useState<InstanceOrderFilter>({})
-  const [orderToBeRefunded, setOrderToBeRefunded] = 
useState<MerchantBackend.Orders.OrderHistoryEntry | undefined>(undefined)
-
-  const setNewDate = (date?: Date) => setFilter(prev => ({ ...prev, date }))
-
-  const result = useInstanceOrders(filter, setNewDate)
-  const { refundOrder, getPaymentURL } = useOrderAPI()
-
-  const [notif, setNotif] = useState<Notification | undefined>(undefined)
-
-  if (result.clientError && result.isUnauthorized) return onUnauthorized()
-  if (result.clientError && result.isNotfound) return onNotFound()
-  if (result.loading) return <Loading />
-  if (!result.ok) return onLoadError(result)
-
-  const isPaidActive = filter.paid === 'yes' ? "is-active" : ''
-  const isRefundedActive = filter.refunded === 'yes' ? "is-active" : ''
-  const isNotWiredActive = filter.wired === 'no' ? "is-active" : ''
-  const isAllActive = filter.paid === undefined && filter.refunded === 
undefined && filter.wired === undefined ? 'is-active' : ''
-
-  const i18n = useTranslator()
-  const [errorOrderId, setErrorOrderId] = useState<string | 
undefined>(undefined)
+export default function ({
+  onUnauthorized,
+  onLoadError,
+  onCreate,
+  onSelect,
+  onNotFound,
+}: Props): VNode {
+  const [filter, setFilter] = useState<InstanceOrderFilter>({});
+  const [orderToBeRefunded, setOrderToBeRefunded] = useState<
+    MerchantBackend.Orders.OrderHistoryEntry | undefined
+  >(undefined);
+
+  const setNewDate = (date?: Date) => setFilter((prev) => ({ ...prev, date }));
+
+  const result = useInstanceOrders(filter, setNewDate);
+  const { refundOrder, getPaymentURL } = useOrderAPI();
+
+  const [notif, setNotif] = useState<Notification | undefined>(undefined);
+
+  if (result.clientError && result.isUnauthorized) return onUnauthorized();
+  if (result.clientError && result.isNotfound) return onNotFound();
+  if (result.loading) return <Loading />;
+  if (!result.ok) return onLoadError(result);
+
+  const isPaidActive = filter.paid === "yes" ? "is-active" : "";
+  const isRefundedActive = filter.refunded === "yes" ? "is-active" : "";
+  const isNotWiredActive = filter.wired === "no" ? "is-active" : "";
+  const isAllActive =
+    filter.paid === undefined &&
+    filter.refunded === undefined &&
+    filter.wired === undefined
+      ? "is-active"
+      : "";
+
+  const i18n = useTranslator();
+  const [errorOrderId, setErrorOrderId] = useState<string | undefined>(
+    undefined,
+  );
 
   async function testIfOrderExistAndSelect(orderId: string) {
     if (!orderId) {
-      setErrorOrderId(i18n`Enter an order id`)
+      setErrorOrderId(i18n`Enter an order id`);
       return;
     }
     try {
-      await getPaymentURL(orderId)
-      onSelect(orderId)
-      setErrorOrderId(undefined)
+      await getPaymentURL(orderId);
+      onSelect(orderId);
+      setErrorOrderId(undefined);
     } catch {
-      setErrorOrderId(i18n`order not found`)
+      setErrorOrderId(i18n`order not found`);
     }
   }
 
-  return <Fragment>
-    <NotificationCard notification={notif} />
-
-    <ListPage
-      orders={result.data.orders.map(o => ({ ...o, id: o.order_id }))}
-      onLoadMoreBefore={result.loadMorePrev} 
hasMoreBefore={!result.isReachingStart}
-      onLoadMoreAfter={result.loadMore} hasMoreAfter={!result.isReachingEnd}
-
-      onSelectOrder={(order) => onSelect(order.id)}
-      onRefundOrder={(value) => setOrderToBeRefunded(value)}
-
-      errorOrderId={errorOrderId}
-      isAllActive={isAllActive}
-      isNotWiredActive={isNotWiredActive}
-      isPaidActive={isPaidActive}
-      isRefundedActive={isRefundedActive}
-      jumpToDate={filter.date}
-      onCopyURL={(id) => getPaymentURL(id).then((resp) => 
copyToClipboard(resp.data))}
-
-      onCreate={onCreate}
-      onSearchOrderById={testIfOrderExistAndSelect}
-      onSelectDate={setNewDate}
-      onShowAll={() => setFilter({})}
-      onShowPaid={() => setFilter({ paid: 'yes' })}
-      onShowRefunded={() => setFilter({ refunded: 'yes' })}
-      onShowNotWired={() => setFilter({ wired: 'no' })}
-
-    />
-
-    {orderToBeRefunded && <RefundModalForTable
-      id={orderToBeRefunded.order_id}
-      onCancel={() => setOrderToBeRefunded(undefined)}
-      onConfirm={(value) => refundOrder(orderToBeRefunded.order_id, value)
-        .then(() => setNotif({
-          message: i18n`refund created successfully`,
-          type: "SUCCESS"
-        }))
-        .catch((error) => setNotif({
-          message: i18n`could not create the refund`,
-          type: "ERROR",
-          description: error.message
-        }))
-        .then(() => setOrderToBeRefunded(undefined))}
-      onLoadError={(error) => {
-        setNotif({
-          message: i18n`could not create the refund`,
-          type: "ERROR",
-          description: error.message
-        });
-        setOrderToBeRefunded(undefined);
-        return <div />;
-      }}
-      onUnauthorized={onUnauthorized}
-      onNotFound={() => {
-        setNotif({
-          message: i18n`could not get the order to refund`,
-          type: "ERROR",
-          // description: error.message
-        });
-        setOrderToBeRefunded(undefined);
-        return <div />;
-      }} />}
-  </Fragment>
+  return (
+    <Fragment>
+      <NotificationCard notification={notif} />
+
+      <ListPage
+        orders={result.data.orders.map((o) => ({ ...o, id: o.order_id }))}
+        onLoadMoreBefore={result.loadMorePrev}
+        hasMoreBefore={!result.isReachingStart}
+        onLoadMoreAfter={result.loadMore}
+        hasMoreAfter={!result.isReachingEnd}
+        onSelectOrder={(order) => onSelect(order.id)}
+        onRefundOrder={(value) => setOrderToBeRefunded(value)}
+        errorOrderId={errorOrderId}
+        isAllActive={isAllActive}
+        isNotWiredActive={isNotWiredActive}
+        isPaidActive={isPaidActive}
+        isRefundedActive={isRefundedActive}
+        jumpToDate={filter.date}
+        onCopyURL={(id) =>
+          getPaymentURL(id).then((resp) => copyToClipboard(resp.data))
+        }
+        onCreate={onCreate}
+        onSearchOrderById={testIfOrderExistAndSelect}
+        onSelectDate={setNewDate}
+        onShowAll={() => setFilter({})}
+        onShowPaid={() => setFilter({ paid: "yes" })}
+        onShowRefunded={() => setFilter({ refunded: "yes" })}
+        onShowNotWired={() => setFilter({ wired: "no" })}
+      />
+
+      {orderToBeRefunded && (
+        <RefundModalForTable
+          id={orderToBeRefunded.order_id}
+          onCancel={() => setOrderToBeRefunded(undefined)}
+          onConfirm={(value) =>
+            refundOrder(orderToBeRefunded.order_id, value)
+              .then(() =>
+                setNotif({
+                  message: i18n`refund created successfully`,
+                  type: "SUCCESS",
+                }),
+              )
+              .catch((error) =>
+                setNotif({
+                  message: i18n`could not create the refund`,
+                  type: "ERROR",
+                  description: error.message,
+                }),
+              )
+              .then(() => setOrderToBeRefunded(undefined))
+          }
+          onLoadError={(error) => {
+            setNotif({
+              message: i18n`could not create the refund`,
+              type: "ERROR",
+              description: error.message,
+            });
+            setOrderToBeRefunded(undefined);
+            return <div />;
+          }}
+          onUnauthorized={onUnauthorized}
+          onNotFound={() => {
+            setNotif({
+              message: i18n`could not get the order to refund`,
+              type: "ERROR",
+              // description: error.message
+            });
+            setOrderToBeRefunded(undefined);
+            return <div />;
+          }}
+        />
+      )}
+    </Fragment>
+  );
 }
 
 interface RefundProps {
@@ -151,21 +182,30 @@ interface RefundProps {
   onConfirm: (m: MerchantBackend.Orders.RefundRequest) => void;
 }
 
-function RefundModalForTable({ id, onUnauthorized, onLoadError, onNotFound, 
onConfirm, onCancel }: RefundProps) {
+function RefundModalForTable({
+  id,
+  onUnauthorized,
+  onLoadError,
+  onNotFound,
+  onConfirm,
+  onCancel,
+}: RefundProps) {
   const result = useOrderDetails(id);
 
-  if (result.clientError && result.isUnauthorized) return onUnauthorized()
-  if (result.clientError && result.isNotfound) return onNotFound()
-  if (result.loading) return <Loading />
-  if (!result.ok) return onLoadError(result)
+  if (result.clientError && result.isUnauthorized) return onUnauthorized();
+  if (result.clientError && result.isNotfound) return onNotFound();
+  if (result.loading) return <Loading />;
+  if (!result.ok) return onLoadError(result);
 
-  return <RefundModal
-    order={result.data}
-    onCancel={onCancel}
-    onConfirm={onConfirm}
-  />
+  return (
+    <RefundModal
+      order={result.data}
+      onCancel={onCancel}
+      onConfirm={onConfirm}
+    />
+  );
 }
 
 async function copyToClipboard(text: string) {
-  return navigator.clipboard.writeText(text)
+  return navigator.clipboard.writeText(text);
 }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/create/Create.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/products/create/Create.stories.tsx
index b5e0ff9c7..2fc0819bb 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/products/create/Create.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/products/create/Create.stories.tsx
@@ -15,28 +15,29 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode, FunctionalComponent } from 'preact';
+import { h, VNode, FunctionalComponent } from "preact";
 import { CreatePage as TestedComponent } from "./CreatePage.js";
 
-
 export default {
-  title: 'Pages/Product/Create',
+  title: "Pages/Product/Create",
   component: TestedComponent,
   argTypes: {
-    onCreate: { action: 'onCreate' },
-    onBack: { action: 'onBack' },
+    onCreate: { action: "onCreate" },
+    onBack: { action: "onBack" },
   },
 };
 
-function createExample<Props>(Component: FunctionalComponent<Props>, props: 
Partial<Props>) {
-  const r = (args: any) => <Component {...args} />
-  r.args = props
-  return r
+function createExample<Props>(
+  Component: FunctionalComponent<Props>,
+  props: Partial<Props>,
+) {
+  const r = (args: any) => <Component {...args} />;
+  r.args = props;
+  return r;
 }
 
-export const Example = createExample(TestedComponent, {
-});
+export const Example = createExample(TestedComponent, {});
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatePage.tsx
index 3b475cb82..f6d7000ef 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatePage.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { h, VNode } from "preact";
 import { AsyncButton } from "../../../../components/exception/AsyncButton.js";
@@ -26,40 +26,55 @@ import { MerchantBackend } from 
"../../../../declaration.js";
 import { useListener } from "../../../../hooks/listener.js";
 import { Translate, useTranslator } from "../../../../i18n/index.js";
 
-type Entity = MerchantBackend.Products.ProductAddDetail & { product_id: string}
+type Entity = MerchantBackend.Products.ProductAddDetail & {
+  product_id: string;
+};
 
 interface Props {
   onCreate: (d: Entity) => Promise<void>;
   onBack?: () => void;
 }
 
-
 export function CreatePage({ onCreate, onBack }: Props): VNode {
+  const [submitForm, addFormSubmitter] = useListener<Entity | undefined>(
+    (result) => {
+      if (result) return onCreate(result);
+      return Promise.reject();
+    },
+  );
 
-  const [submitForm, addFormSubmitter] = useListener<Entity | 
undefined>((result) => {
-    if (result) return onCreate(result)
-    return Promise.reject()
-  })
-
-  const i18n = useTranslator()
+  const i18n = useTranslator();
 
-  return <div>
-    <section class="section is-main-section">
-      <div class="columns">
-        <div class="column" />
-        <div class="column is-four-fifths">
-          <ProductForm onSubscribe={addFormSubmitter} />
+  return (
+    <div>
+      <section class="section is-main-section">
+        <div class="columns">
+          <div class="column" />
+          <div class="column is-four-fifths">
+            <ProductForm onSubscribe={addFormSubmitter} />
 
-          <div class="buttons is-right mt-5">
-            {onBack && <button class="button" onClick={onBack} 
><Translate>Cancel</Translate></button>}
-            <AsyncButton onClick={submitForm} data-tooltip={
-              !submitForm ? i18n`Need to complete marked fields` : 'confirm 
operation'
-            } 
disabled={!submitForm}><Translate>Confirm</Translate></AsyncButton>
+            <div class="buttons is-right mt-5">
+              {onBack && (
+                <button class="button" onClick={onBack}>
+                  <Translate>Cancel</Translate>
+                </button>
+              )}
+              <AsyncButton
+                onClick={submitForm}
+                data-tooltip={
+                  !submitForm
+                    ? i18n`Need to complete marked fields`
+                    : "confirm operation"
+                }
+                disabled={!submitForm}
+              >
+                <Translate>Confirm</Translate>
+              </AsyncButton>
+            </div>
           </div>
-
+          <div class="column" />
         </div>
-        <div class="column" />
-      </div>
-    </section>
-  </div>
-}
\ No newline at end of file
+      </section>
+    </div>
+  );
+}
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatedSuccessfully.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatedSuccessfully.tsx
index e9880b73a..6b02430cc 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatedSuccessfully.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/products/create/CreatedSuccessfully.tsx
@@ -24,44 +24,49 @@ interface Props {
   onCreateAnother?: () => void;
 }
 
-export function CreatedSuccessfully({ entity, onConfirm, onCreateAnother }: 
Props): VNode {
-
-  return <Template onConfirm={onConfirm} onCreateAnother={onCreateAnother}>
-    <div class="field is-horizontal">
-      <div class="field-label is-normal">
-        <label class="label">Image</label>
-      </div>
-      <div class="field-body is-flex-grow-3">
-        <div class="field">
-          <p class="control">
-            <img src={entity.image} style={{ width: 200, height: 200 }} />
-          </p>
+export function CreatedSuccessfully({
+  entity,
+  onConfirm,
+  onCreateAnother,
+}: Props): VNode {
+  return (
+    <Template onConfirm={onConfirm} onCreateAnother={onCreateAnother}>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label class="label">Image</label>
         </div>
-      </div>
-    </div>
-    <div class="field is-horizontal">
-      <div class="field-label is-normal">
-        <label class="label">Description</label>
-      </div>
-      <div class="field-body is-flex-grow-3">
-        <div class="field">
-          <p class="control">
-            <textarea class="input" readonly value={entity.description} />
-          </p>
+        <div class="field-body is-flex-grow-3">
+          <div class="field">
+            <p class="control">
+              <img src={entity.image} style={{ width: 200, height: 200 }} />
+            </p>
+          </div>
         </div>
       </div>
-    </div>
-    <div class="field is-horizontal">
-      <div class="field-label is-normal">
-        <label class="label">Price</label>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label class="label">Description</label>
+        </div>
+        <div class="field-body is-flex-grow-3">
+          <div class="field">
+            <p class="control">
+              <textarea class="input" readonly value={entity.description} />
+            </p>
+          </div>
+        </div>
       </div>
-      <div class="field-body is-flex-grow-3">
-        <div class="field">
-          <p class="control">
-            <input class="input" readonly value={entity.price} />
-          </p>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label class="label">Price</label>
+        </div>
+        <div class="field-body is-flex-grow-3">
+          <div class="field">
+            <p class="control">
+              <input class="input" readonly value={entity.price} />
+            </p>
+          </div>
         </div>
       </div>
-    </div>
-  </Template>;
+    </Template>
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx
index 90b4d01a6..62ecaf512 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx
@@ -15,41 +15,46 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { Fragment, h, VNode } from 'preact';
-import { useState } from 'preact/hooks';
+import { Fragment, h, VNode } from "preact";
+import { useState } from "preact/hooks";
 import { NotificationCard } from "../../../../components/menu/index.js";
 import { MerchantBackend } from "../../../../declaration.js";
 import { useProductAPI } from "../../../../hooks/product.js";
-import { useTranslator } from '../../../../i18n/index.js';
+import { useTranslator } from "../../../../i18n/index.js";
 import { Notification } from "../../../../utils/types.js";
 import { CreatePage } from "./CreatePage.js";
 
-export type Entity = MerchantBackend.Products.ProductAddDetail
+export type Entity = MerchantBackend.Products.ProductAddDetail;
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
 }
 export default function CreateProduct({ onConfirm, onBack }: Props): VNode {
-  const { createProduct } = useProductAPI()
-  const [notif, setNotif] = useState<Notification | undefined>(undefined)
-  const i18n = useTranslator()
-  
-  return <Fragment>
-    <NotificationCard notification={notif} />
-    <CreatePage
-      onBack={onBack}
-      onCreate={(request: MerchantBackend.Products.ProductAddDetail) => {
-        return createProduct(request).then(() => onConfirm()).catch((error) => 
{
-          setNotif({
-            message: i18n`could not create product`,
-            type: "ERROR",
-            description: error.message
-          })
-        })
-      }} />
-  </Fragment>
-}
\ No newline at end of file
+  const { createProduct } = useProductAPI();
+  const [notif, setNotif] = useState<Notification | undefined>(undefined);
+  const i18n = useTranslator();
+
+  return (
+    <Fragment>
+      <NotificationCard notification={notif} />
+      <CreatePage
+        onBack={onBack}
+        onCreate={(request: MerchantBackend.Products.ProductAddDetail) => {
+          return createProduct(request)
+            .then(() => onConfirm())
+            .catch((error) => {
+              setNotif({
+                message: i18n`could not create product`,
+                type: "ERROR",
+                description: error.message,
+              });
+            });
+        }}
+      />
+    </Fragment>
+  );
+}
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/list/List.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/products/list/List.stories.tsx
index ac22960b2..c2c4d548c 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/products/list/List.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/products/list/List.stories.tsx
@@ -15,44 +15,47 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode, FunctionalComponent } from 'preact';
+import { h, VNode, FunctionalComponent } from "preact";
 import { CardTable as TestedComponent } from "./Table.js";
 
-
 export default {
-  title: 'Pages/Product/List',
+  title: "Pages/Product/List",
   component: TestedComponent,
   argTypes: {
-    onCreate: { action: 'onCreate' },
-    onSelect: { action: 'onSelect' },
-    onDelete: { action: 'onDelete' },
-    onUpdate: { action: 'onUpdate' },
+    onCreate: { action: "onCreate" },
+    onSelect: { action: "onSelect" },
+    onDelete: { action: "onDelete" },
+    onUpdate: { action: "onUpdate" },
   },
 };
 
-function createExample<Props>(Component: FunctionalComponent<Props>, props: 
Partial<Props>) {
-  const r = (args: any) => <Component {...args} />
-  r.args = props
-  return r
+function createExample<Props>(
+  Component: FunctionalComponent<Props>,
+  props: Partial<Props>,
+) {
+  const r = (args: any) => <Component {...args} />;
+  r.args = props;
+  return r;
 }
 
-
 export const Example = createExample(TestedComponent, {
-  instances: [{
-    id: 'orderid',
-    description: 'description1',
-    description_i18n: {} as any,
-    image: '',
-    price: 'TESTKUDOS:10',
-    taxes: [],
-    total_lost: 10,
-    total_sold: 5,
-    total_stock: 15,
-    unit: 'bar',
-    address: {}
-  }]
+  instances: [
+    {
+      id: "orderid",
+      description: "description1",
+      description_i18n: {} as any,
+      image: "",
+      price: "TESTKUDOS:10",
+      taxes: [],
+      total_lost: 10,
+      total_sold: 5,
+      total_stock: 15,
+      unit: "bar",
+      address: {},
+    },
+  ],
 });
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/list/Table.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/products/list/Table.tsx
index dfa66fcf4..515b36895 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/products/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/products/list/Table.tsx
@@ -41,7 +41,7 @@ interface Props {
   onSelect: (product: Entity) => void;
   onUpdate: (
     id: string,
-    data: MerchantBackend.Products.ProductPatchDetail
+    data: MerchantBackend.Products.ProductPatchDetail,
   ) => Promise<void>;
   onCreate: () => void;
   selected?: boolean;
@@ -55,7 +55,7 @@ export function CardTable({
   onDelete,
 }: Props): VNode {
   const [rowSelection, rowSelectionHandler] = useState<string | undefined>(
-    undefined
+    undefined,
   );
   const i18n = useTranslator();
   return (
@@ -107,7 +107,7 @@ interface TableProps {
   onSelect: (id: Entity) => void;
   onUpdate: (
     id: string,
-    data: MerchantBackend.Products.ProductPatchDetail
+    data: MerchantBackend.Products.ProductPatchDetail,
   ) => Promise<void>;
   onDelete: (id: Entity) => void;
   rowSelectionHandler: StateUpdater<string | undefined>;
@@ -159,7 +159,7 @@ function Table({
               ? "never"
               : `restock at ${format(
                   new Date(i.next_restock.t_s * 1000),
-                  "yyyy/MM/dd"
+                  "yyyy/MM/dd",
                 )}`;
             let stockInfo: ComponentChildren = "";
             if (i.total_stock < 0) {
@@ -277,7 +277,7 @@ function Table({
                         product={i}
                         onUpdate={(prod) =>
                           onUpdate(i.id, prod).then((r) =>
-                            rowSelectionHandler(undefined)
+                            rowSelectionHandler(undefined),
                           )
                         }
                         onCancel={() => rowSelectionHandler(undefined)}
@@ -297,7 +297,7 @@ function Table({
 interface FastProductUpdateFormProps {
   product: Entity;
   onUpdate: (
-    data: MerchantBackend.Products.ProductPatchDetail
+    data: MerchantBackend.Products.ProductPatchDetail,
   ) => Promise<void>;
   onCancel: () => void;
 }
@@ -381,7 +381,7 @@ function FastProductWithManagedStockUpdateForm({
   };
 
   const hasErrors = Object.keys(errors).some(
-    (k) => (errors as any)[k] !== undefined
+    (k) => (errors as any)[k] !== undefined,
   );
   const i18n = useTranslator();
 
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx
index 9f1d077ac..7e9118d24 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx
@@ -15,18 +15,21 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode } from 'preact';
-import { useState } from 'preact/hooks';
+import { h, VNode } from "preact";
+import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
 import { MerchantBackend, WithId } from "../../../../declaration.js";
 import { HttpError } from "../../../../hooks/backend.js";
-import { useInstanceProducts, useProductAPI } from 
"../../../../hooks/product.js";
-import { useTranslator } from '../../../../i18n/index.js';
+import {
+  useInstanceProducts,
+  useProductAPI,
+} from "../../../../hooks/product.js";
+import { useTranslator } from "../../../../i18n/index.js";
 import { Notification } from "../../../../utils/types.js";
 import { CardTable } from "./Table.js";
 
@@ -37,44 +40,65 @@ interface Props {
   onSelect: (id: string) => void;
   onLoadError: (e: HttpError) => VNode;
 }
-export default function ProductList({ onUnauthorized, onLoadError, onCreate, 
onSelect, onNotFound }: Props): VNode {
-  const result = useInstanceProducts()
-  const { deleteProduct, updateProduct } = useProductAPI()
-  const [notif, setNotif] = useState<Notification | undefined>(undefined)
+export default function ProductList({
+  onUnauthorized,
+  onLoadError,
+  onCreate,
+  onSelect,
+  onNotFound,
+}: Props): VNode {
+  const result = useInstanceProducts();
+  const { deleteProduct, updateProduct } = useProductAPI();
+  const [notif, setNotif] = useState<Notification | undefined>(undefined);
 
-  const i18n = useTranslator()
+  const i18n = useTranslator();
 
-  if (result.clientError && result.isUnauthorized) return onUnauthorized()
-  if (result.clientError && result.isNotfound) return onNotFound()
-  if (result.loading) return <Loading />
-  if (!result.ok) return onLoadError(result)
+  if (result.clientError && result.isUnauthorized) return onUnauthorized();
+  if (result.clientError && result.isNotfound) return onNotFound();
+  if (result.loading) return <Loading />;
+  if (!result.ok) return onLoadError(result);
 
-  return <section class="section is-main-section">
-    <NotificationCard notification={notif} />
+  return (
+    <section class="section is-main-section">
+      <NotificationCard notification={notif} />
 
-    <CardTable instances={result.data}
-      onCreate={onCreate}
-      onUpdate={(id, prod) => updateProduct(id, prod)
-        .then(() => setNotif({
-          message: i18n`product updated successfully`,
-          type: "SUCCESS"
-        })).catch((error) => setNotif({
-          message: i18n`could not update the product`,
-          type: "ERROR",
-          description: error.message
-        }))
-      }
-      onSelect={(product) => onSelect(product.id)}
-      onDelete={(prod: (MerchantBackend.Products.ProductDetail & WithId)) => 
deleteProduct(prod.id)
-        .then(() => setNotif({
-          message: i18n`product delete successfully`,
-          type: "SUCCESS"
-        })).catch((error) => setNotif({
-          message: i18n`could not delete the product`,
-          type: "ERROR",
-          description: error.message
-        }))
-      }
-    />
-  </section>
-}
\ No newline at end of file
+      <CardTable
+        instances={result.data}
+        onCreate={onCreate}
+        onUpdate={(id, prod) =>
+          updateProduct(id, prod)
+            .then(() =>
+              setNotif({
+                message: i18n`product updated successfully`,
+                type: "SUCCESS",
+              }),
+            )
+            .catch((error) =>
+              setNotif({
+                message: i18n`could not update the product`,
+                type: "ERROR",
+                description: error.message,
+              }),
+            )
+        }
+        onSelect={(product) => onSelect(product.id)}
+        onDelete={(prod: MerchantBackend.Products.ProductDetail & WithId) =>
+          deleteProduct(prod.id)
+            .then(() =>
+              setNotif({
+                message: i18n`product delete successfully`,
+                type: "SUCCESS",
+              }),
+            )
+            .catch((error) =>
+              setNotif({
+                message: i18n`could not delete the product`,
+                type: "ERROR",
+                description: error.message,
+              }),
+            )
+        }
+      />
+    </section>
+  );
+}
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/update/Update.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/products/update/Update.stories.tsx
index 95dd1f5cc..a85b13b8b 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/products/update/Update.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/products/update/Update.stories.tsx
@@ -15,57 +15,59 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode, FunctionalComponent } from 'preact';
+import { h, VNode, FunctionalComponent } from "preact";
 import { UpdatePage as TestedComponent } from "./UpdatePage.js";
 
-
 export default {
-  title: 'Pages/Product/Update',
+  title: "Pages/Product/Update",
   component: TestedComponent,
   argTypes: {
-    onUpdate: { action: 'onUpdate' },
-    onBack: { action: 'onBack' },
+    onUpdate: { action: "onUpdate" },
+    onBack: { action: "onBack" },
   },
 };
 
-function createExample<Props>(Component: FunctionalComponent<Props>, props: 
Partial<Props>) {
-  const r = (args: any) => <Component {...args} />
-  r.args = props
-  return r
+function createExample<Props>(
+  Component: FunctionalComponent<Props>,
+  props: Partial<Props>,
+) {
+  const r = (args: any) => <Component {...args} />;
+  r.args = props;
+  return r;
 }
 
 export const WithManagedStock = createExample(TestedComponent, {
   product: {
-    product_id: '20102-ASDAS-QWE',
-    description: 'description1',
+    product_id: "20102-ASDAS-QWE",
+    description: "description1",
     description_i18n: {} as any,
-    image: '',
-    price: 'TESTKUDOS:10',
+    image: "",
+    price: "TESTKUDOS:10",
     taxes: [],
     total_lost: 10,
     total_sold: 5,
     total_stock: 15,
-    unit: 'bar',
-    address: {}
-  }
+    unit: "bar",
+    address: {},
+  },
 });
 
 export const WithInfiniteStock = createExample(TestedComponent, {
   product: {
-    product_id: '20102-ASDAS-QWE',
-    description: 'description1',
+    product_id: "20102-ASDAS-QWE",
+    description: "description1",
     description_i18n: {} as any,
-    image: '',
-    price: 'TESTKUDOS:10',
+    image: "",
+    price: "TESTKUDOS:10",
     taxes: [],
     total_lost: 10,
     total_sold: 5,
     total_stock: -1,
-    unit: 'bar',
-    address: {}
-  }
+    unit: "bar",
+    address: {},
+  },
 });
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/update/UpdatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/products/update/UpdatePage.tsx
index 54fef6003..841c0222f 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/products/update/UpdatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/products/update/UpdatePage.tsx
@@ -15,9 +15,9 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { h, VNode } from "preact";
 import { AsyncButton } from "../../../../components/exception/AsyncButton.js";
@@ -26,7 +26,7 @@ import { MerchantBackend, WithId } from 
"../../../../declaration.js";
 import { useListener } from "../../../../hooks/listener.js";
 import { Translate, useTranslator } from "../../../../i18n/index.js";
 
-type Entity = MerchantBackend.Products.ProductDetail & { product_id: string }
+type Entity = MerchantBackend.Products.ProductDetail & { product_id: string };
 
 interface Props {
   onUpdate: (d: Entity) => Promise<void>;
@@ -35,43 +35,65 @@ interface Props {
 }
 
 export function UpdatePage({ product, onUpdate, onBack }: Props): VNode {
-  const [submitForm, addFormSubmitter] = useListener<Entity | 
undefined>((result) => {
-    if (result) return onUpdate(result)
-    return Promise.resolve()
-  })
-
-  const i18n = useTranslator()
+  const [submitForm, addFormSubmitter] = useListener<Entity | undefined>(
+    (result) => {
+      if (result) return onUpdate(result);
+      return Promise.resolve();
+    },
+  );
 
-  return <div>
-    <section class="section">
-      <section class="hero is-hero-bar">
-        <div class="hero-body">
+  const i18n = useTranslator();
 
-          <div class="level">
-            <div class="level-left">
-              <div class="level-item">
-                <span class="is-size-4"><Translate>Product 
id:</Translate><b>{product.product_id}</b></span>
+  return (
+    <div>
+      <section class="section">
+        <section class="hero is-hero-bar">
+          <div class="hero-body">
+            <div class="level">
+              <div class="level-left">
+                <div class="level-item">
+                  <span class="is-size-4">
+                    <Translate>Product id:</Translate>
+                    <b>{product.product_id}</b>
+                  </span>
+                </div>
               </div>
             </div>
           </div>
-        </div>
-      </section>
-      <hr />
+        </section>
+        <hr />
 
-      <div class="columns">
-        <div class="column" />
-        <div class="column is-four-fifths">
-          <ProductForm initial={product} onSubscribe={addFormSubmitter} 
alreadyExist />
+        <div class="columns">
+          <div class="column" />
+          <div class="column is-four-fifths">
+            <ProductForm
+              initial={product}
+              onSubscribe={addFormSubmitter}
+              alreadyExist
+            />
 
-          <div class="buttons is-right mt-5">
-            {onBack && <button class="button" onClick={onBack} 
><Translate>Cancel</Translate></button>}
-            <AsyncButton onClick={submitForm} data-tooltip={
-              !submitForm ? i18n`Need to complete marked fields` : 'confirm 
operation'
-            } 
disabled={!submitForm}><Translate>Confirm</Translate></AsyncButton>
+            <div class="buttons is-right mt-5">
+              {onBack && (
+                <button class="button" onClick={onBack}>
+                  <Translate>Cancel</Translate>
+                </button>
+              )}
+              <AsyncButton
+                onClick={submitForm}
+                data-tooltip={
+                  !submitForm
+                    ? i18n`Need to complete marked fields`
+                    : "confirm operation"
+                }
+                disabled={!submitForm}
+              >
+                <Translate>Confirm</Translate>
+              </AsyncButton>
+            </div>
           </div>
+          <div class="column" />
         </div>
-        <div class="column" />
-      </div>
-    </section>
-  </div>
-}
\ No newline at end of file
+      </section>
+    </div>
+  );
+}
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx
index c32424348..3988fc9f0 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx
@@ -15,22 +15,22 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { Fragment, h, VNode } from 'preact';
-import { useState } from 'preact/hooks';
+import { Fragment, h, VNode } from "preact";
+import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { NotificationCard } from "../../../../components/menu/index.js";
 import { MerchantBackend } from "../../../../declaration.js";
 import { HttpError } from "../../../../hooks/backend.js";
 import { useProductAPI, useProductDetails } from 
"../../../../hooks/product.js";
-import { useTranslator } from '../../../../i18n/index.js';
+import { useTranslator } from "../../../../i18n/index.js";
 import { Notification } from "../../../../utils/types.js";
 import { UpdatePage } from "./UpdatePage.js";
 
-export type Entity = MerchantBackend.Products.ProductAddDetail
+export type Entity = MerchantBackend.Products.ProductAddDetail;
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
@@ -39,33 +39,43 @@ interface Props {
   onLoadError: (e: HttpError) => VNode;
   pid: string;
 }
-export default function UpdateProduct({ pid, onConfirm, onBack, 
onUnauthorized, onNotFound, onLoadError }: Props): VNode {
-  const { updateProduct } = useProductAPI()
-  const result = useProductDetails(pid)
-  const [notif, setNotif] = useState<Notification | undefined>(undefined)
+export default function UpdateProduct({
+  pid,
+  onConfirm,
+  onBack,
+  onUnauthorized,
+  onNotFound,
+  onLoadError,
+}: Props): VNode {
+  const { updateProduct } = useProductAPI();
+  const result = useProductDetails(pid);
+  const [notif, setNotif] = useState<Notification | undefined>(undefined);
 
-  const i18n = useTranslator()
+  const i18n = useTranslator();
 
-  if (result.clientError && result.isUnauthorized) return onUnauthorized()
-  if (result.clientError && result.isNotfound) return onNotFound()
-  if (result.loading) return <Loading />
-  if (!result.ok) return onLoadError(result)
+  if (result.clientError && result.isUnauthorized) return onUnauthorized();
+  if (result.clientError && result.isNotfound) return onNotFound();
+  if (result.loading) return <Loading />;
+  if (!result.ok) return onLoadError(result);
 
-  return <Fragment>
-    <NotificationCard notification={notif} />
-    <UpdatePage
-      product={{ ...result.data, product_id: pid }}
-      onBack={onBack}
-      onUpdate={(data) => {
-        return updateProduct(pid, data)
-          .then(onConfirm)
-          .catch((error) => {
-            setNotif({
-              message: i18n`could not create product`,
-              type: "ERROR",
-              description: error.message
-            })
-          })
-      }} />
-  </Fragment>
-}
\ No newline at end of file
+  return (
+    <Fragment>
+      <NotificationCard notification={notif} />
+      <UpdatePage
+        product={{ ...result.data, product_id: pid }}
+        onBack={onBack}
+        onUpdate={(data) => {
+          return updateProduct(pid, data)
+            .then(onConfirm)
+            .catch((error) => {
+              setNotif({
+                message: i18n`could not create product`,
+                type: "ERROR",
+                description: error.message,
+              });
+            });
+        }}
+      />
+    </Fragment>
+  );
+}
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/Create.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/Create.stories.tsx
index 2f7f25b09..5542c028a 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/Create.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/Create.stories.tsx
@@ -15,28 +15,29 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode, FunctionalComponent } from 'preact';
+import { h, VNode, FunctionalComponent } from "preact";
 import { CreatePage as TestedComponent } from "./CreatePage.js";
 
-
 export default {
-  title: 'Pages/Reserve/Create',
+  title: "Pages/Reserve/Create",
   component: TestedComponent,
   argTypes: {
-    onCreate: { action: 'onCreate' },
-    onBack: { action: 'onBack' },
+    onCreate: { action: "onCreate" },
+    onBack: { action: "onBack" },
   },
 };
 
-function createExample<Props>(Component: FunctionalComponent<Props>, props: 
Partial<Props>) {
-  const r = (args: any) => <Component {...args} />
-  r.args = props
-  return r
+function createExample<Props>(
+  Component: FunctionalComponent<Props>,
+  props: Partial<Props>,
+) {
+  const r = (args: any) => <Component {...args} />;
+  r.args = props;
+  return r;
 }
 
-export const Example = createExample(TestedComponent, {
-});
+export const Example = createExample(TestedComponent, {});
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/CreatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/CreatePage.tsx
index 4910f9345..2c3e963b8 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/CreatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/CreatePage.tsx
@@ -15,154 +15,252 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { Fragment, h, VNode } from "preact";
 import { StateUpdater, useEffect, useState } from "preact/hooks";
-import { FormErrors, FormProvider } from 
"../../../../components/form/FormProvider.js";
+import {
+  FormErrors,
+  FormProvider,
+} from "../../../../components/form/FormProvider.js";
 import { Input } from "../../../../components/form/Input.js";
 import { InputCurrency } from "../../../../components/form/InputCurrency.js";
 import { ExchangeBackend, MerchantBackend } from "../../../../declaration.js";
 import { Translate, useTranslator } from "../../../../i18n/index.js";
 import { AsyncButton } from "../../../../components/exception/AsyncButton.js";
-import { canonicalizeBaseUrl, ExchangeKeysJson } from "@gnu-taler/taler-util"
-import { PAYTO_WIRE_METHOD_LOOKUP, URL_REGEX } from 
"../../../../utils/constants.js";
+import { canonicalizeBaseUrl, ExchangeKeysJson } from "@gnu-taler/taler-util";
+import {
+  PAYTO_WIRE_METHOD_LOOKUP,
+  URL_REGEX,
+} from "../../../../utils/constants.js";
 import { request } from "../../../../hooks/backend.js";
 import { InputSelector } from "../../../../components/form/InputSelector.js";
 
-type Entity = MerchantBackend.Tips.ReserveCreateRequest
+type Entity = MerchantBackend.Tips.ReserveCreateRequest;
 
 interface Props {
   onCreate: (d: Entity) => Promise<void>;
   onBack?: () => void;
 }
 
-
 enum Steps {
   EXCHANGE,
   WIRE_METHOD,
 }
 
 interface ViewProps {
-  step: Steps,
+  step: Steps;
   setCurrentStep: (s: Steps) => void;
   reserve: Partial<Entity>;
   onBack?: () => void;
   submitForm: () => Promise<void>;
   setReserve: StateUpdater<Partial<Entity>>;
 }
-function ViewStep({ step, setCurrentStep, reserve, onBack, submitForm, 
setReserve }: ViewProps): VNode {
-  const i18n = useTranslator()
-  const [wireMethods, setWireMethods] = useState<Array<string>>([])
-  const [exchangeQueryError, setExchangeQueryError] = useState<string | 
undefined>(undefined)
+function ViewStep({
+  step,
+  setCurrentStep,
+  reserve,
+  onBack,
+  submitForm,
+  setReserve,
+}: ViewProps): VNode {
+  const i18n = useTranslator();
+  const [wireMethods, setWireMethods] = useState<Array<string>>([]);
+  const [exchangeQueryError, setExchangeQueryError] = useState<
+    string | undefined
+  >(undefined);
 
   useEffect(() => {
-    setExchangeQueryError(undefined)
-  }, [reserve.exchange_url])
+    setExchangeQueryError(undefined);
+  }, [reserve.exchange_url]);
 
   switch (step) {
     case Steps.EXCHANGE: {
       const errors: FormErrors<Entity> = {
-        initial_balance: !reserve.initial_balance ? 'cannot be empty' : 
!(parseInt(reserve.initial_balance.split(':')[1], 10) > 0) ? i18n`it should be 
greater than 0` : undefined,
-        exchange_url: !reserve.exchange_url ? i18n`cannot be empty` : 
!URL_REGEX.test(reserve.exchange_url) ? i18n`must be a valid URL` : 
!exchangeQueryError ? undefined : exchangeQueryError,
-      }
-
-      const hasErrors = Object.keys(errors).some(k => (errors as any)[k] !== 
undefined)
-
-      return <Fragment>
-        <FormProvider<Entity> object={reserve} errors={errors} 
valueHandler={setReserve}>
-          <InputCurrency<Entity> name="initial_balance" label={i18n`Initial 
balance`} tooltip={i18n`balance prior to deposit`} />
-          <Input<Entity> name="exchange_url" label={i18n`Exchange URL`} 
tooltip={i18n`URL of exchange`} />
-        </FormProvider>
-
-        <div class="buttons is-right mt-5">
-          {onBack && <button class="button" onClick={onBack} 
><Translate>Cancel</Translate></button>}
-          <AsyncButton class="has-tooltip-left" onClick={() => {
-            return 
request<ExchangeBackend.WireResponse>(`${reserve.exchange_url}wire`).then(r => {
-              const wireMethods = r.data.accounts.map(a => {
-                const match = PAYTO_WIRE_METHOD_LOOKUP.exec(a.payto_uri)
-                return match && match[1] || ''
-              })
-              setWireMethods(wireMethods)
-              setCurrentStep(Steps.WIRE_METHOD)
-              return
-            }).catch((r: any) => {
-              setExchangeQueryError(r.message)
-            })
-          }} data-tooltip={
-            hasErrors ? i18n`Need to complete marked fields` : 'confirm 
operation'
-          } disabled={hasErrors} ><Translate>Next</Translate></AsyncButton>
-        </div>
-      </Fragment>
+        initial_balance: !reserve.initial_balance
+          ? "cannot be empty"
+          : !(parseInt(reserve.initial_balance.split(":")[1], 10) > 0)
+          ? i18n`it should be greater than 0`
+          : undefined,
+        exchange_url: !reserve.exchange_url
+          ? i18n`cannot be empty`
+          : !URL_REGEX.test(reserve.exchange_url)
+          ? i18n`must be a valid URL`
+          : !exchangeQueryError
+          ? undefined
+          : exchangeQueryError,
+      };
+
+      const hasErrors = Object.keys(errors).some(
+        (k) => (errors as any)[k] !== undefined,
+      );
+
+      return (
+        <Fragment>
+          <FormProvider<Entity>
+            object={reserve}
+            errors={errors}
+            valueHandler={setReserve}
+          >
+            <InputCurrency<Entity>
+              name="initial_balance"
+              label={i18n`Initial balance`}
+              tooltip={i18n`balance prior to deposit`}
+            />
+            <Input<Entity>
+              name="exchange_url"
+              label={i18n`Exchange URL`}
+              tooltip={i18n`URL of exchange`}
+            />
+          </FormProvider>
+
+          <div class="buttons is-right mt-5">
+            {onBack && (
+              <button class="button" onClick={onBack}>
+                <Translate>Cancel</Translate>
+              </button>
+            )}
+            <AsyncButton
+              class="has-tooltip-left"
+              onClick={() => {
+                return request<ExchangeBackend.WireResponse>(
+                  `${reserve.exchange_url}wire`,
+                )
+                  .then((r) => {
+                    const wireMethods = r.data.accounts.map((a) => {
+                      const match = PAYTO_WIRE_METHOD_LOOKUP.exec(a.payto_uri);
+                      return (match && match[1]) || "";
+                    });
+                    setWireMethods(wireMethods);
+                    setCurrentStep(Steps.WIRE_METHOD);
+                    return;
+                  })
+                  .catch((r: any) => {
+                    setExchangeQueryError(r.message);
+                  });
+              }}
+              data-tooltip={
+                hasErrors
+                  ? i18n`Need to complete marked fields`
+                  : "confirm operation"
+              }
+              disabled={hasErrors}
+            >
+              <Translate>Next</Translate>
+            </AsyncButton>
+          </div>
+        </Fragment>
+      );
     }
 
     case Steps.WIRE_METHOD: {
       const errors: FormErrors<Entity> = {
         wire_method: !reserve.wire_method ? i18n`cannot be empty` : undefined,
-      }
-
-      const hasErrors = Object.keys(errors).some(k => (errors as any)[k] !== 
undefined)
-      return <Fragment>
-        <FormProvider<Entity> object={reserve} errors={errors} 
valueHandler={setReserve}>
-          <InputCurrency<Entity> name="initial_balance" label={i18n`Initial 
balance`} tooltip={i18n`balance prior to deposit`} readonly />
-          <Input<Entity> name="exchange_url" label={i18n`Exchange URL`} 
tooltip={i18n`URL of exchange`} readonly />
-          <InputSelector<Entity> name="wire_method" label={i18n`Wire method`} 
tooltip={i18n`method to use for wire transfer`} values={wireMethods} 
placeholder={i18n`Select one wire method`} />
-        </FormProvider>
-        <div class="buttons is-right mt-5">
-          {onBack && <button class="button" onClick={() => 
setCurrentStep(Steps.EXCHANGE)} ><Translate>Back</Translate></button>}
-          <AsyncButton onClick={submitForm} data-tooltip={
-              hasErrors ? i18n`Need to complete marked fields` : 'confirm 
operation'
-            } disabled={hasErrors} 
><Translate>Confirm</Translate></AsyncButton>
-        </div>
-      </Fragment>
+      };
 
+      const hasErrors = Object.keys(errors).some(
+        (k) => (errors as any)[k] !== undefined,
+      );
+      return (
+        <Fragment>
+          <FormProvider<Entity>
+            object={reserve}
+            errors={errors}
+            valueHandler={setReserve}
+          >
+            <InputCurrency<Entity>
+              name="initial_balance"
+              label={i18n`Initial balance`}
+              tooltip={i18n`balance prior to deposit`}
+              readonly
+            />
+            <Input<Entity>
+              name="exchange_url"
+              label={i18n`Exchange URL`}
+              tooltip={i18n`URL of exchange`}
+              readonly
+            />
+            <InputSelector<Entity>
+              name="wire_method"
+              label={i18n`Wire method`}
+              tooltip={i18n`method to use for wire transfer`}
+              values={wireMethods}
+              placeholder={i18n`Select one wire method`}
+            />
+          </FormProvider>
+          <div class="buttons is-right mt-5">
+            {onBack && (
+              <button
+                class="button"
+                onClick={() => setCurrentStep(Steps.EXCHANGE)}
+              >
+                <Translate>Back</Translate>
+              </button>
+            )}
+            <AsyncButton
+              onClick={submitForm}
+              data-tooltip={
+                hasErrors
+                  ? i18n`Need to complete marked fields`
+                  : "confirm operation"
+              }
+              disabled={hasErrors}
+            >
+              <Translate>Confirm</Translate>
+            </AsyncButton>
+          </div>
+        </Fragment>
+      );
     }
   }
 }
 
 export function CreatePage({ onCreate, onBack }: Props): VNode {
-  const [reserve, setReserve] = useState<Partial<Entity>>({})
-
+  const [reserve, setReserve] = useState<Partial<Entity>>({});
 
   const submitForm = () => {
-    return onCreate(reserve as Entity)
-  }
+    return onCreate(reserve as Entity);
+  };
 
-  const [currentStep, setCurrentStep] = useState(Steps.EXCHANGE)
-
-
-  return <div>
-    <section class="section is-main-section">
-      <div class="columns">
-        <div class="column" />
-        <div class="column is-four-fifths">
-
-          <div class="tabs is-toggle is-fullwidth is-small">
-            <ul>
-              <li class={currentStep === Steps.EXCHANGE ? "is-active" : ""}>
-                <a style={{ cursor: 'initial' }}>
-                  <span>Step 1: Specify exchange</span>
-                </a>
-              </li>
-              <li class={currentStep === Steps.WIRE_METHOD ? "is-active" : ""}>
-                <a style={{ cursor: 'initial' }}>
-                  <span>Step 2: Select wire method</span>
-                </a>
-              </li>
-            </ul>
-          </div>
+  const [currentStep, setCurrentStep] = useState(Steps.EXCHANGE);
+
+  return (
+    <div>
+      <section class="section is-main-section">
+        <div class="columns">
+          <div class="column" />
+          <div class="column is-four-fifths">
+            <div class="tabs is-toggle is-fullwidth is-small">
+              <ul>
+                <li class={currentStep === Steps.EXCHANGE ? "is-active" : ""}>
+                  <a style={{ cursor: "initial" }}>
+                    <span>Step 1: Specify exchange</span>
+                  </a>
+                </li>
+                <li
+                  class={currentStep === Steps.WIRE_METHOD ? "is-active" : ""}
+                >
+                  <a style={{ cursor: "initial" }}>
+                    <span>Step 2: Select wire method</span>
+                  </a>
+                </li>
+              </ul>
+            </div>
 
-          <ViewStep step={currentStep} reserve={reserve}
-            setCurrentStep={setCurrentStep}
-            setReserve={setReserve}
-            submitForm={submitForm}
-            onBack={onBack}
-          />
+            <ViewStep
+              step={currentStep}
+              reserve={reserve}
+              setCurrentStep={setCurrentStep}
+              setReserve={setReserve}
+              submitForm={submitForm}
+              onBack={onBack}
+            />
+          </div>
+          <div class="column" />
         </div>
-        <div class="column" />
-      </div>
-    </section>
-  </div>
+      </section>
+    </div>
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/CreatedSuccessfully.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/CreatedSuccessfully.stories.tsx
index 453147cdf..1d848a033 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/CreatedSuccessfully.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/CreatedSuccessfully.stories.tsx
@@ -15,39 +15,41 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode, FunctionalComponent } from 'preact';
+import { h, VNode, FunctionalComponent } from "preact";
 import { CreatedSuccessfully as TestedComponent } from 
"./CreatedSuccessfully.js";
 
-
 export default {
-  title: 'Pages/Reserve/CreatedSuccessfully',
+  title: "Pages/Reserve/CreatedSuccessfully",
   component: TestedComponent,
   argTypes: {
-    onCreate: { action: 'onCreate' },
-    onBack: { action: 'onBack' },
+    onCreate: { action: "onCreate" },
+    onBack: { action: "onBack" },
   },
 };
 
-function createExample<Props>(Component: FunctionalComponent<Props>, props: 
Partial<Props>) {
-  const r = (args: any) => <Component {...args} />
-  r.args = props
-  return r
+function createExample<Props>(
+  Component: FunctionalComponent<Props>,
+  props: Partial<Props>,
+) {
+  const r = (args: any) => <Component {...args} />;
+  r.args = props;
+  return r;
 }
 
 export const Example = createExample(TestedComponent, {
   entity: {
     request: {
-      exchange_url: 'http://exchange.taler/',
-      initial_balance: 'TESTKUDOS:1',
-      wire_method: 'x-taler-bank',
+      exchange_url: "http://exchange.taler/";,
+      initial_balance: "TESTKUDOS:1",
+      wire_method: "x-taler-bank",
     },
     response: {
-      payto_uri: 'payto://x-taler-bank/bank.taler:8080/exchange_account',
-      reserve_pub: 'WEQWDASDQWEASDADASDQWEQWEASDAS'
-    }
-  }
+      payto_uri: "payto://x-taler-bank/bank.taler:8080/exchange_account",
+      reserve_pub: "WEQWDASDQWEASDADASDQWEQWEASDAS",
+    },
+  },
 });
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/CreatedSuccessfully.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/CreatedSuccessfully.tsx
index 3da8beff8..9bb228e1f 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/CreatedSuccessfully.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/create/CreatedSuccessfully.tsx
@@ -20,7 +20,10 @@ import { MerchantBackend } from "../../../../declaration.js";
 import { Translate } from "../../../../i18n/index.js";
 import { QR } from "../../../../components/exception/QR.js";
 
-type Entity = { request: MerchantBackend.Tips.ReserveCreateRequest, response: 
MerchantBackend.Tips.ReserveCreateConfirmation };
+type Entity = {
+  request: MerchantBackend.Tips.ReserveCreateRequest;
+  response: MerchantBackend.Tips.ReserveCreateConfirmation;
+};
 
 interface Props {
   entity: Entity;
@@ -28,52 +31,77 @@ interface Props {
   onCreateAnother?: () => void;
 }
 
-export function CreatedSuccessfully({ entity, onConfirm, onCreateAnother }: 
Props): VNode {
-  const link = 
`${entity.response.payto_uri}?message=${entity.response.reserve_pub}&amount=${entity.request.initial_balance}`
+export function CreatedSuccessfully({
+  entity,
+  onConfirm,
+  onCreateAnother,
+}: Props): VNode {
+  const link = 
`${entity.response.payto_uri}?message=${entity.response.reserve_pub}&amount=${entity.request.initial_balance}`;
 
-  return <Template onConfirm={onConfirm} onCreateAnother={onCreateAnother}>
-    <div class="field is-horizontal">
-      <div class="field-label is-normal">
-        <label class="label">Amount</label>
-      </div>
-      <div class="field-body is-flex-grow-3">
-        <div class="field">
-          <p class="control">
-            <input readonly class="input" 
value={entity.request.initial_balance} />
-          </p>
+  return (
+    <Template onConfirm={onConfirm} onCreateAnother={onCreateAnother}>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label class="label">Amount</label>
         </div>
-      </div>
-    </div>
-    <div class="field is-horizontal">
-      <div class="field-label is-normal">
-        <label class="label">Exchange bank account</label>
-      </div>
-      <div class="field-body is-flex-grow-3">
-        <div class="field">
-          <p class="control">
-            <input readonly class="input" value={entity.response.payto_uri} />
-          </p>
+        <div class="field-body is-flex-grow-3">
+          <div class="field">
+            <p class="control">
+              <input
+                readonly
+                class="input"
+                value={entity.request.initial_balance}
+              />
+            </p>
+          </div>
         </div>
       </div>
-    </div>
-    <div class="field is-horizontal">
-      <div class="field-label is-normal">
-        <label class="label">Wire transfer subject</label>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label class="label">Exchange bank account</label>
+        </div>
+        <div class="field-body is-flex-grow-3">
+          <div class="field">
+            <p class="control">
+              <input readonly class="input" value={entity.response.payto_uri} 
/>
+            </p>
+          </div>
+        </div>
       </div>
-      <div class="field-body is-flex-grow-3">
-        <div class="field">
-          <p class="control">
-            <input class="input" readonly value={entity.response.reserve_pub} 
/>
-          </p>
+      <div class="field is-horizontal">
+        <div class="field-label is-normal">
+          <label class="label">Wire transfer subject</label>
+        </div>
+        <div class="field-body is-flex-grow-3">
+          <div class="field">
+            <p class="control">
+              <input
+                class="input"
+                readonly
+                value={entity.response.reserve_pub}
+              />
+            </p>
+          </div>
         </div>
       </div>
-    </div>
-    <p class="is-size-5"><Translate>To complete the setup of the reserve, you 
must now initiate a wire transfer using the given wire transfer subject and 
crediting the specified amount to the indicated account of the 
exchange.</Translate></p>
-    <p class="is-size-5"><Translate>If your system supports RFC 8905, you can 
do this by opening this URI:</Translate></p>
-    <pre>
-      <a target="_blank" rel="noreferrer" href={link}>{link}</a>
-    </pre>
-    <QR text={link} />
-  </Template>;
+      <p class="is-size-5">
+        <Translate>
+          To complete the setup of the reserve, you must now initiate a wire
+          transfer using the given wire transfer subject and crediting the
+          specified amount to the indicated account of the exchange.
+        </Translate>
+      </p>
+      <p class="is-size-5">
+        <Translate>
+          If your system supports RFC 8905, you can do this by opening this 
URI:
+        </Translate>
+      </p>
+      <pre>
+        <a target="_blank" rel="noreferrer" href={link}>
+          {link}
+        </a>
+      </pre>
+      <QR text={link} />
+    </Template>
+  );
 }
-
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/details/DetailPage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/details/DetailPage.tsx
index 689cdaaf5..b0b291859 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/details/DetailPage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/details/DetailPage.tsx
@@ -29,7 +29,10 @@ import { Input } from "../../../../components/form/Input.js";
 import { InputCurrency } from "../../../../components/form/InputCurrency.js";
 import { InputDate } from "../../../../components/form/InputDate.js";
 import { TextField } from "../../../../components/form/TextField.js";
-import { ContinueModal, SimpleModal } from 
"../../../../components/modal/index.js";
+import {
+  ContinueModal,
+  SimpleModal,
+} from "../../../../components/modal/index.js";
 import { MerchantBackend } from "../../../../declaration.js";
 import { useTipDetails } from "../../../../hooks/reserves.js";
 import { Translate, useTranslator } from "../../../../i18n/index.js";
@@ -47,7 +50,7 @@ interface Props {
 export function DetailPage({ id, selected, onBack }: Props): VNode {
   const i18n = useTranslator();
   const didExchangeAckTransfer = Amounts.isNonZero(
-    Amounts.parseOrThrow(selected.exchange_initial_amount)
+    Amounts.parseOrThrow(selected.exchange_initial_amount),
   );
   const link = 
`${selected.payto_uri}?message=${id}&amount=${selected.merchant_initial_amount}`;
 
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/details/Details.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/details/Details.stories.tsx
index fbf3e4fa4..cd1318922 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/details/Details.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/details/Details.stories.tsx
@@ -33,7 +33,7 @@ export default {
 
 function createExample<Props>(
   Component: FunctionalComponent<Props>,
-  props: Partial<Props>
+  props: Partial<Props>,
 ) {
   const r = (args: any) => <Component {...args} />;
   r.args = props;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/details/TipInfo.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/details/TipInfo.tsx
index d31310cc9..360d39aba 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/details/TipInfo.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/details/TipInfo.tsx
@@ -74,7 +74,7 @@ export function TipInfo({ id, amount, entity }: Props): VNode 
{
                     ? "never"
                     : format(
                         entity.expiration.t_s * 1000,
-                        "yyyy/MM/dd HH:mm:ss"
+                        "yyyy/MM/dd HH:mm:ss",
                       )
                 }
               />
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/AutorizeTipModal.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/AutorizeTipModal.tsx
index 24bd011e2..5200abedf 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/AutorizeTipModal.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/AutorizeTipModal.tsx
@@ -15,21 +15,27 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
-import { FormErrors, FormProvider } from 
"../../../../components/form/FormProvider.js";
+import {
+  FormErrors,
+  FormProvider,
+} from "../../../../components/form/FormProvider.js";
 import { Input } from "../../../../components/form/Input.js";
 import { InputCurrency } from "../../../../components/form/InputCurrency.js";
-import { ConfirmModal, ContinueModal } from 
"../../../../components/modal/index.js";
+import {
+  ConfirmModal,
+  ContinueModal,
+} from "../../../../components/modal/index.js";
 import { MerchantBackend } from "../../../../declaration.js";
 import { useTranslator } from "../../../../i18n/index.js";
 import { AuthorizeTipSchema } from "../../../../schemas/index.js";
 import { CreatedSuccessfully } from "./CreatedSuccessfully.js";
-import * as yup from 'yup';
+import * as yup from "yup";
 
 interface AuthorizeTipModalProps {
   onCancel: () => void;
@@ -40,46 +46,79 @@ interface AuthorizeTipModalProps {
   };
 }
 
-export function AuthorizeTipModal({ onCancel, onConfirm, tipAuthorized }: 
AuthorizeTipModalProps): VNode {
+export function AuthorizeTipModal({
+  onCancel,
+  onConfirm,
+  tipAuthorized,
+}: AuthorizeTipModalProps): VNode {
   // const result = useOrderDetails(id)
-  type State = MerchantBackend.Tips.TipCreateRequest
-  const [form, setValue] = useState<Partial<State>>({})
+  type State = MerchantBackend.Tips.TipCreateRequest;
+  const [form, setValue] = useState<Partial<State>>({});
   const i18n = useTranslator();
 
   // const [errors, setErrors] = useState<FormErrors<State>>({})
-  let errors: FormErrors<State> = {}
+  let errors: FormErrors<State> = {};
   try {
-    AuthorizeTipSchema.validateSync(form, { abortEarly: false })
+    AuthorizeTipSchema.validateSync(form, { abortEarly: false });
   } catch (err) {
     if (err instanceof yup.ValidationError) {
-      const yupErrors = err.inner as any[]
-      errors = yupErrors.reduce((prev, cur) => !cur.path ? prev : ({ ...prev, 
[cur.path]: cur.message }), {})
+      const yupErrors = err.inner as any[];
+      errors = yupErrors.reduce(
+        (prev, cur) =>
+          !cur.path ? prev : { ...prev, [cur.path]: cur.message },
+        {},
+      );
     }
   }
-  const hasErrors = Object.keys(errors).some(k => (errors as any)[k] !== 
undefined)
+  const hasErrors = Object.keys(errors).some(
+    (k) => (errors as any)[k] !== undefined,
+  );
 
   const validateAndConfirm = () => {
-    onConfirm(form as State)
-  }
+    onConfirm(form as State);
+  };
   if (tipAuthorized) {
-    return <ContinueModal description="tip" active onConfirm={onCancel}>
-      <CreatedSuccessfully
-        entity={tipAuthorized.response}
-        request={tipAuthorized.request}
-        onConfirm={onCancel}
-      />
-    </ContinueModal>
+    return (
+      <ContinueModal description="tip" active onConfirm={onCancel}>
+        <CreatedSuccessfully
+          entity={tipAuthorized.response}
+          request={tipAuthorized.request}
+          onConfirm={onCancel}
+        />
+      </ContinueModal>
+    );
   }
 
-  return <ConfirmModal description="tip" active onCancel={onCancel} 
disabled={hasErrors} onConfirm={validateAndConfirm}>
-
-    <FormProvider<State> errors={errors} object={form} valueHandler={setValue} 
>
-      <InputCurrency<State> name="amount" label={i18n`Amount`} 
tooltip={i18n`amount of tip`} />
-      <Input<State> name="justification" label={i18n`Justification`} 
inputType="multiline" tooltip={i18n`reason for the tip`} />
-      <Input<State> name="next_url" label={i18n`URL after tip`} 
tooltip={i18n`URL to visit after tip payment`} />
-    </FormProvider>
-
-  </ConfirmModal>
+  return (
+    <ConfirmModal
+      description="tip"
+      active
+      onCancel={onCancel}
+      disabled={hasErrors}
+      onConfirm={validateAndConfirm}
+    >
+      <FormProvider<State>
+        errors={errors}
+        object={form}
+        valueHandler={setValue}
+      >
+        <InputCurrency<State>
+          name="amount"
+          label={i18n`Amount`}
+          tooltip={i18n`amount of tip`}
+        />
+        <Input<State>
+          name="justification"
+          label={i18n`Justification`}
+          inputType="multiline"
+          tooltip={i18n`reason for the tip`}
+        />
+        <Input<State>
+          name="next_url"
+          label={i18n`URL after tip`}
+          tooltip={i18n`URL to visit after tip payment`}
+        />
+      </FormProvider>
+    </ConfirmModal>
+  );
 }
-
-
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/CreatedSuccessfully.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/CreatedSuccessfully.tsx
index 62f6ac538..643651b52 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/CreatedSuccessfully.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/CreatedSuccessfully.tsx
@@ -87,7 +87,7 @@ export function CreatedSuccessfully({
                     ? "never"
                     : format(
                         entity.tip_expiration.t_s * 1000,
-                        "yyyy/MM/dd HH:mm:ss"
+                        "yyyy/MM/dd HH:mm:ss",
                       )
                 }
               />
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/List.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/List.stories.tsx
index db4f3c51e..fe305f4fd 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/List.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/List.stories.tsx
@@ -35,7 +35,7 @@ export default {
 
 function createExample<Props>(
   Component: FunctionalComponent<Props>,
-  props: Partial<Props>
+  props: Partial<Props>,
 ) {
   const r = (args: any) => <Component {...args} />;
   r.args = props;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/Table.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/Table.tsx
index f9efad91e..86b79d1dd 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/Table.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/Table.tsx
@@ -171,7 +171,7 @@ function Table({ instances, onNewTip, onSelect, onDelete }: 
TableProps): VNode {
                     ? "never"
                     : format(
                         i.expiration_time.t_s * 1000,
-                        "yyyy/MM/dd HH:mm:ss"
+                        "yyyy/MM/dd HH:mm:ss",
                       )}
                 </td>
                 <td
@@ -282,7 +282,7 @@ function TableWithoutFund({
                     ? "never"
                     : format(
                         i.expiration_time.t_s * 1000,
-                        "yyyy/MM/dd HH:mm:ss"
+                        "yyyy/MM/dd HH:mm:ss",
                       )}
                 </td>
                 <td
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/index.tsx
index 680589eed..182b3f72c 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/reserves/list/index.tsx
@@ -59,7 +59,7 @@ export default function ListTips({
   const [notif, setNotif] = useState<Notification | undefined>(undefined);
   const i18n = useTranslator();
   const [reserveForTip, setReserveForTip] = useState<string | undefined>(
-    undefined
+    undefined,
   );
   const [tipAuthorized, setTipAuthorized] = useState<
     TipConfirmation | undefined
@@ -85,7 +85,7 @@ export default function ListTips({
             try {
               const response = await authorizeTipReserve(
                 reserveForTip,
-                request
+                request,
               );
               setTipAuthorized({
                 request,
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/Create.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/Create.stories.tsx
index d4fbaa901..64b67335c 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/Create.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/Create.stories.tsx
@@ -15,29 +15,31 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode, FunctionalComponent } from 'preact';
+import { h, VNode, FunctionalComponent } from "preact";
 import { CreatePage as TestedComponent } from "./CreatePage.js";
 
-
 export default {
-  title: 'Pages/Transfer/Create',
+  title: "Pages/Transfer/Create",
   component: TestedComponent,
   argTypes: {
-    onUpdate: { action: 'onUpdate' },
-    onBack: { action: 'onBack' },
+    onUpdate: { action: "onUpdate" },
+    onBack: { action: "onBack" },
   },
 };
 
-function createExample<Props>(Component: FunctionalComponent<Props>, props: 
Partial<Props>) {
-  const r = (args: any) => <Component {...args} />
-  r.args = props
-  return r
+function createExample<Props>(
+  Component: FunctionalComponent<Props>,
+  props: Partial<Props>,
+) {
+  const r = (args: any) => <Component {...args} />;
+  r.args = props;
+  return r;
 }
 
 export const Example = createExample(TestedComponent, {
-  accounts: ['payto://x-taler-bank/account1','payto://x-taler-bank/account2']
+  accounts: ["payto://x-taler-bank/account1", "payto://x-taler-bank/account2"],
 });
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/CreatePage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/CreatePage.tsx
index 4b4a079d3..5b041df7c 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/CreatePage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/CreatePage.tsx
@@ -15,90 +15,132 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { AsyncButton } from "../../../../components/exception/AsyncButton.js";
-import { FormErrors, FormProvider } from 
"../../../../components/form/FormProvider.js";
+import {
+  FormErrors,
+  FormProvider,
+} from "../../../../components/form/FormProvider.js";
 import { Input } from "../../../../components/form/Input.js";
 import { InputCurrency } from "../../../../components/form/InputCurrency.js";
 import { InputSelector } from "../../../../components/form/InputSelector.js";
 import { useConfigContext } from "../../../../context/config.js";
 import { MerchantBackend } from "../../../../declaration.js";
 import { Translate, useTranslator } from "../../../../i18n/index.js";
-import { CROCKFORD_BASE32_REGEX, URL_REGEX } from 
"../../../../utils/constants.js";
+import {
+  CROCKFORD_BASE32_REGEX,
+  URL_REGEX,
+} from "../../../../utils/constants.js";
 
-type Entity = MerchantBackend.Transfers.TransferInformation
+type Entity = MerchantBackend.Transfers.TransferInformation;
 
 interface Props {
   onCreate: (d: Entity) => Promise<void>;
   onBack?: () => void;
-  accounts: string[],
+  accounts: string[];
 }
 
 export function CreatePage({ accounts, onCreate, onBack }: Props): VNode {
-  const i18n = useTranslator()
-  const { currency } = useConfigContext()
+  const i18n = useTranslator();
+  const { currency } = useConfigContext();
 
   const [state, setState] = useState<Partial<Entity>>({
-    wtid: '',
+    wtid: "",
     // payto_uri: ,
     // exchange_url: 'http://exchange.taler:8081/',
     credit_amount: ``,
   });
 
   const errors: FormErrors<Entity> = {
-    wtid: !state.wtid ? i18n`cannot be empty` :
-      (!CROCKFORD_BASE32_REGEX.test(state.wtid) ? i18n`check the id, does not 
look valid` :
-        (state.wtid.length !== 52 ? i18n`should have 52 characters, current 
${state.wtid.length}` :
-          undefined)),
+    wtid: !state.wtid
+      ? i18n`cannot be empty`
+      : !CROCKFORD_BASE32_REGEX.test(state.wtid)
+      ? i18n`check the id, does not look valid`
+      : state.wtid.length !== 52
+      ? i18n`should have 52 characters, current ${state.wtid.length}`
+      : undefined,
     payto_uri: !state.payto_uri ? i18n`cannot be empty` : undefined,
     credit_amount: !state.credit_amount ? i18n`cannot be empty` : undefined,
-    exchange_url: !state.exchange_url ? i18n`cannot be empty` :
-      (!URL_REGEX.test(state.exchange_url) ? i18n`URL doesn't have the right 
format` : undefined),
-  }
+    exchange_url: !state.exchange_url
+      ? i18n`cannot be empty`
+      : !URL_REGEX.test(state.exchange_url)
+      ? i18n`URL doesn't have the right format`
+      : undefined,
+  };
 
-  const hasErrors = Object.keys(errors).some(k => (errors as any)[k] !== 
undefined)
+  const hasErrors = Object.keys(errors).some(
+    (k) => (errors as any)[k] !== undefined,
+  );
 
   const submitForm = () => {
-    if (hasErrors) return Promise.reject()
-    return onCreate(state as any)
-  }
-
-  return <div>
-    <section class="section is-main-section">
-      <div class="columns">
-        <div class="column" />
-        <div class="column is-four-fifths">
-
-          <FormProvider object={state} valueHandler={setState} errors={errors}>
-            <InputSelector name="payto_uri" label={i18n`Credited bank account`}
-              values={accounts}
-              placeholder={i18n`Select one account`}
-              tooltip={i18n`Bank account of the merchant where the payment was 
received`}
-            />
-            <Input<Entity> name="wtid" label={i18n`Wire transfer ID`} help="" 
tooltip={i18n`unique identifier of the wire transfer used by the exchange, must 
be 52 characters long`} />
-            <Input<Entity> name="exchange_url"
-              label={i18n`Exchange URL`}
-              tooltip={i18n`Base URL of the exchange that made the transfer, 
should have been in the wire transfer subject`}
-              help="http://exchange.taler:8081/"; />
-            <InputCurrency<Entity> name="credit_amount" label={i18n`Amount 
credited`} tooltip={i18n`Actual amount that was wired to the merchant's bank 
account`} />
-
-          </FormProvider>
-
-          <div class="buttons is-right mt-5">
-            {onBack && <button class="button" onClick={onBack} 
><Translate>Cancel</Translate></button>}
-            <AsyncButton disabled={hasErrors} data-tooltip={
-              hasErrors ? i18n`Need to complete marked fields` : 'confirm 
operation'
-            } onClick={submitForm} 
><Translate>Confirm</Translate></AsyncButton>
+    if (hasErrors) return Promise.reject();
+    return onCreate(state as any);
+  };
+
+  return (
+    <div>
+      <section class="section is-main-section">
+        <div class="columns">
+          <div class="column" />
+          <div class="column is-four-fifths">
+            <FormProvider
+              object={state}
+              valueHandler={setState}
+              errors={errors}
+            >
+              <InputSelector
+                name="payto_uri"
+                label={i18n`Credited bank account`}
+                values={accounts}
+                placeholder={i18n`Select one account`}
+                tooltip={i18n`Bank account of the merchant where the payment 
was received`}
+              />
+              <Input<Entity>
+                name="wtid"
+                label={i18n`Wire transfer ID`}
+                help=""
+                tooltip={i18n`unique identifier of the wire transfer used by 
the exchange, must be 52 characters long`}
+              />
+              <Input<Entity>
+                name="exchange_url"
+                label={i18n`Exchange URL`}
+                tooltip={i18n`Base URL of the exchange that made the transfer, 
should have been in the wire transfer subject`}
+                help="http://exchange.taler:8081/";
+              />
+              <InputCurrency<Entity>
+                name="credit_amount"
+                label={i18n`Amount credited`}
+                tooltip={i18n`Actual amount that was wired to the merchant's 
bank account`}
+              />
+            </FormProvider>
+
+            <div class="buttons is-right mt-5">
+              {onBack && (
+                <button class="button" onClick={onBack}>
+                  <Translate>Cancel</Translate>
+                </button>
+              )}
+              <AsyncButton
+                disabled={hasErrors}
+                data-tooltip={
+                  hasErrors
+                    ? i18n`Need to complete marked fields`
+                    : "confirm operation"
+                }
+                onClick={submitForm}
+              >
+                <Translate>Confirm</Translate>
+              </AsyncButton>
+            </div>
           </div>
-
+          <div class="column" />
         </div>
-        <div class="column" />
-      </div>
-    </section>
-  </div>
+      </section>
+    </div>
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx
index eb48aaf83..db01a57b6 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx
@@ -15,46 +15,53 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { Fragment, h, VNode } from 'preact';
-import { useState } from 'preact/hooks';
+import { Fragment, h, VNode } from "preact";
+import { useState } from "preact/hooks";
 import { NotificationCard } from "../../../../components/menu/index.js";
 import { MerchantBackend } from "../../../../declaration.js";
 import { useInstanceDetails } from "../../../../hooks/instance.js";
 import { useTransferAPI } from "../../../../hooks/transfer.js";
-import { useTranslator } from '../../../../i18n/index.js';
+import { useTranslator } from "../../../../i18n/index.js";
 import { Notification } from "../../../../utils/types.js";
 import { CreatePage } from "./CreatePage.js";
 
-export type Entity = MerchantBackend.Transfers.TransferInformation
+export type Entity = MerchantBackend.Transfers.TransferInformation;
 interface Props {
   onBack?: () => void;
   onConfirm: () => void;
 }
 
-export default function CreateTransfer({onConfirm, onBack}:Props): VNode {
-  const { informTransfer } = useTransferAPI()
-  const [notif, setNotif] = useState<Notification | undefined>(undefined)
-  const i18n = useTranslator()
-  const instance = useInstanceDetails()
-  const accounts = !instance.ok ? [] : instance.data.accounts.map(a => 
a.payto_uri)
-
-  return <>
-    <NotificationCard notification={notif} />
-    <CreatePage
-      onBack={onBack}
-      accounts={accounts}
-      onCreate={(request: MerchantBackend.Transfers.TransferInformation) => {
-        return informTransfer(request).then(() => onConfirm()).catch((error) 
=> {
-          setNotif({
-            message: i18n`could not inform transfer`,
-            type: "ERROR",
-            description: error.message
-          })
-        })
-      }} />
-  </>
-}
\ No newline at end of file
+export default function CreateTransfer({ onConfirm, onBack }: Props): VNode {
+  const { informTransfer } = useTransferAPI();
+  const [notif, setNotif] = useState<Notification | undefined>(undefined);
+  const i18n = useTranslator();
+  const instance = useInstanceDetails();
+  const accounts = !instance.ok
+    ? []
+    : instance.data.accounts.map((a) => a.payto_uri);
+
+  return (
+    <>
+      <NotificationCard notification={notif} />
+      <CreatePage
+        onBack={onBack}
+        accounts={accounts}
+        onCreate={(request: MerchantBackend.Transfers.TransferInformation) => {
+          return informTransfer(request)
+            .then(() => onConfirm())
+            .catch((error) => {
+              setNotif({
+                message: i18n`could not inform transfer`,
+                type: "ERROR",
+                description: error.message,
+              });
+            });
+        }}
+      />
+    </>
+  );
+}
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/List.stories.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/List.stories.tsx
index 42fcdd733..92b3f9853 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/List.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/List.stories.tsx
@@ -39,7 +39,7 @@ export default {
 
 function createExample<Props>(
   Component: FunctionalComponent<Props>,
-  props: Partial<Props>
+  props: Partial<Props>,
 ) {
   const r = (args: any) => <Component {...args} />;
   r.args = props;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/ListPage.tsx
 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/ListPage.tsx
index 539f1ae34..cad989980 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/ListPage.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/ListPage.tsx
@@ -15,15 +15,15 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode } from 'preact';
+import { h, VNode } from "preact";
 import { FormProvider } from "../../../../components/form/FormProvider.js";
 import { InputSelector } from "../../../../components/form/InputSelector.js";
 import { MerchantBackend } from "../../../../declaration.js";
-import { Translate, useTranslator } from '../../../../i18n/index.js';
+import { Translate, useTranslator } from "../../../../i18n/index.js";
 import { CardTable } from "./Table.js";
 
 export interface Props {
@@ -43,47 +43,92 @@ export interface Props {
   onDelete: () => void;
 }
 
-export function ListPage({ payTo, onChangePayTo, transfers, onCreate, 
onDelete, accounts, onLoadMoreBefore, onLoadMoreAfter, isAllTransfers, 
isNonVerifiedTransfers, isVerifiedTransfers, onShowAll, onShowUnverified, 
onShowVerified }: Props): VNode {
-  const form = { payto_uri: payTo }
+export function ListPage({
+  payTo,
+  onChangePayTo,
+  transfers,
+  onCreate,
+  onDelete,
+  accounts,
+  onLoadMoreBefore,
+  onLoadMoreAfter,
+  isAllTransfers,
+  isNonVerifiedTransfers,
+  isVerifiedTransfers,
+  onShowAll,
+  onShowUnverified,
+  onShowVerified,
+}: Props): VNode {
+  const form = { payto_uri: payTo };
 
   const i18n = useTranslator();
-  return <section class="section is-main-section">
-    <div class="columns">
-      <div class="column" />
-      <div class="column is-10">
-        <FormProvider object={form} valueHandler={(updater) => 
onChangePayTo(updater(form).payto_uri)}>
-          <InputSelector name="payto_uri" label={i18n`Address`}
-            values={accounts}
-            placeholder={i18n`Select one account`}
-            tooltip={i18n`filter by account address`} />
-        </FormProvider>
+  return (
+    <section class="section is-main-section">
+      <div class="columns">
+        <div class="column" />
+        <div class="column is-10">
+          <FormProvider
+            object={form}
+            valueHandler={(updater) => onChangePayTo(updater(form).payto_uri)}
+          >
+            <InputSelector
+              name="payto_uri"
+              label={i18n`Address`}
+              values={accounts}
+              placeholder={i18n`Select one account`}
+              tooltip={i18n`filter by account address`}
+            />
+          </FormProvider>
+        </div>
+        <div class="column" />
+      </div>
+      <div class="tabs">
+        <ul>
+          <li class={isAllTransfers ? "is-active" : ""}>
+            <div
+              class="has-tooltip-right"
+              data-tooltip={i18n`remove all filters`}
+            >
+              <a onClick={onShowAll}>
+                <Translate>All</Translate>
+              </a>
+            </div>
+          </li>
+          <li class={isVerifiedTransfers ? "is-active" : ""}>
+            <div
+              class="has-tooltip-right"
+              data-tooltip={i18n`only show wire transfers confirmed by the 
merchant`}
+            >
+              <a onClick={onShowVerified}>
+                <Translate>Verified</Translate>
+              </a>
+            </div>
+          </li>
+          <li class={isNonVerifiedTransfers ? "is-active" : ""}>
+            <div
+              class="has-tooltip-right"
+              data-tooltip={i18n`only show wire transfers claimed by the 
exchange`}
+            >
+              <a onClick={onShowUnverified}>
+                <Translate>Unverified</Translate>
+              </a>
+            </div>
+          </li>
+        </ul>
       </div>
-      <div class="column" />
-    </div>
-    <div class="tabs">
-      <ul>
-        <li class={isAllTransfers ? 'is-active' : ''}>
-          <div class="has-tooltip-right" data-tooltip={i18n`remove all 
filters`}>
-            <a onClick={onShowAll}><Translate>All</Translate></a>
-          </div>
-        </li>
-        <li class={isVerifiedTransfers ? 'is-active' : ''}>
-          <div class="has-tooltip-right" data-tooltip={i18n`only show wire 
transfers confirmed by the merchant`}>
-            <a onClick={onShowVerified}><Translate>Verified</Translate></a>
-          </div>
-        </li>
-        <li class={isNonVerifiedTransfers ? 'is-active' : ''}>
-          <div class="has-tooltip-right" data-tooltip={i18n`only show wire 
transfers claimed by the exchange`}>
-            <a onClick={onShowUnverified}><Translate>Unverified</Translate></a>
-          </div>
-        </li>
-      </ul>
-    </div>
-    <CardTable transfers={transfers.map(o => ({ ...o, id: 
String(o.transfer_serial_id) }))}
-      accounts={accounts}
-      onCreate={onCreate}
-      onDelete={onDelete}
-      onLoadMoreBefore={onLoadMoreBefore} hasMoreBefore={!onLoadMoreBefore}
-      onLoadMoreAfter={onLoadMoreAfter} hasMoreAfter={!onLoadMoreAfter} />
-  </section>;
+      <CardTable
+        transfers={transfers.map((o) => ({
+          ...o,
+          id: String(o.transfer_serial_id),
+        }))}
+        accounts={accounts}
+        onCreate={onCreate}
+        onDelete={onDelete}
+        onLoadMoreBefore={onLoadMoreBefore}
+        hasMoreBefore={!onLoadMoreBefore}
+        onLoadMoreAfter={onLoadMoreAfter}
+        hasMoreAfter={!onLoadMoreAfter}
+      />
+    </section>
+  );
 }
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/Table.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/Table.tsx
index 0f9b87732..2341fb80a 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/Table.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/Table.tsx
@@ -173,7 +173,7 @@ function Table({
                       ? i18n`never`
                       : format(
                           i.execution_time.t_s * 1000,
-                          "yyyy/MM/dd HH:mm:ss"
+                          "yyyy/MM/dd HH:mm:ss",
                         )
                     : i18n`unknown`}
                 </td>
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
index 439e81f9f..242380fbc 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
@@ -15,12 +15,12 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode } from 'preact';
-import { useState } from 'preact/hooks';
+import { h, VNode } from "preact";
+import { useState } from "preact/hooks";
 import { Loading } from "../../../../components/exception/loading.js";
 import { MerchantBackend } from "../../../../declaration.js";
 import { HttpError } from "../../../../hooks/backend.js";
@@ -35,51 +35,65 @@ interface Props {
   onCreate: () => void;
 }
 interface Form {
-  verified?: 'yes' | 'no';
+  verified?: "yes" | "no";
   payto_uri?: string;
 }
 
-export default function ListTransfer({ onUnauthorized, onLoadError, onCreate, 
onNotFound }: Props): VNode {
-  const [form, setForm] = useState<Form>({ payto_uri: '' })
-  const setFilter = (s?: 'yes' | 'no') => setForm({ ...form, verified: s })
-
-  const [position, setPosition] = useState<string | undefined>(undefined)
+export default function ListTransfer({
+  onUnauthorized,
+  onLoadError,
+  onCreate,
+  onNotFound,
+}: Props): VNode {
+  const [form, setForm] = useState<Form>({ payto_uri: "" });
+  const setFilter = (s?: "yes" | "no") => setForm({ ...form, verified: s });
 
-  const instance = useInstanceDetails()
-  const accounts = !instance.ok ? [] : instance.data.accounts.map(a => 
a.payto_uri)
+  const [position, setPosition] = useState<string | undefined>(undefined);
 
-  const isVerifiedTransfers = form.verified === 'yes'
-  const isNonVerifiedTransfers = form.verified === 'no'
-  const isAllTransfers = form.verified === undefined
+  const instance = useInstanceDetails();
+  const accounts = !instance.ok
+    ? []
+    : instance.data.accounts.map((a) => a.payto_uri);
 
-  const result = useInstanceTransfers({
-    position,
-    payto_uri: form.payto_uri === '' ? undefined : form.payto_uri,
-    verified: form.verified,
-  }, (id) => setPosition(id))
+  const isVerifiedTransfers = form.verified === "yes";
+  const isNonVerifiedTransfers = form.verified === "no";
+  const isAllTransfers = form.verified === undefined;
 
-  if (result.clientError && result.isUnauthorized) return onUnauthorized()
-  if (result.clientError && result.isNotfound) return onNotFound()
-  if (result.loading) return <Loading />
-  if (!result.ok) return onLoadError(result)
+  const result = useInstanceTransfers(
+    {
+      position,
+      payto_uri: form.payto_uri === "" ? undefined : form.payto_uri,
+      verified: form.verified,
+    },
+    (id) => setPosition(id),
+  );
 
-  return <ListPage
-    accounts={accounts}
-    transfers={result.data.transfers}
-    onLoadMoreBefore={result.isReachingStart ? result.loadMorePrev : undefined}
-    onLoadMoreAfter={result.isReachingEnd ? result.loadMore : undefined}
-    onCreate={onCreate} 
-    onDelete={() => {null}}
-    // position={position} setPosition={setPosition}
-    onShowAll={() => setFilter(undefined)}
-    onShowUnverified={() => setFilter('no')}
-    onShowVerified={() => setFilter('yes')}
-    isAllTransfers={isAllTransfers}
-    isVerifiedTransfers={isVerifiedTransfers}
-    isNonVerifiedTransfers={isNonVerifiedTransfers}
-    payTo={form.payto_uri}
-    onChangePayTo={(p) => setForm(v => ({ ...v, payto_uri: p }))}
-  />
+  if (result.clientError && result.isUnauthorized) return onUnauthorized();
+  if (result.clientError && result.isNotfound) return onNotFound();
+  if (result.loading) return <Loading />;
+  if (!result.ok) return onLoadError(result);
 
+  return (
+    <ListPage
+      accounts={accounts}
+      transfers={result.data.transfers}
+      onLoadMoreBefore={
+        result.isReachingStart ? result.loadMorePrev : undefined
+      }
+      onLoadMoreAfter={result.isReachingEnd ? result.loadMore : undefined}
+      onCreate={onCreate}
+      onDelete={() => {
+        null;
+      }}
+      // position={position} setPosition={setPosition}
+      onShowAll={() => setFilter(undefined)}
+      onShowUnverified={() => setFilter("no")}
+      onShowVerified={() => setFilter("yes")}
+      isAllTransfers={isAllTransfers}
+      isVerifiedTransfers={isVerifiedTransfers}
+      isNonVerifiedTransfers={isNonVerifiedTransfers}
+      payTo={form.payto_uri}
+      onChangePayTo={(p) => setForm((v) => ({ ...v, payto_uri: p }))}
+    />
+  );
 }
-
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/update/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/update/index.tsx
index cc9cd8afc..84cc95e72 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/update/index.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/update/index.tsx
@@ -15,12 +15,12 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { h, VNode } from 'preact';
+import { h, VNode } from "preact";
 
-export default function UpdateTransfer():VNode {
-  return <div>order transfer page</div>
-}
\ No newline at end of file
+export default function UpdateTransfer(): VNode {
+  return <div>order transfer page</div>;
+}
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/update/Update.stories.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/update/Update.stories.tsx
index fa9163ac6..58b8d87ea 100644
--- 
a/packages/merchant-backoffice-ui/src/paths/instance/update/Update.stories.tsx
+++ 
b/packages/merchant-backoffice-ui/src/paths/instance/update/Update.stories.tsx
@@ -33,7 +33,7 @@ export default {
 
 function createExample<Props>(
   Component: FunctionalComponent<Props>,
-  props: Partial<Props>
+  props: Partial<Props>,
 ) {
   const r = (args: any) => <Component {...args} />;
   r.args = props;
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx
index 833592fcb..d7acdf023 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/update/UpdatePage.tsx
@@ -44,7 +44,7 @@ type Entity = 
MerchantBackend.Instances.InstanceReconfigurationMessage & {
 interface Props {
   onUpdate: (d: Entity) => void;
   onChangeAuth: (
-    d: MerchantBackend.Instances.InstanceAuthConfigurationMessage
+    d: MerchantBackend.Instances.InstanceAuthConfigurationMessage,
   ) => Promise<void>;
   selected: MerchantBackend.Instances.QueryInstancesResponse;
   isLoading: boolean;
@@ -52,7 +52,7 @@ interface Props {
 }
 
 function convert(
-  from: MerchantBackend.Instances.QueryInstancesResponse
+  from: MerchantBackend.Instances.QueryInstancesResponse,
 ): Entity {
   const { accounts, ...rest } = from;
   const payto_uris = accounts.filter((a) => a.active).map((a) => a.payto_uri);
@@ -105,7 +105,7 @@ export function UpdatePage({
         : undefinedIfEmpty(
             value.payto_uris.map((p) => {
               return !PAYTO_REGEX.test(p) ? i18n`is not valid` : undefined;
-            })
+            }),
           ),
     default_max_deposit_fee: !value.default_max_deposit_fee
       ? i18n`required`
@@ -144,7 +144,7 @@ export function UpdatePage({
   };
 
   const hasErrors = Object.keys(errors).some(
-    (k) => (errors as any)[k] !== undefined
+    (k) => (errors as any)[k] !== undefined,
   );
   const submit = async (): Promise<void> => {
     await onUpdate(value as Entity);
diff --git 
a/packages/merchant-backoffice-ui/src/paths/instance/update/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/instance/update/index.tsx
index 78d470b88..480274e66 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/update/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/update/index.tsx
@@ -48,7 +48,7 @@ export default function Update(props: Props): VNode {
 
 export function AdminUpdate(props: Props & { instanceId: string }): VNode {
   const { updateInstance, clearToken, setNewToken } = useManagementAPI(
-    props.instanceId
+    props.instanceId,
   );
   const result = useManagedInstanceDetails(props.instanceId);
   return CommonUpdate(props, result, updateInstance, clearToken, setNewToken);
@@ -66,7 +66,7 @@ function CommonUpdate(
   result: HttpResponse<MerchantBackend.Instances.QueryInstancesResponse>,
   updateInstance: any,
   clearToken: any,
-  setNewToken: any
+  setNewToken: any,
 ): VNode {
   const { changeToken } = useInstanceContext();
   const [notif, setNotif] = useState<Notification | undefined>(undefined);
@@ -85,7 +85,7 @@ function CommonUpdate(
         isLoading={false}
         selected={result.data}
         onUpdate={(
-          d: MerchantBackend.Instances.InstanceReconfigurationMessage
+          d: MerchantBackend.Instances.InstanceReconfigurationMessage,
         ): Promise<void> => {
           return updateInstance(d)
             .then(onConfirm)
@@ -94,11 +94,11 @@ function CommonUpdate(
                 message: i18n`Failed to create instance`,
                 type: "ERROR",
                 description: error.message,
-              })
+              }),
             );
         }}
         onChangeAuth={(
-          d: MerchantBackend.Instances.InstanceAuthConfigurationMessage
+          d: MerchantBackend.Instances.InstanceAuthConfigurationMessage,
         ): Promise<void> => {
           const apiCall =
             d.method === "external" ? clearToken() : setNewToken(d.token!);
diff --git a/packages/merchant-backoffice-ui/src/paths/login/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/login/index.tsx
index 6784e493a..caa63c714 100644
--- a/packages/merchant-backoffice-ui/src/paths/login/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/login/index.tsx
@@ -14,10 +14,10 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+/**
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 import { h, VNode } from "preact";
 import { LoginModal } from "../../components/exception/login.js";
 
@@ -25,5 +25,5 @@ interface Props {
   onConfirm: (url: string, token?: string) => void;
 }
 export default function LoginPage({ onConfirm }: Props): VNode {
-  return <LoginModal onConfirm={onConfirm} />
-} 
\ No newline at end of file
+  return <LoginModal onConfirm={onConfirm} />;
+}
diff --git a/packages/merchant-backoffice-ui/src/paths/notfound/index.tsx 
b/packages/merchant-backoffice-ui/src/paths/notfound/index.tsx
index fb468a411..452908154 100644
--- a/packages/merchant-backoffice-ui/src/paths/notfound/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/notfound/index.tsx
@@ -14,23 +14,22 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { h, VNode } from 'preact';
-import { Link } from 'preact-router/match';
+import { h, VNode } from "preact";
+import { Link } from "preact-router/match";
 
 export default function NotFoundPage(): VNode {
-    return (
-        <div>
-            <h1>Error 404</h1>
-            <p>That page doesn&apos;t exist.</p>
-            <Link href="/">
-                <h4>Back to Home</h4>
-            </Link>
-        </div>
-    );
+  return (
+    <div>
+      <h1>Error 404</h1>
+      <p>That page doesn&apos;t exist.</p>
+      <Link href="/">
+        <h4>Back to Home</h4>
+      </Link>
+    </div>
+  );
 }
-
diff --git a/packages/merchant-backoffice-ui/src/schemas/index.ts 
b/packages/merchant-backoffice-ui/src/schemas/index.ts
index 7822afc2d..149761c55 100644
--- a/packages/merchant-backoffice-ui/src/schemas/index.ts
+++ b/packages/merchant-backoffice-ui/src/schemas/index.ts
@@ -15,188 +15,230 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
-import { isAfter, isFuture } from 'date-fns';
-import * as yup from 'yup';
+import { isAfter, isFuture } from "date-fns";
+import * as yup from "yup";
 import { AMOUNT_REGEX, PAYTO_REGEX } from "../utils/constants.js";
 
 yup.setLocale({
   mixed: {
-    default: 'field_invalid',
+    default: "field_invalid",
   },
   number: {
-    min: ({ min }: any) => ({ key: 'field_too_short', values: { min } }),
-    max: ({ max }: any) => ({ key: 'field_too_big', values: { max } }),
+    min: ({ min }: any) => ({ key: "field_too_short", values: { min } }),
+    max: ({ max }: any) => ({ key: "field_too_big", values: { max } }),
   },
 });
 
 function listOfPayToUrisAreValid(values?: (string | undefined)[]): boolean {
-  return !!values && values.every(v => v && PAYTO_REGEX.test(v));
+  return !!values && values.every((v) => v && PAYTO_REGEX.test(v));
 }
 
 function currencyWithAmountIsValid(value?: string): boolean {
-  return !!value && AMOUNT_REGEX.test(value)
+  return !!value && AMOUNT_REGEX.test(value);
 }
 function currencyGreaterThan0(value?: string) {
   if (value) {
     try {
-      const [, amount] = value.split(':')
-      const intAmount = parseInt(amount, 10)
-      return intAmount > 0
+      const [, amount] = value.split(":");
+      const intAmount = parseInt(amount, 10);
+      return intAmount > 0;
     } catch {
-      return false
+      return false;
     }
   }
-  return true
+  return true;
 }
 
 export const InstanceSchema = yup.object().shape({
-  id: yup.string().required().meta({ type: 'url' }),
+  id: yup.string().required().meta({ type: "url" }),
   name: yup.string().required(),
   auth: yup.object().shape({
     method: yup.string().matches(/^(external|token)$/),
     token: yup.string().optional().nullable(),
   }),
-  payto_uris: yup.array().of(yup.string())
+  payto_uris: yup
+    .array()
+    .of(yup.string())
     .min(1)
-    .meta({ type: 'array' })
-    .test('payto', '{path} is not valid', listOfPayToUrisAreValid),
-  default_max_deposit_fee: yup.string()
+    .meta({ type: "array" })
+    .test("payto", "{path} is not valid", listOfPayToUrisAreValid),
+  default_max_deposit_fee: yup
+    .string()
     .required()
-    .test('amount', 'the amount is not valid', currencyWithAmountIsValid)
-    .meta({ type: 'amount' }),
-  default_max_wire_fee: yup.string()
+    .test("amount", "the amount is not valid", currencyWithAmountIsValid)
+    .meta({ type: "amount" }),
+  default_max_wire_fee: yup
+    .string()
     .required()
-    .test('amount', '{path} is not valid', currencyWithAmountIsValid)
-    .meta({ type: 'amount' }),
-  default_wire_fee_amortization: yup.number()
-    .required(),
-  address: yup.object().shape({
-    country: yup.string().optional(),
-    address_lines: yup.array().of(yup.string()).max(7).optional(),
-    building_number: yup.string().optional(),
-    building_name: yup.string().optional(),
-    street: yup.string().optional(),
-    post_code: yup.string().optional(),
-    town_location: yup.string().optional(),
-    town: yup.string(),
-    district: yup.string().optional(),
-    country_subdivision: yup.string().optional(),
-  }).meta({ type: 'group' }),
-  jurisdiction: yup.object().shape({
-    country: yup.string().optional(),
-    address_lines: yup.array().of(yup.string()).max(7).optional(),
-    building_number: yup.string().optional(),
-    building_name: yup.string().optional(),
-    street: yup.string().optional(),
-    post_code: yup.string().optional(),
-    town_location: yup.string().optional(),
-    town: yup.string(),
-    district: yup.string().optional(),
-    country_subdivision: yup.string().optional(),
-  }).meta({ type: 'group' }),
+    .test("amount", "{path} is not valid", currencyWithAmountIsValid)
+    .meta({ type: "amount" }),
+  default_wire_fee_amortization: yup.number().required(),
+  address: yup
+    .object()
+    .shape({
+      country: yup.string().optional(),
+      address_lines: yup.array().of(yup.string()).max(7).optional(),
+      building_number: yup.string().optional(),
+      building_name: yup.string().optional(),
+      street: yup.string().optional(),
+      post_code: yup.string().optional(),
+      town_location: yup.string().optional(),
+      town: yup.string(),
+      district: yup.string().optional(),
+      country_subdivision: yup.string().optional(),
+    })
+    .meta({ type: "group" }),
+  jurisdiction: yup
+    .object()
+    .shape({
+      country: yup.string().optional(),
+      address_lines: yup.array().of(yup.string()).max(7).optional(),
+      building_number: yup.string().optional(),
+      building_name: yup.string().optional(),
+      street: yup.string().optional(),
+      post_code: yup.string().optional(),
+      town_location: yup.string().optional(),
+      town: yup.string(),
+      district: yup.string().optional(),
+      country_subdivision: yup.string().optional(),
+    })
+    .meta({ type: "group" }),
   // default_pay_delay: yup.object()
   //   .shape({ d_us: yup.number() })
   //   .required()
   //   .meta({ type: 'duration' }),
   // .transform(numberToDuration),
-  default_wire_transfer_delay: yup.object()
+  default_wire_transfer_delay: yup
+    .object()
     .shape({ d_us: yup.number() })
     .required()
-    .meta({ type: 'duration' }),
+    .meta({ type: "duration" }),
   // .transform(numberToDuration),
-})
+});
 
-export const InstanceUpdateSchema = InstanceSchema.clone().omit(['id']);
+export const InstanceUpdateSchema = InstanceSchema.clone().omit(["id"]);
 export const InstanceCreateSchema = InstanceSchema.clone();
 
 export const AuthorizeTipSchema = yup.object().shape({
   justification: yup.string().required(),
-  amount: yup.string()
+  amount: yup
+    .string()
     .required()
-    .test('amount', 'the amount is not valid', currencyWithAmountIsValid)
-    .test('amount_positive', 'the amount is not valid', currencyGreaterThan0),
+    .test("amount", "the amount is not valid", currencyWithAmountIsValid)
+    .test("amount_positive", "the amount is not valid", currencyGreaterThan0),
   next_url: yup.string().required(),
-})
+});
 
 const stringIsValidJSON = (value?: string) => {
-  const p = value?.trim()
+  const p = value?.trim();
   if (!p) return true;
   try {
-    JSON.parse(p)
-    return true
+    JSON.parse(p);
+    return true;
   } catch {
-    return false
+    return false;
   }
-}
+};
 
 export const OrderCreateSchema = yup.object().shape({
-  pricing: yup.object().required().shape({
-    summary: yup.string().ensure().required(),
-    order_price: yup.string()
-      .ensure()
-      .required()
-      .test('amount', 'the amount is not valid', currencyWithAmountIsValid)
-      .test('amount_positive', 'the amount should be greater than 0', 
currencyGreaterThan0),
-  }),
-  extra: yup.string().test('extra', 'is not a JSON format', stringIsValidJSON),
-  payments: yup.object().required().shape({
-    refund_deadline: yup.date()
-      .test('future', 'should be in the future', (d) => d ? isFuture(d) : 
true),
-    pay_deadline: yup.date()
-      .test('future', 'should be in the future', (d) => d ? isFuture(d) : 
true),
-    auto_refund_deadline: yup.date()
-      .test('future', 'should be in the future', (d) => d ? isFuture(d) : 
true),
-    delivery_date: yup.date()
-      .test('future', 'should be in the future', (d) => d ? isFuture(d) : 
true),
-  }).test('payment', 'dates', (d) => {
-    if (d.pay_deadline && d.refund_deadline && isAfter(d.refund_deadline, 
d.pay_deadline)) {
-      return new yup.ValidationError('pay deadline should be greater than 
refund', 'asd', 'payments.pay_deadline')
-    }
-    return true
-  })
-})
+  pricing: yup
+    .object()
+    .required()
+    .shape({
+      summary: yup.string().ensure().required(),
+      order_price: yup
+        .string()
+        .ensure()
+        .required()
+        .test("amount", "the amount is not valid", currencyWithAmountIsValid)
+        .test(
+          "amount_positive",
+          "the amount should be greater than 0",
+          currencyGreaterThan0,
+        ),
+    }),
+  extra: yup.string().test("extra", "is not a JSON format", stringIsValidJSON),
+  payments: yup
+    .object()
+    .required()
+    .shape({
+      refund_deadline: yup
+        .date()
+        .test("future", "should be in the future", (d) =>
+          d ? isFuture(d) : true,
+        ),
+      pay_deadline: yup
+        .date()
+        .test("future", "should be in the future", (d) =>
+          d ? isFuture(d) : true,
+        ),
+      auto_refund_deadline: yup
+        .date()
+        .test("future", "should be in the future", (d) =>
+          d ? isFuture(d) : true,
+        ),
+      delivery_date: yup
+        .date()
+        .test("future", "should be in the future", (d) =>
+          d ? isFuture(d) : true,
+        ),
+    })
+    .test("payment", "dates", (d) => {
+      if (
+        d.pay_deadline &&
+        d.refund_deadline &&
+        isAfter(d.refund_deadline, d.pay_deadline)
+      ) {
+        return new yup.ValidationError(
+          "pay deadline should be greater than refund",
+          "asd",
+          "payments.pay_deadline",
+        );
+      }
+      return true;
+    }),
+});
 
 export const ProductCreateSchema = yup.object().shape({
   product_id: yup.string().ensure().required(),
   description: yup.string().required(),
   unit: yup.string().ensure().required(),
-  price: yup.string()
+  price: yup
+    .string()
     .required()
-    .test('amount', 'the amount is not valid', currencyWithAmountIsValid),
-  stock: yup.object({
-
-  }).optional(),
+    .test("amount", "the amount is not valid", currencyWithAmountIsValid),
+  stock: yup.object({}).optional(),
   minimum_age: yup.number().optional().min(0),
-})
+});
 
 export const ProductUpdateSchema = yup.object().shape({
   description: yup.string().required(),
-  price: yup.string()
+  price: yup
+    .string()
     .required()
-    .test('amount', 'the amount is not valid', currencyWithAmountIsValid),
-  stock: yup.object({
-
-  }).optional(),
+    .test("amount", "the amount is not valid", currencyWithAmountIsValid),
+  stock: yup.object({}).optional(),
   minimum_age: yup.number().optional().min(0),
-})
-
+});
 
 export const TaxSchema = yup.object().shape({
   name: yup.string().required().ensure(),
-  tax: yup.string()
+  tax: yup
+    .string()
     .required()
-    .test('amount', 'the amount is not valid', currencyWithAmountIsValid),
-})
+    .test("amount", "the amount is not valid", currencyWithAmountIsValid),
+});
 
 export const NonInventoryProductSchema = yup.object().shape({
   quantity: yup.number().required().positive(),
   description: yup.string().required(),
   unit: yup.string().ensure().required(),
-  price: yup.string()
+  price: yup
+    .string()
     .required()
-    .test('amount', 'the amount is not valid', currencyWithAmountIsValid),
-})
+    .test("amount", "the amount is not valid", currencyWithAmountIsValid),
+});
diff --git a/packages/merchant-backoffice-ui/src/scss/DurationPicker.scss 
b/packages/merchant-backoffice-ui/src/scss/DurationPicker.scss
index a35575324..aa75b9916 100644
--- a/packages/merchant-backoffice-ui/src/scss/DurationPicker.scss
+++ b/packages/merchant-backoffice-ui/src/scss/DurationPicker.scss
@@ -1,4 +1,3 @@
-
 .rdp-picker {
   display: flex;
   height: 175px;
diff --git a/packages/merchant-backoffice-ui/src/scss/_aside.scss 
b/packages/merchant-backoffice-ui/src/scss/_aside.scss
index 61eb49835..e0922093b 100644
--- a/packages/merchant-backoffice-ui/src/scss/_aside.scss
+++ b/packages/merchant-backoffice-ui/src/scss/_aside.scss
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
@@ -23,7 +23,8 @@
   html {
     &.has-aside-left {
       &.has-aside-expanded {
-        nav.navbar, body {
+        nav.navbar,
+        body {
           padding-left: $aside-width;
         }
       }
@@ -71,11 +72,11 @@ aside.aside {
     color: $aside-tools-color;
     line-height: $navbar-height;
     height: $navbar-height;
-    padding-left: $default-padding * .5;
+    padding-left: $default-padding * 0.5;
     flex: 1;
 
     .icon {
-      margin-right: $default-padding * .5;
+      margin-right: $default-padding * 0.5;
     }
   }
 
@@ -88,7 +89,7 @@ aside.aside {
 
           .dropdown-icon {
             position: absolute;
-            top: $size-base * .5;
+            top: $size-base * 0.5;
             right: 0;
           }
         }
@@ -98,11 +99,12 @@ aside.aside {
         border-left: 0;
         background-color: darken($base-color, 2.5%);
         padding-left: 0;
-        margin: 0 0 $default-padding * .5;
+        margin: 0 0 $default-padding * 0.5;
 
         li {
           a {
-            padding: $default-padding * .5 0 $default-padding * .5 
$default-padding * .5;
+            padding: $default-padding * 0.5 0 $default-padding * 0.5
+              $default-padding * 0.5;
             font-size: $aside-submenu-font-size;
 
             &.has-icon {
@@ -120,15 +122,14 @@ aside.aside {
   }
 
   .menu-label {
-    padding: 0 $default-padding * .5;
-    margin-top: $default-padding * .5;
-    margin-bottom: $default-padding * .5;
+    padding: 0 $default-padding * 0.5;
+    margin-top: $default-padding * 0.5;
+    margin-bottom: $default-padding * 0.5;
   }
-
 }
 
 @include touch {
-   nav.navbar {
+  nav.navbar {
     @include transition(margin-left);
   }
   aside.aside {
@@ -138,7 +139,8 @@ aside.aside {
     body {
       overflow-x: hidden;
     }
-    body,  nav.navbar {
+    body,
+    nav.navbar {
       width: 100vw;
     }
     aside.aside {
@@ -148,7 +150,7 @@ aside.aside {
 
       .image {
         img {
-          max-width: $aside-mobile-width * .33;
+          max-width: $aside-mobile-width * 0.33;
         }
       }
 
diff --git a/packages/merchant-backoffice-ui/src/scss/_card.scss 
b/packages/merchant-backoffice-ui/src/scss/_card.scss
index fd965989d..62db7f457 100644
--- a/packages/merchant-backoffice-ui/src/scss/_card.scss
+++ b/packages/merchant-backoffice-ui/src/scss/_card.scss
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
@@ -39,7 +39,7 @@
 
   &.is-card-widget {
     .card-content {
-      padding: $default-padding * .5;
+      padding: $default-padding * 0.5;
     }
   }
 
diff --git a/packages/merchant-backoffice-ui/src/scss/_custom-calendar.scss 
b/packages/merchant-backoffice-ui/src/scss/_custom-calendar.scss
index 7f093faa8..5fec21bf6 100644
--- a/packages/merchant-backoffice-ui/src/scss/_custom-calendar.scss
+++ b/packages/merchant-backoffice-ui/src/scss/_custom-calendar.scss
@@ -16,31 +16,30 @@
 
 :root {
   --primary-color: #3298dc;
-  
-  --primary-text-color-dark: rgba(0,0,0,.87);
-  --secondary-text-color-dark: rgba(0,0,0,.57);
-  --disabled-text-color-dark: rgba(0,0,0,.13);
-  
-  --primary-text-color-light: rgba(255,255,255,.87);
-  --secondary-text-color-light: rgba(255,255,255,.57);
-  --disabled-text-color-light: rgba(255,255,255,.13);
-  
-  --font-stack: 'Roboto', 'Helvetica Neue', Helvetica, Arial, sans-serif;
-  
+
+  --primary-text-color-dark: rgba(0, 0, 0, 0.87);
+  --secondary-text-color-dark: rgba(0, 0, 0, 0.57);
+  --disabled-text-color-dark: rgba(0, 0, 0, 0.13);
+
+  --primary-text-color-light: rgba(255, 255, 255, 0.87);
+  --secondary-text-color-light: rgba(255, 255, 255, 0.57);
+  --disabled-text-color-light: rgba(255, 255, 255, 0.13);
+
+  --font-stack: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif;
+
   --primary-card-color: #fff;
   --primary-background-color: #f2f2f2;
-  
+
   --box-shadow-lvl-1: 0 1px 3px rgba(0, 0, 0, 0.12),
-                      0 1px 2px rgba(0, 0, 0, 0.24);
+    0 1px 2px rgba(0, 0, 0, 0.24);
   --box-shadow-lvl-2: 0 3px 6px rgba(0, 0, 0, 0.16),
-                      0 3px 6px rgba(0, 0, 0, 0.23);
+    0 3px 6px rgba(0, 0, 0, 0.23);
   --box-shadow-lvl-3: 0 10px 20px rgba(0, 0, 0, 0.19),
-                      0 6px 6px rgba(0, 0, 0, 0.23);
+    0 6px 6px rgba(0, 0, 0, 0.23);
   --box-shadow-lvl-4: 0 14px 28px rgba(0, 0, 0, 0.25),
-                      0 10px 10px rgba(0, 0, 0, 0.22);
+    0 10px 10px rgba(0, 0, 0, 0.22);
 }
 
-
 .datePicker {
   text-align: left;
   background: var(--primary-card-color);
@@ -52,7 +51,7 @@
   width: 90vw;
   max-width: 448px;
   transform-origin: top left;
-  transition: transform .22s ease-in-out, opacity .22s ease-in-out;
+  transition: transform 0.22s ease-in-out, opacity 0.22s ease-in-out;
   top: 50%;
   left: 50%;
   opacity: 0;
@@ -63,7 +62,7 @@
     opacity: 1;
     transform: scale(1) translate(-50%, -50%);
   }
-  
+
   .datePicker--titles {
     border-top-left-radius: 3px;
     border-top-right-radius: 3px;
@@ -71,7 +70,8 @@
     height: 100px;
     background: var(--primary-color);
 
-    h2, h3 {
+    h2,
+    h3 {
       cursor: pointer;
       color: #fff;
       line-height: 1;
@@ -81,7 +81,7 @@
     }
 
     h3 {
-      color: rgba(255,255,255,.57);
+      color: rgba(255, 255, 255, 0.57);
       font-size: 18px;
       padding-bottom: 2px;
     }
@@ -110,13 +110,13 @@
       font-size: 26px;
       user-select: none;
       border-radius: 50%;
-      
+
       &:hover {
         background: var(--disabled-text-color-dark);
       }
     }
   }
-  
+
   .datePicker--scroll {
     overflow-y: auto;
     max-height: calc(90vh - 56px - 100px);
@@ -129,9 +129,11 @@
       width: 100%;
       display: grid;
       text-align: center;
-      
+
       // there's probably a better way to do this, but wanted to try out CSS 
grid
-      grid-template-columns: calc(100% / 7) calc(100% / 7) calc(100% / 7) 
calc(100% / 7) calc(100% / 7) calc(100% / 7) calc(100% / 7);
+      grid-template-columns: calc(100% / 7) calc(100% / 7) calc(100% / 7) calc(
+          100% / 7
+        ) calc(100% / 7) calc(100% / 7) calc(100% / 7);
 
       span {
         color: var(--secondary-text-color-dark);
@@ -145,14 +147,16 @@
       width: 100%;
       display: grid;
       text-align: center;
-      grid-template-columns: calc(100% / 7) calc(100% / 7) calc(100% / 7) 
calc(100% / 7) calc(100% / 7) calc(100% / 7) calc(100% / 7);
+      grid-template-columns: calc(100% / 7) calc(100% / 7) calc(100% / 7) calc(
+          100% / 7
+        ) calc(100% / 7) calc(100% / 7) calc(100% / 7);
 
       span {
         color: var(--primary-text-color-dark);
         line-height: 42px;
         font-size: 14px;
         display: inline-grid;
-        transition: color .22s;
+        transition: color 0.22s;
         height: 42px;
         position: relative;
         cursor: pointer;
@@ -160,7 +164,7 @@
         border-radius: 50%;
 
         &::before {
-          content: '';
+          content: "";
           position: absolute;
           z-index: -1;
           height: 42px;
@@ -168,12 +172,12 @@
           left: calc(50% - 21px);
           background: var(--primary-color);
           border-radius: 50%;
-          transition: transform .22s, opacity .22s;
+          transition: transform 0.22s, opacity 0.22s;
           transform: scale(0);
           opacity: 0;
         }
-        
-        &[disabled=true] {
+
+        &[disabled="true"] {
           cursor: unset;
         }
 
@@ -182,7 +186,7 @@
         }
 
         &.datePicker--selected {
-          color: rgba(255,255,255,.87);
+          color: rgba(255, 255, 255, 0.87);
 
           &:before {
             transform: scale(1);
@@ -192,21 +196,21 @@
       }
     }
   }
-  
+
   .datePicker--selectYear {
     padding: 0 20px;
     display: block;
     width: 100%;
     text-align: center;
     max-height: 362px;
-    
+
     span {
       display: block;
       width: 100%;
       font-size: 24px;
       margin: 20px auto;
       cursor: pointer;
-      
+
       &.selected {
         font-size: 42px;
         color: var(--primary-color);
@@ -232,9 +236,10 @@
       appearance: none;
       padding: 0 16px;
       border-radius: 3px;
-      transition: background-color .13s;
+      transition: background-color 0.13s;
 
-      &:hover, &:focus {
+      &:hover,
+      &:focus {
         outline: none;
         background-color: var(--disabled-text-color-dark);
       }
@@ -249,6 +254,6 @@
   left: 0;
   bottom: 0;
   right: 0;
-  background: rgba(0,0,0,.52);
-  animation: fadeIn .22s forwards;
+  background: rgba(0, 0, 0, 0.52);
+  animation: fadeIn 0.22s forwards;
 }
diff --git a/packages/merchant-backoffice-ui/src/scss/_footer.scss 
b/packages/merchant-backoffice-ui/src/scss/_footer.scss
index 8a410de43..5855af742 100644
--- a/packages/merchant-backoffice-ui/src/scss/_footer.scss
+++ b/packages/merchant-backoffice-ui/src/scss/_footer.scss
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
diff --git a/packages/merchant-backoffice-ui/src/scss/_form.scss 
b/packages/merchant-backoffice-ui/src/scss/_form.scss
index 43b655fa5..bd28a17cf 100644
--- a/packages/merchant-backoffice-ui/src/scss/_form.scss
+++ b/packages/merchant-backoffice-ui/src/scss/_form.scss
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
@@ -22,11 +22,12 @@
 .field {
   &.has-check {
     .field-body {
-      margin-top: $default-padding * .125;
+      margin-top: $default-padding * 0.125;
     }
   }
   .control {
-    .mdi-24px.mdi-set, .mdi-24px.mdi:before {
+    .mdi-24px.mdi-set,
+    .mdi-24px.mdi:before {
       font-size: inherit;
     }
   }
@@ -37,28 +38,34 @@
   }
 }
 
-.input, .textarea, select {
+.input,
+.textarea,
+select {
   box-shadow: none;
 
-  &:focus, &:active {
-    box-shadow: none!important;
+  &:focus,
+  &:active {
+    box-shadow: none !important;
   }
 }
 
-.switch input[type=checkbox]+.check:before {
+.switch input[type="checkbox"] + .check:before {
   box-shadow: none;
 }
 
-.switch, .b-checkbox.checkbox {
-  input[type=checkbox] {
-    &:focus + .check, &:focus:checked + .check {
-      box-shadow: none!important;
+.switch,
+.b-checkbox.checkbox {
+  input[type="checkbox"] {
+    &:focus + .check,
+    &:focus:checked + .check {
+      box-shadow: none !important;
     }
   }
 }
 
-.b-checkbox.checkbox input[type=checkbox], .b-radio.radio input[type=radio] {
-  &+.check {
+.b-checkbox.checkbox input[type="checkbox"],
+.b-radio.radio input[type="radio"] {
+  & + .check {
     border: $checkbox-border;
   }
 }
diff --git a/packages/merchant-backoffice-ui/src/scss/_hero-bar.scss 
b/packages/merchant-backoffice-ui/src/scss/_hero-bar.scss
index 06889b23e..0276468d7 100644
--- a/packages/merchant-backoffice-ui/src/scss/_hero-bar.scss
+++ b/packages/merchant-backoffice-ui/src/scss/_hero-bar.scss
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
@@ -32,17 +32,17 @@ section.hero.is-hero-bar {
       }
 
       > div > .level {
-        margin-bottom: $default-padding * .5;
+        margin-bottom: $default-padding * 0.5;
       }
 
       .subtitle + p {
-        margin-top: $default-padding * .5;
+        margin-top: $default-padding * 0.5;
       }
     }
 
     .button {
       &.is-hero-button {
-        background-color: rgba($white, .5);
+        background-color: rgba($white, 0.5);
         font-weight: 300;
         @include transition(background-color);
 
diff --git a/packages/merchant-backoffice-ui/src/scss/_main-section.scss 
b/packages/merchant-backoffice-ui/src/scss/_main-section.scss
index 49bb65c17..5a8b20ba0 100644
--- a/packages/merchant-backoffice-ui/src/scss/_main-section.scss
+++ b/packages/merchant-backoffice-ui/src/scss/_main-section.scss
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
diff --git a/packages/merchant-backoffice-ui/src/scss/_mixins.scss 
b/packages/merchant-backoffice-ui/src/scss/_mixins.scss
index 7d5f6b144..f119ec68a 100644
--- a/packages/merchant-backoffice-ui/src/scss/_mixins.scss
+++ b/packages/merchant-backoffice-ui/src/scss/_mixins.scss
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
@@ -23,12 +23,12 @@
   transition: $t 250ms ease-in-out 50ms;
 }
 
-@mixin icon-with-update-mark ($icon-base-width) {
+@mixin icon-with-update-mark($icon-base-width) {
   .icon {
     width: $icon-base-width;
 
     &.has-update-mark:after {
-      right: calc($icon-base-width / 2) - .85;
+      right: calc($icon-base-width / 2) - 0.85;
     }
   }
 }
diff --git a/packages/merchant-backoffice-ui/src/scss/_modal.scss 
b/packages/merchant-backoffice-ui/src/scss/_modal.scss
index 5bdd9e5dc..b2bfd3e9e 100644
--- a/packages/merchant-backoffice-ui/src/scss/_modal.scss
+++ b/packages/merchant-backoffice-ui/src/scss/_modal.scss
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
diff --git a/packages/merchant-backoffice-ui/src/scss/_nav-bar.scss 
b/packages/merchant-backoffice-ui/src/scss/_nav-bar.scss
index 3928ebebb..406e0392f 100644
--- a/packages/merchant-backoffice-ui/src/scss/_nav-bar.scss
+++ b/packages/merchant-backoffice-ui/src/scss/_nav-bar.scss
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
@@ -25,7 +25,7 @@ nav.navbar {
   .navbar-item {
     &.has-user-avatar {
       .is-user-avatar {
-        margin-right: $default-padding * .5;
+        margin-right: $default-padding * 0.5;
         display: inline-flex;
         width: $navbar-avatar-size;
         height: $navbar-avatar-size;
@@ -98,11 +98,11 @@ nav.navbar {
 
       .navbar-item {
         .icon:first-child {
-          margin-right: $default-padding * .5;
+          margin-right: $default-padding * 0.5;
         }
 
         &.has-dropdown {
-          >.navbar-link {
+          > .navbar-link {
             background-color: $white-ter;
             .icon:last-child {
               display: none;
@@ -111,11 +111,11 @@ nav.navbar {
         }
 
         &.has-user-avatar {
-          >.navbar-link {
+          > .navbar-link {
             display: flex;
             align-items: center;
-            padding-top: $default-padding * .5;
-            padding-bottom: $default-padding * .5;
+            padding-top: $default-padding * 0.5;
+            padding-bottom: $default-padding * 0.5;
           }
         }
       }
@@ -131,7 +131,7 @@ nav.navbar {
 
       &:not(.is-desktop-icon-only) {
         .icon:first-child {
-          margin-right: $default-padding * .5;
+          margin-right: $default-padding * 0.5;
         }
       }
       &.is-desktop-icon-only {
diff --git a/packages/merchant-backoffice-ui/src/scss/_table.scss 
b/packages/merchant-backoffice-ui/src/scss/_table.scss
index 62f4c86fe..e4fbfc7b3 100644
--- a/packages/merchant-backoffice-ui/src/scss/_table.scss
+++ b/packages/merchant-backoffice-ui/src/scss/_table.scss
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
@@ -26,7 +26,8 @@ table.table {
     }
   }
 
-  td, th {
+  td,
+  th {
     &.checkbox-cell {
       .b-checkbox.checkbox:not(.button) {
         margin-right: 0;
@@ -83,7 +84,9 @@ table.table {
       }
     }
 
-    .pagination-previous, .pagination-next, .pagination-link {
+    .pagination-previous,
+    .pagination-next,
+    .pagination-link {
       border-color: $button-border-color;
       color: $base-color;
 
@@ -108,24 +111,25 @@ table.table {
     &.has-mobile-sort-spaced {
       .b-table {
         .field.table-mobile-sort {
-          padding-top: $default-padding * .5;
+          padding-top: $default-padding * 0.5;
         }
       }
     }
   }
   .b-table {
     .field.table-mobile-sort {
-      padding: 0 $default-padding * .5;
+      padding: 0 $default-padding * 0.5;
     }
 
     .table-wrapper.has-mobile-cards {
       tr {
         box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1);
-        margin-bottom: 3px!important;
+        margin-bottom: 3px !important;
       }
       td {
         &.is-progress-col {
-          span, progress {
+          span,
+          progress {
             display: flex;
             width: 45%;
             align-items: center;
@@ -133,11 +137,13 @@ table.table {
           }
         }
 
-        &.checkbox-cell, &.is-image-cell {
-          border-bottom: 0!important;
+        &.checkbox-cell,
+        &.is-image-cell {
+          border-bottom: 0 !important;
         }
 
-        &.checkbox-cell, &.is-actions-cell {
+        &.checkbox-cell,
+        &.is-actions-cell {
           &:before {
             display: none;
           }
@@ -163,7 +169,7 @@ table.table {
             .image {
               width: $table-avatar-size-mobile;
               height: auto;
-              margin: 0 auto $default-padding * .25;
+              margin: 0 auto $default-padding * 0.25;
             }
           }
         }
diff --git a/packages/merchant-backoffice-ui/src/scss/_tiles.scss 
b/packages/merchant-backoffice-ui/src/scss/_tiles.scss
index 3e64b3b5b..94dd6c21d 100644
--- a/packages/merchant-backoffice-ui/src/scss/_tiles.scss
+++ b/packages/merchant-backoffice-ui/src/scss/_tiles.scss
@@ -14,12 +14,11 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-
 .is-tiles-wrapper {
   margin-bottom: $default-padding;
 }
diff --git a/packages/merchant-backoffice-ui/src/scss/_title-bar.scss 
b/packages/merchant-backoffice-ui/src/scss/_title-bar.scss
index a258954ca..bac3f6b42 100644
--- a/packages/merchant-backoffice-ui/src/scss/_title-bar.scss
+++ b/packages/merchant-backoffice-ui/src/scss/_title-bar.scss
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
@@ -26,14 +26,14 @@ section.section.is-title-bar {
   ul {
     li {
       display: inline-block;
-      padding: 0 $default-padding * .5 0 0;
+      padding: 0 $default-padding * 0.5 0 0;
       font-size: $default-padding;
       color: $title-bar-color;
 
       &:after {
         display: inline-block;
-        content: '/';
-        padding-left: $default-padding * .5;
+        content: "/";
+        padding-left: $default-padding * 0.5;
       }
 
       &:last-child {
diff --git a/packages/merchant-backoffice-ui/src/scss/fonts/nunito.css 
b/packages/merchant-backoffice-ui/src/scss/fonts/nunito.css
index 213e66d54..a578506e8 100644
--- a/packages/merchant-backoffice-ui/src/scss/fonts/nunito.css
+++ b/packages/merchant-backoffice-ui/src/scss/fonts/nunito.css
@@ -15,8 +15,8 @@
  */
 
 @font-face {
-  font-family: 'Nunito';
+  font-family: "Nunito";
   font-style: normal;
   font-weight: 400;
-  src: url(./XRXV3I6Li01BKofINeaE.ttf) format('truetype');
+  src: url(./XRXV3I6Li01BKofINeaE.ttf) format("truetype");
 }
diff --git 
a/packages/merchant-backoffice-ui/src/scss/icons/materialdesignicons-4.9.95.min.css
 
b/packages/merchant-backoffice-ui/src/scss/icons/materialdesignicons-4.9.95.min.css
index 24a89d639..2b8a2b244 100644
--- 
a/packages/merchant-backoffice-ui/src/scss/icons/materialdesignicons-4.9.95.min.css
+++ 
b/packages/merchant-backoffice-ui/src/scss/icons/materialdesignicons-4.9.95.min.css
@@ -1,3 +1,15109 @@
-@font-face{font-family:"Material Design 
Icons";src:url("./fonts/materialdesignicons-webfont-4.9.95.eot");src:url("./fonts/materialdesignicons-webfont-4.9.95.woff2")
 format("woff2"),url("./fonts/materialdesignicons-webfont-4.9.95.woff") 
format("woff"),url("./fonts/materialdesignicons-webfont-4.9.95.ttf") 
format("truetype");font-weight:normal;font-style:normal}.mdi:before,.mdi-set{display:inline-block;font:normal
 normal normal 24px/1 "Material Design Icons";font-size:inherit;text-rendering 
[...]
+@font-face {
+  font-family: "Material Design Icons";
+  src: url("./fonts/materialdesignicons-webfont-4.9.95.eot");
+  src: url("./fonts/materialdesignicons-webfont-4.9.95.woff2") format("woff2"),
+    url("./fonts/materialdesignicons-webfont-4.9.95.woff") format("woff"),
+    url("./fonts/materialdesignicons-webfont-4.9.95.ttf") format("truetype");
+  font-weight: normal;
+  font-style: normal;
+}
+.mdi:before,
+.mdi-set {
+  display: inline-block;
+  font: normal normal normal 24px/1 "Material Design Icons";
+  font-size: inherit;
+  text-rendering: auto;
+  line-height: inherit;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+.mdi-ab-testing::before {
+  content: "\F001C";
+}
+.mdi-abjad-arabic::before {
+  content: "\F0353";
+}
+.mdi-abjad-hebrew::before {
+  content: "\F0354";
+}
+.mdi-abugida-devanagari::before {
+  content: "\F0355";
+}
+.mdi-abugida-thai::before {
+  content: "\F0356";
+}
+.mdi-access-point::before {
+  content: "\F002";
+}
+.mdi-access-point-network::before {
+  content: "\F003";
+}
+.mdi-access-point-network-off::before {
+  content: "\FBBD";
+}
+.mdi-account::before {
+  content: "\F004";
+}
+.mdi-account-alert::before {
+  content: "\F005";
+}
+.mdi-account-alert-outline::before {
+  content: "\FB2C";
+}
+.mdi-account-arrow-left::before {
+  content: "\FB2D";
+}
+.mdi-account-arrow-left-outline::before {
+  content: "\FB2E";
+}
+.mdi-account-arrow-right::before {
+  content: "\FB2F";
+}
+.mdi-account-arrow-right-outline::before {
+  content: "\FB30";
+}
+.mdi-account-badge::before {
+  content: "\FD83";
+}
+.mdi-account-badge-alert::before {
+  content: "\FD84";
+}
+.mdi-account-badge-alert-outline::before {
+  content: "\FD85";
+}
+.mdi-account-badge-horizontal::before {
+  content: "\FDF0";
+}
+.mdi-account-badge-horizontal-outline::before {
+  content: "\FDF1";
+}
+.mdi-account-badge-outline::before {
+  content: "\FD86";
+}
+.mdi-account-box::before {
+  content: "\F006";
+}
+.mdi-account-box-multiple::before {
+  content: "\F933";
+}
+.mdi-account-box-multiple-outline::before {
+  content: "\F002C";
+}
+.mdi-account-box-outline::before {
+  content: "\F007";
+}
+.mdi-account-cancel::before {
+  content: "\F030A";
+}
+.mdi-account-cancel-outline::before {
+  content: "\F030B";
+}
+.mdi-account-card-details::before {
+  content: "\F5D2";
+}
+.mdi-account-card-details-outline::before {
+  content: "\FD87";
+}
+.mdi-account-cash::before {
+  content: "\F00C2";
+}
+.mdi-account-cash-outline::before {
+  content: "\F00C3";
+}
+.mdi-account-check::before {
+  content: "\F008";
+}
+.mdi-account-check-outline::before {
+  content: "\FBBE";
+}
+.mdi-account-child::before {
+  content: "\FA88";
+}
+.mdi-account-child-circle::before {
+  content: "\FA89";
+}
+.mdi-account-child-outline::before {
+  content: "\F00F3";
+}
+.mdi-account-circle::before {
+  content: "\F009";
+}
+.mdi-account-circle-outline::before {
+  content: "\FB31";
+}
+.mdi-account-clock::before {
+  content: "\FB32";
+}
+.mdi-account-clock-outline::before {
+  content: "\FB33";
+}
+.mdi-account-cog::before {
+  content: "\F039B";
+}
+.mdi-account-cog-outline::before {
+  content: "\F039C";
+}
+.mdi-account-convert::before {
+  content: "\F00A";
+}
+.mdi-account-convert-outline::before {
+  content: "\F032C";
+}
+.mdi-account-details::before {
+  content: "\F631";
+}
+.mdi-account-details-outline::before {
+  content: "\F039D";
+}
+.mdi-account-edit::before {
+  content: "\F6BB";
+}
+.mdi-account-edit-outline::before {
+  content: "\F001D";
+}
+.mdi-account-group::before {
+  content: "\F848";
+}
+.mdi-account-group-outline::before {
+  content: "\FB34";
+}
+.mdi-account-heart::before {
+  content: "\F898";
+}
+.mdi-account-heart-outline::before {
+  content: "\FBBF";
+}
+.mdi-account-key::before {
+  content: "\F00B";
+}
+.mdi-account-key-outline::before {
+  content: "\FBC0";
+}
+.mdi-account-lock::before {
+  content: "\F0189";
+}
+.mdi-account-lock-outline::before {
+  content: "\F018A";
+}
+.mdi-account-minus::before {
+  content: "\F00D";
+}
+.mdi-account-minus-outline::before {
+  content: "\FAEB";
+}
+.mdi-account-multiple::before {
+  content: "\F00E";
+}
+.mdi-account-multiple-check::before {
+  content: "\F8C4";
+}
+.mdi-account-multiple-check-outline::before {
+  content: "\F0229";
+}
+.mdi-account-multiple-minus::before {
+  content: "\F5D3";
+}
+.mdi-account-multiple-minus-outline::before {
+  content: "\FBC1";
+}
+.mdi-account-multiple-outline::before {
+  content: "\F00F";
+}
+.mdi-account-multiple-plus::before {
+  content: "\F010";
+}
+.mdi-account-multiple-plus-outline::before {
+  content: "\F7FF";
+}
+.mdi-account-multiple-remove::before {
+  content: "\F0235";
+}
+.mdi-account-multiple-remove-outline::before {
+  content: "\F0236";
+}
+.mdi-account-network::before {
+  content: "\F011";
+}
+.mdi-account-network-outline::before {
+  content: "\FBC2";
+}
+.mdi-account-off::before {
+  content: "\F012";
+}
+.mdi-account-off-outline::before {
+  content: "\FBC3";
+}
+.mdi-account-outline::before {
+  content: "\F013";
+}
+.mdi-account-plus::before {
+  content: "\F014";
+}
+.mdi-account-plus-outline::before {
+  content: "\F800";
+}
+.mdi-account-question::before {
+  content: "\FB35";
+}
+.mdi-account-question-outline::before {
+  content: "\FB36";
+}
+.mdi-account-remove::before {
+  content: "\F015";
+}
+.mdi-account-remove-outline::before {
+  content: "\FAEC";
+}
+.mdi-account-search::before {
+  content: "\F016";
+}
+.mdi-account-search-outline::before {
+  content: "\F934";
+}
+.mdi-account-settings::before {
+  content: "\F630";
+}
+.mdi-account-settings-outline::before {
+  content: "\F00F4";
+}
+.mdi-account-star::before {
+  content: "\F017";
+}
+.mdi-account-star-outline::before {
+  content: "\FBC4";
+}
+.mdi-account-supervisor::before {
+  content: "\FA8A";
+}
+.mdi-account-supervisor-circle::before {
+  content: "\FA8B";
+}
+.mdi-account-supervisor-outline::before {
+  content: "\F0158";
+}
+.mdi-account-switch::before {
+  content: "\F019";
+}
+.mdi-account-tie::before {
+  content: "\FCBF";
+}
+.mdi-account-tie-outline::before {
+  content: "\F00F5";
+}
+.mdi-account-tie-voice::before {
+  content: "\F0333";
+}
+.mdi-account-tie-voice-off::before {
+  content: "\F0335";
+}
+.mdi-account-tie-voice-off-outline::before {
+  content: "\F0336";
+}
+.mdi-account-tie-voice-outline::before {
+  content: "\F0334";
+}
+.mdi-accusoft::before {
+  content: "\F849";
+}
+.mdi-adjust::before {
+  content: "\F01A";
+}
+.mdi-adobe::before {
+  content: "\F935";
+}
+.mdi-adobe-acrobat::before {
+  content: "\FFBD";
+}
+.mdi-air-conditioner::before {
+  content: "\F01B";
+}
+.mdi-air-filter::before {
+  content: "\FD1F";
+}
+.mdi-air-horn::before {
+  content: "\FD88";
+}
+.mdi-air-humidifier::before {
+  content: "\F00C4";
+}
+.mdi-air-purifier::before {
+  content: "\FD20";
+}
+.mdi-airbag::before {
+  content: "\FBC5";
+}
+.mdi-airballoon::before {
+  content: "\F01C";
+}
+.mdi-airballoon-outline::before {
+  content: "\F002D";
+}
+.mdi-airplane::before {
+  content: "\F01D";
+}
+.mdi-airplane-landing::before {
+  content: "\F5D4";
+}
+.mdi-airplane-off::before {
+  content: "\F01E";
+}
+.mdi-airplane-takeoff::before {
+  content: "\F5D5";
+}
+.mdi-airplay::before {
+  content: "\F01F";
+}
+.mdi-airport::before {
+  content: "\F84A";
+}
+.mdi-alarm::before {
+  content: "\F020";
+}
+.mdi-alarm-bell::before {
+  content: "\F78D";
+}
+.mdi-alarm-check::before {
+  content: "\F021";
+}
+.mdi-alarm-light::before {
+  content: "\F78E";
+}
+.mdi-alarm-light-outline::before {
+  content: "\FBC6";
+}
+.mdi-alarm-multiple::before {
+  content: "\F022";
+}
+.mdi-alarm-note::before {
+  content: "\FE8E";
+}
+.mdi-alarm-note-off::before {
+  content: "\FE8F";
+}
+.mdi-alarm-off::before {
+  content: "\F023";
+}
+.mdi-alarm-plus::before {
+  content: "\F024";
+}
+.mdi-alarm-snooze::before {
+  content: "\F68D";
+}
+.mdi-album::before {
+  content: "\F025";
+}
+.mdi-alert::before {
+  content: "\F026";
+}
+.mdi-alert-box::before {
+  content: "\F027";
+}
+.mdi-alert-box-outline::before {
+  content: "\FCC0";
+}
+.mdi-alert-circle::before {
+  content: "\F028";
+}
+.mdi-alert-circle-check::before {
+  content: "\F0218";
+}
+.mdi-alert-circle-check-outline::before {
+  content: "\F0219";
+}
+.mdi-alert-circle-outline::before {
+  content: "\F5D6";
+}
+.mdi-alert-decagram::before {
+  content: "\F6BC";
+}
+.mdi-alert-decagram-outline::before {
+  content: "\FCC1";
+}
+.mdi-alert-octagon::before {
+  content: "\F029";
+}
+.mdi-alert-octagon-outline::before {
+  content: "\FCC2";
+}
+.mdi-alert-octagram::before {
+  content: "\F766";
+}
+.mdi-alert-octagram-outline::before {
+  content: "\FCC3";
+}
+.mdi-alert-outline::before {
+  content: "\F02A";
+}
+.mdi-alert-rhombus::before {
+  content: "\F01F9";
+}
+.mdi-alert-rhombus-outline::before {
+  content: "\F01FA";
+}
+.mdi-alien::before {
+  content: "\F899";
+}
+.mdi-alien-outline::before {
+  content: "\F00F6";
+}
+.mdi-align-horizontal-center::before {
+  content: "\F01EE";
+}
+.mdi-align-horizontal-left::before {
+  content: "\F01ED";
+}
+.mdi-align-horizontal-right::before {
+  content: "\F01EF";
+}
+.mdi-align-vertical-bottom::before {
+  content: "\F01F0";
+}
+.mdi-align-vertical-center::before {
+  content: "\F01F1";
+}
+.mdi-align-vertical-top::before {
+  content: "\F01F2";
+}
+.mdi-all-inclusive::before {
+  content: "\F6BD";
+}
+.mdi-allergy::before {
+  content: "\F0283";
+}
+.mdi-alpha::before {
+  content: "\F02B";
+}
+.mdi-alpha-a::before {
+  content: "\41";
+}
+.mdi-alpha-a-box::before {
+  content: "\FAED";
+}
+.mdi-alpha-a-box-outline::before {
+  content: "\FBC7";
+}
+.mdi-alpha-a-circle::before {
+  content: "\FBC8";
+}
+.mdi-alpha-a-circle-outline::before {
+  content: "\FBC9";
+}
+.mdi-alpha-b::before {
+  content: "\42";
+}
+.mdi-alpha-b-box::before {
+  content: "\FAEE";
+}
+.mdi-alpha-b-box-outline::before {
+  content: "\FBCA";
+}
+.mdi-alpha-b-circle::before {
+  content: "\FBCB";
+}
+.mdi-alpha-b-circle-outline::before {
+  content: "\FBCC";
+}
+.mdi-alpha-c::before {
+  content: "\43";
+}
+.mdi-alpha-c-box::before {
+  content: "\FAEF";
+}
+.mdi-alpha-c-box-outline::before {
+  content: "\FBCD";
+}
+.mdi-alpha-c-circle::before {
+  content: "\FBCE";
+}
+.mdi-alpha-c-circle-outline::before {
+  content: "\FBCF";
+}
+.mdi-alpha-d::before {
+  content: "\44";
+}
+.mdi-alpha-d-box::before {
+  content: "\FAF0";
+}
+.mdi-alpha-d-box-outline::before {
+  content: "\FBD0";
+}
+.mdi-alpha-d-circle::before {
+  content: "\FBD1";
+}
+.mdi-alpha-d-circle-outline::before {
+  content: "\FBD2";
+}
+.mdi-alpha-e::before {
+  content: "\45";
+}
+.mdi-alpha-e-box::before {
+  content: "\FAF1";
+}
+.mdi-alpha-e-box-outline::before {
+  content: "\FBD3";
+}
+.mdi-alpha-e-circle::before {
+  content: "\FBD4";
+}
+.mdi-alpha-e-circle-outline::before {
+  content: "\FBD5";
+}
+.mdi-alpha-f::before {
+  content: "\46";
+}
+.mdi-alpha-f-box::before {
+  content: "\FAF2";
+}
+.mdi-alpha-f-box-outline::before {
+  content: "\FBD6";
+}
+.mdi-alpha-f-circle::before {
+  content: "\FBD7";
+}
+.mdi-alpha-f-circle-outline::before {
+  content: "\FBD8";
+}
+.mdi-alpha-g::before {
+  content: "\47";
+}
+.mdi-alpha-g-box::before {
+  content: "\FAF3";
+}
+.mdi-alpha-g-box-outline::before {
+  content: "\FBD9";
+}
+.mdi-alpha-g-circle::before {
+  content: "\FBDA";
+}
+.mdi-alpha-g-circle-outline::before {
+  content: "\FBDB";
+}
+.mdi-alpha-h::before {
+  content: "\48";
+}
+.mdi-alpha-h-box::before {
+  content: "\FAF4";
+}
+.mdi-alpha-h-box-outline::before {
+  content: "\FBDC";
+}
+.mdi-alpha-h-circle::before {
+  content: "\FBDD";
+}
+.mdi-alpha-h-circle-outline::before {
+  content: "\FBDE";
+}
+.mdi-alpha-i::before {
+  content: "\49";
+}
+.mdi-alpha-i-box::before {
+  content: "\FAF5";
+}
+.mdi-alpha-i-box-outline::before {
+  content: "\FBDF";
+}
+.mdi-alpha-i-circle::before {
+  content: "\FBE0";
+}
+.mdi-alpha-i-circle-outline::before {
+  content: "\FBE1";
+}
+.mdi-alpha-j::before {
+  content: "\4A";
+}
+.mdi-alpha-j-box::before {
+  content: "\FAF6";
+}
+.mdi-alpha-j-box-outline::before {
+  content: "\FBE2";
+}
+.mdi-alpha-j-circle::before {
+  content: "\FBE3";
+}
+.mdi-alpha-j-circle-outline::before {
+  content: "\FBE4";
+}
+.mdi-alpha-k::before {
+  content: "\4B";
+}
+.mdi-alpha-k-box::before {
+  content: "\FAF7";
+}
+.mdi-alpha-k-box-outline::before {
+  content: "\FBE5";
+}
+.mdi-alpha-k-circle::before {
+  content: "\FBE6";
+}
+.mdi-alpha-k-circle-outline::before {
+  content: "\FBE7";
+}
+.mdi-alpha-l::before {
+  content: "\4C";
+}
+.mdi-alpha-l-box::before {
+  content: "\FAF8";
+}
+.mdi-alpha-l-box-outline::before {
+  content: "\FBE8";
+}
+.mdi-alpha-l-circle::before {
+  content: "\FBE9";
+}
+.mdi-alpha-l-circle-outline::before {
+  content: "\FBEA";
+}
+.mdi-alpha-m::before {
+  content: "\4D";
+}
+.mdi-alpha-m-box::before {
+  content: "\FAF9";
+}
+.mdi-alpha-m-box-outline::before {
+  content: "\FBEB";
+}
+.mdi-alpha-m-circle::before {
+  content: "\FBEC";
+}
+.mdi-alpha-m-circle-outline::before {
+  content: "\FBED";
+}
+.mdi-alpha-n::before {
+  content: "\4E";
+}
+.mdi-alpha-n-box::before {
+  content: "\FAFA";
+}
+.mdi-alpha-n-box-outline::before {
+  content: "\FBEE";
+}
+.mdi-alpha-n-circle::before {
+  content: "\FBEF";
+}
+.mdi-alpha-n-circle-outline::before {
+  content: "\FBF0";
+}
+.mdi-alpha-o::before {
+  content: "\4F";
+}
+.mdi-alpha-o-box::before {
+  content: "\FAFB";
+}
+.mdi-alpha-o-box-outline::before {
+  content: "\FBF1";
+}
+.mdi-alpha-o-circle::before {
+  content: "\FBF2";
+}
+.mdi-alpha-o-circle-outline::before {
+  content: "\FBF3";
+}
+.mdi-alpha-p::before {
+  content: "\50";
+}
+.mdi-alpha-p-box::before {
+  content: "\FAFC";
+}
+.mdi-alpha-p-box-outline::before {
+  content: "\FBF4";
+}
+.mdi-alpha-p-circle::before {
+  content: "\FBF5";
+}
+.mdi-alpha-p-circle-outline::before {
+  content: "\FBF6";
+}
+.mdi-alpha-q::before {
+  content: "\51";
+}
+.mdi-alpha-q-box::before {
+  content: "\FAFD";
+}
+.mdi-alpha-q-box-outline::before {
+  content: "\FBF7";
+}
+.mdi-alpha-q-circle::before {
+  content: "\FBF8";
+}
+.mdi-alpha-q-circle-outline::before {
+  content: "\FBF9";
+}
+.mdi-alpha-r::before {
+  content: "\52";
+}
+.mdi-alpha-r-box::before {
+  content: "\FAFE";
+}
+.mdi-alpha-r-box-outline::before {
+  content: "\FBFA";
+}
+.mdi-alpha-r-circle::before {
+  content: "\FBFB";
+}
+.mdi-alpha-r-circle-outline::before {
+  content: "\FBFC";
+}
+.mdi-alpha-s::before {
+  content: "\53";
+}
+.mdi-alpha-s-box::before {
+  content: "\FAFF";
+}
+.mdi-alpha-s-box-outline::before {
+  content: "\FBFD";
+}
+.mdi-alpha-s-circle::before {
+  content: "\FBFE";
+}
+.mdi-alpha-s-circle-outline::before {
+  content: "\FBFF";
+}
+.mdi-alpha-t::before {
+  content: "\54";
+}
+.mdi-alpha-t-box::before {
+  content: "\FB00";
+}
+.mdi-alpha-t-box-outline::before {
+  content: "\FC00";
+}
+.mdi-alpha-t-circle::before {
+  content: "\FC01";
+}
+.mdi-alpha-t-circle-outline::before {
+  content: "\FC02";
+}
+.mdi-alpha-u::before {
+  content: "\55";
+}
+.mdi-alpha-u-box::before {
+  content: "\FB01";
+}
+.mdi-alpha-u-box-outline::before {
+  content: "\FC03";
+}
+.mdi-alpha-u-circle::before {
+  content: "\FC04";
+}
+.mdi-alpha-u-circle-outline::before {
+  content: "\FC05";
+}
+.mdi-alpha-v::before {
+  content: "\56";
+}
+.mdi-alpha-v-box::before {
+  content: "\FB02";
+}
+.mdi-alpha-v-box-outline::before {
+  content: "\FC06";
+}
+.mdi-alpha-v-circle::before {
+  content: "\FC07";
+}
+.mdi-alpha-v-circle-outline::before {
+  content: "\FC08";
+}
+.mdi-alpha-w::before {
+  content: "\57";
+}
+.mdi-alpha-w-box::before {
+  content: "\FB03";
+}
+.mdi-alpha-w-box-outline::before {
+  content: "\FC09";
+}
+.mdi-alpha-w-circle::before {
+  content: "\FC0A";
+}
+.mdi-alpha-w-circle-outline::before {
+  content: "\FC0B";
+}
+.mdi-alpha-x::before {
+  content: "\58";
+}
+.mdi-alpha-x-box::before {
+  content: "\FB04";
+}
+.mdi-alpha-x-box-outline::before {
+  content: "\FC0C";
+}
+.mdi-alpha-x-circle::before {
+  content: "\FC0D";
+}
+.mdi-alpha-x-circle-outline::before {
+  content: "\FC0E";
+}
+.mdi-alpha-y::before {
+  content: "\59";
+}
+.mdi-alpha-y-box::before {
+  content: "\FB05";
+}
+.mdi-alpha-y-box-outline::before {
+  content: "\FC0F";
+}
+.mdi-alpha-y-circle::before {
+  content: "\FC10";
+}
+.mdi-alpha-y-circle-outline::before {
+  content: "\FC11";
+}
+.mdi-alpha-z::before {
+  content: "\5A";
+}
+.mdi-alpha-z-box::before {
+  content: "\FB06";
+}
+.mdi-alpha-z-box-outline::before {
+  content: "\FC12";
+}
+.mdi-alpha-z-circle::before {
+  content: "\FC13";
+}
+.mdi-alpha-z-circle-outline::before {
+  content: "\FC14";
+}
+.mdi-alphabet-aurebesh::before {
+  content: "\F0357";
+}
+.mdi-alphabet-cyrillic::before {
+  content: "\F0358";
+}
+.mdi-alphabet-greek::before {
+  content: "\F0359";
+}
+.mdi-alphabet-latin::before {
+  content: "\F035A";
+}
+.mdi-alphabet-piqad::before {
+  content: "\F035B";
+}
+.mdi-alphabet-tengwar::before {
+  content: "\F0362";
+}
+.mdi-alphabetical::before {
+  content: "\F02C";
+}
+.mdi-alphabetical-off::before {
+  content: "\F002E";
+}
+.mdi-alphabetical-variant::before {
+  content: "\F002F";
+}
+.mdi-alphabetical-variant-off::before {
+  content: "\F0030";
+}
+.mdi-altimeter::before {
+  content: "\F5D7";
+}
+.mdi-amazon::before {
+  content: "\F02D";
+}
+.mdi-amazon-alexa::before {
+  content: "\F8C5";
+}
+.mdi-amazon-drive::before {
+  content: "\F02E";
+}
+.mdi-ambulance::before {
+  content: "\F02F";
+}
+.mdi-ammunition::before {
+  content: "\FCC4";
+}
+.mdi-ampersand::before {
+  content: "\FA8C";
+}
+.mdi-amplifier::before {
+  content: "\F030";
+}
+.mdi-amplifier-off::before {
+  content: "\F01E0";
+}
+.mdi-anchor::before {
+  content: "\F031";
+}
+.mdi-android::before {
+  content: "\F032";
+}
+.mdi-android-auto::before {
+  content: "\FA8D";
+}
+.mdi-android-debug-bridge::before {
+  content: "\F033";
+}
+.mdi-android-head::before {
+  content: "\F78F";
+}
+.mdi-android-messages::before {
+  content: "\FD21";
+}
+.mdi-android-studio::before {
+  content: "\F034";
+}
+.mdi-angle-acute::before {
+  content: "\F936";
+}
+.mdi-angle-obtuse::before {
+  content: "\F937";
+}
+.mdi-angle-right::before {
+  content: "\F938";
+}
+.mdi-angular::before {
+  content: "\F6B1";
+}
+.mdi-angularjs::before {
+  content: "\F6BE";
+}
+.mdi-animation::before {
+  content: "\F5D8";
+}
+.mdi-animation-outline::before {
+  content: "\FA8E";
+}
+.mdi-animation-play::before {
+  content: "\F939";
+}
+.mdi-animation-play-outline::before {
+  content: "\FA8F";
+}
+.mdi-ansible::before {
+  content: "\F00C5";
+}
+.mdi-antenna::before {
+  content: "\F0144";
+}
+.mdi-anvil::before {
+  content: "\F89A";
+}
+.mdi-apache-kafka::before {
+  content: "\F0031";
+}
+.mdi-api::before {
+  content: "\F00C6";
+}
+.mdi-api-off::before {
+  content: "\F0282";
+}
+.mdi-apple::before {
+  content: "\F035";
+}
+.mdi-apple-finder::before {
+  content: "\F036";
+}
+.mdi-apple-icloud::before {
+  content: "\F038";
+}
+.mdi-apple-ios::before {
+  content: "\F037";
+}
+.mdi-apple-keyboard-caps::before {
+  content: "\F632";
+}
+.mdi-apple-keyboard-command::before {
+  content: "\F633";
+}
+.mdi-apple-keyboard-control::before {
+  content: "\F634";
+}
+.mdi-apple-keyboard-option::before {
+  content: "\F635";
+}
+.mdi-apple-keyboard-shift::before {
+  content: "\F636";
+}
+.mdi-apple-safari::before {
+  content: "\F039";
+}
+.mdi-application::before {
+  content: "\F614";
+}
+.mdi-application-export::before {
+  content: "\FD89";
+}
+.mdi-application-import::before {
+  content: "\FD8A";
+}
+.mdi-approximately-equal::before {
+  content: "\FFBE";
+}
+.mdi-approximately-equal-box::before {
+  content: "\FFBF";
+}
+.mdi-apps::before {
+  content: "\F03B";
+}
+.mdi-apps-box::before {
+  content: "\FD22";
+}
+.mdi-arch::before {
+  content: "\F8C6";
+}
+.mdi-archive::before {
+  content: "\F03C";
+}
+.mdi-archive-arrow-down::before {
+  content: "\F0284";
+}
+.mdi-archive-arrow-down-outline::before {
+  content: "\F0285";
+}
+.mdi-archive-arrow-up::before {
+  content: "\F0286";
+}
+.mdi-archive-arrow-up-outline::before {
+  content: "\F0287";
+}
+.mdi-archive-outline::before {
+  content: "\F0239";
+}
+.mdi-arm-flex::before {
+  content: "\F008F";
+}
+.mdi-arm-flex-outline::before {
+  content: "\F0090";
+}
+.mdi-arrange-bring-forward::before {
+  content: "\F03D";
+}
+.mdi-arrange-bring-to-front::before {
+  content: "\F03E";
+}
+.mdi-arrange-send-backward::before {
+  content: "\F03F";
+}
+.mdi-arrange-send-to-back::before {
+  content: "\F040";
+}
+.mdi-arrow-all::before {
+  content: "\F041";
+}
+.mdi-arrow-bottom-left::before {
+  content: "\F042";
+}
+.mdi-arrow-bottom-left-bold-outline::before {
+  content: "\F9B6";
+}
+.mdi-arrow-bottom-left-thick::before {
+  content: "\F9B7";
+}
+.mdi-arrow-bottom-right::before {
+  content: "\F043";
+}
+.mdi-arrow-bottom-right-bold-outline::before {
+  content: "\F9B8";
+}
+.mdi-arrow-bottom-right-thick::before {
+  content: "\F9B9";
+}
+.mdi-arrow-collapse::before {
+  content: "\F615";
+}
+.mdi-arrow-collapse-all::before {
+  content: "\F044";
+}
+.mdi-arrow-collapse-down::before {
+  content: "\F791";
+}
+.mdi-arrow-collapse-horizontal::before {
+  content: "\F84B";
+}
+.mdi-arrow-collapse-left::before {
+  content: "\F792";
+}
+.mdi-arrow-collapse-right::before {
+  content: "\F793";
+}
+.mdi-arrow-collapse-up::before {
+  content: "\F794";
+}
+.mdi-arrow-collapse-vertical::before {
+  content: "\F84C";
+}
+.mdi-arrow-decision::before {
+  content: "\F9BA";
+}
+.mdi-arrow-decision-auto::before {
+  content: "\F9BB";
+}
+.mdi-arrow-decision-auto-outline::before {
+  content: "\F9BC";
+}
+.mdi-arrow-decision-outline::before {
+  content: "\F9BD";
+}
+.mdi-arrow-down::before {
+  content: "\F045";
+}
+.mdi-arrow-down-bold::before {
+  content: "\F72D";
+}
+.mdi-arrow-down-bold-box::before {
+  content: "\F72E";
+}
+.mdi-arrow-down-bold-box-outline::before {
+  content: "\F72F";
+}
+.mdi-arrow-down-bold-circle::before {
+  content: "\F047";
+}
+.mdi-arrow-down-bold-circle-outline::before {
+  content: "\F048";
+}
+.mdi-arrow-down-bold-hexagon-outline::before {
+  content: "\F049";
+}
+.mdi-arrow-down-bold-outline::before {
+  content: "\F9BE";
+}
+.mdi-arrow-down-box::before {
+  content: "\F6BF";
+}
+.mdi-arrow-down-circle::before {
+  content: "\FCB7";
+}
+.mdi-arrow-down-circle-outline::before {
+  content: "\FCB8";
+}
+.mdi-arrow-down-drop-circle::before {
+  content: "\F04A";
+}
+.mdi-arrow-down-drop-circle-outline::before {
+  content: "\F04B";
+}
+.mdi-arrow-down-thick::before {
+  content: "\F046";
+}
+.mdi-arrow-expand::before {
+  content: "\F616";
+}
+.mdi-arrow-expand-all::before {
+  content: "\F04C";
+}
+.mdi-arrow-expand-down::before {
+  content: "\F795";
+}
+.mdi-arrow-expand-horizontal::before {
+  content: "\F84D";
+}
+.mdi-arrow-expand-left::before {
+  content: "\F796";
+}
+.mdi-arrow-expand-right::before {
+  content: "\F797";
+}
+.mdi-arrow-expand-up::before {
+  content: "\F798";
+}
+.mdi-arrow-expand-vertical::before {
+  content: "\F84E";
+}
+.mdi-arrow-horizontal-lock::before {
+  content: "\F0186";
+}
+.mdi-arrow-left::before {
+  content: "\F04D";
+}
+.mdi-arrow-left-bold::before {
+  content: "\F730";
+}
+.mdi-arrow-left-bold-box::before {
+  content: "\F731";
+}
+.mdi-arrow-left-bold-box-outline::before {
+  content: "\F732";
+}
+.mdi-arrow-left-bold-circle::before {
+  content: "\F04F";
+}
+.mdi-arrow-left-bold-circle-outline::before {
+  content: "\F050";
+}
+.mdi-arrow-left-bold-hexagon-outline::before {
+  content: "\F051";
+}
+.mdi-arrow-left-bold-outline::before {
+  content: "\F9BF";
+}
+.mdi-arrow-left-box::before {
+  content: "\F6C0";
+}
+.mdi-arrow-left-circle::before {
+  content: "\FCB9";
+}
+.mdi-arrow-left-circle-outline::before {
+  content: "\FCBA";
+}
+.mdi-arrow-left-drop-circle::before {
+  content: "\F052";
+}
+.mdi-arrow-left-drop-circle-outline::before {
+  content: "\F053";
+}
+.mdi-arrow-left-right::before {
+  content: "\FE90";
+}
+.mdi-arrow-left-right-bold::before {
+  content: "\FE91";
+}
+.mdi-arrow-left-right-bold-outline::before {
+  content: "\F9C0";
+}
+.mdi-arrow-left-thick::before {
+  content: "\F04E";
+}
+.mdi-arrow-right::before {
+  content: "\F054";
+}
+.mdi-arrow-right-bold::before {
+  content: "\F733";
+}
+.mdi-arrow-right-bold-box::before {
+  content: "\F734";
+}
+.mdi-arrow-right-bold-box-outline::before {
+  content: "\F735";
+}
+.mdi-arrow-right-bold-circle::before {
+  content: "\F056";
+}
+.mdi-arrow-right-bold-circle-outline::before {
+  content: "\F057";
+}
+.mdi-arrow-right-bold-hexagon-outline::before {
+  content: "\F058";
+}
+.mdi-arrow-right-bold-outline::before {
+  content: "\F9C1";
+}
+.mdi-arrow-right-box::before {
+  content: "\F6C1";
+}
+.mdi-arrow-right-circle::before {
+  content: "\FCBB";
+}
+.mdi-arrow-right-circle-outline::before {
+  content: "\FCBC";
+}
+.mdi-arrow-right-drop-circle::before {
+  content: "\F059";
+}
+.mdi-arrow-right-drop-circle-outline::before {
+  content: "\F05A";
+}
+.mdi-arrow-right-thick::before {
+  content: "\F055";
+}
+.mdi-arrow-split-horizontal::before {
+  content: "\F93A";
+}
+.mdi-arrow-split-vertical::before {
+  content: "\F93B";
+}
+.mdi-arrow-top-left::before {
+  content: "\F05B";
+}
+.mdi-arrow-top-left-bold-outline::before {
+  content: "\F9C2";
+}
+.mdi-arrow-top-left-bottom-right::before {
+  content: "\FE92";
+}
+.mdi-arrow-top-left-bottom-right-bold::before {
+  content: "\FE93";
+}
+.mdi-arrow-top-left-thick::before {
+  content: "\F9C3";
+}
+.mdi-arrow-top-right::before {
+  content: "\F05C";
+}
+.mdi-arrow-top-right-bold-outline::before {
+  content: "\F9C4";
+}
+.mdi-arrow-top-right-bottom-left::before {
+  content: "\FE94";
+}
+.mdi-arrow-top-right-bottom-left-bold::before {
+  content: "\FE95";
+}
+.mdi-arrow-top-right-thick::before {
+  content: "\F9C5";
+}
+.mdi-arrow-up::before {
+  content: "\F05D";
+}
+.mdi-arrow-up-bold::before {
+  content: "\F736";
+}
+.mdi-arrow-up-bold-box::before {
+  content: "\F737";
+}
+.mdi-arrow-up-bold-box-outline::before {
+  content: "\F738";
+}
+.mdi-arrow-up-bold-circle::before {
+  content: "\F05F";
+}
+.mdi-arrow-up-bold-circle-outline::before {
+  content: "\F060";
+}
+.mdi-arrow-up-bold-hexagon-outline::before {
+  content: "\F061";
+}
+.mdi-arrow-up-bold-outline::before {
+  content: "\F9C6";
+}
+.mdi-arrow-up-box::before {
+  content: "\F6C2";
+}
+.mdi-arrow-up-circle::before {
+  content: "\FCBD";
+}
+.mdi-arrow-up-circle-outline::before {
+  content: "\FCBE";
+}
+.mdi-arrow-up-down::before {
+  content: "\FE96";
+}
+.mdi-arrow-up-down-bold::before {
+  content: "\FE97";
+}
+.mdi-arrow-up-down-bold-outline::before {
+  content: "\F9C7";
+}
+.mdi-arrow-up-drop-circle::before {
+  content: "\F062";
+}
+.mdi-arrow-up-drop-circle-outline::before {
+  content: "\F063";
+}
+.mdi-arrow-up-thick::before {
+  content: "\F05E";
+}
+.mdi-arrow-vertical-lock::before {
+  content: "\F0187";
+}
+.mdi-artist::before {
+  content: "\F802";
+}
+.mdi-artist-outline::before {
+  content: "\FCC5";
+}
+.mdi-artstation::before {
+  content: "\FB37";
+}
+.mdi-aspect-ratio::before {
+  content: "\FA23";
+}
+.mdi-assistant::before {
+  content: "\F064";
+}
+.mdi-asterisk::before {
+  content: "\F6C3";
+}
+.mdi-at::before {
+  content: "\F065";
+}
+.mdi-atlassian::before {
+  content: "\F803";
+}
+.mdi-atm::before {
+  content: "\FD23";
+}
+.mdi-atom::before {
+  content: "\F767";
+}
+.mdi-atom-variant::before {
+  content: "\FE98";
+}
+.mdi-attachment::before {
+  content: "\F066";
+}
+.mdi-audio-video::before {
+  content: "\F93C";
+}
+.mdi-audio-video-off::before {
+  content: "\F01E1";
+}
+.mdi-audiobook::before {
+  content: "\F067";
+}
+.mdi-augmented-reality::before {
+  content: "\F84F";
+}
+.mdi-auto-download::before {
+  content: "\F03A9";
+}
+.mdi-auto-fix::before {
+  content: "\F068";
+}
+.mdi-auto-upload::before {
+  content: "\F069";
+}
+.mdi-autorenew::before {
+  content: "\F06A";
+}
+.mdi-av-timer::before {
+  content: "\F06B";
+}
+.mdi-aws::before {
+  content: "\FDF2";
+}
+.mdi-axe::before {
+  content: "\F8C7";
+}
+.mdi-axis::before {
+  content: "\FD24";
+}
+.mdi-axis-arrow::before {
+  content: "\FD25";
+}
+.mdi-axis-arrow-lock::before {
+  content: "\FD26";
+}
+.mdi-axis-lock::before {
+  content: "\FD27";
+}
+.mdi-axis-x-arrow::before {
+  content: "\FD28";
+}
+.mdi-axis-x-arrow-lock::before {
+  content: "\FD29";
+}
+.mdi-axis-x-rotate-clockwise::before {
+  content: "\FD2A";
+}
+.mdi-axis-x-rotate-counterclockwise::before {
+  content: "\FD2B";
+}
+.mdi-axis-x-y-arrow-lock::before {
+  content: "\FD2C";
+}
+.mdi-axis-y-arrow::before {
+  content: "\FD2D";
+}
+.mdi-axis-y-arrow-lock::before {
+  content: "\FD2E";
+}
+.mdi-axis-y-rotate-clockwise::before {
+  content: "\FD2F";
+}
+.mdi-axis-y-rotate-counterclockwise::before {
+  content: "\FD30";
+}
+.mdi-axis-z-arrow::before {
+  content: "\FD31";
+}
+.mdi-axis-z-arrow-lock::before {
+  content: "\FD32";
+}
+.mdi-axis-z-rotate-clockwise::before {
+  content: "\FD33";
+}
+.mdi-axis-z-rotate-counterclockwise::before {
+  content: "\FD34";
+}
+.mdi-azure::before {
+  content: "\F804";
+}
+.mdi-azure-devops::before {
+  content: "\F0091";
+}
+.mdi-babel::before {
+  content: "\FA24";
+}
+.mdi-baby::before {
+  content: "\F06C";
+}
+.mdi-baby-bottle::before {
+  content: "\FF56";
+}
+.mdi-baby-bottle-outline::before {
+  content: "\FF57";
+}
+.mdi-baby-carriage::before {
+  content: "\F68E";
+}
+.mdi-baby-carriage-off::before {
+  content: "\FFC0";
+}
+.mdi-baby-face::before {
+  content: "\FE99";
+}
+.mdi-baby-face-outline::before {
+  content: "\FE9A";
+}
+.mdi-backburger::before {
+  content: "\F06D";
+}
+.mdi-backspace::before {
+  content: "\F06E";
+}
+.mdi-backspace-outline::before {
+  content: "\FB38";
+}
+.mdi-backspace-reverse::before {
+  content: "\FE9B";
+}
+.mdi-backspace-reverse-outline::before {
+  content: "\FE9C";
+}
+.mdi-backup-restore::before {
+  content: "\F06F";
+}
+.mdi-bacteria::before {
+  content: "\FEF2";
+}
+.mdi-bacteria-outline::before {
+  content: "\FEF3";
+}
+.mdi-badminton::before {
+  content: "\F850";
+}
+.mdi-bag-carry-on::before {
+  content: "\FF58";
+}
+.mdi-bag-carry-on-check::before {
+  content: "\FD41";
+}
+.mdi-bag-carry-on-off::before {
+  content: "\FF59";
+}
+.mdi-bag-checked::before {
+  content: "\FF5A";
+}
+.mdi-bag-personal::before {
+  content: "\FDF3";
+}
+.mdi-bag-personal-off::before {
+  content: "\FDF4";
+}
+.mdi-bag-personal-off-outline::before {
+  content: "\FDF5";
+}
+.mdi-bag-personal-outline::before {
+  content: "\FDF6";
+}
+.mdi-baguette::before {
+  content: "\FF5B";
+}
+.mdi-balloon::before {
+  content: "\FA25";
+}
+.mdi-ballot::before {
+  content: "\F9C8";
+}
+.mdi-ballot-outline::before {
+  content: "\F9C9";
+}
+.mdi-ballot-recount::before {
+  content: "\FC15";
+}
+.mdi-ballot-recount-outline::before {
+  content: "\FC16";
+}
+.mdi-bandage::before {
+  content: "\FD8B";
+}
+.mdi-bandcamp::before {
+  content: "\F674";
+}
+.mdi-bank::before {
+  content: "\F070";
+}
+.mdi-bank-minus::before {
+  content: "\FD8C";
+}
+.mdi-bank-outline::before {
+  content: "\FE9D";
+}
+.mdi-bank-plus::before {
+  content: "\FD8D";
+}
+.mdi-bank-remove::before {
+  content: "\FD8E";
+}
+.mdi-bank-transfer::before {
+  content: "\FA26";
+}
+.mdi-bank-transfer-in::before {
+  content: "\FA27";
+}
+.mdi-bank-transfer-out::before {
+  content: "\FA28";
+}
+.mdi-barcode::before {
+  content: "\F071";
+}
+.mdi-barcode-off::before {
+  content: "\F0261";
+}
+.mdi-barcode-scan::before {
+  content: "\F072";
+}
+.mdi-barley::before {
+  content: "\F073";
+}
+.mdi-barley-off::before {
+  content: "\FB39";
+}
+.mdi-barn::before {
+  content: "\FB3A";
+}
+.mdi-barrel::before {
+  content: "\F074";
+}
+.mdi-baseball::before {
+  content: "\F851";
+}
+.mdi-baseball-bat::before {
+  content: "\F852";
+}
+.mdi-basecamp::before {
+  content: "\F075";
+}
+.mdi-bash::before {
+  content: "\F01AE";
+}
+.mdi-basket::before {
+  content: "\F076";
+}
+.mdi-basket-fill::before {
+  content: "\F077";
+}
+.mdi-basket-outline::before {
+  content: "\F01AC";
+}
+.mdi-basket-unfill::before {
+  content: "\F078";
+}
+.mdi-basketball::before {
+  content: "\F805";
+}
+.mdi-basketball-hoop::before {
+  content: "\FC17";
+}
+.mdi-basketball-hoop-outline::before {
+  content: "\FC18";
+}
+.mdi-bat::before {
+  content: "\FB3B";
+}
+.mdi-battery::before {
+  content: "\F079";
+}
+.mdi-battery-10::before {
+  content: "\F07A";
+}
+.mdi-battery-10-bluetooth::before {
+  content: "\F93D";
+}
+.mdi-battery-20::before {
+  content: "\F07B";
+}
+.mdi-battery-20-bluetooth::before {
+  content: "\F93E";
+}
+.mdi-battery-30::before {
+  content: "\F07C";
+}
+.mdi-battery-30-bluetooth::before {
+  content: "\F93F";
+}
+.mdi-battery-40::before {
+  content: "\F07D";
+}
+.mdi-battery-40-bluetooth::before {
+  content: "\F940";
+}
+.mdi-battery-50::before {
+  content: "\F07E";
+}
+.mdi-battery-50-bluetooth::before {
+  content: "\F941";
+}
+.mdi-battery-60::before {
+  content: "\F07F";
+}
+.mdi-battery-60-bluetooth::before {
+  content: "\F942";
+}
+.mdi-battery-70::before {
+  content: "\F080";
+}
+.mdi-battery-70-bluetooth::before {
+  content: "\F943";
+}
+.mdi-battery-80::before {
+  content: "\F081";
+}
+.mdi-battery-80-bluetooth::before {
+  content: "\F944";
+}
+.mdi-battery-90::before {
+  content: "\F082";
+}
+.mdi-battery-90-bluetooth::before {
+  content: "\F945";
+}
+.mdi-battery-alert::before {
+  content: "\F083";
+}
+.mdi-battery-alert-bluetooth::before {
+  content: "\F946";
+}
+.mdi-battery-alert-variant::before {
+  content: "\F00F7";
+}
+.mdi-battery-alert-variant-outline::before {
+  content: "\F00F8";
+}
+.mdi-battery-bluetooth::before {
+  content: "\F947";
+}
+.mdi-battery-bluetooth-variant::before {
+  content: "\F948";
+}
+.mdi-battery-charging::before {
+  content: "\F084";
+}
+.mdi-battery-charging-10::before {
+  content: "\F89B";
+}
+.mdi-battery-charging-100::before {
+  content: "\F085";
+}
+.mdi-battery-charging-20::before {
+  content: "\F086";
+}
+.mdi-battery-charging-30::before {
+  content: "\F087";
+}
+.mdi-battery-charging-40::before {
+  content: "\F088";
+}
+.mdi-battery-charging-50::before {
+  content: "\F89C";
+}
+.mdi-battery-charging-60::before {
+  content: "\F089";
+}
+.mdi-battery-charging-70::before {
+  content: "\F89D";
+}
+.mdi-battery-charging-80::before {
+  content: "\F08A";
+}
+.mdi-battery-charging-90::before {
+  content: "\F08B";
+}
+.mdi-battery-charging-high::before {
+  content: "\F02D1";
+}
+.mdi-battery-charging-low::before {
+  content: "\F02CF";
+}
+.mdi-battery-charging-medium::before {
+  content: "\F02D0";
+}
+.mdi-battery-charging-outline::before {
+  content: "\F89E";
+}
+.mdi-battery-charging-wireless::before {
+  content: "\F806";
+}
+.mdi-battery-charging-wireless-10::before {
+  content: "\F807";
+}
+.mdi-battery-charging-wireless-20::before {
+  content: "\F808";
+}
+.mdi-battery-charging-wireless-30::before {
+  content: "\F809";
+}
+.mdi-battery-charging-wireless-40::before {
+  content: "\F80A";
+}
+.mdi-battery-charging-wireless-50::before {
+  content: "\F80B";
+}
+.mdi-battery-charging-wireless-60::before {
+  content: "\F80C";
+}
+.mdi-battery-charging-wireless-70::before {
+  content: "\F80D";
+}
+.mdi-battery-charging-wireless-80::before {
+  content: "\F80E";
+}
+.mdi-battery-charging-wireless-90::before {
+  content: "\F80F";
+}
+.mdi-battery-charging-wireless-alert::before {
+  content: "\F810";
+}
+.mdi-battery-charging-wireless-outline::before {
+  content: "\F811";
+}
+.mdi-battery-heart::before {
+  content: "\F023A";
+}
+.mdi-battery-heart-outline::before {
+  content: "\F023B";
+}
+.mdi-battery-heart-variant::before {
+  content: "\F023C";
+}
+.mdi-battery-high::before {
+  content: "\F02CE";
+}
+.mdi-battery-low::before {
+  content: "\F02CC";
+}
+.mdi-battery-medium::before {
+  content: "\F02CD";
+}
+.mdi-battery-minus::before {
+  content: "\F08C";
+}
+.mdi-battery-negative::before {
+  content: "\F08D";
+}
+.mdi-battery-off::before {
+  content: "\F0288";
+}
+.mdi-battery-off-outline::before {
+  content: "\F0289";
+}
+.mdi-battery-outline::before {
+  content: "\F08E";
+}
+.mdi-battery-plus::before {
+  content: "\F08F";
+}
+.mdi-battery-positive::before {
+  content: "\F090";
+}
+.mdi-battery-unknown::before {
+  content: "\F091";
+}
+.mdi-battery-unknown-bluetooth::before {
+  content: "\F949";
+}
+.mdi-battlenet::before {
+  content: "\FB3C";
+}
+.mdi-beach::before {
+  content: "\F092";
+}
+.mdi-beaker::before {
+  content: "\FCC6";
+}
+.mdi-beaker-alert::before {
+  content: "\F0254";
+}
+.mdi-beaker-alert-outline::before {
+  content: "\F0255";
+}
+.mdi-beaker-check::before {
+  content: "\F0256";
+}
+.mdi-beaker-check-outline::before {
+  content: "\F0257";
+}
+.mdi-beaker-minus::before {
+  content: "\F0258";
+}
+.mdi-beaker-minus-outline::before {
+  content: "\F0259";
+}
+.mdi-beaker-outline::before {
+  content: "\F68F";
+}
+.mdi-beaker-plus::before {
+  content: "\F025A";
+}
+.mdi-beaker-plus-outline::before {
+  content: "\F025B";
+}
+.mdi-beaker-question::before {
+  content: "\F025C";
+}
+.mdi-beaker-question-outline::before {
+  content: "\F025D";
+}
+.mdi-beaker-remove::before {
+  content: "\F025E";
+}
+.mdi-beaker-remove-outline::before {
+  content: "\F025F";
+}
+.mdi-beats::before {
+  content: "\F097";
+}
+.mdi-bed-double::before {
+  content: "\F0092";
+}
+.mdi-bed-double-outline::before {
+  content: "\F0093";
+}
+.mdi-bed-empty::before {
+  content: "\F89F";
+}
+.mdi-bed-king::before {
+  content: "\F0094";
+}
+.mdi-bed-king-outline::before {
+  content: "\F0095";
+}
+.mdi-bed-queen::before {
+  content: "\F0096";
+}
+.mdi-bed-queen-outline::before {
+  content: "\F0097";
+}
+.mdi-bed-single::before {
+  content: "\F0098";
+}
+.mdi-bed-single-outline::before {
+  content: "\F0099";
+}
+.mdi-bee::before {
+  content: "\FFC1";
+}
+.mdi-bee-flower::before {
+  content: "\FFC2";
+}
+.mdi-beehive-outline::before {
+  content: "\F00F9";
+}
+.mdi-beer::before {
+  content: "\F098";
+}
+.mdi-beer-outline::before {
+  content: "\F0337";
+}
+.mdi-behance::before {
+  content: "\F099";
+}
+.mdi-bell::before {
+  content: "\F09A";
+}
+.mdi-bell-alert::before {
+  content: "\FD35";
+}
+.mdi-bell-alert-outline::before {
+  content: "\FE9E";
+}
+.mdi-bell-check::before {
+  content: "\F0210";
+}
+.mdi-bell-check-outline::before {
+  content: "\F0211";
+}
+.mdi-bell-circle::before {
+  content: "\FD36";
+}
+.mdi-bell-circle-outline::before {
+  content: "\FD37";
+}
+.mdi-bell-off::before {
+  content: "\F09B";
+}
+.mdi-bell-off-outline::before {
+  content: "\FA90";
+}
+.mdi-bell-outline::before {
+  content: "\F09C";
+}
+.mdi-bell-plus::before {
+  content: "\F09D";
+}
+.mdi-bell-plus-outline::before {
+  content: "\FA91";
+}
+.mdi-bell-ring::before {
+  content: "\F09E";
+}
+.mdi-bell-ring-outline::before {
+  content: "\F09F";
+}
+.mdi-bell-sleep::before {
+  content: "\F0A0";
+}
+.mdi-bell-sleep-outline::before {
+  content: "\FA92";
+}
+.mdi-beta::before {
+  content: "\F0A1";
+}
+.mdi-betamax::before {
+  content: "\F9CA";
+}
+.mdi-biathlon::before {
+  content: "\FDF7";
+}
+.mdi-bible::before {
+  content: "\F0A2";
+}
+.mdi-bicycle::before {
+  content: "\F00C7";
+}
+.mdi-bicycle-basket::before {
+  content: "\F0260";
+}
+.mdi-bike::before {
+  content: "\F0A3";
+}
+.mdi-bike-fast::before {
+  content: "\F014A";
+}
+.mdi-billboard::before {
+  content: "\F0032";
+}
+.mdi-billiards::before {
+  content: "\FB3D";
+}
+.mdi-billiards-rack::before {
+  content: "\FB3E";
+}
+.mdi-bing::before {
+  content: "\F0A4";
+}
+.mdi-binoculars::before {
+  content: "\F0A5";
+}
+.mdi-bio::before {
+  content: "\F0A6";
+}
+.mdi-biohazard::before {
+  content: "\F0A7";
+}
+.mdi-bitbucket::before {
+  content: "\F0A8";
+}
+.mdi-bitcoin::before {
+  content: "\F812";
+}
+.mdi-black-mesa::before {
+  content: "\F0A9";
+}
+.mdi-blackberry::before {
+  content: "\F0AA";
+}
+.mdi-blender::before {
+  content: "\FCC7";
+}
+.mdi-blender-software::before {
+  content: "\F0AB";
+}
+.mdi-blinds::before {
+  content: "\F0AC";
+}
+.mdi-blinds-open::before {
+  content: "\F0033";
+}
+.mdi-block-helper::before {
+  content: "\F0AD";
+}
+.mdi-blogger::before {
+  content: "\F0AE";
+}
+.mdi-blood-bag::before {
+  content: "\FCC8";
+}
+.mdi-bluetooth::before {
+  content: "\F0AF";
+}
+.mdi-bluetooth-audio::before {
+  content: "\F0B0";
+}
+.mdi-bluetooth-connect::before {
+  content: "\F0B1";
+}
+.mdi-bluetooth-off::before {
+  content: "\F0B2";
+}
+.mdi-bluetooth-settings::before {
+  content: "\F0B3";
+}
+.mdi-bluetooth-transfer::before {
+  content: "\F0B4";
+}
+.mdi-blur::before {
+  content: "\F0B5";
+}
+.mdi-blur-linear::before {
+  content: "\F0B6";
+}
+.mdi-blur-off::before {
+  content: "\F0B7";
+}
+.mdi-blur-radial::before {
+  content: "\F0B8";
+}
+.mdi-bolnisi-cross::before {
+  content: "\FCC9";
+}
+.mdi-bolt::before {
+  content: "\FD8F";
+}
+.mdi-bomb::before {
+  content: "\F690";
+}
+.mdi-bomb-off::before {
+  content: "\F6C4";
+}
+.mdi-bone::before {
+  content: "\F0B9";
+}
+.mdi-book::before {
+  content: "\F0BA";
+}
+.mdi-book-information-variant::before {
+  content: "\F009A";
+}
+.mdi-book-lock::before {
+  content: "\F799";
+}
+.mdi-book-lock-open::before {
+  content: "\F79A";
+}
+.mdi-book-minus::before {
+  content: "\F5D9";
+}
+.mdi-book-minus-multiple::before {
+  content: "\FA93";
+}
+.mdi-book-multiple::before {
+  content: "\F0BB";
+}
+.mdi-book-open::before {
+  content: "\F0BD";
+}
+.mdi-book-open-outline::before {
+  content: "\FB3F";
+}
+.mdi-book-open-page-variant::before {
+  content: "\F5DA";
+}
+.mdi-book-open-variant::before {
+  content: "\F0BE";
+}
+.mdi-book-outline::before {
+  content: "\FB40";
+}
+.mdi-book-play::before {
+  content: "\FE9F";
+}
+.mdi-book-play-outline::before {
+  content: "\FEA0";
+}
+.mdi-book-plus::before {
+  content: "\F5DB";
+}
+.mdi-book-plus-multiple::before {
+  content: "\FA94";
+}
+.mdi-book-remove::before {
+  content: "\FA96";
+}
+.mdi-book-remove-multiple::before {
+  content: "\FA95";
+}
+.mdi-book-search::before {
+  content: "\FEA1";
+}
+.mdi-book-search-outline::before {
+  content: "\FEA2";
+}
+.mdi-book-variant::before {
+  content: "\F0BF";
+}
+.mdi-book-variant-multiple::before {
+  content: "\F0BC";
+}
+.mdi-bookmark::before {
+  content: "\F0C0";
+}
+.mdi-bookmark-check::before {
+  content: "\F0C1";
+}
+.mdi-bookmark-check-outline::before {
+  content: "\F03A6";
+}
+.mdi-bookmark-minus::before {
+  content: "\F9CB";
+}
+.mdi-bookmark-minus-outline::before {
+  content: "\F9CC";
+}
+.mdi-bookmark-multiple::before {
+  content: "\FDF8";
+}
+.mdi-bookmark-multiple-outline::before {
+  content: "\FDF9";
+}
+.mdi-bookmark-music::before {
+  content: "\F0C2";
+}
+.mdi-bookmark-music-outline::before {
+  content: "\F03A4";
+}
+.mdi-bookmark-off::before {
+  content: "\F9CD";
+}
+.mdi-bookmark-off-outline::before {
+  content: "\F9CE";
+}
+.mdi-bookmark-outline::before {
+  content: "\F0C3";
+}
+.mdi-bookmark-plus::before {
+  content: "\F0C5";
+}
+.mdi-bookmark-plus-outline::before {
+  content: "\F0C4";
+}
+.mdi-bookmark-remove::before {
+  content: "\F0C6";
+}
+.mdi-bookmark-remove-outline::before {
+  content: "\F03A5";
+}
+.mdi-bookshelf::before {
+  content: "\F028A";
+}
+.mdi-boom-gate::before {
+  content: "\FEA3";
+}
+.mdi-boom-gate-alert::before {
+  content: "\FEA4";
+}
+.mdi-boom-gate-alert-outline::before {
+  content: "\FEA5";
+}
+.mdi-boom-gate-down::before {
+  content: "\FEA6";
+}
+.mdi-boom-gate-down-outline::before {
+  content: "\FEA7";
+}
+.mdi-boom-gate-outline::before {
+  content: "\FEA8";
+}
+.mdi-boom-gate-up::before {
+  content: "\FEA9";
+}
+.mdi-boom-gate-up-outline::before {
+  content: "\FEAA";
+}
+.mdi-boombox::before {
+  content: "\F5DC";
+}
+.mdi-boomerang::before {
+  content: "\F00FA";
+}
+.mdi-bootstrap::before {
+  content: "\F6C5";
+}
+.mdi-border-all::before {
+  content: "\F0C7";
+}
+.mdi-border-all-variant::before {
+  content: "\F8A0";
+}
+.mdi-border-bottom::before {
+  content: "\F0C8";
+}
+.mdi-border-bottom-variant::before {
+  content: "\F8A1";
+}
+.mdi-border-color::before {
+  content: "\F0C9";
+}
+.mdi-border-horizontal::before {
+  content: "\F0CA";
+}
+.mdi-border-inside::before {
+  content: "\F0CB";
+}
+.mdi-border-left::before {
+  content: "\F0CC";
+}
+.mdi-border-left-variant::before {
+  content: "\F8A2";
+}
+.mdi-border-none::before {
+  content: "\F0CD";
+}
+.mdi-border-none-variant::before {
+  content: "\F8A3";
+}
+.mdi-border-outside::before {
+  content: "\F0CE";
+}
+.mdi-border-right::before {
+  content: "\F0CF";
+}
+.mdi-border-right-variant::before {
+  content: "\F8A4";
+}
+.mdi-border-style::before {
+  content: "\F0D0";
+}
+.mdi-border-top::before {
+  content: "\F0D1";
+}
+.mdi-border-top-variant::before {
+  content: "\F8A5";
+}
+.mdi-border-vertical::before {
+  content: "\F0D2";
+}
+.mdi-bottle-soda::before {
+  content: "\F009B";
+}
+.mdi-bottle-soda-classic::before {
+  content: "\F009C";
+}
+.mdi-bottle-soda-classic-outline::before {
+  content: "\F038E";
+}
+.mdi-bottle-soda-outline::before {
+  content: "\F009D";
+}
+.mdi-bottle-tonic::before {
+  content: "\F0159";
+}
+.mdi-bottle-tonic-outline::before {
+  content: "\F015A";
+}
+.mdi-bottle-tonic-plus::before {
+  content: "\F015B";
+}
+.mdi-bottle-tonic-plus-outline::before {
+  content: "\F015C";
+}
+.mdi-bottle-tonic-skull::before {
+  content: "\F015D";
+}
+.mdi-bottle-tonic-skull-outline::before {
+  content: "\F015E";
+}
+.mdi-bottle-wine::before {
+  content: "\F853";
+}
+.mdi-bottle-wine-outline::before {
+  content: "\F033B";
+}
+.mdi-bow-tie::before {
+  content: "\F677";
+}
+.mdi-bowl::before {
+  content: "\F617";
+}
+.mdi-bowling::before {
+  content: "\F0D3";
+}
+.mdi-box::before {
+  content: "\F0D4";
+}
+.mdi-box-cutter::before {
+  content: "\F0D5";
+}
+.mdi-box-shadow::before {
+  content: "\F637";
+}
+.mdi-boxing-glove::before {
+  content: "\FB41";
+}
+.mdi-braille::before {
+  content: "\F9CF";
+}
+.mdi-brain::before {
+  content: "\F9D0";
+}
+.mdi-bread-slice::before {
+  content: "\FCCA";
+}
+.mdi-bread-slice-outline::before {
+  content: "\FCCB";
+}
+.mdi-bridge::before {
+  content: "\F618";
+}
+.mdi-briefcase::before {
+  content: "\F0D6";
+}
+.mdi-briefcase-account::before {
+  content: "\FCCC";
+}
+.mdi-briefcase-account-outline::before {
+  content: "\FCCD";
+}
+.mdi-briefcase-check::before {
+  content: "\F0D7";
+}
+.mdi-briefcase-check-outline::before {
+  content: "\F0349";
+}
+.mdi-briefcase-clock::before {
+  content: "\F00FB";
+}
+.mdi-briefcase-clock-outline::before {
+  content: "\F00FC";
+}
+.mdi-briefcase-download::before {
+  content: "\F0D8";
+}
+.mdi-briefcase-download-outline::before {
+  content: "\FC19";
+}
+.mdi-briefcase-edit::before {
+  content: "\FA97";
+}
+.mdi-briefcase-edit-outline::before {
+  content: "\FC1A";
+}
+.mdi-briefcase-minus::before {
+  content: "\FA29";
+}
+.mdi-briefcase-minus-outline::before {
+  content: "\FC1B";
+}
+.mdi-briefcase-outline::before {
+  content: "\F813";
+}
+.mdi-briefcase-plus::before {
+  content: "\FA2A";
+}
+.mdi-briefcase-plus-outline::before {
+  content: "\FC1C";
+}
+.mdi-briefcase-remove::before {
+  content: "\FA2B";
+}
+.mdi-briefcase-remove-outline::before {
+  content: "\FC1D";
+}
+.mdi-briefcase-search::before {
+  content: "\FA2C";
+}
+.mdi-briefcase-search-outline::before {
+  content: "\FC1E";
+}
+.mdi-briefcase-upload::before {
+  content: "\F0D9";
+}
+.mdi-briefcase-upload-outline::before {
+  content: "\FC1F";
+}
+.mdi-brightness-1::before {
+  content: "\F0DA";
+}
+.mdi-brightness-2::before {
+  content: "\F0DB";
+}
+.mdi-brightness-3::before {
+  content: "\F0DC";
+}
+.mdi-brightness-4::before {
+  content: "\F0DD";
+}
+.mdi-brightness-5::before {
+  content: "\F0DE";
+}
+.mdi-brightness-6::before {
+  content: "\F0DF";
+}
+.mdi-brightness-7::before {
+  content: "\F0E0";
+}
+.mdi-brightness-auto::before {
+  content: "\F0E1";
+}
+.mdi-brightness-percent::before {
+  content: "\FCCE";
+}
+.mdi-broom::before {
+  content: "\F0E2";
+}
+.mdi-brush::before {
+  content: "\F0E3";
+}
+.mdi-buddhism::before {
+  content: "\F94A";
+}
+.mdi-buffer::before {
+  content: "\F619";
+}
+.mdi-bug::before {
+  content: "\F0E4";
+}
+.mdi-bug-check::before {
+  content: "\FA2D";
+}
+.mdi-bug-check-outline::before {
+  content: "\FA2E";
+}
+.mdi-bug-outline::before {
+  content: "\FA2F";
+}
+.mdi-bugle::before {
+  content: "\FD90";
+}
+.mdi-bulldozer::before {
+  content: "\FB07";
+}
+.mdi-bullet::before {
+  content: "\FCCF";
+}
+.mdi-bulletin-board::before {
+  content: "\F0E5";
+}
+.mdi-bullhorn::before {
+  content: "\F0E6";
+}
+.mdi-bullhorn-outline::before {
+  content: "\FB08";
+}
+.mdi-bullseye::before {
+  content: "\F5DD";
+}
+.mdi-bullseye-arrow::before {
+  content: "\F8C8";
+}
+.mdi-bulma::before {
+  content: "\F0312";
+}
+.mdi-bunk-bed::before {
+  content: "\F032D";
+}
+.mdi-bus::before {
+  content: "\F0E7";
+}
+.mdi-bus-alert::before {
+  content: "\FA98";
+}
+.mdi-bus-articulated-end::before {
+  content: "\F79B";
+}
+.mdi-bus-articulated-front::before {
+  content: "\F79C";
+}
+.mdi-bus-clock::before {
+  content: "\F8C9";
+}
+.mdi-bus-double-decker::before {
+  content: "\F79D";
+}
+.mdi-bus-marker::before {
+  content: "\F023D";
+}
+.mdi-bus-multiple::before {
+  content: "\FF5C";
+}
+.mdi-bus-school::before {
+  content: "\F79E";
+}
+.mdi-bus-side::before {
+  content: "\F79F";
+}
+.mdi-bus-stop::before {
+  content: "\F0034";
+}
+.mdi-bus-stop-covered::before {
+  content: "\F0035";
+}
+.mdi-bus-stop-uncovered::before {
+  content: "\F0036";
+}
+.mdi-cached::before {
+  content: "\F0E8";
+}
+.mdi-cactus::before {
+  content: "\FD91";
+}
+.mdi-cake::before {
+  content: "\F0E9";
+}
+.mdi-cake-layered::before {
+  content: "\F0EA";
+}
+.mdi-cake-variant::before {
+  content: "\F0EB";
+}
+.mdi-calculator::before {
+  content: "\F0EC";
+}
+.mdi-calculator-variant::before {
+  content: "\FA99";
+}
+.mdi-calendar::before {
+  content: "\F0ED";
+}
+.mdi-calendar-account::before {
+  content: "\FEF4";
+}
+.mdi-calendar-account-outline::before {
+  content: "\FEF5";
+}
+.mdi-calendar-alert::before {
+  content: "\FA30";
+}
+.mdi-calendar-arrow-left::before {
+  content: "\F015F";
+}
+.mdi-calendar-arrow-right::before {
+  content: "\F0160";
+}
+.mdi-calendar-blank::before {
+  content: "\F0EE";
+}
+.mdi-calendar-blank-multiple::before {
+  content: "\F009E";
+}
+.mdi-calendar-blank-outline::before {
+  content: "\FB42";
+}
+.mdi-calendar-check::before {
+  content: "\F0EF";
+}
+.mdi-calendar-check-outline::before {
+  content: "\FC20";
+}
+.mdi-calendar-clock::before {
+  content: "\F0F0";
+}
+.mdi-calendar-edit::before {
+  content: "\F8A6";
+}
+.mdi-calendar-export::before {
+  content: "\FB09";
+}
+.mdi-calendar-heart::before {
+  content: "\F9D1";
+}
+.mdi-calendar-import::before {
+  content: "\FB0A";
+}
+.mdi-calendar-minus::before {
+  content: "\FD38";
+}
+.mdi-calendar-month::before {
+  content: "\FDFA";
+}
+.mdi-calendar-month-outline::before {
+  content: "\FDFB";
+}
+.mdi-calendar-multiple::before {
+  content: "\F0F1";
+}
+.mdi-calendar-multiple-check::before {
+  content: "\F0F2";
+}
+.mdi-calendar-multiselect::before {
+  content: "\FA31";
+}
+.mdi-calendar-outline::before {
+  content: "\FB43";
+}
+.mdi-calendar-plus::before {
+  content: "\F0F3";
+}
+.mdi-calendar-question::before {
+  content: "\F691";
+}
+.mdi-calendar-range::before {
+  content: "\F678";
+}
+.mdi-calendar-range-outline::before {
+  content: "\FB44";
+}
+.mdi-calendar-remove::before {
+  content: "\F0F4";
+}
+.mdi-calendar-remove-outline::before {
+  content: "\FC21";
+}
+.mdi-calendar-repeat::before {
+  content: "\FEAB";
+}
+.mdi-calendar-repeat-outline::before {
+  content: "\FEAC";
+}
+.mdi-calendar-search::before {
+  content: "\F94B";
+}
+.mdi-calendar-star::before {
+  content: "\F9D2";
+}
+.mdi-calendar-text::before {
+  content: "\F0F5";
+}
+.mdi-calendar-text-outline::before {
+  content: "\FC22";
+}
+.mdi-calendar-today::before {
+  content: "\F0F6";
+}
+.mdi-calendar-week::before {
+  content: "\FA32";
+}
+.mdi-calendar-week-begin::before {
+  content: "\FA33";
+}
+.mdi-calendar-weekend::before {
+  content: "\FEF6";
+}
+.mdi-calendar-weekend-outline::before {
+  content: "\FEF7";
+}
+.mdi-call-made::before {
+  content: "\F0F7";
+}
+.mdi-call-merge::before {
+  content: "\F0F8";
+}
+.mdi-call-missed::before {
+  content: "\F0F9";
+}
+.mdi-call-received::before {
+  content: "\F0FA";
+}
+.mdi-call-split::before {
+  content: "\F0FB";
+}
+.mdi-camcorder::before {
+  content: "\F0FC";
+}
+.mdi-camcorder-box::before {
+  content: "\F0FD";
+}
+.mdi-camcorder-box-off::before {
+  content: "\F0FE";
+}
+.mdi-camcorder-off::before {
+  content: "\F0FF";
+}
+.mdi-camera::before {
+  content: "\F100";
+}
+.mdi-camera-account::before {
+  content: "\F8CA";
+}
+.mdi-camera-burst::before {
+  content: "\F692";
+}
+.mdi-camera-control::before {
+  content: "\FB45";
+}
+.mdi-camera-enhance::before {
+  content: "\F101";
+}
+.mdi-camera-enhance-outline::before {
+  content: "\FB46";
+}
+.mdi-camera-front::before {
+  content: "\F102";
+}
+.mdi-camera-front-variant::before {
+  content: "\F103";
+}
+.mdi-camera-gopro::before {
+  content: "\F7A0";
+}
+.mdi-camera-image::before {
+  content: "\F8CB";
+}
+.mdi-camera-iris::before {
+  content: "\F104";
+}
+.mdi-camera-metering-center::before {
+  content: "\F7A1";
+}
+.mdi-camera-metering-matrix::before {
+  content: "\F7A2";
+}
+.mdi-camera-metering-partial::before {
+  content: "\F7A3";
+}
+.mdi-camera-metering-spot::before {
+  content: "\F7A4";
+}
+.mdi-camera-off::before {
+  content: "\F5DF";
+}
+.mdi-camera-outline::before {
+  content: "\FD39";
+}
+.mdi-camera-party-mode::before {
+  content: "\F105";
+}
+.mdi-camera-plus::before {
+  content: "\FEF8";
+}
+.mdi-camera-plus-outline::before {
+  content: "\FEF9";
+}
+.mdi-camera-rear::before {
+  content: "\F106";
+}
+.mdi-camera-rear-variant::before {
+  content: "\F107";
+}
+.mdi-camera-retake::before {
+  content: "\FDFC";
+}
+.mdi-camera-retake-outline::before {
+  content: "\FDFD";
+}
+.mdi-camera-switch::before {
+  content: "\F108";
+}
+.mdi-camera-timer::before {
+  content: "\F109";
+}
+.mdi-camera-wireless::before {
+  content: "\FD92";
+}
+.mdi-camera-wireless-outline::before {
+  content: "\FD93";
+}
+.mdi-campfire::before {
+  content: "\FEFA";
+}
+.mdi-cancel::before {
+  content: "\F739";
+}
+.mdi-candle::before {
+  content: "\F5E2";
+}
+.mdi-candycane::before {
+  content: "\F10A";
+}
+.mdi-cannabis::before {
+  content: "\F7A5";
+}
+.mdi-caps-lock::before {
+  content: "\FA9A";
+}
+.mdi-car::before {
+  content: "\F10B";
+}
+.mdi-car-2-plus::before {
+  content: "\F0037";
+}
+.mdi-car-3-plus::before {
+  content: "\F0038";
+}
+.mdi-car-back::before {
+  content: "\FDFE";
+}
+.mdi-car-battery::before {
+  content: "\F10C";
+}
+.mdi-car-brake-abs::before {
+  content: "\FC23";
+}
+.mdi-car-brake-alert::before {
+  content: "\FC24";
+}
+.mdi-car-brake-hold::before {
+  content: "\FD3A";
+}
+.mdi-car-brake-parking::before {
+  content: "\FD3B";
+}
+.mdi-car-brake-retarder::before {
+  content: "\F0039";
+}
+.mdi-car-child-seat::before {
+  content: "\FFC3";
+}
+.mdi-car-clutch::before {
+  content: "\F003A";
+}
+.mdi-car-connected::before {
+  content: "\F10D";
+}
+.mdi-car-convertible::before {
+  content: "\F7A6";
+}
+.mdi-car-coolant-level::before {
+  content: "\F003B";
+}
+.mdi-car-cruise-control::before {
+  content: "\FD3C";
+}
+.mdi-car-defrost-front::before {
+  content: "\FD3D";
+}
+.mdi-car-defrost-rear::before {
+  content: "\FD3E";
+}
+.mdi-car-door::before {
+  content: "\FB47";
+}
+.mdi-car-door-lock::before {
+  content: "\F00C8";
+}
+.mdi-car-electric::before {
+  content: "\FB48";
+}
+.mdi-car-esp::before {
+  content: "\FC25";
+}
+.mdi-car-estate::before {
+  content: "\F7A7";
+}
+.mdi-car-hatchback::before {
+  content: "\F7A8";
+}
+.mdi-car-info::before {
+  content: "\F01E9";
+}
+.mdi-car-key::before {
+  content: "\FB49";
+}
+.mdi-car-light-dimmed::before {
+  content: "\FC26";
+}
+.mdi-car-light-fog::before {
+  content: "\FC27";
+}
+.mdi-car-light-high::before {
+  content: "\FC28";
+}
+.mdi-car-limousine::before {
+  content: "\F8CC";
+}
+.mdi-car-multiple::before {
+  content: "\FB4A";
+}
+.mdi-car-off::before {
+  content: "\FDFF";
+}
+.mdi-car-parking-lights::before {
+  content: "\FD3F";
+}
+.mdi-car-pickup::before {
+  content: "\F7A9";
+}
+.mdi-car-seat::before {
+  content: "\FFC4";
+}
+.mdi-car-seat-cooler::before {
+  content: "\FFC5";
+}
+.mdi-car-seat-heater::before {
+  content: "\FFC6";
+}
+.mdi-car-shift-pattern::before {
+  content: "\FF5D";
+}
+.mdi-car-side::before {
+  content: "\F7AA";
+}
+.mdi-car-sports::before {
+  content: "\F7AB";
+}
+.mdi-car-tire-alert::before {
+  content: "\FC29";
+}
+.mdi-car-traction-control::before {
+  content: "\FD40";
+}
+.mdi-car-turbocharger::before {
+  content: "\F003C";
+}
+.mdi-car-wash::before {
+  content: "\F10E";
+}
+.mdi-car-windshield::before {
+  content: "\F003D";
+}
+.mdi-car-windshield-outline::before {
+  content: "\F003E";
+}
+.mdi-caravan::before {
+  content: "\F7AC";
+}
+.mdi-card::before {
+  content: "\FB4B";
+}
+.mdi-card-bulleted::before {
+  content: "\FB4C";
+}
+.mdi-card-bulleted-off::before {
+  content: "\FB4D";
+}
+.mdi-card-bulleted-off-outline::before {
+  content: "\FB4E";
+}
+.mdi-card-bulleted-outline::before {
+  content: "\FB4F";
+}
+.mdi-card-bulleted-settings::before {
+  content: "\FB50";
+}
+.mdi-card-bulleted-settings-outline::before {
+  content: "\FB51";
+}
+.mdi-card-outline::before {
+  content: "\FB52";
+}
+.mdi-card-plus::before {
+  content: "\F022A";
+}
+.mdi-card-plus-outline::before {
+  content: "\F022B";
+}
+.mdi-card-search::before {
+  content: "\F009F";
+}
+.mdi-card-search-outline::before {
+  content: "\F00A0";
+}
+.mdi-card-text::before {
+  content: "\FB53";
+}
+.mdi-card-text-outline::before {
+  content: "\FB54";
+}
+.mdi-cards::before {
+  content: "\F638";
+}
+.mdi-cards-club::before {
+  content: "\F8CD";
+}
+.mdi-cards-diamond::before {
+  content: "\F8CE";
+}
+.mdi-cards-diamond-outline::before {
+  content: "\F003F";
+}
+.mdi-cards-heart::before {
+  content: "\F8CF";
+}
+.mdi-cards-outline::before {
+  content: "\F639";
+}
+.mdi-cards-playing-outline::before {
+  content: "\F63A";
+}
+.mdi-cards-spade::before {
+  content: "\F8D0";
+}
+.mdi-cards-variant::before {
+  content: "\F6C6";
+}
+.mdi-carrot::before {
+  content: "\F10F";
+}
+.mdi-cart::before {
+  content: "\F110";
+}
+.mdi-cart-arrow-down::before {
+  content: "\FD42";
+}
+.mdi-cart-arrow-right::before {
+  content: "\FC2A";
+}
+.mdi-cart-arrow-up::before {
+  content: "\FD43";
+}
+.mdi-cart-minus::before {
+  content: "\FD44";
+}
+.mdi-cart-off::before {
+  content: "\F66B";
+}
+.mdi-cart-outline::before {
+  content: "\F111";
+}
+.mdi-cart-plus::before {
+  content: "\F112";
+}
+.mdi-cart-remove::before {
+  content: "\FD45";
+}
+.mdi-case-sensitive-alt::before {
+  content: "\F113";
+}
+.mdi-cash::before {
+  content: "\F114";
+}
+.mdi-cash-100::before {
+  content: "\F115";
+}
+.mdi-cash-marker::before {
+  content: "\FD94";
+}
+.mdi-cash-minus::before {
+  content: "\F028B";
+}
+.mdi-cash-multiple::before {
+  content: "\F116";
+}
+.mdi-cash-plus::before {
+  content: "\F028C";
+}
+.mdi-cash-refund::before {
+  content: "\FA9B";
+}
+.mdi-cash-register::before {
+  content: "\FCD0";
+}
+.mdi-cash-remove::before {
+  content: "\F028D";
+}
+.mdi-cash-usd::before {
+  content: "\F01A1";
+}
+.mdi-cash-usd-outline::before {
+  content: "\F117";
+}
+.mdi-cassette::before {
+  content: "\F9D3";
+}
+.mdi-cast::before {
+  content: "\F118";
+}
+.mdi-cast-audio::before {
+  content: "\F0040";
+}
+.mdi-cast-connected::before {
+  content: "\F119";
+}
+.mdi-cast-education::before {
+  content: "\FE6D";
+}
+.mdi-cast-off::before {
+  content: "\F789";
+}
+.mdi-castle::before {
+  content: "\F11A";
+}
+.mdi-cat::before {
+  content: "\F11B";
+}
+.mdi-cctv::before {
+  content: "\F7AD";
+}
+.mdi-ceiling-light::before {
+  content: "\F768";
+}
+.mdi-cellphone::before {
+  content: "\F11C";
+}
+.mdi-cellphone-android::before {
+  content: "\F11D";
+}
+.mdi-cellphone-arrow-down::before {
+  content: "\F9D4";
+}
+.mdi-cellphone-basic::before {
+  content: "\F11E";
+}
+.mdi-cellphone-dock::before {
+  content: "\F11F";
+}
+.mdi-cellphone-erase::before {
+  content: "\F94C";
+}
+.mdi-cellphone-information::before {
+  content: "\FF5E";
+}
+.mdi-cellphone-iphone::before {
+  content: "\F120";
+}
+.mdi-cellphone-key::before {
+  content: "\F94D";
+}
+.mdi-cellphone-link::before {
+  content: "\F121";
+}
+.mdi-cellphone-link-off::before {
+  content: "\F122";
+}
+.mdi-cellphone-lock::before {
+  content: "\F94E";
+}
+.mdi-cellphone-message::before {
+  content: "\F8D2";
+}
+.mdi-cellphone-message-off::before {
+  content: "\F00FD";
+}
+.mdi-cellphone-nfc::before {
+  content: "\FEAD";
+}
+.mdi-cellphone-nfc-off::before {
+  content: "\F0303";
+}
+.mdi-cellphone-off::before {
+  content: "\F94F";
+}
+.mdi-cellphone-play::before {
+  content: "\F0041";
+}
+.mdi-cellphone-screenshot::before {
+  content: "\FA34";
+}
+.mdi-cellphone-settings::before {
+  content: "\F123";
+}
+.mdi-cellphone-settings-variant::before {
+  content: "\F950";
+}
+.mdi-cellphone-sound::before {
+  content: "\F951";
+}
+.mdi-cellphone-text::before {
+  content: "\F8D1";
+}
+.mdi-cellphone-wireless::before {
+  content: "\F814";
+}
+.mdi-celtic-cross::before {
+  content: "\FCD1";
+}
+.mdi-centos::before {
+  content: "\F0145";
+}
+.mdi-certificate::before {
+  content: "\F124";
+}
+.mdi-certificate-outline::before {
+  content: "\F01B3";
+}
+.mdi-chair-rolling::before {
+  content: "\FFBA";
+}
+.mdi-chair-school::before {
+  content: "\F125";
+}
+.mdi-charity::before {
+  content: "\FC2B";
+}
+.mdi-chart-arc::before {
+  content: "\F126";
+}
+.mdi-chart-areaspline::before {
+  content: "\F127";
+}
+.mdi-chart-areaspline-variant::before {
+  content: "\FEAE";
+}
+.mdi-chart-bar::before {
+  content: "\F128";
+}
+.mdi-chart-bar-stacked::before {
+  content: "\F769";
+}
+.mdi-chart-bell-curve::before {
+  content: "\FC2C";
+}
+.mdi-chart-bell-curve-cumulative::before {
+  content: "\FFC7";
+}
+.mdi-chart-bubble::before {
+  content: "\F5E3";
+}
+.mdi-chart-donut::before {
+  content: "\F7AE";
+}
+.mdi-chart-donut-variant::before {
+  content: "\F7AF";
+}
+.mdi-chart-gantt::before {
+  content: "\F66C";
+}
+.mdi-chart-histogram::before {
+  content: "\F129";
+}
+.mdi-chart-line::before {
+  content: "\F12A";
+}
+.mdi-chart-line-stacked::before {
+  content: "\F76A";
+}
+.mdi-chart-line-variant::before {
+  content: "\F7B0";
+}
+.mdi-chart-multiline::before {
+  content: "\F8D3";
+}
+.mdi-chart-multiple::before {
+  content: "\F023E";
+}
+.mdi-chart-pie::before {
+  content: "\F12B";
+}
+.mdi-chart-ppf::before {
+  content: "\F03AB";
+}
+.mdi-chart-scatter-plot::before {
+  content: "\FEAF";
+}
+.mdi-chart-scatter-plot-hexbin::before {
+  content: "\F66D";
+}
+.mdi-chart-snakey::before {
+  content: "\F020A";
+}
+.mdi-chart-snakey-variant::before {
+  content: "\F020B";
+}
+.mdi-chart-timeline::before {
+  content: "\F66E";
+}
+.mdi-chart-timeline-variant::before {
+  content: "\FEB0";
+}
+.mdi-chart-tree::before {
+  content: "\FEB1";
+}
+.mdi-chat::before {
+  content: "\FB55";
+}
+.mdi-chat-alert::before {
+  content: "\FB56";
+}
+.mdi-chat-alert-outline::before {
+  content: "\F02F4";
+}
+.mdi-chat-outline::before {
+  content: "\FEFB";
+}
+.mdi-chat-processing::before {
+  content: "\FB57";
+}
+.mdi-chat-processing-outline::before {
+  content: "\F02F5";
+}
+.mdi-chat-sleep::before {
+  content: "\F02FC";
+}
+.mdi-chat-sleep-outline::before {
+  content: "\F02FD";
+}
+.mdi-check::before {
+  content: "\F12C";
+}
+.mdi-check-all::before {
+  content: "\F12D";
+}
+.mdi-check-bold::before {
+  content: "\FE6E";
+}
+.mdi-check-box-multiple-outline::before {
+  content: "\FC2D";
+}
+.mdi-check-box-outline::before {
+  content: "\FC2E";
+}
+.mdi-check-circle::before {
+  content: "\F5E0";
+}
+.mdi-check-circle-outline::before {
+  content: "\F5E1";
+}
+.mdi-check-decagram::before {
+  content: "\F790";
+}
+.mdi-check-network::before {
+  content: "\FC2F";
+}
+.mdi-check-network-outline::before {
+  content: "\FC30";
+}
+.mdi-check-outline::before {
+  content: "\F854";
+}
+.mdi-check-underline::before {
+  content: "\FE70";
+}
+.mdi-check-underline-circle::before {
+  content: "\FE71";
+}
+.mdi-check-underline-circle-outline::before {
+  content: "\FE72";
+}
+.mdi-checkbook::before {
+  content: "\FA9C";
+}
+.mdi-checkbox-blank::before {
+  content: "\F12E";
+}
+.mdi-checkbox-blank-circle::before {
+  content: "\F12F";
+}
+.mdi-checkbox-blank-circle-outline::before {
+  content: "\F130";
+}
+.mdi-checkbox-blank-off::before {
+  content: "\F0317";
+}
+.mdi-checkbox-blank-off-outline::before {
+  content: "\F0318";
+}
+.mdi-checkbox-blank-outline::before {
+  content: "\F131";
+}
+.mdi-checkbox-intermediate::before {
+  content: "\F855";
+}
+.mdi-checkbox-marked::before {
+  content: "\F132";
+}
+.mdi-checkbox-marked-circle::before {
+  content: "\F133";
+}
+.mdi-checkbox-marked-circle-outline::before {
+  content: "\F134";
+}
+.mdi-checkbox-marked-outline::before {
+  content: "\F135";
+}
+.mdi-checkbox-multiple-blank::before {
+  content: "\F136";
+}
+.mdi-checkbox-multiple-blank-circle::before {
+  content: "\F63B";
+}
+.mdi-checkbox-multiple-blank-circle-outline::before {
+  content: "\F63C";
+}
+.mdi-checkbox-multiple-blank-outline::before {
+  content: "\F137";
+}
+.mdi-checkbox-multiple-marked::before {
+  content: "\F138";
+}
+.mdi-checkbox-multiple-marked-circle::before {
+  content: "\F63D";
+}
+.mdi-checkbox-multiple-marked-circle-outline::before {
+  content: "\F63E";
+}
+.mdi-checkbox-multiple-marked-outline::before {
+  content: "\F139";
+}
+.mdi-checkerboard::before {
+  content: "\F13A";
+}
+.mdi-checkerboard-minus::before {
+  content: "\F022D";
+}
+.mdi-checkerboard-plus::before {
+  content: "\F022C";
+}
+.mdi-checkerboard-remove::before {
+  content: "\F022E";
+}
+.mdi-cheese::before {
+  content: "\F02E4";
+}
+.mdi-chef-hat::before {
+  content: "\FB58";
+}
+.mdi-chemical-weapon::before {
+  content: "\F13B";
+}
+.mdi-chess-bishop::before {
+  content: "\F85B";
+}
+.mdi-chess-king::before {
+  content: "\F856";
+}
+.mdi-chess-knight::before {
+  content: "\F857";
+}
+.mdi-chess-pawn::before {
+  content: "\F858";
+}
+.mdi-chess-queen::before {
+  content: "\F859";
+}
+.mdi-chess-rook::before {
+  content: "\F85A";
+}
+.mdi-chevron-double-down::before {
+  content: "\F13C";
+}
+.mdi-chevron-double-left::before {
+  content: "\F13D";
+}
+.mdi-chevron-double-right::before {
+  content: "\F13E";
+}
+.mdi-chevron-double-up::before {
+  content: "\F13F";
+}
+.mdi-chevron-down::before {
+  content: "\F140";
+}
+.mdi-chevron-down-box::before {
+  content: "\F9D5";
+}
+.mdi-chevron-down-box-outline::before {
+  content: "\F9D6";
+}
+.mdi-chevron-down-circle::before {
+  content: "\FB0B";
+}
+.mdi-chevron-down-circle-outline::before {
+  content: "\FB0C";
+}
+.mdi-chevron-left::before {
+  content: "\F141";
+}
+.mdi-chevron-left-box::before {
+  content: "\F9D7";
+}
+.mdi-chevron-left-box-outline::before {
+  content: "\F9D8";
+}
+.mdi-chevron-left-circle::before {
+  content: "\FB0D";
+}
+.mdi-chevron-left-circle-outline::before {
+  content: "\FB0E";
+}
+.mdi-chevron-right::before {
+  content: "\F142";
+}
+.mdi-chevron-right-box::before {
+  content: "\F9D9";
+}
+.mdi-chevron-right-box-outline::before {
+  content: "\F9DA";
+}
+.mdi-chevron-right-circle::before {
+  content: "\FB0F";
+}
+.mdi-chevron-right-circle-outline::before {
+  content: "\FB10";
+}
+.mdi-chevron-triple-down::before {
+  content: "\FD95";
+}
+.mdi-chevron-triple-left::before {
+  content: "\FD96";
+}
+.mdi-chevron-triple-right::before {
+  content: "\FD97";
+}
+.mdi-chevron-triple-up::before {
+  content: "\FD98";
+}
+.mdi-chevron-up::before {
+  content: "\F143";
+}
+.mdi-chevron-up-box::before {
+  content: "\F9DB";
+}
+.mdi-chevron-up-box-outline::before {
+  content: "\F9DC";
+}
+.mdi-chevron-up-circle::before {
+  content: "\FB11";
+}
+.mdi-chevron-up-circle-outline::before {
+  content: "\FB12";
+}
+.mdi-chili-hot::before {
+  content: "\F7B1";
+}
+.mdi-chili-medium::before {
+  content: "\F7B2";
+}
+.mdi-chili-mild::before {
+  content: "\F7B3";
+}
+.mdi-chip::before {
+  content: "\F61A";
+}
+.mdi-christianity::before {
+  content: "\F952";
+}
+.mdi-christianity-outline::before {
+  content: "\FCD2";
+}
+.mdi-church::before {
+  content: "\F144";
+}
+.mdi-cigar::before {
+  content: "\F01B4";
+}
+.mdi-circle::before {
+  content: "\F764";
+}
+.mdi-circle-double::before {
+  content: "\FEB2";
+}
+.mdi-circle-edit-outline::before {
+  content: "\F8D4";
+}
+.mdi-circle-expand::before {
+  content: "\FEB3";
+}
+.mdi-circle-medium::before {
+  content: "\F9DD";
+}
+.mdi-circle-off-outline::before {
+  content: "\F00FE";
+}
+.mdi-circle-outline::before {
+  content: "\F765";
+}
+.mdi-circle-slice-1::before {
+  content: "\FA9D";
+}
+.mdi-circle-slice-2::before {
+  content: "\FA9E";
+}
+.mdi-circle-slice-3::before {
+  content: "\FA9F";
+}
+.mdi-circle-slice-4::before {
+  content: "\FAA0";
+}
+.mdi-circle-slice-5::before {
+  content: "\FAA1";
+}
+.mdi-circle-slice-6::before {
+  content: "\FAA2";
+}
+.mdi-circle-slice-7::before {
+  content: "\FAA3";
+}
+.mdi-circle-slice-8::before {
+  content: "\FAA4";
+}
+.mdi-circle-small::before {
+  content: "\F9DE";
+}
+.mdi-circular-saw::before {
+  content: "\FE73";
+}
+.mdi-cisco-webex::before {
+  content: "\F145";
+}
+.mdi-city::before {
+  content: "\F146";
+}
+.mdi-city-variant::before {
+  content: "\FA35";
+}
+.mdi-city-variant-outline::before {
+  content: "\FA36";
+}
+.mdi-clipboard::before {
+  content: "\F147";
+}
+.mdi-clipboard-account::before {
+  content: "\F148";
+}
+.mdi-clipboard-account-outline::before {
+  content: "\FC31";
+}
+.mdi-clipboard-alert::before {
+  content: "\F149";
+}
+.mdi-clipboard-alert-outline::before {
+  content: "\FCD3";
+}
+.mdi-clipboard-arrow-down::before {
+  content: "\F14A";
+}
+.mdi-clipboard-arrow-down-outline::before {
+  content: "\FC32";
+}
+.mdi-clipboard-arrow-left::before {
+  content: "\F14B";
+}
+.mdi-clipboard-arrow-left-outline::before {
+  content: "\FCD4";
+}
+.mdi-clipboard-arrow-right::before {
+  content: "\FCD5";
+}
+.mdi-clipboard-arrow-right-outline::before {
+  content: "\FCD6";
+}
+.mdi-clipboard-arrow-up::before {
+  content: "\FC33";
+}
+.mdi-clipboard-arrow-up-outline::before {
+  content: "\FC34";
+}
+.mdi-clipboard-check::before {
+  content: "\F14C";
+}
+.mdi-clipboard-check-multiple::before {
+  content: "\F028E";
+}
+.mdi-clipboard-check-multiple-outline::before {
+  content: "\F028F";
+}
+.mdi-clipboard-check-outline::before {
+  content: "\F8A7";
+}
+.mdi-clipboard-file::before {
+  content: "\F0290";
+}
+.mdi-clipboard-file-outline::before {
+  content: "\F0291";
+}
+.mdi-clipboard-flow::before {
+  content: "\F6C7";
+}
+.mdi-clipboard-flow-outline::before {
+  content: "\F0142";
+}
+.mdi-clipboard-list::before {
+  content: "\F00FF";
+}
+.mdi-clipboard-list-outline::before {
+  content: "\F0100";
+}
+.mdi-clipboard-multiple::before {
+  content: "\F0292";
+}
+.mdi-clipboard-multiple-outline::before {
+  content: "\F0293";
+}
+.mdi-clipboard-outline::before {
+  content: "\F14D";
+}
+.mdi-clipboard-play::before {
+  content: "\FC35";
+}
+.mdi-clipboard-play-multiple::before {
+  content: "\F0294";
+}
+.mdi-clipboard-play-multiple-outline::before {
+  content: "\F0295";
+}
+.mdi-clipboard-play-outline::before {
+  content: "\FC36";
+}
+.mdi-clipboard-plus::before {
+  content: "\F750";
+}
+.mdi-clipboard-plus-outline::before {
+  content: "\F034A";
+}
+.mdi-clipboard-pulse::before {
+  content: "\F85C";
+}
+.mdi-clipboard-pulse-outline::before {
+  content: "\F85D";
+}
+.mdi-clipboard-text::before {
+  content: "\F14E";
+}
+.mdi-clipboard-text-multiple::before {
+  content: "\F0296";
+}
+.mdi-clipboard-text-multiple-outline::before {
+  content: "\F0297";
+}
+.mdi-clipboard-text-outline::before {
+  content: "\FA37";
+}
+.mdi-clipboard-text-play::before {
+  content: "\FC37";
+}
+.mdi-clipboard-text-play-outline::before {
+  content: "\FC38";
+}
+.mdi-clippy::before {
+  content: "\F14F";
+}
+.mdi-clock::before {
+  content: "\F953";
+}
+.mdi-clock-alert::before {
+  content: "\F954";
+}
+.mdi-clock-alert-outline::before {
+  content: "\F5CE";
+}
+.mdi-clock-check::before {
+  content: "\FFC8";
+}
+.mdi-clock-check-outline::before {
+  content: "\FFC9";
+}
+.mdi-clock-digital::before {
+  content: "\FEB4";
+}
+.mdi-clock-end::before {
+  content: "\F151";
+}
+.mdi-clock-fast::before {
+  content: "\F152";
+}
+.mdi-clock-in::before {
+  content: "\F153";
+}
+.mdi-clock-out::before {
+  content: "\F154";
+}
+.mdi-clock-outline::before {
+  content: "\F150";
+}
+.mdi-clock-start::before {
+  content: "\F155";
+}
+.mdi-close::before {
+  content: "\F156";
+}
+.mdi-close-box::before {
+  content: "\F157";
+}
+.mdi-close-box-multiple::before {
+  content: "\FC39";
+}
+.mdi-close-box-multiple-outline::before {
+  content: "\FC3A";
+}
+.mdi-close-box-outline::before {
+  content: "\F158";
+}
+.mdi-close-circle::before {
+  content: "\F159";
+}
+.mdi-close-circle-outline::before {
+  content: "\F15A";
+}
+.mdi-close-network::before {
+  content: "\F15B";
+}
+.mdi-close-network-outline::before {
+  content: "\FC3B";
+}
+.mdi-close-octagon::before {
+  content: "\F15C";
+}
+.mdi-close-octagon-outline::before {
+  content: "\F15D";
+}
+.mdi-close-outline::before {
+  content: "\F6C8";
+}
+.mdi-closed-caption::before {
+  content: "\F15E";
+}
+.mdi-closed-caption-outline::before {
+  content: "\FD99";
+}
+.mdi-cloud::before {
+  content: "\F15F";
+}
+.mdi-cloud-alert::before {
+  content: "\F9DF";
+}
+.mdi-cloud-braces::before {
+  content: "\F7B4";
+}
+.mdi-cloud-check::before {
+  content: "\F160";
+}
+.mdi-cloud-check-outline::before {
+  content: "\F02F7";
+}
+.mdi-cloud-circle::before {
+  content: "\F161";
+}
+.mdi-cloud-download::before {
+  content: "\F162";
+}
+.mdi-cloud-download-outline::before {
+  content: "\FB59";
+}
+.mdi-cloud-lock::before {
+  content: "\F021C";
+}
+.mdi-cloud-lock-outline::before {
+  content: "\F021D";
+}
+.mdi-cloud-off-outline::before {
+  content: "\F164";
+}
+.mdi-cloud-outline::before {
+  content: "\F163";
+}
+.mdi-cloud-print::before {
+  content: "\F165";
+}
+.mdi-cloud-print-outline::before {
+  content: "\F166";
+}
+.mdi-cloud-question::before {
+  content: "\FA38";
+}
+.mdi-cloud-search::before {
+  content: "\F955";
+}
+.mdi-cloud-search-outline::before {
+  content: "\F956";
+}
+.mdi-cloud-sync::before {
+  content: "\F63F";
+}
+.mdi-cloud-sync-outline::before {
+  content: "\F0301";
+}
+.mdi-cloud-tags::before {
+  content: "\F7B5";
+}
+.mdi-cloud-upload::before {
+  content: "\F167";
+}
+.mdi-cloud-upload-outline::before {
+  content: "\FB5A";
+}
+.mdi-clover::before {
+  content: "\F815";
+}
+.mdi-coach-lamp::before {
+  content: "\F0042";
+}
+.mdi-coat-rack::before {
+  content: "\F00C9";
+}
+.mdi-code-array::before {
+  content: "\F168";
+}
+.mdi-code-braces::before {
+  content: "\F169";
+}
+.mdi-code-braces-box::before {
+  content: "\F0101";
+}
+.mdi-code-brackets::before {
+  content: "\F16A";
+}
+.mdi-code-equal::before {
+  content: "\F16B";
+}
+.mdi-code-greater-than::before {
+  content: "\F16C";
+}
+.mdi-code-greater-than-or-equal::before {
+  content: "\F16D";
+}
+.mdi-code-less-than::before {
+  content: "\F16E";
+}
+.mdi-code-less-than-or-equal::before {
+  content: "\F16F";
+}
+.mdi-code-not-equal::before {
+  content: "\F170";
+}
+.mdi-code-not-equal-variant::before {
+  content: "\F171";
+}
+.mdi-code-parentheses::before {
+  content: "\F172";
+}
+.mdi-code-parentheses-box::before {
+  content: "\F0102";
+}
+.mdi-code-string::before {
+  content: "\F173";
+}
+.mdi-code-tags::before {
+  content: "\F174";
+}
+.mdi-code-tags-check::before {
+  content: "\F693";
+}
+.mdi-codepen::before {
+  content: "\F175";
+}
+.mdi-coffee::before {
+  content: "\F176";
+}
+.mdi-coffee-maker::before {
+  content: "\F00CA";
+}
+.mdi-coffee-off::before {
+  content: "\FFCA";
+}
+.mdi-coffee-off-outline::before {
+  content: "\FFCB";
+}
+.mdi-coffee-outline::before {
+  content: "\F6C9";
+}
+.mdi-coffee-to-go::before {
+  content: "\F177";
+}
+.mdi-coffee-to-go-outline::before {
+  content: "\F0339";
+}
+.mdi-coffin::before {
+  content: "\FB5B";
+}
+.mdi-cog-clockwise::before {
+  content: "\F0208";
+}
+.mdi-cog-counterclockwise::before {
+  content: "\F0209";
+}
+.mdi-cogs::before {
+  content: "\F8D5";
+}
+.mdi-coin::before {
+  content: "\F0196";
+}
+.mdi-coin-outline::before {
+  content: "\F178";
+}
+.mdi-coins::before {
+  content: "\F694";
+}
+.mdi-collage::before {
+  content: "\F640";
+}
+.mdi-collapse-all::before {
+  content: "\FAA5";
+}
+.mdi-collapse-all-outline::before {
+  content: "\FAA6";
+}
+.mdi-color-helper::before {
+  content: "\F179";
+}
+.mdi-comma::before {
+  content: "\FE74";
+}
+.mdi-comma-box::before {
+  content: "\FE75";
+}
+.mdi-comma-box-outline::before {
+  content: "\FE76";
+}
+.mdi-comma-circle::before {
+  content: "\FE77";
+}
+.mdi-comma-circle-outline::before {
+  content: "\FE78";
+}
+.mdi-comment::before {
+  content: "\F17A";
+}
+.mdi-comment-account::before {
+  content: "\F17B";
+}
+.mdi-comment-account-outline::before {
+  content: "\F17C";
+}
+.mdi-comment-alert::before {
+  content: "\F17D";
+}
+.mdi-comment-alert-outline::before {
+  content: "\F17E";
+}
+.mdi-comment-arrow-left::before {
+  content: "\F9E0";
+}
+.mdi-comment-arrow-left-outline::before {
+  content: "\F9E1";
+}
+.mdi-comment-arrow-right::before {
+  content: "\F9E2";
+}
+.mdi-comment-arrow-right-outline::before {
+  content: "\F9E3";
+}
+.mdi-comment-check::before {
+  content: "\F17F";
+}
+.mdi-comment-check-outline::before {
+  content: "\F180";
+}
+.mdi-comment-edit::before {
+  content: "\F01EA";
+}
+.mdi-comment-edit-outline::before {
+  content: "\F02EF";
+}
+.mdi-comment-eye::before {
+  content: "\FA39";
+}
+.mdi-comment-eye-outline::before {
+  content: "\FA3A";
+}
+.mdi-comment-multiple::before {
+  content: "\F85E";
+}
+.mdi-comment-multiple-outline::before {
+  content: "\F181";
+}
+.mdi-comment-outline::before {
+  content: "\F182";
+}
+.mdi-comment-plus::before {
+  content: "\F9E4";
+}
+.mdi-comment-plus-outline::before {
+  content: "\F183";
+}
+.mdi-comment-processing::before {
+  content: "\F184";
+}
+.mdi-comment-processing-outline::before {
+  content: "\F185";
+}
+.mdi-comment-question::before {
+  content: "\F816";
+}
+.mdi-comment-question-outline::before {
+  content: "\F186";
+}
+.mdi-comment-quote::before {
+  content: "\F0043";
+}
+.mdi-comment-quote-outline::before {
+  content: "\F0044";
+}
+.mdi-comment-remove::before {
+  content: "\F5DE";
+}
+.mdi-comment-remove-outline::before {
+  content: "\F187";
+}
+.mdi-comment-search::before {
+  content: "\FA3B";
+}
+.mdi-comment-search-outline::before {
+  content: "\FA3C";
+}
+.mdi-comment-text::before {
+  content: "\F188";
+}
+.mdi-comment-text-multiple::before {
+  content: "\F85F";
+}
+.mdi-comment-text-multiple-outline::before {
+  content: "\F860";
+}
+.mdi-comment-text-outline::before {
+  content: "\F189";
+}
+.mdi-compare::before {
+  content: "\F18A";
+}
+.mdi-compass::before {
+  content: "\F18B";
+}
+.mdi-compass-off::before {
+  content: "\FB5C";
+}
+.mdi-compass-off-outline::before {
+  content: "\FB5D";
+}
+.mdi-compass-outline::before {
+  content: "\F18C";
+}
+.mdi-compass-rose::before {
+  content: "\F03AD";
+}
+.mdi-concourse-ci::before {
+  content: "\F00CB";
+}
+.mdi-console::before {
+  content: "\F18D";
+}
+.mdi-console-line::before {
+  content: "\F7B6";
+}
+.mdi-console-network::before {
+  content: "\F8A8";
+}
+.mdi-console-network-outline::before {
+  content: "\FC3C";
+}
+.mdi-consolidate::before {
+  content: "\F0103";
+}
+.mdi-contact-mail::before {
+  content: "\F18E";
+}
+.mdi-contact-mail-outline::before {
+  content: "\FEB5";
+}
+.mdi-contact-phone::before {
+  content: "\FEB6";
+}
+.mdi-contact-phone-outline::before {
+  content: "\FEB7";
+}
+.mdi-contactless-payment::before {
+  content: "\FD46";
+}
+.mdi-contacts::before {
+  content: "\F6CA";
+}
+.mdi-contain::before {
+  content: "\FA3D";
+}
+.mdi-contain-end::before {
+  content: "\FA3E";
+}
+.mdi-contain-start::before {
+  content: "\FA3F";
+}
+.mdi-content-copy::before {
+  content: "\F18F";
+}
+.mdi-content-cut::before {
+  content: "\F190";
+}
+.mdi-content-duplicate::before {
+  content: "\F191";
+}
+.mdi-content-paste::before {
+  content: "\F192";
+}
+.mdi-content-save::before {
+  content: "\F193";
+}
+.mdi-content-save-alert::before {
+  content: "\FF5F";
+}
+.mdi-content-save-alert-outline::before {
+  content: "\FF60";
+}
+.mdi-content-save-all::before {
+  content: "\F194";
+}
+.mdi-content-save-all-outline::before {
+  content: "\FF61";
+}
+.mdi-content-save-edit::before {
+  content: "\FCD7";
+}
+.mdi-content-save-edit-outline::before {
+  content: "\FCD8";
+}
+.mdi-content-save-move::before {
+  content: "\FE79";
+}
+.mdi-content-save-move-outline::before {
+  content: "\FE7A";
+}
+.mdi-content-save-outline::before {
+  content: "\F817";
+}
+.mdi-content-save-settings::before {
+  content: "\F61B";
+}
+.mdi-content-save-settings-outline::before {
+  content: "\FB13";
+}
+.mdi-contrast::before {
+  content: "\F195";
+}
+.mdi-contrast-box::before {
+  content: "\F196";
+}
+.mdi-contrast-circle::before {
+  content: "\F197";
+}
+.mdi-controller-classic::before {
+  content: "\FB5E";
+}
+.mdi-controller-classic-outline::before {
+  content: "\FB5F";
+}
+.mdi-cookie::before {
+  content: "\F198";
+}
+.mdi-coolant-temperature::before {
+  content: "\F3C8";
+}
+.mdi-copyright::before {
+  content: "\F5E6";
+}
+.mdi-cordova::before {
+  content: "\F957";
+}
+.mdi-corn::before {
+  content: "\F7B7";
+}
+.mdi-counter::before {
+  content: "\F199";
+}
+.mdi-cow::before {
+  content: "\F19A";
+}
+.mdi-cowboy::before {
+  content: "\FEB8";
+}
+.mdi-cpu-32-bit::before {
+  content: "\FEFC";
+}
+.mdi-cpu-64-bit::before {
+  content: "\FEFD";
+}
+.mdi-crane::before {
+  content: "\F861";
+}
+.mdi-creation::before {
+  content: "\F1C9";
+}
+.mdi-creative-commons::before {
+  content: "\FD47";
+}
+.mdi-credit-card::before {
+  content: "\F0010";
+}
+.mdi-credit-card-clock::before {
+  content: "\FEFE";
+}
+.mdi-credit-card-clock-outline::before {
+  content: "\FFBC";
+}
+.mdi-credit-card-marker::before {
+  content: "\F6A7";
+}
+.mdi-credit-card-marker-outline::before {
+  content: "\FD9A";
+}
+.mdi-credit-card-minus::before {
+  content: "\FFCC";
+}
+.mdi-credit-card-minus-outline::before {
+  content: "\FFCD";
+}
+.mdi-credit-card-multiple::before {
+  content: "\F0011";
+}
+.mdi-credit-card-multiple-outline::before {
+  content: "\F19C";
+}
+.mdi-credit-card-off::before {
+  content: "\F0012";
+}
+.mdi-credit-card-off-outline::before {
+  content: "\F5E4";
+}
+.mdi-credit-card-outline::before {
+  content: "\F19B";
+}
+.mdi-credit-card-plus::before {
+  content: "\F0013";
+}
+.mdi-credit-card-plus-outline::before {
+  content: "\F675";
+}
+.mdi-credit-card-refund::before {
+  content: "\F0014";
+}
+.mdi-credit-card-refund-outline::before {
+  content: "\FAA7";
+}
+.mdi-credit-card-remove::before {
+  content: "\FFCE";
+}
+.mdi-credit-card-remove-outline::before {
+  content: "\FFCF";
+}
+.mdi-credit-card-scan::before {
+  content: "\F0015";
+}
+.mdi-credit-card-scan-outline::before {
+  content: "\F19D";
+}
+.mdi-credit-card-settings::before {
+  content: "\F0016";
+}
+.mdi-credit-card-settings-outline::before {
+  content: "\F8D6";
+}
+.mdi-credit-card-wireless::before {
+  content: "\F801";
+}
+.mdi-credit-card-wireless-outline::before {
+  content: "\FD48";
+}
+.mdi-cricket::before {
+  content: "\FD49";
+}
+.mdi-crop::before {
+  content: "\F19E";
+}
+.mdi-crop-free::before {
+  content: "\F19F";
+}
+.mdi-crop-landscape::before {
+  content: "\F1A0";
+}
+.mdi-crop-portrait::before {
+  content: "\F1A1";
+}
+.mdi-crop-rotate::before {
+  content: "\F695";
+}
+.mdi-crop-square::before {
+  content: "\F1A2";
+}
+.mdi-crosshairs::before {
+  content: "\F1A3";
+}
+.mdi-crosshairs-gps::before {
+  content: "\F1A4";
+}
+.mdi-crosshairs-off::before {
+  content: "\FF62";
+}
+.mdi-crosshairs-question::before {
+  content: "\F0161";
+}
+.mdi-crown::before {
+  content: "\F1A5";
+}
+.mdi-crown-outline::before {
+  content: "\F01FB";
+}
+.mdi-cryengine::before {
+  content: "\F958";
+}
+.mdi-crystal-ball::before {
+  content: "\FB14";
+}
+.mdi-cube::before {
+  content: "\F1A6";
+}
+.mdi-cube-outline::before {
+  content: "\F1A7";
+}
+.mdi-cube-scan::before {
+  content: "\FB60";
+}
+.mdi-cube-send::before {
+  content: "\F1A8";
+}
+.mdi-cube-unfolded::before {
+  content: "\F1A9";
+}
+.mdi-cup::before {
+  content: "\F1AA";
+}
+.mdi-cup-off::before {
+  content: "\F5E5";
+}
+.mdi-cup-off-outline::before {
+  content: "\F03A8";
+}
+.mdi-cup-outline::before {
+  content: "\F033A";
+}
+.mdi-cup-water::before {
+  content: "\F1AB";
+}
+.mdi-cupboard::before {
+  content: "\FF63";
+}
+.mdi-cupboard-outline::before {
+  content: "\FF64";
+}
+.mdi-cupcake::before {
+  content: "\F959";
+}
+.mdi-curling::before {
+  content: "\F862";
+}
+.mdi-currency-bdt::before {
+  content: "\F863";
+}
+.mdi-currency-brl::before {
+  content: "\FB61";
+}
+.mdi-currency-btc::before {
+  content: "\F1AC";
+}
+.mdi-currency-cny::before {
+  content: "\F7B9";
+}
+.mdi-currency-eth::before {
+  content: "\F7BA";
+}
+.mdi-currency-eur::before {
+  content: "\F1AD";
+}
+.mdi-currency-eur-off::before {
+  content: "\F0340";
+}
+.mdi-currency-gbp::before {
+  content: "\F1AE";
+}
+.mdi-currency-ils::before {
+  content: "\FC3D";
+}
+.mdi-currency-inr::before {
+  content: "\F1AF";
+}
+.mdi-currency-jpy::before {
+  content: "\F7BB";
+}
+.mdi-currency-krw::before {
+  content: "\F7BC";
+}
+.mdi-currency-kzt::before {
+  content: "\F864";
+}
+.mdi-currency-ngn::before {
+  content: "\F1B0";
+}
+.mdi-currency-php::before {
+  content: "\F9E5";
+}
+.mdi-currency-rial::before {
+  content: "\FEB9";
+}
+.mdi-currency-rub::before {
+  content: "\F1B1";
+}
+.mdi-currency-sign::before {
+  content: "\F7BD";
+}
+.mdi-currency-try::before {
+  content: "\F1B2";
+}
+.mdi-currency-twd::before {
+  content: "\F7BE";
+}
+.mdi-currency-usd::before {
+  content: "\F1B3";
+}
+.mdi-currency-usd-off::before {
+  content: "\F679";
+}
+.mdi-current-ac::before {
+  content: "\F95A";
+}
+.mdi-current-dc::before {
+  content: "\F95B";
+}
+.mdi-cursor-default::before {
+  content: "\F1B4";
+}
+.mdi-cursor-default-click::before {
+  content: "\FCD9";
+}
+.mdi-cursor-default-click-outline::before {
+  content: "\FCDA";
+}
+.mdi-cursor-default-gesture::before {
+  content: "\F0152";
+}
+.mdi-cursor-default-gesture-outline::before {
+  content: "\F0153";
+}
+.mdi-cursor-default-outline::before {
+  content: "\F1B5";
+}
+.mdi-cursor-move::before {
+  content: "\F1B6";
+}
+.mdi-cursor-pointer::before {
+  content: "\F1B7";
+}
+.mdi-cursor-text::before {
+  content: "\F5E7";
+}
+.mdi-database::before {
+  content: "\F1B8";
+}
+.mdi-database-check::before {
+  content: "\FAA8";
+}
+.mdi-database-edit::before {
+  content: "\FB62";
+}
+.mdi-database-export::before {
+  content: "\F95D";
+}
+.mdi-database-import::before {
+  content: "\F95C";
+}
+.mdi-database-lock::before {
+  content: "\FAA9";
+}
+.mdi-database-marker::before {
+  content: "\F0321";
+}
+.mdi-database-minus::before {
+  content: "\F1B9";
+}
+.mdi-database-plus::before {
+  content: "\F1BA";
+}
+.mdi-database-refresh::before {
+  content: "\FCDB";
+}
+.mdi-database-remove::before {
+  content: "\FCDC";
+}
+.mdi-database-search::before {
+  content: "\F865";
+}
+.mdi-database-settings::before {
+  content: "\FCDD";
+}
+.mdi-death-star::before {
+  content: "\F8D7";
+}
+.mdi-death-star-variant::before {
+  content: "\F8D8";
+}
+.mdi-deathly-hallows::before {
+  content: "\FB63";
+}
+.mdi-debian::before {
+  content: "\F8D9";
+}
+.mdi-debug-step-into::before {
+  content: "\F1BB";
+}
+.mdi-debug-step-out::before {
+  content: "\F1BC";
+}
+.mdi-debug-step-over::before {
+  content: "\F1BD";
+}
+.mdi-decagram::before {
+  content: "\F76B";
+}
+.mdi-decagram-outline::before {
+  content: "\F76C";
+}
+.mdi-decimal::before {
+  content: "\F00CC";
+}
+.mdi-decimal-comma::before {
+  content: "\F00CD";
+}
+.mdi-decimal-comma-decrease::before {
+  content: "\F00CE";
+}
+.mdi-decimal-comma-increase::before {
+  content: "\F00CF";
+}
+.mdi-decimal-decrease::before {
+  content: "\F1BE";
+}
+.mdi-decimal-increase::before {
+  content: "\F1BF";
+}
+.mdi-delete::before {
+  content: "\F1C0";
+}
+.mdi-delete-alert::before {
+  content: "\F00D0";
+}
+.mdi-delete-alert-outline::before {
+  content: "\F00D1";
+}
+.mdi-delete-circle::before {
+  content: "\F682";
+}
+.mdi-delete-circle-outline::before {
+  content: "\FB64";
+}
+.mdi-delete-empty::before {
+  content: "\F6CB";
+}
+.mdi-delete-empty-outline::before {
+  content: "\FEBA";
+}
+.mdi-delete-forever::before {
+  content: "\F5E8";
+}
+.mdi-delete-forever-outline::before {
+  content: "\FB65";
+}
+.mdi-delete-off::before {
+  content: "\F00D2";
+}
+.mdi-delete-off-outline::before {
+  content: "\F00D3";
+}
+.mdi-delete-outline::before {
+  content: "\F9E6";
+}
+.mdi-delete-restore::before {
+  content: "\F818";
+}
+.mdi-delete-sweep::before {
+  content: "\F5E9";
+}
+.mdi-delete-sweep-outline::before {
+  content: "\FC3E";
+}
+.mdi-delete-variant::before {
+  content: "\F1C1";
+}
+.mdi-delta::before {
+  content: "\F1C2";
+}
+.mdi-desk::before {
+  content: "\F0264";
+}
+.mdi-desk-lamp::before {
+  content: "\F95E";
+}
+.mdi-deskphone::before {
+  content: "\F1C3";
+}
+.mdi-desktop-classic::before {
+  content: "\F7BF";
+}
+.mdi-desktop-mac::before {
+  content: "\F1C4";
+}
+.mdi-desktop-mac-dashboard::before {
+  content: "\F9E7";
+}
+.mdi-desktop-tower::before {
+  content: "\F1C5";
+}
+.mdi-desktop-tower-monitor::before {
+  content: "\FAAA";
+}
+.mdi-details::before {
+  content: "\F1C6";
+}
+.mdi-dev-to::before {
+  content: "\FD4A";
+}
+.mdi-developer-board::before {
+  content: "\F696";
+}
+.mdi-deviantart::before {
+  content: "\F1C7";
+}
+.mdi-devices::before {
+  content: "\FFD0";
+}
+.mdi-diabetes::before {
+  content: "\F0151";
+}
+.mdi-dialpad::before {
+  content: "\F61C";
+}
+.mdi-diameter::before {
+  content: "\FC3F";
+}
+.mdi-diameter-outline::before {
+  content: "\FC40";
+}
+.mdi-diameter-variant::before {
+  content: "\FC41";
+}
+.mdi-diamond::before {
+  content: "\FB66";
+}
+.mdi-diamond-outline::before {
+  content: "\FB67";
+}
+.mdi-diamond-stone::before {
+  content: "\F1C8";
+}
+.mdi-dice-1::before {
+  content: "\F1CA";
+}
+.mdi-dice-1-outline::before {
+  content: "\F0175";
+}
+.mdi-dice-2::before {
+  content: "\F1CB";
+}
+.mdi-dice-2-outline::before {
+  content: "\F0176";
+}
+.mdi-dice-3::before {
+  content: "\F1CC";
+}
+.mdi-dice-3-outline::before {
+  content: "\F0177";
+}
+.mdi-dice-4::before {
+  content: "\F1CD";
+}
+.mdi-dice-4-outline::before {
+  content: "\F0178";
+}
+.mdi-dice-5::before {
+  content: "\F1CE";
+}
+.mdi-dice-5-outline::before {
+  content: "\F0179";
+}
+.mdi-dice-6::before {
+  content: "\F1CF";
+}
+.mdi-dice-6-outline::before {
+  content: "\F017A";
+}
+.mdi-dice-d10::before {
+  content: "\F017E";
+}
+.mdi-dice-d10-outline::before {
+  content: "\F76E";
+}
+.mdi-dice-d12::before {
+  content: "\F017F";
+}
+.mdi-dice-d12-outline::before {
+  content: "\F866";
+}
+.mdi-dice-d20::before {
+  content: "\F0180";
+}
+.mdi-dice-d20-outline::before {
+  content: "\F5EA";
+}
+.mdi-dice-d4::before {
+  content: "\F017B";
+}
+.mdi-dice-d4-outline::before {
+  content: "\F5EB";
+}
+.mdi-dice-d6::before {
+  content: "\F017C";
+}
+.mdi-dice-d6-outline::before {
+  content: "\F5EC";
+}
+.mdi-dice-d8::before {
+  content: "\F017D";
+}
+.mdi-dice-d8-outline::before {
+  content: "\F5ED";
+}
+.mdi-dice-multiple::before {
+  content: "\F76D";
+}
+.mdi-dice-multiple-outline::before {
+  content: "\F0181";
+}
+.mdi-dictionary::before {
+  content: "\F61D";
+}
+.mdi-digital-ocean::before {
+  content: "\F0262";
+}
+.mdi-dip-switch::before {
+  content: "\F7C0";
+}
+.mdi-directions::before {
+  content: "\F1D0";
+}
+.mdi-directions-fork::before {
+  content: "\F641";
+}
+.mdi-disc::before {
+  content: "\F5EE";
+}
+.mdi-disc-alert::before {
+  content: "\F1D1";
+}
+.mdi-disc-player::before {
+  content: "\F95F";
+}
+.mdi-discord::before {
+  content: "\F66F";
+}
+.mdi-dishwasher::before {
+  content: "\FAAB";
+}
+.mdi-dishwasher-alert::before {
+  content: "\F01E3";
+}
+.mdi-dishwasher-off::before {
+  content: "\F01E4";
+}
+.mdi-disqus::before {
+  content: "\F1D2";
+}
+.mdi-disqus-outline::before {
+  content: "\F1D3";
+}
+.mdi-distribute-horizontal-center::before {
+  content: "\F01F4";
+}
+.mdi-distribute-horizontal-left::before {
+  content: "\F01F3";
+}
+.mdi-distribute-horizontal-right::before {
+  content: "\F01F5";
+}
+.mdi-distribute-vertical-bottom::before {
+  content: "\F01F6";
+}
+.mdi-distribute-vertical-center::before {
+  content: "\F01F7";
+}
+.mdi-distribute-vertical-top::before {
+  content: "\F01F8";
+}
+.mdi-diving-flippers::before {
+  content: "\FD9B";
+}
+.mdi-diving-helmet::before {
+  content: "\FD9C";
+}
+.mdi-diving-scuba::before {
+  content: "\FD9D";
+}
+.mdi-diving-scuba-flag::before {
+  content: "\FD9E";
+}
+.mdi-diving-scuba-tank::before {
+  content: "\FD9F";
+}
+.mdi-diving-scuba-tank-multiple::before {
+  content: "\FDA0";
+}
+.mdi-diving-snorkel::before {
+  content: "\FDA1";
+}
+.mdi-division::before {
+  content: "\F1D4";
+}
+.mdi-division-box::before {
+  content: "\F1D5";
+}
+.mdi-dlna::before {
+  content: "\FA40";
+}
+.mdi-dna::before {
+  content: "\F683";
+}
+.mdi-dns::before {
+  content: "\F1D6";
+}
+.mdi-dns-outline::before {
+  content: "\FB68";
+}
+.mdi-do-not-disturb::before {
+  content: "\F697";
+}
+.mdi-do-not-disturb-off::before {
+  content: "\F698";
+}
+.mdi-dock-bottom::before {
+  content: "\F00D4";
+}
+.mdi-dock-left::before {
+  content: "\F00D5";
+}
+.mdi-dock-right::before {
+  content: "\F00D6";
+}
+.mdi-dock-window::before {
+  content: "\F00D7";
+}
+.mdi-docker::before {
+  content: "\F867";
+}
+.mdi-doctor::before {
+  content: "\FA41";
+}
+.mdi-dog::before {
+  content: "\FA42";
+}
+.mdi-dog-service::before {
+  content: "\FAAC";
+}
+.mdi-dog-side::before {
+  content: "\FA43";
+}
+.mdi-dolby::before {
+  content: "\F6B2";
+}
+.mdi-dolly::before {
+  content: "\FEBB";
+}
+.mdi-domain::before {
+  content: "\F1D7";
+}
+.mdi-domain-off::before {
+  content: "\FD4B";
+}
+.mdi-domain-plus::before {
+  content: "\F00D8";
+}
+.mdi-domain-remove::before {
+  content: "\F00D9";
+}
+.mdi-domino-mask::before {
+  content: "\F0045";
+}
+.mdi-donkey::before {
+  content: "\F7C1";
+}
+.mdi-door::before {
+  content: "\F819";
+}
+.mdi-door-closed::before {
+  content: "\F81A";
+}
+.mdi-door-closed-lock::before {
+  content: "\F00DA";
+}
+.mdi-door-open::before {
+  content: "\F81B";
+}
+.mdi-doorbell::before {
+  content: "\F0311";
+}
+.mdi-doorbell-video::before {
+  content: "\F868";
+}
+.mdi-dot-net::before {
+  content: "\FAAD";
+}
+.mdi-dots-horizontal::before {
+  content: "\F1D8";
+}
+.mdi-dots-horizontal-circle::before {
+  content: "\F7C2";
+}
+.mdi-dots-horizontal-circle-outline::before {
+  content: "\FB69";
+}
+.mdi-dots-vertical::before {
+  content: "\F1D9";
+}
+.mdi-dots-vertical-circle::before {
+  content: "\F7C3";
+}
+.mdi-dots-vertical-circle-outline::before {
+  content: "\FB6A";
+}
+.mdi-douban::before {
+  content: "\F699";
+}
+.mdi-download::before {
+  content: "\F1DA";
+}
+.mdi-download-lock::before {
+  content: "\F034B";
+}
+.mdi-download-lock-outline::before {
+  content: "\F034C";
+}
+.mdi-download-multiple::before {
+  content: "\F9E8";
+}
+.mdi-download-network::before {
+  content: "\F6F3";
+}
+.mdi-download-network-outline::before {
+  content: "\FC42";
+}
+.mdi-download-off::before {
+  content: "\F00DB";
+}
+.mdi-download-off-outline::before {
+  content: "\F00DC";
+}
+.mdi-download-outline::before {
+  content: "\FB6B";
+}
+.mdi-drag::before {
+  content: "\F1DB";
+}
+.mdi-drag-horizontal::before {
+  content: "\F1DC";
+}
+.mdi-drag-horizontal-variant::before {
+  content: "\F031B";
+}
+.mdi-drag-variant::before {
+  content: "\FB6C";
+}
+.mdi-drag-vertical::before {
+  content: "\F1DD";
+}
+.mdi-drag-vertical-variant::before {
+  content: "\F031C";
+}
+.mdi-drama-masks::before {
+  content: "\FCDE";
+}
+.mdi-draw::before {
+  content: "\FF66";
+}
+.mdi-drawing::before {
+  content: "\F1DE";
+}
+.mdi-drawing-box::before {
+  content: "\F1DF";
+}
+.mdi-dresser::before {
+  content: "\FF67";
+}
+.mdi-dresser-outline::before {
+  content: "\FF68";
+}
+.mdi-dribbble::before {
+  content: "\F1E0";
+}
+.mdi-dribbble-box::before {
+  content: "\F1E1";
+}
+.mdi-drone::before {
+  content: "\F1E2";
+}
+.mdi-dropbox::before {
+  content: "\F1E3";
+}
+.mdi-drupal::before {
+  content: "\F1E4";
+}
+.mdi-duck::before {
+  content: "\F1E5";
+}
+.mdi-dumbbell::before {
+  content: "\F1E6";
+}
+.mdi-dump-truck::before {
+  content: "\FC43";
+}
+.mdi-ear-hearing::before {
+  content: "\F7C4";
+}
+.mdi-ear-hearing-off::before {
+  content: "\FA44";
+}
+.mdi-earth::before {
+  content: "\F1E7";
+}
+.mdi-earth-arrow-right::before {
+  content: "\F033C";
+}
+.mdi-earth-box::before {
+  content: "\F6CC";
+}
+.mdi-earth-box-off::before {
+  content: "\F6CD";
+}
+.mdi-earth-off::before {
+  content: "\F1E8";
+}
+.mdi-edge::before {
+  content: "\F1E9";
+}
+.mdi-edge-legacy::before {
+  content: "\F027B";
+}
+.mdi-egg::before {
+  content: "\FAAE";
+}
+.mdi-egg-easter::before {
+  content: "\FAAF";
+}
+.mdi-eight-track::before {
+  content: "\F9E9";
+}
+.mdi-eject::before {
+  content: "\F1EA";
+}
+.mdi-eject-outline::before {
+  content: "\FB6D";
+}
+.mdi-electric-switch::before {
+  content: "\FEBC";
+}
+.mdi-electric-switch-closed::before {
+  content: "\F0104";
+}
+.mdi-electron-framework::before {
+  content: "\F0046";
+}
+.mdi-elephant::before {
+  content: "\F7C5";
+}
+.mdi-elevation-decline::before {
+  content: "\F1EB";
+}
+.mdi-elevation-rise::before {
+  content: "\F1EC";
+}
+.mdi-elevator::before {
+  content: "\F1ED";
+}
+.mdi-elevator-down::before {
+  content: "\F02ED";
+}
+.mdi-elevator-passenger::before {
+  content: "\F03AC";
+}
+.mdi-elevator-up::before {
+  content: "\F02EC";
+}
+.mdi-ellipse::before {
+  content: "\FEBD";
+}
+.mdi-ellipse-outline::before {
+  content: "\FEBE";
+}
+.mdi-email::before {
+  content: "\F1EE";
+}
+.mdi-email-alert::before {
+  content: "\F6CE";
+}
+.mdi-email-alert-outline::before {
+  content: "\FD1E";
+}
+.mdi-email-box::before {
+  content: "\FCDF";
+}
+.mdi-email-check::before {
+  content: "\FAB0";
+}
+.mdi-email-check-outline::before {
+  content: "\FAB1";
+}
+.mdi-email-edit::before {
+  content: "\FF00";
+}
+.mdi-email-edit-outline::before {
+  content: "\FF01";
+}
+.mdi-email-lock::before {
+  content: "\F1F1";
+}
+.mdi-email-mark-as-unread::before {
+  content: "\FB6E";
+}
+.mdi-email-minus::before {
+  content: "\FF02";
+}
+.mdi-email-minus-outline::before {
+  content: "\FF03";
+}
+.mdi-email-multiple::before {
+  content: "\FF04";
+}
+.mdi-email-multiple-outline::before {
+  content: "\FF05";
+}
+.mdi-email-newsletter::before {
+  content: "\FFD1";
+}
+.mdi-email-open::before {
+  content: "\F1EF";
+}
+.mdi-email-open-multiple::before {
+  content: "\FF06";
+}
+.mdi-email-open-multiple-outline::before {
+  content: "\FF07";
+}
+.mdi-email-open-outline::before {
+  content: "\F5EF";
+}
+.mdi-email-outline::before {
+  content: "\F1F0";
+}
+.mdi-email-plus::before {
+  content: "\F9EA";
+}
+.mdi-email-plus-outline::before {
+  content: "\F9EB";
+}
+.mdi-email-receive::before {
+  content: "\F0105";
+}
+.mdi-email-receive-outline::before {
+  content: "\F0106";
+}
+.mdi-email-search::before {
+  content: "\F960";
+}
+.mdi-email-search-outline::before {
+  content: "\F961";
+}
+.mdi-email-send::before {
+  content: "\F0107";
+}
+.mdi-email-send-outline::before {
+  content: "\F0108";
+}
+.mdi-email-sync::before {
+  content: "\F02F2";
+}
+.mdi-email-sync-outline::before {
+  content: "\F02F3";
+}
+.mdi-email-variant::before {
+  content: "\F5F0";
+}
+.mdi-ember::before {
+  content: "\FB15";
+}
+.mdi-emby::before {
+  content: "\F6B3";
+}
+.mdi-emoticon::before {
+  content: "\FC44";
+}
+.mdi-emoticon-angry::before {
+  content: "\FC45";
+}
+.mdi-emoticon-angry-outline::before {
+  content: "\FC46";
+}
+.mdi-emoticon-confused::before {
+  content: "\F0109";
+}
+.mdi-emoticon-confused-outline::before {
+  content: "\F010A";
+}
+.mdi-emoticon-cool::before {
+  content: "\FC47";
+}
+.mdi-emoticon-cool-outline::before {
+  content: "\F1F3";
+}
+.mdi-emoticon-cry::before {
+  content: "\FC48";
+}
+.mdi-emoticon-cry-outline::before {
+  content: "\FC49";
+}
+.mdi-emoticon-dead::before {
+  content: "\FC4A";
+}
+.mdi-emoticon-dead-outline::before {
+  content: "\F69A";
+}
+.mdi-emoticon-devil::before {
+  content: "\FC4B";
+}
+.mdi-emoticon-devil-outline::before {
+  content: "\F1F4";
+}
+.mdi-emoticon-excited::before {
+  content: "\FC4C";
+}
+.mdi-emoticon-excited-outline::before {
+  content: "\F69B";
+}
+.mdi-emoticon-frown::before {
+  content: "\FF69";
+}
+.mdi-emoticon-frown-outline::before {
+  content: "\FF6A";
+}
+.mdi-emoticon-happy::before {
+  content: "\FC4D";
+}
+.mdi-emoticon-happy-outline::before {
+  content: "\F1F5";
+}
+.mdi-emoticon-kiss::before {
+  content: "\FC4E";
+}
+.mdi-emoticon-kiss-outline::before {
+  content: "\FC4F";
+}
+.mdi-emoticon-lol::before {
+  content: "\F023F";
+}
+.mdi-emoticon-lol-outline::before {
+  content: "\F0240";
+}
+.mdi-emoticon-neutral::before {
+  content: "\FC50";
+}
+.mdi-emoticon-neutral-outline::before {
+  content: "\F1F6";
+}
+.mdi-emoticon-outline::before {
+  content: "\F1F2";
+}
+.mdi-emoticon-poop::before {
+  content: "\F1F7";
+}
+.mdi-emoticon-poop-outline::before {
+  content: "\FC51";
+}
+.mdi-emoticon-sad::before {
+  content: "\FC52";
+}
+.mdi-emoticon-sad-outline::before {
+  content: "\F1F8";
+}
+.mdi-emoticon-tongue::before {
+  content: "\F1F9";
+}
+.mdi-emoticon-tongue-outline::before {
+  content: "\FC53";
+}
+.mdi-emoticon-wink::before {
+  content: "\FC54";
+}
+.mdi-emoticon-wink-outline::before {
+  content: "\FC55";
+}
+.mdi-engine::before {
+  content: "\F1FA";
+}
+.mdi-engine-off::before {
+  content: "\FA45";
+}
+.mdi-engine-off-outline::before {
+  content: "\FA46";
+}
+.mdi-engine-outline::before {
+  content: "\F1FB";
+}
+.mdi-epsilon::before {
+  content: "\F010B";
+}
+.mdi-equal::before {
+  content: "\F1FC";
+}
+.mdi-equal-box::before {
+  content: "\F1FD";
+}
+.mdi-equalizer::before {
+  content: "\FEBF";
+}
+.mdi-equalizer-outline::before {
+  content: "\FEC0";
+}
+.mdi-eraser::before {
+  content: "\F1FE";
+}
+.mdi-eraser-variant::before {
+  content: "\F642";
+}
+.mdi-escalator::before {
+  content: "\F1FF";
+}
+.mdi-escalator-down::before {
+  content: "\F02EB";
+}
+.mdi-escalator-up::before {
+  content: "\F02EA";
+}
+.mdi-eslint::before {
+  content: "\FC56";
+}
+.mdi-et::before {
+  content: "\FAB2";
+}
+.mdi-ethereum::before {
+  content: "\F869";
+}
+.mdi-ethernet::before {
+  content: "\F200";
+}
+.mdi-ethernet-cable::before {
+  content: "\F201";
+}
+.mdi-ethernet-cable-off::before {
+  content: "\F202";
+}
+.mdi-etsy::before {
+  content: "\F203";
+}
+.mdi-ev-station::before {
+  content: "\F5F1";
+}
+.mdi-eventbrite::before {
+  content: "\F7C6";
+}
+.mdi-evernote::before {
+  content: "\F204";
+}
+.mdi-excavator::before {
+  content: "\F0047";
+}
+.mdi-exclamation::before {
+  content: "\F205";
+}
+.mdi-exclamation-thick::before {
+  content: "\F0263";
+}
+.mdi-exit-run::before {
+  content: "\FA47";
+}
+.mdi-exit-to-app::before {
+  content: "\F206";
+}
+.mdi-expand-all::before {
+  content: "\FAB3";
+}
+.mdi-expand-all-outline::before {
+  content: "\FAB4";
+}
+.mdi-expansion-card::before {
+  content: "\F8AD";
+}
+.mdi-expansion-card-variant::before {
+  content: "\FFD2";
+}
+.mdi-exponent::before {
+  content: "\F962";
+}
+.mdi-exponent-box::before {
+  content: "\F963";
+}
+.mdi-export::before {
+  content: "\F207";
+}
+.mdi-export-variant::before {
+  content: "\FB6F";
+}
+.mdi-eye::before {
+  content: "\F208";
+}
+.mdi-eye-check::before {
+  content: "\FCE0";
+}
+.mdi-eye-check-outline::before {
+  content: "\FCE1";
+}
+.mdi-eye-circle::before {
+  content: "\FB70";
+}
+.mdi-eye-circle-outline::before {
+  content: "\FB71";
+}
+.mdi-eye-minus::before {
+  content: "\F0048";
+}
+.mdi-eye-minus-outline::before {
+  content: "\F0049";
+}
+.mdi-eye-off::before {
+  content: "\F209";
+}
+.mdi-eye-off-outline::before {
+  content: "\F6D0";
+}
+.mdi-eye-outline::before {
+  content: "\F6CF";
+}
+.mdi-eye-plus::before {
+  content: "\F86A";
+}
+.mdi-eye-plus-outline::before {
+  content: "\F86B";
+}
+.mdi-eye-settings::before {
+  content: "\F86C";
+}
+.mdi-eye-settings-outline::before {
+  content: "\F86D";
+}
+.mdi-eyedropper::before {
+  content: "\F20A";
+}
+.mdi-eyedropper-variant::before {
+  content: "\F20B";
+}
+.mdi-face::before {
+  content: "\F643";
+}
+.mdi-face-agent::before {
+  content: "\FD4C";
+}
+.mdi-face-outline::before {
+  content: "\FB72";
+}
+.mdi-face-profile::before {
+  content: "\F644";
+}
+.mdi-face-profile-woman::before {
+  content: "\F00A1";
+}
+.mdi-face-recognition::before {
+  content: "\FC57";
+}
+.mdi-face-woman::before {
+  content: "\F00A2";
+}
+.mdi-face-woman-outline::before {
+  content: "\F00A3";
+}
+.mdi-facebook::before {
+  content: "\F20C";
+}
+.mdi-facebook-box::before {
+  content: "\F20D";
+}
+.mdi-facebook-messenger::before {
+  content: "\F20E";
+}
+.mdi-facebook-workplace::before {
+  content: "\FB16";
+}
+.mdi-factory::before {
+  content: "\F20F";
+}
+.mdi-fan::before {
+  content: "\F210";
+}
+.mdi-fan-off::before {
+  content: "\F81C";
+}
+.mdi-fast-forward::before {
+  content: "\F211";
+}
+.mdi-fast-forward-10::before {
+  content: "\FD4D";
+}
+.mdi-fast-forward-30::before {
+  content: "\FCE2";
+}
+.mdi-fast-forward-5::before {
+  content: "\F0223";
+}
+.mdi-fast-forward-outline::before {
+  content: "\F6D1";
+}
+.mdi-fax::before {
+  content: "\F212";
+}
+.mdi-feather::before {
+  content: "\F6D2";
+}
+.mdi-feature-search::before {
+  content: "\FA48";
+}
+.mdi-feature-search-outline::before {
+  content: "\FA49";
+}
+.mdi-fedora::before {
+  content: "\F8DA";
+}
+.mdi-ferris-wheel::before {
+  content: "\FEC1";
+}
+.mdi-ferry::before {
+  content: "\F213";
+}
+.mdi-file::before {
+  content: "\F214";
+}
+.mdi-file-account::before {
+  content: "\F73A";
+}
+.mdi-file-account-outline::before {
+  content: "\F004A";
+}
+.mdi-file-alert::before {
+  content: "\FA4A";
+}
+.mdi-file-alert-outline::before {
+  content: "\FA4B";
+}
+.mdi-file-cabinet::before {
+  content: "\FAB5";
+}
+.mdi-file-cad::before {
+  content: "\FF08";
+}
+.mdi-file-cad-box::before {
+  content: "\FF09";
+}
+.mdi-file-cancel::before {
+  content: "\FDA2";
+}
+.mdi-file-cancel-outline::before {
+  content: "\FDA3";
+}
+.mdi-file-certificate::before {
+  content: "\F01B1";
+}
+.mdi-file-certificate-outline::before {
+  content: "\F01B2";
+}
+.mdi-file-chart::before {
+  content: "\F215";
+}
+.mdi-file-chart-outline::before {
+  content: "\F004B";
+}
+.mdi-file-check::before {
+  content: "\F216";
+}
+.mdi-file-check-outline::before {
+  content: "\FE7B";
+}
+.mdi-file-clock::before {
+  content: "\F030C";
+}
+.mdi-file-clock-outline::before {
+  content: "\F030D";
+}
+.mdi-file-cloud::before {
+  content: "\F217";
+}
+.mdi-file-cloud-outline::before {
+  content: "\F004C";
+}
+.mdi-file-code::before {
+  content: "\F22E";
+}
+.mdi-file-code-outline::before {
+  content: "\F004D";
+}
+.mdi-file-compare::before {
+  content: "\F8A9";
+}
+.mdi-file-delimited::before {
+  content: "\F218";
+}
+.mdi-file-delimited-outline::before {
+  content: "\FEC2";
+}
+.mdi-file-document::before {
+  content: "\F219";
+}
+.mdi-file-document-box::before {
+  content: "\F21A";
+}
+.mdi-file-document-box-check::before {
+  content: "\FEC3";
+}
+.mdi-file-document-box-check-outline::before {
+  content: "\FEC4";
+}
+.mdi-file-document-box-minus::before {
+  content: "\FEC5";
+}
+.mdi-file-document-box-minus-outline::before {
+  content: "\FEC6";
+}
+.mdi-file-document-box-multiple::before {
+  content: "\FAB6";
+}
+.mdi-file-document-box-multiple-outline::before {
+  content: "\FAB7";
+}
+.mdi-file-document-box-outline::before {
+  content: "\F9EC";
+}
+.mdi-file-document-box-plus::before {
+  content: "\FEC7";
+}
+.mdi-file-document-box-plus-outline::before {
+  content: "\FEC8";
+}
+.mdi-file-document-box-remove::before {
+  content: "\FEC9";
+}
+.mdi-file-document-box-remove-outline::before {
+  content: "\FECA";
+}
+.mdi-file-document-box-search::before {
+  content: "\FECB";
+}
+.mdi-file-document-box-search-outline::before {
+  content: "\FECC";
+}
+.mdi-file-document-edit::before {
+  content: "\FDA4";
+}
+.mdi-file-document-edit-outline::before {
+  content: "\FDA5";
+}
+.mdi-file-document-outline::before {
+  content: "\F9ED";
+}
+.mdi-file-download::before {
+  content: "\F964";
+}
+.mdi-file-download-outline::before {
+  content: "\F965";
+}
+.mdi-file-edit::before {
+  content: "\F0212";
+}
+.mdi-file-edit-outline::before {
+  content: "\F0213";
+}
+.mdi-file-excel::before {
+  content: "\F21B";
+}
+.mdi-file-excel-box::before {
+  content: "\F21C";
+}
+.mdi-file-excel-box-outline::before {
+  content: "\F004E";
+}
+.mdi-file-excel-outline::before {
+  content: "\F004F";
+}
+.mdi-file-export::before {
+  content: "\F21D";
+}
+.mdi-file-export-outline::before {
+  content: "\F0050";
+}
+.mdi-file-eye::before {
+  content: "\FDA6";
+}
+.mdi-file-eye-outline::before {
+  content: "\FDA7";
+}
+.mdi-file-find::before {
+  content: "\F21E";
+}
+.mdi-file-find-outline::before {
+  content: "\FB73";
+}
+.mdi-file-hidden::before {
+  content: "\F613";
+}
+.mdi-file-image::before {
+  content: "\F21F";
+}
+.mdi-file-image-outline::before {
+  content: "\FECD";
+}
+.mdi-file-import::before {
+  content: "\F220";
+}
+.mdi-file-import-outline::before {
+  content: "\F0051";
+}
+.mdi-file-key::before {
+  content: "\F01AF";
+}
+.mdi-file-key-outline::before {
+  content: "\F01B0";
+}
+.mdi-file-link::before {
+  content: "\F01A2";
+}
+.mdi-file-link-outline::before {
+  content: "\F01A3";
+}
+.mdi-file-lock::before {
+  content: "\F221";
+}
+.mdi-file-lock-outline::before {
+  content: "\F0052";
+}
+.mdi-file-move::before {
+  content: "\FAB8";
+}
+.mdi-file-move-outline::before {
+  content: "\F0053";
+}
+.mdi-file-multiple::before {
+  content: "\F222";
+}
+.mdi-file-multiple-outline::before {
+  content: "\F0054";
+}
+.mdi-file-music::before {
+  content: "\F223";
+}
+.mdi-file-music-outline::before {
+  content: "\FE7C";
+}
+.mdi-file-outline::before {
+  content: "\F224";
+}
+.mdi-file-pdf::before {
+  content: "\F225";
+}
+.mdi-file-pdf-box::before {
+  content: "\F226";
+}
+.mdi-file-pdf-box-outline::before {
+  content: "\FFD3";
+}
+.mdi-file-pdf-outline::before {
+  content: "\FE7D";
+}
+.mdi-file-percent::before {
+  content: "\F81D";
+}
+.mdi-file-percent-outline::before {
+  content: "\F0055";
+}
+.mdi-file-phone::before {
+  content: "\F01A4";
+}
+.mdi-file-phone-outline::before {
+  content: "\F01A5";
+}
+.mdi-file-plus::before {
+  content: "\F751";
+}
+.mdi-file-plus-outline::before {
+  content: "\FF0A";
+}
+.mdi-file-powerpoint::before {
+  content: "\F227";
+}
+.mdi-file-powerpoint-box::before {
+  content: "\F228";
+}
+.mdi-file-powerpoint-box-outline::before {
+  content: "\F0056";
+}
+.mdi-file-powerpoint-outline::before {
+  content: "\F0057";
+}
+.mdi-file-presentation-box::before {
+  content: "\F229";
+}
+.mdi-file-question::before {
+  content: "\F86E";
+}
+.mdi-file-question-outline::before {
+  content: "\F0058";
+}
+.mdi-file-remove::before {
+  content: "\FB74";
+}
+.mdi-file-remove-outline::before {
+  content: "\F0059";
+}
+.mdi-file-replace::before {
+  content: "\FB17";
+}
+.mdi-file-replace-outline::before {
+  content: "\FB18";
+}
+.mdi-file-restore::before {
+  content: "\F670";
+}
+.mdi-file-restore-outline::before {
+  content: "\F005A";
+}
+.mdi-file-search::before {
+  content: "\FC58";
+}
+.mdi-file-search-outline::before {
+  content: "\FC59";
+}
+.mdi-file-send::before {
+  content: "\F22A";
+}
+.mdi-file-send-outline::before {
+  content: "\F005B";
+}
+.mdi-file-settings::before {
+  content: "\F00A4";
+}
+.mdi-file-settings-outline::before {
+  content: "\F00A5";
+}
+.mdi-file-settings-variant::before {
+  content: "\F00A6";
+}
+.mdi-file-settings-variant-outline::before {
+  content: "\F00A7";
+}
+.mdi-file-star::before {
+  content: "\F005C";
+}
+.mdi-file-star-outline::before {
+  content: "\F005D";
+}
+.mdi-file-swap::before {
+  content: "\FFD4";
+}
+.mdi-file-swap-outline::before {
+  content: "\FFD5";
+}
+.mdi-file-sync::before {
+  content: "\F0241";
+}
+.mdi-file-sync-outline::before {
+  content: "\F0242";
+}
+.mdi-file-table::before {
+  content: "\FC5A";
+}
+.mdi-file-table-box::before {
+  content: "\F010C";
+}
+.mdi-file-table-box-multiple::before {
+  content: "\F010D";
+}
+.mdi-file-table-box-multiple-outline::before {
+  content: "\F010E";
+}
+.mdi-file-table-box-outline::before {
+  content: "\F010F";
+}
+.mdi-file-table-outline::before {
+  content: "\FC5B";
+}
+.mdi-file-tree::before {
+  content: "\F645";
+}
+.mdi-file-undo::before {
+  content: "\F8DB";
+}
+.mdi-file-undo-outline::before {
+  content: "\F005E";
+}
+.mdi-file-upload::before {
+  content: "\FA4C";
+}
+.mdi-file-upload-outline::before {
+  content: "\FA4D";
+}
+.mdi-file-video::before {
+  content: "\F22B";
+}
+.mdi-file-video-outline::before {
+  content: "\FE10";
+}
+.mdi-file-word::before {
+  content: "\F22C";
+}
+.mdi-file-word-box::before {
+  content: "\F22D";
+}
+.mdi-file-word-box-outline::before {
+  content: "\F005F";
+}
+.mdi-file-word-outline::before {
+  content: "\F0060";
+}
+.mdi-film::before {
+  content: "\F22F";
+}
+.mdi-filmstrip::before {
+  content: "\F230";
+}
+.mdi-filmstrip-off::before {
+  content: "\F231";
+}
+.mdi-filter::before {
+  content: "\F232";
+}
+.mdi-filter-menu::before {
+  content: "\F0110";
+}
+.mdi-filter-menu-outline::before {
+  content: "\F0111";
+}
+.mdi-filter-minus::before {
+  content: "\FF0B";
+}
+.mdi-filter-minus-outline::before {
+  content: "\FF0C";
+}
+.mdi-filter-outline::before {
+  content: "\F233";
+}
+.mdi-filter-plus::before {
+  content: "\FF0D";
+}
+.mdi-filter-plus-outline::before {
+  content: "\FF0E";
+}
+.mdi-filter-remove::before {
+  content: "\F234";
+}
+.mdi-filter-remove-outline::before {
+  content: "\F235";
+}
+.mdi-filter-variant::before {
+  content: "\F236";
+}
+.mdi-filter-variant-minus::before {
+  content: "\F013D";
+}
+.mdi-filter-variant-plus::before {
+  content: "\F013E";
+}
+.mdi-filter-variant-remove::before {
+  content: "\F0061";
+}
+.mdi-finance::before {
+  content: "\F81E";
+}
+.mdi-find-replace::before {
+  content: "\F6D3";
+}
+.mdi-fingerprint::before {
+  content: "\F237";
+}
+.mdi-fingerprint-off::before {
+  content: "\FECE";
+}
+.mdi-fire::before {
+  content: "\F238";
+}
+.mdi-fire-extinguisher::before {
+  content: "\FF0F";
+}
+.mdi-fire-hydrant::before {
+  content: "\F0162";
+}
+.mdi-fire-hydrant-alert::before {
+  content: "\F0163";
+}
+.mdi-fire-hydrant-off::before {
+  content: "\F0164";
+}
+.mdi-fire-truck::before {
+  content: "\F8AA";
+}
+.mdi-firebase::before {
+  content: "\F966";
+}
+.mdi-firefox::before {
+  content: "\F239";
+}
+.mdi-fireplace::before {
+  content: "\FE11";
+}
+.mdi-fireplace-off::before {
+  content: "\FE12";
+}
+.mdi-firework::before {
+  content: "\FE13";
+}
+.mdi-fish::before {
+  content: "\F23A";
+}
+.mdi-fishbowl::before {
+  content: "\FF10";
+}
+.mdi-fishbowl-outline::before {
+  content: "\FF11";
+}
+.mdi-fit-to-page::before {
+  content: "\FF12";
+}
+.mdi-fit-to-page-outline::before {
+  content: "\FF13";
+}
+.mdi-flag::before {
+  content: "\F23B";
+}
+.mdi-flag-checkered::before {
+  content: "\F23C";
+}
+.mdi-flag-minus::before {
+  content: "\FB75";
+}
+.mdi-flag-minus-outline::before {
+  content: "\F00DD";
+}
+.mdi-flag-outline::before {
+  content: "\F23D";
+}
+.mdi-flag-plus::before {
+  content: "\FB76";
+}
+.mdi-flag-plus-outline::before {
+  content: "\F00DE";
+}
+.mdi-flag-remove::before {
+  content: "\FB77";
+}
+.mdi-flag-remove-outline::before {
+  content: "\F00DF";
+}
+.mdi-flag-triangle::before {
+  content: "\F23F";
+}
+.mdi-flag-variant::before {
+  content: "\F240";
+}
+.mdi-flag-variant-outline::before {
+  content: "\F23E";
+}
+.mdi-flare::before {
+  content: "\FD4E";
+}
+.mdi-flash::before {
+  content: "\F241";
+}
+.mdi-flash-alert::before {
+  content: "\FF14";
+}
+.mdi-flash-alert-outline::before {
+  content: "\FF15";
+}
+.mdi-flash-auto::before {
+  content: "\F242";
+}
+.mdi-flash-circle::before {
+  content: "\F81F";
+}
+.mdi-flash-off::before {
+  content: "\F243";
+}
+.mdi-flash-outline::before {
+  content: "\F6D4";
+}
+.mdi-flash-red-eye::before {
+  content: "\F67A";
+}
+.mdi-flashlight::before {
+  content: "\F244";
+}
+.mdi-flashlight-off::before {
+  content: "\F245";
+}
+.mdi-flask::before {
+  content: "\F093";
+}
+.mdi-flask-empty::before {
+  content: "\F094";
+}
+.mdi-flask-empty-minus::before {
+  content: "\F0265";
+}
+.mdi-flask-empty-minus-outline::before {
+  content: "\F0266";
+}
+.mdi-flask-empty-outline::before {
+  content: "\F095";
+}
+.mdi-flask-empty-plus::before {
+  content: "\F0267";
+}
+.mdi-flask-empty-plus-outline::before {
+  content: "\F0268";
+}
+.mdi-flask-empty-remove::before {
+  content: "\F0269";
+}
+.mdi-flask-empty-remove-outline::before {
+  content: "\F026A";
+}
+.mdi-flask-minus::before {
+  content: "\F026B";
+}
+.mdi-flask-minus-outline::before {
+  content: "\F026C";
+}
+.mdi-flask-outline::before {
+  content: "\F096";
+}
+.mdi-flask-plus::before {
+  content: "\F026D";
+}
+.mdi-flask-plus-outline::before {
+  content: "\F026E";
+}
+.mdi-flask-remove::before {
+  content: "\F026F";
+}
+.mdi-flask-remove-outline::before {
+  content: "\F0270";
+}
+.mdi-flask-round-bottom::before {
+  content: "\F0276";
+}
+.mdi-flask-round-bottom-empty::before {
+  content: "\F0277";
+}
+.mdi-flask-round-bottom-empty-outline::before {
+  content: "\F0278";
+}
+.mdi-flask-round-bottom-outline::before {
+  content: "\F0279";
+}
+.mdi-flattr::before {
+  content: "\F246";
+}
+.mdi-fleur-de-lis::before {
+  content: "\F032E";
+}
+.mdi-flickr::before {
+  content: "\FCE3";
+}
+.mdi-flip-horizontal::before {
+  content: "\F0112";
+}
+.mdi-flip-to-back::before {
+  content: "\F247";
+}
+.mdi-flip-to-front::before {
+  content: "\F248";
+}
+.mdi-flip-vertical::before {
+  content: "\F0113";
+}
+.mdi-floor-lamp::before {
+  content: "\F8DC";
+}
+.mdi-floor-lamp-dual::before {
+  content: "\F0062";
+}
+.mdi-floor-lamp-variant::before {
+  content: "\F0063";
+}
+.mdi-floor-plan::before {
+  content: "\F820";
+}
+.mdi-floppy::before {
+  content: "\F249";
+}
+.mdi-floppy-variant::before {
+  content: "\F9EE";
+}
+.mdi-flower::before {
+  content: "\F24A";
+}
+.mdi-flower-outline::before {
+  content: "\F9EF";
+}
+.mdi-flower-poppy::before {
+  content: "\FCE4";
+}
+.mdi-flower-tulip::before {
+  content: "\F9F0";
+}
+.mdi-flower-tulip-outline::before {
+  content: "\F9F1";
+}
+.mdi-focus-auto::before {
+  content: "\FF6B";
+}
+.mdi-focus-field::before {
+  content: "\FF6C";
+}
+.mdi-focus-field-horizontal::before {
+  content: "\FF6D";
+}
+.mdi-focus-field-vertical::before {
+  content: "\FF6E";
+}
+.mdi-folder::before {
+  content: "\F24B";
+}
+.mdi-folder-account::before {
+  content: "\F24C";
+}
+.mdi-folder-account-outline::before {
+  content: "\FB78";
+}
+.mdi-folder-alert::before {
+  content: "\FDA8";
+}
+.mdi-folder-alert-outline::before {
+  content: "\FDA9";
+}
+.mdi-folder-clock::before {
+  content: "\FAB9";
+}
+.mdi-folder-clock-outline::before {
+  content: "\FABA";
+}
+.mdi-folder-download::before {
+  content: "\F24D";
+}
+.mdi-folder-download-outline::before {
+  content: "\F0114";
+}
+.mdi-folder-edit::before {
+  content: "\F8DD";
+}
+.mdi-folder-edit-outline::before {
+  content: "\FDAA";
+}
+.mdi-folder-google-drive::before {
+  content: "\F24E";
+}
+.mdi-folder-heart::before {
+  content: "\F0115";
+}
+.mdi-folder-heart-outline::before {
+  content: "\F0116";
+}
+.mdi-folder-home::before {
+  content: "\F00E0";
+}
+.mdi-folder-home-outline::before {
+  content: "\F00E1";
+}
+.mdi-folder-image::before {
+  content: "\F24F";
+}
+.mdi-folder-information::before {
+  content: "\F00E2";
+}
+.mdi-folder-information-outline::before {
+  content: "\F00E3";
+}
+.mdi-folder-key::before {
+  content: "\F8AB";
+}
+.mdi-folder-key-network::before {
+  content: "\F8AC";
+}
+.mdi-folder-key-network-outline::before {
+  content: "\FC5C";
+}
+.mdi-folder-key-outline::before {
+  content: "\F0117";
+}
+.mdi-folder-lock::before {
+  content: "\F250";
+}
+.mdi-folder-lock-open::before {
+  content: "\F251";
+}
+.mdi-folder-marker::before {
+  content: "\F0298";
+}
+.mdi-folder-marker-outline::before {
+  content: "\F0299";
+}
+.mdi-folder-move::before {
+  content: "\F252";
+}
+.mdi-folder-move-outline::before {
+  content: "\F0271";
+}
+.mdi-folder-multiple::before {
+  content: "\F253";
+}
+.mdi-folder-multiple-image::before {
+  content: "\F254";
+}
+.mdi-folder-multiple-outline::before {
+  content: "\F255";
+}
+.mdi-folder-music::before {
+  content: "\F0384";
+}
+.mdi-folder-music-outline::before {
+  content: "\F0385";
+}
+.mdi-folder-network::before {
+  content: "\F86F";
+}
+.mdi-folder-network-outline::before {
+  content: "\FC5D";
+}
+.mdi-folder-open::before {
+  content: "\F76F";
+}
+.mdi-folder-open-outline::before {
+  content: "\FDAB";
+}
+.mdi-folder-outline::before {
+  content: "\F256";
+}
+.mdi-folder-plus::before {
+  content: "\F257";
+}
+.mdi-folder-plus-outline::before {
+  content: "\FB79";
+}
+.mdi-folder-pound::before {
+  content: "\FCE5";
+}
+.mdi-folder-pound-outline::before {
+  content: "\FCE6";
+}
+.mdi-folder-remove::before {
+  content: "\F258";
+}
+.mdi-folder-remove-outline::before {
+  content: "\FB7A";
+}
+.mdi-folder-search::before {
+  content: "\F967";
+}
+.mdi-folder-search-outline::before {
+  content: "\F968";
+}
+.mdi-folder-settings::before {
+  content: "\F00A8";
+}
+.mdi-folder-settings-outline::before {
+  content: "\F00A9";
+}
+.mdi-folder-settings-variant::before {
+  content: "\F00AA";
+}
+.mdi-folder-settings-variant-outline::before {
+  content: "\F00AB";
+}
+.mdi-folder-star::before {
+  content: "\F69C";
+}
+.mdi-folder-star-outline::before {
+  content: "\FB7B";
+}
+.mdi-folder-swap::before {
+  content: "\FFD6";
+}
+.mdi-folder-swap-outline::before {
+  content: "\FFD7";
+}
+.mdi-folder-sync::before {
+  content: "\FCE7";
+}
+.mdi-folder-sync-outline::before {
+  content: "\FCE8";
+}
+.mdi-folder-table::before {
+  content: "\F030E";
+}
+.mdi-folder-table-outline::before {
+  content: "\F030F";
+}
+.mdi-folder-text::before {
+  content: "\FC5E";
+}
+.mdi-folder-text-outline::before {
+  content: "\FC5F";
+}
+.mdi-folder-upload::before {
+  content: "\F259";
+}
+.mdi-folder-upload-outline::before {
+  content: "\F0118";
+}
+.mdi-folder-zip::before {
+  content: "\F6EA";
+}
+.mdi-folder-zip-outline::before {
+  content: "\F7B8";
+}
+.mdi-font-awesome::before {
+  content: "\F03A";
+}
+.mdi-food::before {
+  content: "\F25A";
+}
+.mdi-food-apple::before {
+  content: "\F25B";
+}
+.mdi-food-apple-outline::before {
+  content: "\FC60";
+}
+.mdi-food-croissant::before {
+  content: "\F7C7";
+}
+.mdi-food-fork-drink::before {
+  content: "\F5F2";
+}
+.mdi-food-off::before {
+  content: "\F5F3";
+}
+.mdi-food-variant::before {
+  content: "\F25C";
+}
+.mdi-foot-print::before {
+  content: "\FF6F";
+}
+.mdi-football::before {
+  content: "\F25D";
+}
+.mdi-football-australian::before {
+  content: "\F25E";
+}
+.mdi-football-helmet::before {
+  content: "\F25F";
+}
+.mdi-forklift::before {
+  content: "\F7C8";
+}
+.mdi-format-align-bottom::before {
+  content: "\F752";
+}
+.mdi-format-align-center::before {
+  content: "\F260";
+}
+.mdi-format-align-justify::before {
+  content: "\F261";
+}
+.mdi-format-align-left::before {
+  content: "\F262";
+}
+.mdi-format-align-middle::before {
+  content: "\F753";
+}
+.mdi-format-align-right::before {
+  content: "\F263";
+}
+.mdi-format-align-top::before {
+  content: "\F754";
+}
+.mdi-format-annotation-minus::before {
+  content: "\FABB";
+}
+.mdi-format-annotation-plus::before {
+  content: "\F646";
+}
+.mdi-format-bold::before {
+  content: "\F264";
+}
+.mdi-format-clear::before {
+  content: "\F265";
+}
+.mdi-format-color-fill::before {
+  content: "\F266";
+}
+.mdi-format-color-highlight::before {
+  content: "\FE14";
+}
+.mdi-format-color-marker-cancel::before {
+  content: "\F033E";
+}
+.mdi-format-color-text::before {
+  content: "\F69D";
+}
+.mdi-format-columns::before {
+  content: "\F8DE";
+}
+.mdi-format-float-center::before {
+  content: "\F267";
+}
+.mdi-format-float-left::before {
+  content: "\F268";
+}
+.mdi-format-float-none::before {
+  content: "\F269";
+}
+.mdi-format-float-right::before {
+  content: "\F26A";
+}
+.mdi-format-font::before {
+  content: "\F6D5";
+}
+.mdi-format-font-size-decrease::before {
+  content: "\F9F2";
+}
+.mdi-format-font-size-increase::before {
+  content: "\F9F3";
+}
+.mdi-format-header-1::before {
+  content: "\F26B";
+}
+.mdi-format-header-2::before {
+  content: "\F26C";
+}
+.mdi-format-header-3::before {
+  content: "\F26D";
+}
+.mdi-format-header-4::before {
+  content: "\F26E";
+}
+.mdi-format-header-5::before {
+  content: "\F26F";
+}
+.mdi-format-header-6::before {
+  content: "\F270";
+}
+.mdi-format-header-decrease::before {
+  content: "\F271";
+}
+.mdi-format-header-equal::before {
+  content: "\F272";
+}
+.mdi-format-header-increase::before {
+  content: "\F273";
+}
+.mdi-format-header-pound::before {
+  content: "\F274";
+}
+.mdi-format-horizontal-align-center::before {
+  content: "\F61E";
+}
+.mdi-format-horizontal-align-left::before {
+  content: "\F61F";
+}
+.mdi-format-horizontal-align-right::before {
+  content: "\F620";
+}
+.mdi-format-indent-decrease::before {
+  content: "\F275";
+}
+.mdi-format-indent-increase::before {
+  content: "\F276";
+}
+.mdi-format-italic::before {
+  content: "\F277";
+}
+.mdi-format-letter-case::before {
+  content: "\FB19";
+}
+.mdi-format-letter-case-lower::before {
+  content: "\FB1A";
+}
+.mdi-format-letter-case-upper::before {
+  content: "\FB1B";
+}
+.mdi-format-letter-ends-with::before {
+  content: "\FFD8";
+}
+.mdi-format-letter-matches::before {
+  content: "\FFD9";
+}
+.mdi-format-letter-starts-with::before {
+  content: "\FFDA";
+}
+.mdi-format-line-spacing::before {
+  content: "\F278";
+}
+.mdi-format-line-style::before {
+  content: "\F5C8";
+}
+.mdi-format-line-weight::before {
+  content: "\F5C9";
+}
+.mdi-format-list-bulleted::before {
+  content: "\F279";
+}
+.mdi-format-list-bulleted-square::before {
+  content: "\FDAC";
+}
+.mdi-format-list-bulleted-triangle::before {
+  content: "\FECF";
+}
+.mdi-format-list-bulleted-type::before {
+  content: "\F27A";
+}
+.mdi-format-list-checkbox::before {
+  content: "\F969";
+}
+.mdi-format-list-checks::before {
+  content: "\F755";
+}
+.mdi-format-list-numbered::before {
+  content: "\F27B";
+}
+.mdi-format-list-numbered-rtl::before {
+  content: "\FCE9";
+}
+.mdi-format-list-text::before {
+  content: "\F029A";
+}
+.mdi-format-overline::before {
+  content: "\FED0";
+}
+.mdi-format-page-break::before {
+  content: "\F6D6";
+}
+.mdi-format-paint::before {
+  content: "\F27C";
+}
+.mdi-format-paragraph::before {
+  content: "\F27D";
+}
+.mdi-format-pilcrow::before {
+  content: "\F6D7";
+}
+.mdi-format-quote-close::before {
+  content: "\F27E";
+}
+.mdi-format-quote-close-outline::before {
+  content: "\F01D3";
+}
+.mdi-format-quote-open::before {
+  content: "\F756";
+}
+.mdi-format-quote-open-outline::before {
+  content: "\F01D2";
+}
+.mdi-format-rotate-90::before {
+  content: "\F6A9";
+}
+.mdi-format-section::before {
+  content: "\F69E";
+}
+.mdi-format-size::before {
+  content: "\F27F";
+}
+.mdi-format-strikethrough::before {
+  content: "\F280";
+}
+.mdi-format-strikethrough-variant::before {
+  content: "\F281";
+}
+.mdi-format-subscript::before {
+  content: "\F282";
+}
+.mdi-format-superscript::before {
+  content: "\F283";
+}
+.mdi-format-text::before {
+  content: "\F284";
+}
+.mdi-format-text-rotation-angle-down::before {
+  content: "\FFDB";
+}
+.mdi-format-text-rotation-angle-up::before {
+  content: "\FFDC";
+}
+.mdi-format-text-rotation-down::before {
+  content: "\FD4F";
+}
+.mdi-format-text-rotation-down-vertical::before {
+  content: "\FFDD";
+}
+.mdi-format-text-rotation-none::before {
+  content: "\FD50";
+}
+.mdi-format-text-rotation-up::before {
+  content: "\FFDE";
+}
+.mdi-format-text-rotation-vertical::before {
+  content: "\FFDF";
+}
+.mdi-format-text-variant::before {
+  content: "\FE15";
+}
+.mdi-format-text-wrapping-clip::before {
+  content: "\FCEA";
+}
+.mdi-format-text-wrapping-overflow::before {
+  content: "\FCEB";
+}
+.mdi-format-text-wrapping-wrap::before {
+  content: "\FCEC";
+}
+.mdi-format-textbox::before {
+  content: "\FCED";
+}
+.mdi-format-textdirection-l-to-r::before {
+  content: "\F285";
+}
+.mdi-format-textdirection-r-to-l::before {
+  content: "\F286";
+}
+.mdi-format-title::before {
+  content: "\F5F4";
+}
+.mdi-format-underline::before {
+  content: "\F287";
+}
+.mdi-format-vertical-align-bottom::before {
+  content: "\F621";
+}
+.mdi-format-vertical-align-center::before {
+  content: "\F622";
+}
+.mdi-format-vertical-align-top::before {
+  content: "\F623";
+}
+.mdi-format-wrap-inline::before {
+  content: "\F288";
+}
+.mdi-format-wrap-square::before {
+  content: "\F289";
+}
+.mdi-format-wrap-tight::before {
+  content: "\F28A";
+}
+.mdi-format-wrap-top-bottom::before {
+  content: "\F28B";
+}
+.mdi-forum::before {
+  content: "\F28C";
+}
+.mdi-forum-outline::before {
+  content: "\F821";
+}
+.mdi-forward::before {
+  content: "\F28D";
+}
+.mdi-forwardburger::before {
+  content: "\FD51";
+}
+.mdi-fountain::before {
+  content: "\F96A";
+}
+.mdi-fountain-pen::before {
+  content: "\FCEE";
+}
+.mdi-fountain-pen-tip::before {
+  content: "\FCEF";
+}
+.mdi-foursquare::before {
+  content: "\F28E";
+}
+.mdi-freebsd::before {
+  content: "\F8DF";
+}
+.mdi-frequently-asked-questions::before {
+  content: "\FED1";
+}
+.mdi-fridge::before {
+  content: "\F290";
+}
+.mdi-fridge-alert::before {
+  content: "\F01DC";
+}
+.mdi-fridge-alert-outline::before {
+  content: "\F01DD";
+}
+.mdi-fridge-bottom::before {
+  content: "\F292";
+}
+.mdi-fridge-off::before {
+  content: "\F01DA";
+}
+.mdi-fridge-off-outline::before {
+  content: "\F01DB";
+}
+.mdi-fridge-outline::before {
+  content: "\F28F";
+}
+.mdi-fridge-top::before {
+  content: "\F291";
+}
+.mdi-fruit-cherries::before {
+  content: "\F0064";
+}
+.mdi-fruit-citrus::before {
+  content: "\F0065";
+}
+.mdi-fruit-grapes::before {
+  content: "\F0066";
+}
+.mdi-fruit-grapes-outline::before {
+  content: "\F0067";
+}
+.mdi-fruit-pineapple::before {
+  content: "\F0068";
+}
+.mdi-fruit-watermelon::before {
+  content: "\F0069";
+}
+.mdi-fuel::before {
+  content: "\F7C9";
+}
+.mdi-fullscreen::before {
+  content: "\F293";
+}
+.mdi-fullscreen-exit::before {
+  content: "\F294";
+}
+.mdi-function::before {
+  content: "\F295";
+}
+.mdi-function-variant::before {
+  content: "\F870";
+}
+.mdi-furigana-horizontal::before {
+  content: "\F00AC";
+}
+.mdi-furigana-vertical::before {
+  content: "\F00AD";
+}
+.mdi-fuse::before {
+  content: "\FC61";
+}
+.mdi-fuse-blade::before {
+  content: "\FC62";
+}
+.mdi-gamepad::before {
+  content: "\F296";
+}
+.mdi-gamepad-circle::before {
+  content: "\FE16";
+}
+.mdi-gamepad-circle-down::before {
+  content: "\FE17";
+}
+.mdi-gamepad-circle-left::before {
+  content: "\FE18";
+}
+.mdi-gamepad-circle-outline::before {
+  content: "\FE19";
+}
+.mdi-gamepad-circle-right::before {
+  content: "\FE1A";
+}
+.mdi-gamepad-circle-up::before {
+  content: "\FE1B";
+}
+.mdi-gamepad-down::before {
+  content: "\FE1C";
+}
+.mdi-gamepad-left::before {
+  content: "\FE1D";
+}
+.mdi-gamepad-right::before {
+  content: "\FE1E";
+}
+.mdi-gamepad-round::before {
+  content: "\FE1F";
+}
+.mdi-gamepad-round-down::before {
+  content: "\FE7E";
+}
+.mdi-gamepad-round-left::before {
+  content: "\FE7F";
+}
+.mdi-gamepad-round-outline::before {
+  content: "\FE80";
+}
+.mdi-gamepad-round-right::before {
+  content: "\FE81";
+}
+.mdi-gamepad-round-up::before {
+  content: "\FE82";
+}
+.mdi-gamepad-square::before {
+  content: "\FED2";
+}
+.mdi-gamepad-square-outline::before {
+  content: "\FED3";
+}
+.mdi-gamepad-up::before {
+  content: "\FE83";
+}
+.mdi-gamepad-variant::before {
+  content: "\F297";
+}
+.mdi-gamepad-variant-outline::before {
+  content: "\FED4";
+}
+.mdi-gamma::before {
+  content: "\F0119";
+}
+.mdi-gantry-crane::before {
+  content: "\FDAD";
+}
+.mdi-garage::before {
+  content: "\F6D8";
+}
+.mdi-garage-alert::before {
+  content: "\F871";
+}
+.mdi-garage-alert-variant::before {
+  content: "\F0300";
+}
+.mdi-garage-open::before {
+  content: "\F6D9";
+}
+.mdi-garage-open-variant::before {
+  content: "\F02FF";
+}
+.mdi-garage-variant::before {
+  content: "\F02FE";
+}
+.mdi-gas-cylinder::before {
+  content: "\F647";
+}
+.mdi-gas-station::before {
+  content: "\F298";
+}
+.mdi-gas-station-outline::before {
+  content: "\FED5";
+}
+.mdi-gate::before {
+  content: "\F299";
+}
+.mdi-gate-and::before {
+  content: "\F8E0";
+}
+.mdi-gate-arrow-right::before {
+  content: "\F0194";
+}
+.mdi-gate-nand::before {
+  content: "\F8E1";
+}
+.mdi-gate-nor::before {
+  content: "\F8E2";
+}
+.mdi-gate-not::before {
+  content: "\F8E3";
+}
+.mdi-gate-open::before {
+  content: "\F0195";
+}
+.mdi-gate-or::before {
+  content: "\F8E4";
+}
+.mdi-gate-xnor::before {
+  content: "\F8E5";
+}
+.mdi-gate-xor::before {
+  content: "\F8E6";
+}
+.mdi-gatsby::before {
+  content: "\FE84";
+}
+.mdi-gauge::before {
+  content: "\F29A";
+}
+.mdi-gauge-empty::before {
+  content: "\F872";
+}
+.mdi-gauge-full::before {
+  content: "\F873";
+}
+.mdi-gauge-low::before {
+  content: "\F874";
+}
+.mdi-gavel::before {
+  content: "\F29B";
+}
+.mdi-gender-female::before {
+  content: "\F29C";
+}
+.mdi-gender-male::before {
+  content: "\F29D";
+}
+.mdi-gender-male-female::before {
+  content: "\F29E";
+}
+.mdi-gender-male-female-variant::before {
+  content: "\F016A";
+}
+.mdi-gender-non-binary::before {
+  content: "\F016B";
+}
+.mdi-gender-transgender::before {
+  content: "\F29F";
+}
+.mdi-gentoo::before {
+  content: "\F8E7";
+}
+.mdi-gesture::before {
+  content: "\F7CA";
+}
+.mdi-gesture-double-tap::before {
+  content: "\F73B";
+}
+.mdi-gesture-pinch::before {
+  content: "\FABC";
+}
+.mdi-gesture-spread::before {
+  content: "\FABD";
+}
+.mdi-gesture-swipe::before {
+  content: "\FD52";
+}
+.mdi-gesture-swipe-down::before {
+  content: "\F73C";
+}
+.mdi-gesture-swipe-horizontal::before {
+  content: "\FABE";
+}
+.mdi-gesture-swipe-left::before {
+  content: "\F73D";
+}
+.mdi-gesture-swipe-right::before {
+  content: "\F73E";
+}
+.mdi-gesture-swipe-up::before {
+  content: "\F73F";
+}
+.mdi-gesture-swipe-vertical::before {
+  content: "\FABF";
+}
+.mdi-gesture-tap::before {
+  content: "\F740";
+}
+.mdi-gesture-tap-box::before {
+  content: "\F02D4";
+}
+.mdi-gesture-tap-button::before {
+  content: "\F02D3";
+}
+.mdi-gesture-tap-hold::before {
+  content: "\FD53";
+}
+.mdi-gesture-two-double-tap::before {
+  content: "\F741";
+}
+.mdi-gesture-two-tap::before {
+  content: "\F742";
+}
+.mdi-ghost::before {
+  content: "\F2A0";
+}
+.mdi-ghost-off::before {
+  content: "\F9F4";
+}
+.mdi-gif::before {
+  content: "\FD54";
+}
+.mdi-gift::before {
+  content: "\FE85";
+}
+.mdi-gift-outline::before {
+  content: "\F2A1";
+}
+.mdi-git::before {
+  content: "\F2A2";
+}
+.mdi-github-box::before {
+  content: "\F2A3";
+}
+.mdi-github-circle::before {
+  content: "\F2A4";
+}
+.mdi-github-face::before {
+  content: "\F6DA";
+}
+.mdi-gitlab::before {
+  content: "\FB7C";
+}
+.mdi-glass-cocktail::before {
+  content: "\F356";
+}
+.mdi-glass-flute::before {
+  content: "\F2A5";
+}
+.mdi-glass-mug::before {
+  content: "\F2A6";
+}
+.mdi-glass-mug-variant::before {
+  content: "\F0141";
+}
+.mdi-glass-pint-outline::before {
+  content: "\F0338";
+}
+.mdi-glass-stange::before {
+  content: "\F2A7";
+}
+.mdi-glass-tulip::before {
+  content: "\F2A8";
+}
+.mdi-glass-wine::before {
+  content: "\F875";
+}
+.mdi-glassdoor::before {
+  content: "\F2A9";
+}
+.mdi-glasses::before {
+  content: "\F2AA";
+}
+.mdi-globe-light::before {
+  content: "\F0302";
+}
+.mdi-globe-model::before {
+  content: "\F8E8";
+}
+.mdi-gmail::before {
+  content: "\F2AB";
+}
+.mdi-gnome::before {
+  content: "\F2AC";
+}
+.mdi-go-kart::before {
+  content: "\FD55";
+}
+.mdi-go-kart-track::before {
+  content: "\FD56";
+}
+.mdi-gog::before {
+  content: "\FB7D";
+}
+.mdi-gold::before {
+  content: "\F027A";
+}
+.mdi-golf::before {
+  content: "\F822";
+}
+.mdi-golf-cart::before {
+  content: "\F01CF";
+}
+.mdi-golf-tee::before {
+  content: "\F00AE";
+}
+.mdi-gondola::before {
+  content: "\F685";
+}
+.mdi-goodreads::before {
+  content: "\FD57";
+}
+.mdi-google::before {
+  content: "\F2AD";
+}
+.mdi-google-adwords::before {
+  content: "\FC63";
+}
+.mdi-google-analytics::before {
+  content: "\F7CB";
+}
+.mdi-google-assistant::before {
+  content: "\F7CC";
+}
+.mdi-google-cardboard::before {
+  content: "\F2AE";
+}
+.mdi-google-chrome::before {
+  content: "\F2AF";
+}
+.mdi-google-circles::before {
+  content: "\F2B0";
+}
+.mdi-google-circles-communities::before {
+  content: "\F2B1";
+}
+.mdi-google-circles-extended::before {
+  content: "\F2B2";
+}
+.mdi-google-circles-group::before {
+  content: "\F2B3";
+}
+.mdi-google-classroom::before {
+  content: "\F2C0";
+}
+.mdi-google-cloud::before {
+  content: "\F0221";
+}
+.mdi-google-controller::before {
+  content: "\F2B4";
+}
+.mdi-google-controller-off::before {
+  content: "\F2B5";
+}
+.mdi-google-downasaur::before {
+  content: "\F038D";
+}
+.mdi-google-drive::before {
+  content: "\F2B6";
+}
+.mdi-google-earth::before {
+  content: "\F2B7";
+}
+.mdi-google-fit::before {
+  content: "\F96B";
+}
+.mdi-google-glass::before {
+  content: "\F2B8";
+}
+.mdi-google-hangouts::before {
+  content: "\F2C9";
+}
+.mdi-google-home::before {
+  content: "\F823";
+}
+.mdi-google-keep::before {
+  content: "\F6DB";
+}
+.mdi-google-lens::before {
+  content: "\F9F5";
+}
+.mdi-google-maps::before {
+  content: "\F5F5";
+}
+.mdi-google-my-business::before {
+  content: "\F006A";
+}
+.mdi-google-nearby::before {
+  content: "\F2B9";
+}
+.mdi-google-pages::before {
+  content: "\F2BA";
+}
+.mdi-google-photos::before {
+  content: "\F6DC";
+}
+.mdi-google-physical-web::before {
+  content: "\F2BB";
+}
+.mdi-google-play::before {
+  content: "\F2BC";
+}
+.mdi-google-plus::before {
+  content: "\F2BD";
+}
+.mdi-google-plus-box::before {
+  content: "\F2BE";
+}
+.mdi-google-podcast::before {
+  content: "\FED6";
+}
+.mdi-google-spreadsheet::before {
+  content: "\F9F6";
+}
+.mdi-google-street-view::before {
+  content: "\FC64";
+}
+.mdi-google-translate::before {
+  content: "\F2BF";
+}
+.mdi-gradient::before {
+  content: "\F69F";
+}
+.mdi-grain::before {
+  content: "\FD58";
+}
+.mdi-graph::before {
+  content: "\F006B";
+}
+.mdi-graph-outline::before {
+  content: "\F006C";
+}
+.mdi-graphql::before {
+  content: "\F876";
+}
+.mdi-grave-stone::before {
+  content: "\FB7E";
+}
+.mdi-grease-pencil::before {
+  content: "\F648";
+}
+.mdi-greater-than::before {
+  content: "\F96C";
+}
+.mdi-greater-than-or-equal::before {
+  content: "\F96D";
+}
+.mdi-grid::before {
+  content: "\F2C1";
+}
+.mdi-grid-large::before {
+  content: "\F757";
+}
+.mdi-grid-off::before {
+  content: "\F2C2";
+}
+.mdi-grill::before {
+  content: "\FE86";
+}
+.mdi-grill-outline::before {
+  content: "\F01B5";
+}
+.mdi-group::before {
+  content: "\F2C3";
+}
+.mdi-guitar-acoustic::before {
+  content: "\F770";
+}
+.mdi-guitar-electric::before {
+  content: "\F2C4";
+}
+.mdi-guitar-pick::before {
+  content: "\F2C5";
+}
+.mdi-guitar-pick-outline::before {
+  content: "\F2C6";
+}
+.mdi-guy-fawkes-mask::before {
+  content: "\F824";
+}
+.mdi-hackernews::before {
+  content: "\F624";
+}
+.mdi-hail::before {
+  content: "\FAC0";
+}
+.mdi-hair-dryer::before {
+  content: "\F011A";
+}
+.mdi-hair-dryer-outline::before {
+  content: "\F011B";
+}
+.mdi-halloween::before {
+  content: "\FB7F";
+}
+.mdi-hamburger::before {
+  content: "\F684";
+}
+.mdi-hammer::before {
+  content: "\F8E9";
+}
+.mdi-hammer-screwdriver::before {
+  content: "\F034D";
+}
+.mdi-hammer-wrench::before {
+  content: "\F034E";
+}
+.mdi-hand::before {
+  content: "\FA4E";
+}
+.mdi-hand-heart::before {
+  content: "\F011C";
+}
+.mdi-hand-left::before {
+  content: "\FE87";
+}
+.mdi-hand-okay::before {
+  content: "\FA4F";
+}
+.mdi-hand-peace::before {
+  content: "\FA50";
+}
+.mdi-hand-peace-variant::before {
+  content: "\FA51";
+}
+.mdi-hand-pointing-down::before {
+  content: "\FA52";
+}
+.mdi-hand-pointing-left::before {
+  content: "\FA53";
+}
+.mdi-hand-pointing-right::before {
+  content: "\F2C7";
+}
+.mdi-hand-pointing-up::before {
+  content: "\FA54";
+}
+.mdi-hand-right::before {
+  content: "\FE88";
+}
+.mdi-hand-saw::before {
+  content: "\FE89";
+}
+.mdi-handball::before {
+  content: "\FF70";
+}
+.mdi-handcuffs::before {
+  content: "\F0169";
+}
+.mdi-handshake::before {
+  content: "\F0243";
+}
+.mdi-hanger::before {
+  content: "\F2C8";
+}
+.mdi-hard-hat::before {
+  content: "\F96E";
+}
+.mdi-harddisk::before {
+  content: "\F2CA";
+}
+.mdi-harddisk-plus::before {
+  content: "\F006D";
+}
+.mdi-harddisk-remove::before {
+  content: "\F006E";
+}
+.mdi-hat-fedora::before {
+  content: "\FB80";
+}
+.mdi-hazard-lights::before {
+  content: "\FC65";
+}
+.mdi-hdr::before {
+  content: "\FD59";
+}
+.mdi-hdr-off::before {
+  content: "\FD5A";
+}
+.mdi-head::before {
+  content: "\F0389";
+}
+.mdi-head-alert::before {
+  content: "\F0363";
+}
+.mdi-head-alert-outline::before {
+  content: "\F0364";
+}
+.mdi-head-check::before {
+  content: "\F0365";
+}
+.mdi-head-check-outline::before {
+  content: "\F0366";
+}
+.mdi-head-cog::before {
+  content: "\F0367";
+}
+.mdi-head-cog-outline::before {
+  content: "\F0368";
+}
+.mdi-head-dots-horizontal::before {
+  content: "\F0369";
+}
+.mdi-head-dots-horizontal-outline::before {
+  content: "\F036A";
+}
+.mdi-head-flash::before {
+  content: "\F036B";
+}
+.mdi-head-flash-outline::before {
+  content: "\F036C";
+}
+.mdi-head-heart::before {
+  content: "\F036D";
+}
+.mdi-head-heart-outline::before {
+  content: "\F036E";
+}
+.mdi-head-lightbulb::before {
+  content: "\F036F";
+}
+.mdi-head-lightbulb-outline::before {
+  content: "\F0370";
+}
+.mdi-head-minus::before {
+  content: "\F0371";
+}
+.mdi-head-minus-outline::before {
+  content: "\F0372";
+}
+.mdi-head-outline::before {
+  content: "\F038A";
+}
+.mdi-head-plus::before {
+  content: "\F0373";
+}
+.mdi-head-plus-outline::before {
+  content: "\F0374";
+}
+.mdi-head-question::before {
+  content: "\F0375";
+}
+.mdi-head-question-outline::before {
+  content: "\F0376";
+}
+.mdi-head-remove::before {
+  content: "\F0377";
+}
+.mdi-head-remove-outline::before {
+  content: "\F0378";
+}
+.mdi-head-snowflake::before {
+  content: "\F0379";
+}
+.mdi-head-snowflake-outline::before {
+  content: "\F037A";
+}
+.mdi-head-sync::before {
+  content: "\F037B";
+}
+.mdi-head-sync-outline::before {
+  content: "\F037C";
+}
+.mdi-headphones::before {
+  content: "\F2CB";
+}
+.mdi-headphones-bluetooth::before {
+  content: "\F96F";
+}
+.mdi-headphones-box::before {
+  content: "\F2CC";
+}
+.mdi-headphones-off::before {
+  content: "\F7CD";
+}
+.mdi-headphones-settings::before {
+  content: "\F2CD";
+}
+.mdi-headset::before {
+  content: "\F2CE";
+}
+.mdi-headset-dock::before {
+  content: "\F2CF";
+}
+.mdi-headset-off::before {
+  content: "\F2D0";
+}
+.mdi-heart::before {
+  content: "\F2D1";
+}
+.mdi-heart-box::before {
+  content: "\F2D2";
+}
+.mdi-heart-box-outline::before {
+  content: "\F2D3";
+}
+.mdi-heart-broken::before {
+  content: "\F2D4";
+}
+.mdi-heart-broken-outline::before {
+  content: "\FCF0";
+}
+.mdi-heart-circle::before {
+  content: "\F970";
+}
+.mdi-heart-circle-outline::before {
+  content: "\F971";
+}
+.mdi-heart-flash::before {
+  content: "\FF16";
+}
+.mdi-heart-half::before {
+  content: "\F6DE";
+}
+.mdi-heart-half-full::before {
+  content: "\F6DD";
+}
+.mdi-heart-half-outline::before {
+  content: "\F6DF";
+}
+.mdi-heart-multiple::before {
+  content: "\FA55";
+}
+.mdi-heart-multiple-outline::before {
+  content: "\FA56";
+}
+.mdi-heart-off::before {
+  content: "\F758";
+}
+.mdi-heart-outline::before {
+  content: "\F2D5";
+}
+.mdi-heart-pulse::before {
+  content: "\F5F6";
+}
+.mdi-helicopter::before {
+  content: "\FAC1";
+}
+.mdi-help::before {
+  content: "\F2D6";
+}
+.mdi-help-box::before {
+  content: "\F78A";
+}
+.mdi-help-circle::before {
+  content: "\F2D7";
+}
+.mdi-help-circle-outline::before {
+  content: "\F625";
+}
+.mdi-help-network::before {
+  content: "\F6F4";
+}
+.mdi-help-network-outline::before {
+  content: "\FC66";
+}
+.mdi-help-rhombus::before {
+  content: "\FB81";
+}
+.mdi-help-rhombus-outline::before {
+  content: "\FB82";
+}
+.mdi-hexadecimal::before {
+  content: "\F02D2";
+}
+.mdi-hexagon::before {
+  content: "\F2D8";
+}
+.mdi-hexagon-multiple::before {
+  content: "\F6E0";
+}
+.mdi-hexagon-multiple-outline::before {
+  content: "\F011D";
+}
+.mdi-hexagon-outline::before {
+  content: "\F2D9";
+}
+.mdi-hexagon-slice-1::before {
+  content: "\FAC2";
+}
+.mdi-hexagon-slice-2::before {
+  content: "\FAC3";
+}
+.mdi-hexagon-slice-3::before {
+  content: "\FAC4";
+}
+.mdi-hexagon-slice-4::before {
+  content: "\FAC5";
+}
+.mdi-hexagon-slice-5::before {
+  content: "\FAC6";
+}
+.mdi-hexagon-slice-6::before {
+  content: "\FAC7";
+}
+.mdi-hexagram::before {
+  content: "\FAC8";
+}
+.mdi-hexagram-outline::before {
+  content: "\FAC9";
+}
+.mdi-high-definition::before {
+  content: "\F7CE";
+}
+.mdi-high-definition-box::before {
+  content: "\F877";
+}
+.mdi-highway::before {
+  content: "\F5F7";
+}
+.mdi-hiking::before {
+  content: "\FD5B";
+}
+.mdi-hinduism::before {
+  content: "\F972";
+}
+.mdi-history::before {
+  content: "\F2DA";
+}
+.mdi-hockey-puck::before {
+  content: "\F878";
+}
+.mdi-hockey-sticks::before {
+  content: "\F879";
+}
+.mdi-hololens::before {
+  content: "\F2DB";
+}
+.mdi-home::before {
+  content: "\F2DC";
+}
+.mdi-home-account::before {
+  content: "\F825";
+}
+.mdi-home-alert::before {
+  content: "\F87A";
+}
+.mdi-home-analytics::before {
+  content: "\FED7";
+}
+.mdi-home-assistant::before {
+  content: "\F7CF";
+}
+.mdi-home-automation::before {
+  content: "\F7D0";
+}
+.mdi-home-circle::before {
+  content: "\F7D1";
+}
+.mdi-home-circle-outline::before {
+  content: "\F006F";
+}
+.mdi-home-city::before {
+  content: "\FCF1";
+}
+.mdi-home-city-outline::before {
+  content: "\FCF2";
+}
+.mdi-home-currency-usd::before {
+  content: "\F8AE";
+}
+.mdi-home-edit::before {
+  content: "\F0184";
+}
+.mdi-home-edit-outline::before {
+  content: "\F0185";
+}
+.mdi-home-export-outline::before {
+  content: "\FFB8";
+}
+.mdi-home-flood::before {
+  content: "\FF17";
+}
+.mdi-home-floor-0::before {
+  content: "\FDAE";
+}
+.mdi-home-floor-1::before {
+  content: "\FD5C";
+}
+.mdi-home-floor-2::before {
+  content: "\FD5D";
+}
+.mdi-home-floor-3::before {
+  content: "\FD5E";
+}
+.mdi-home-floor-a::before {
+  content: "\FD5F";
+}
+.mdi-home-floor-b::before {
+  content: "\FD60";
+}
+.mdi-home-floor-g::before {
+  content: "\FD61";
+}
+.mdi-home-floor-l::before {
+  content: "\FD62";
+}
+.mdi-home-floor-negative-1::before {
+  content: "\FDAF";
+}
+.mdi-home-group::before {
+  content: "\FDB0";
+}
+.mdi-home-heart::before {
+  content: "\F826";
+}
+.mdi-home-import-outline::before {
+  content: "\FFB9";
+}
+.mdi-home-lightbulb::before {
+  content: "\F027C";
+}
+.mdi-home-lightbulb-outline::before {
+  content: "\F027D";
+}
+.mdi-home-lock::before {
+  content: "\F8EA";
+}
+.mdi-home-lock-open::before {
+  content: "\F8EB";
+}
+.mdi-home-map-marker::before {
+  content: "\F5F8";
+}
+.mdi-home-minus::before {
+  content: "\F973";
+}
+.mdi-home-modern::before {
+  content: "\F2DD";
+}
+.mdi-home-outline::before {
+  content: "\F6A0";
+}
+.mdi-home-plus::before {
+  content: "\F974";
+}
+.mdi-home-remove::before {
+  content: "\F0272";
+}
+.mdi-home-roof::before {
+  content: "\F0156";
+}
+.mdi-home-thermometer::before {
+  content: "\FF71";
+}
+.mdi-home-thermometer-outline::before {
+  content: "\FF72";
+}
+.mdi-home-variant::before {
+  content: "\F2DE";
+}
+.mdi-home-variant-outline::before {
+  content: "\FB83";
+}
+.mdi-hook::before {
+  content: "\F6E1";
+}
+.mdi-hook-off::before {
+  content: "\F6E2";
+}
+.mdi-hops::before {
+  content: "\F2DF";
+}
+.mdi-horizontal-rotate-clockwise::before {
+  content: "\F011E";
+}
+.mdi-horizontal-rotate-counterclockwise::before {
+  content: "\F011F";
+}
+.mdi-horseshoe::before {
+  content: "\FA57";
+}
+.mdi-hospital::before {
+  content: "\F0017";
+}
+.mdi-hospital-box::before {
+  content: "\F2E0";
+}
+.mdi-hospital-box-outline::before {
+  content: "\F0018";
+}
+.mdi-hospital-building::before {
+  content: "\F2E1";
+}
+.mdi-hospital-marker::before {
+  content: "\F2E2";
+}
+.mdi-hot-tub::before {
+  content: "\F827";
+}
+.mdi-hotel::before {
+  content: "\F2E3";
+}
+.mdi-houzz::before {
+  content: "\F2E4";
+}
+.mdi-houzz-box::before {
+  content: "\F2E5";
+}
+.mdi-hubspot::before {
+  content: "\FCF3";
+}
+.mdi-hulu::before {
+  content: "\F828";
+}
+.mdi-human::before {
+  content: "\F2E6";
+}
+.mdi-human-child::before {
+  content: "\F2E7";
+}
+.mdi-human-female::before {
+  content: "\F649";
+}
+.mdi-human-female-boy::before {
+  content: "\FA58";
+}
+.mdi-human-female-female::before {
+  content: "\FA59";
+}
+.mdi-human-female-girl::before {
+  content: "\FA5A";
+}
+.mdi-human-greeting::before {
+  content: "\F64A";
+}
+.mdi-human-handsdown::before {
+  content: "\F64B";
+}
+.mdi-human-handsup::before {
+  content: "\F64C";
+}
+.mdi-human-male::before {
+  content: "\F64D";
+}
+.mdi-human-male-boy::before {
+  content: "\FA5B";
+}
+.mdi-human-male-female::before {
+  content: "\F2E8";
+}
+.mdi-human-male-girl::before {
+  content: "\FA5C";
+}
+.mdi-human-male-height::before {
+  content: "\FF18";
+}
+.mdi-human-male-height-variant::before {
+  content: "\FF19";
+}
+.mdi-human-male-male::before {
+  content: "\FA5D";
+}
+.mdi-human-pregnant::before {
+  content: "\F5CF";
+}
+.mdi-humble-bundle::before {
+  content: "\F743";
+}
+.mdi-hvac::before {
+  content: "\F037D";
+}
+.mdi-hydraulic-oil-level::before {
+  content: "\F034F";
+}
+.mdi-hydraulic-oil-temperature::before {
+  content: "\F0350";
+}
+.mdi-hydro-power::before {
+  content: "\F0310";
+}
+.mdi-ice-cream::before {
+  content: "\F829";
+}
+.mdi-ice-pop::before {
+  content: "\FF1A";
+}
+.mdi-id-card::before {
+  content: "\FFE0";
+}
+.mdi-identifier::before {
+  content: "\FF1B";
+}
+.mdi-ideogram-cjk::before {
+  content: "\F035C";
+}
+.mdi-ideogram-cjk-variant::before {
+  content: "\F035D";
+}
+.mdi-iframe::before {
+  content: "\FC67";
+}
+.mdi-iframe-array::before {
+  content: "\F0120";
+}
+.mdi-iframe-array-outline::before {
+  content: "\F0121";
+}
+.mdi-iframe-braces::before {
+  content: "\F0122";
+}
+.mdi-iframe-braces-outline::before {
+  content: "\F0123";
+}
+.mdi-iframe-outline::before {
+  content: "\FC68";
+}
+.mdi-iframe-parentheses::before {
+  content: "\F0124";
+}
+.mdi-iframe-parentheses-outline::before {
+  content: "\F0125";
+}
+.mdi-iframe-variable::before {
+  content: "\F0126";
+}
+.mdi-iframe-variable-outline::before {
+  content: "\F0127";
+}
+.mdi-image::before {
+  content: "\F2E9";
+}
+.mdi-image-album::before {
+  content: "\F2EA";
+}
+.mdi-image-area::before {
+  content: "\F2EB";
+}
+.mdi-image-area-close::before {
+  content: "\F2EC";
+}
+.mdi-image-auto-adjust::before {
+  content: "\FFE1";
+}
+.mdi-image-broken::before {
+  content: "\F2ED";
+}
+.mdi-image-broken-variant::before {
+  content: "\F2EE";
+}
+.mdi-image-edit::before {
+  content: "\F020E";
+}
+.mdi-image-edit-outline::before {
+  content: "\F020F";
+}
+.mdi-image-filter::before {
+  content: "\F2EF";
+}
+.mdi-image-filter-black-white::before {
+  content: "\F2F0";
+}
+.mdi-image-filter-center-focus::before {
+  content: "\F2F1";
+}
+.mdi-image-filter-center-focus-strong::before {
+  content: "\FF1C";
+}
+.mdi-image-filter-center-focus-strong-outline::before {
+  content: "\FF1D";
+}
+.mdi-image-filter-center-focus-weak::before {
+  content: "\F2F2";
+}
+.mdi-image-filter-drama::before {
+  content: "\F2F3";
+}
+.mdi-image-filter-frames::before {
+  content: "\F2F4";
+}
+.mdi-image-filter-hdr::before {
+  content: "\F2F5";
+}
+.mdi-image-filter-none::before {
+  content: "\F2F6";
+}
+.mdi-image-filter-tilt-shift::before {
+  content: "\F2F7";
+}
+.mdi-image-filter-vintage::before {
+  content: "\F2F8";
+}
+.mdi-image-frame::before {
+  content: "\FE8A";
+}
+.mdi-image-move::before {
+  content: "\F9F7";
+}
+.mdi-image-multiple::before {
+  content: "\F2F9";
+}
+.mdi-image-off::before {
+  content: "\F82A";
+}
+.mdi-image-off-outline::before {
+  content: "\F01FC";
+}
+.mdi-image-outline::before {
+  content: "\F975";
+}
+.mdi-image-plus::before {
+  content: "\F87B";
+}
+.mdi-image-search::before {
+  content: "\F976";
+}
+.mdi-image-search-outline::before {
+  content: "\F977";
+}
+.mdi-image-size-select-actual::before {
+  content: "\FC69";
+}
+.mdi-image-size-select-large::before {
+  content: "\FC6A";
+}
+.mdi-image-size-select-small::before {
+  content: "\FC6B";
+}
+.mdi-import::before {
+  content: "\F2FA";
+}
+.mdi-inbox::before {
+  content: "\F686";
+}
+.mdi-inbox-arrow-down::before {
+  content: "\F2FB";
+}
+.mdi-inbox-arrow-down-outline::before {
+  content: "\F029B";
+}
+.mdi-inbox-arrow-up::before {
+  content: "\F3D1";
+}
+.mdi-inbox-arrow-up-outline::before {
+  content: "\F029C";
+}
+.mdi-inbox-full::before {
+  content: "\F029D";
+}
+.mdi-inbox-full-outline::before {
+  content: "\F029E";
+}
+.mdi-inbox-multiple::before {
+  content: "\F8AF";
+}
+.mdi-inbox-multiple-outline::before {
+  content: "\FB84";
+}
+.mdi-inbox-outline::before {
+  content: "\F029F";
+}
+.mdi-incognito::before {
+  content: "\F5F9";
+}
+.mdi-infinity::before {
+  content: "\F6E3";
+}
+.mdi-information::before {
+  content: "\F2FC";
+}
+.mdi-information-outline::before {
+  content: "\F2FD";
+}
+.mdi-information-variant::before {
+  content: "\F64E";
+}
+.mdi-instagram::before {
+  content: "\F2FE";
+}
+.mdi-instapaper::before {
+  content: "\F2FF";
+}
+.mdi-instrument-triangle::before {
+  content: "\F0070";
+}
+.mdi-internet-explorer::before {
+  content: "\F300";
+}
+.mdi-invert-colors::before {
+  content: "\F301";
+}
+.mdi-invert-colors-off::before {
+  content: "\FE8B";
+}
+.mdi-iobroker::before {
+  content: "\F0313";
+}
+.mdi-ip::before {
+  content: "\FA5E";
+}
+.mdi-ip-network::before {
+  content: "\FA5F";
+}
+.mdi-ip-network-outline::before {
+  content: "\FC6C";
+}
+.mdi-ipod::before {
+  content: "\FC6D";
+}
+.mdi-islam::before {
+  content: "\F978";
+}
+.mdi-island::before {
+  content: "\F0071";
+}
+.mdi-itunes::before {
+  content: "\F676";
+}
+.mdi-iv-bag::before {
+  content: "\F00E4";
+}
+.mdi-jabber::before {
+  content: "\FDB1";
+}
+.mdi-jeepney::before {
+  content: "\F302";
+}
+.mdi-jellyfish::before {
+  content: "\FF1E";
+}
+.mdi-jellyfish-outline::before {
+  content: "\FF1F";
+}
+.mdi-jira::before {
+  content: "\F303";
+}
+.mdi-jquery::before {
+  content: "\F87C";
+}
+.mdi-jsfiddle::before {
+  content: "\F304";
+}
+.mdi-json::before {
+  content: "\F626";
+}
+.mdi-judaism::before {
+  content: "\F979";
+}
+.mdi-jump-rope::before {
+  content: "\F032A";
+}
+.mdi-kabaddi::before {
+  content: "\FD63";
+}
+.mdi-karate::before {
+  content: "\F82B";
+}
+.mdi-keg::before {
+  content: "\F305";
+}
+.mdi-kettle::before {
+  content: "\F5FA";
+}
+.mdi-kettle-alert::before {
+  content: "\F0342";
+}
+.mdi-kettle-alert-outline::before {
+  content: "\F0343";
+}
+.mdi-kettle-off::before {
+  content: "\F0346";
+}
+.mdi-kettle-off-outline::before {
+  content: "\F0347";
+}
+.mdi-kettle-outline::before {
+  content: "\FF73";
+}
+.mdi-kettle-steam::before {
+  content: "\F0344";
+}
+.mdi-kettle-steam-outline::before {
+  content: "\F0345";
+}
+.mdi-kettlebell::before {
+  content: "\F032B";
+}
+.mdi-key::before {
+  content: "\F306";
+}
+.mdi-key-arrow-right::before {
+  content: "\F033D";
+}
+.mdi-key-change::before {
+  content: "\F307";
+}
+.mdi-key-link::before {
+  content: "\F01CA";
+}
+.mdi-key-minus::before {
+  content: "\F308";
+}
+.mdi-key-outline::before {
+  content: "\FDB2";
+}
+.mdi-key-plus::before {
+  content: "\F309";
+}
+.mdi-key-remove::before {
+  content: "\F30A";
+}
+.mdi-key-star::before {
+  content: "\F01C9";
+}
+.mdi-key-variant::before {
+  content: "\F30B";
+}
+.mdi-key-wireless::before {
+  content: "\FFE2";
+}
+.mdi-keyboard::before {
+  content: "\F30C";
+}
+.mdi-keyboard-backspace::before {
+  content: "\F30D";
+}
+.mdi-keyboard-caps::before {
+  content: "\F30E";
+}
+.mdi-keyboard-close::before {
+  content: "\F30F";
+}
+.mdi-keyboard-esc::before {
+  content: "\F02E2";
+}
+.mdi-keyboard-f1::before {
+  content: "\F02D6";
+}
+.mdi-keyboard-f10::before {
+  content: "\F02DF";
+}
+.mdi-keyboard-f11::before {
+  content: "\F02E0";
+}
+.mdi-keyboard-f12::before {
+  content: "\F02E1";
+}
+.mdi-keyboard-f2::before {
+  content: "\F02D7";
+}
+.mdi-keyboard-f3::before {
+  content: "\F02D8";
+}
+.mdi-keyboard-f4::before {
+  content: "\F02D9";
+}
+.mdi-keyboard-f5::before {
+  content: "\F02DA";
+}
+.mdi-keyboard-f6::before {
+  content: "\F02DB";
+}
+.mdi-keyboard-f7::before {
+  content: "\F02DC";
+}
+.mdi-keyboard-f8::before {
+  content: "\F02DD";
+}
+.mdi-keyboard-f9::before {
+  content: "\F02DE";
+}
+.mdi-keyboard-off::before {
+  content: "\F310";
+}
+.mdi-keyboard-off-outline::before {
+  content: "\FE8C";
+}
+.mdi-keyboard-outline::before {
+  content: "\F97A";
+}
+.mdi-keyboard-return::before {
+  content: "\F311";
+}
+.mdi-keyboard-settings::before {
+  content: "\F9F8";
+}
+.mdi-keyboard-settings-outline::before {
+  content: "\F9F9";
+}
+.mdi-keyboard-space::before {
+  content: "\F0072";
+}
+.mdi-keyboard-tab::before {
+  content: "\F312";
+}
+.mdi-keyboard-variant::before {
+  content: "\F313";
+}
+.mdi-khanda::before {
+  content: "\F0128";
+}
+.mdi-kickstarter::before {
+  content: "\F744";
+}
+.mdi-klingon::before {
+  content: "\F0386";
+}
+.mdi-knife::before {
+  content: "\F9FA";
+}
+.mdi-knife-military::before {
+  content: "\F9FB";
+}
+.mdi-kodi::before {
+  content: "\F314";
+}
+.mdi-kotlin::before {
+  content: "\F0244";
+}
+.mdi-kubernetes::before {
+  content: "\F0129";
+}
+.mdi-label::before {
+  content: "\F315";
+}
+.mdi-label-multiple::before {
+  content: "\F03A0";
+}
+.mdi-label-multiple-outline::before {
+  content: "\F03A1";
+}
+.mdi-label-off::before {
+  content: "\FACA";
+}
+.mdi-label-off-outline::before {
+  content: "\FACB";
+}
+.mdi-label-outline::before {
+  content: "\F316";
+}
+.mdi-label-percent::before {
+  content: "\F0315";
+}
+.mdi-label-percent-outline::before {
+  content: "\F0316";
+}
+.mdi-label-variant::before {
+  content: "\FACC";
+}
+.mdi-label-variant-outline::before {
+  content: "\FACD";
+}
+.mdi-ladybug::before {
+  content: "\F82C";
+}
+.mdi-lambda::before {
+  content: "\F627";
+}
+.mdi-lamp::before {
+  content: "\F6B4";
+}
+.mdi-lan::before {
+  content: "\F317";
+}
+.mdi-lan-check::before {
+  content: "\F02D5";
+}
+.mdi-lan-connect::before {
+  content: "\F318";
+}
+.mdi-lan-disconnect::before {
+  content: "\F319";
+}
+.mdi-lan-pending::before {
+  content: "\F31A";
+}
+.mdi-language-c::before {
+  content: "\F671";
+}
+.mdi-language-cpp::before {
+  content: "\F672";
+}
+.mdi-language-csharp::before {
+  content: "\F31B";
+}
+.mdi-language-css3::before {
+  content: "\F31C";
+}
+.mdi-language-fortran::before {
+  content: "\F0245";
+}
+.mdi-language-go::before {
+  content: "\F7D2";
+}
+.mdi-language-haskell::before {
+  content: "\FC6E";
+}
+.mdi-language-html5::before {
+  content: "\F31D";
+}
+.mdi-language-java::before {
+  content: "\FB1C";
+}
+.mdi-language-javascript::before {
+  content: "\F31E";
+}
+.mdi-language-lua::before {
+  content: "\F8B0";
+}
+.mdi-language-php::before {
+  content: "\F31F";
+}
+.mdi-language-python::before {
+  content: "\F320";
+}
+.mdi-language-python-text::before {
+  content: "\F321";
+}
+.mdi-language-r::before {
+  content: "\F7D3";
+}
+.mdi-language-ruby-on-rails::before {
+  content: "\FACE";
+}
+.mdi-language-swift::before {
+  content: "\F6E4";
+}
+.mdi-language-typescript::before {
+  content: "\F6E5";
+}
+.mdi-laptop::before {
+  content: "\F322";
+}
+.mdi-laptop-chromebook::before {
+  content: "\F323";
+}
+.mdi-laptop-mac::before {
+  content: "\F324";
+}
+.mdi-laptop-off::before {
+  content: "\F6E6";
+}
+.mdi-laptop-windows::before {
+  content: "\F325";
+}
+.mdi-laravel::before {
+  content: "\FACF";
+}
+.mdi-lasso::before {
+  content: "\FF20";
+}
+.mdi-lastfm::before {
+  content: "\F326";
+}
+.mdi-lastpass::before {
+  content: "\F446";
+}
+.mdi-latitude::before {
+  content: "\FF74";
+}
+.mdi-launch::before {
+  content: "\F327";
+}
+.mdi-lava-lamp::before {
+  content: "\F7D4";
+}
+.mdi-layers::before {
+  content: "\F328";
+}
+.mdi-layers-minus::before {
+  content: "\FE8D";
+}
+.mdi-layers-off::before {
+  content: "\F329";
+}
+.mdi-layers-off-outline::before {
+  content: "\F9FC";
+}
+.mdi-layers-outline::before {
+  content: "\F9FD";
+}
+.mdi-layers-plus::before {
+  content: "\FE30";
+}
+.mdi-layers-remove::before {
+  content: "\FE31";
+}
+.mdi-layers-search::before {
+  content: "\F0231";
+}
+.mdi-layers-search-outline::before {
+  content: "\F0232";
+}
+.mdi-layers-triple::before {
+  content: "\FF75";
+}
+.mdi-layers-triple-outline::before {
+  content: "\FF76";
+}
+.mdi-lead-pencil::before {
+  content: "\F64F";
+}
+.mdi-leaf::before {
+  content: "\F32A";
+}
+.mdi-leaf-maple::before {
+  content: "\FC6F";
+}
+.mdi-leaf-maple-off::before {
+  content: "\F0305";
+}
+.mdi-leaf-off::before {
+  content: "\F0304";
+}
+.mdi-leak::before {
+  content: "\FDB3";
+}
+.mdi-leak-off::before {
+  content: "\FDB4";
+}
+.mdi-led-off::before {
+  content: "\F32B";
+}
+.mdi-led-on::before {
+  content: "\F32C";
+}
+.mdi-led-outline::before {
+  content: "\F32D";
+}
+.mdi-led-strip::before {
+  content: "\F7D5";
+}
+.mdi-led-strip-variant::before {
+  content: "\F0073";
+}
+.mdi-led-variant-off::before {
+  content: "\F32E";
+}
+.mdi-led-variant-on::before {
+  content: "\F32F";
+}
+.mdi-led-variant-outline::before {
+  content: "\F330";
+}
+.mdi-leek::before {
+  content: "\F01A8";
+}
+.mdi-less-than::before {
+  content: "\F97B";
+}
+.mdi-less-than-or-equal::before {
+  content: "\F97C";
+}
+.mdi-library::before {
+  content: "\F331";
+}
+.mdi-library-books::before {
+  content: "\F332";
+}
+.mdi-library-movie::before {
+  content: "\FCF4";
+}
+.mdi-library-music::before {
+  content: "\F333";
+}
+.mdi-library-music-outline::before {
+  content: "\FF21";
+}
+.mdi-library-shelves::before {
+  content: "\FB85";
+}
+.mdi-library-video::before {
+  content: "\FCF5";
+}
+.mdi-license::before {
+  content: "\FFE3";
+}
+.mdi-lifebuoy::before {
+  content: "\F87D";
+}
+.mdi-light-switch::before {
+  content: "\F97D";
+}
+.mdi-lightbulb::before {
+  content: "\F335";
+}
+.mdi-lightbulb-cfl::before {
+  content: "\F0233";
+}
+.mdi-lightbulb-cfl-off::before {
+  content: "\F0234";
+}
+.mdi-lightbulb-cfl-spiral::before {
+  content: "\F02A0";
+}
+.mdi-lightbulb-cfl-spiral-off::before {
+  content: "\F02EE";
+}
+.mdi-lightbulb-group::before {
+  content: "\F027E";
+}
+.mdi-lightbulb-group-off::before {
+  content: "\F02F8";
+}
+.mdi-lightbulb-group-off-outline::before {
+  content: "\F02F9";
+}
+.mdi-lightbulb-group-outline::before {
+  content: "\F027F";
+}
+.mdi-lightbulb-multiple::before {
+  content: "\F0280";
+}
+.mdi-lightbulb-multiple-off::before {
+  content: "\F02FA";
+}
+.mdi-lightbulb-multiple-off-outline::before {
+  content: "\F02FB";
+}
+.mdi-lightbulb-multiple-outline::before {
+  content: "\F0281";
+}
+.mdi-lightbulb-off::before {
+  content: "\FE32";
+}
+.mdi-lightbulb-off-outline::before {
+  content: "\FE33";
+}
+.mdi-lightbulb-on::before {
+  content: "\F6E7";
+}
+.mdi-lightbulb-on-outline::before {
+  content: "\F6E8";
+}
+.mdi-lightbulb-outline::before {
+  content: "\F336";
+}
+.mdi-lighthouse::before {
+  content: "\F9FE";
+}
+.mdi-lighthouse-on::before {
+  content: "\F9FF";
+}
+.mdi-link::before {
+  content: "\F337";
+}
+.mdi-link-box::before {
+  content: "\FCF6";
+}
+.mdi-link-box-outline::before {
+  content: "\FCF7";
+}
+.mdi-link-box-variant::before {
+  content: "\FCF8";
+}
+.mdi-link-box-variant-outline::before {
+  content: "\FCF9";
+}
+.mdi-link-lock::before {
+  content: "\F00E5";
+}
+.mdi-link-off::before {
+  content: "\F338";
+}
+.mdi-link-plus::before {
+  content: "\FC70";
+}
+.mdi-link-variant::before {
+  content: "\F339";
+}
+.mdi-link-variant-minus::before {
+  content: "\F012A";
+}
+.mdi-link-variant-off::before {
+  content: "\F33A";
+}
+.mdi-link-variant-plus::before {
+  content: "\F012B";
+}
+.mdi-link-variant-remove::before {
+  content: "\F012C";
+}
+.mdi-linkedin::before {
+  content: "\F33B";
+}
+.mdi-linkedin-box::before {
+  content: "\F33C";
+}
+.mdi-linux::before {
+  content: "\F33D";
+}
+.mdi-linux-mint::before {
+  content: "\F8EC";
+}
+.mdi-litecoin::before {
+  content: "\FA60";
+}
+.mdi-loading::before {
+  content: "\F771";
+}
+.mdi-location-enter::before {
+  content: "\FFE4";
+}
+.mdi-location-exit::before {
+  content: "\FFE5";
+}
+.mdi-lock::before {
+  content: "\F33E";
+}
+.mdi-lock-alert::before {
+  content: "\F8ED";
+}
+.mdi-lock-clock::before {
+  content: "\F97E";
+}
+.mdi-lock-open::before {
+  content: "\F33F";
+}
+.mdi-lock-open-outline::before {
+  content: "\F340";
+}
+.mdi-lock-open-variant::before {
+  content: "\FFE6";
+}
+.mdi-lock-open-variant-outline::before {
+  content: "\FFE7";
+}
+.mdi-lock-outline::before {
+  content: "\F341";
+}
+.mdi-lock-pattern::before {
+  content: "\F6E9";
+}
+.mdi-lock-plus::before {
+  content: "\F5FB";
+}
+.mdi-lock-question::before {
+  content: "\F8EE";
+}
+.mdi-lock-reset::before {
+  content: "\F772";
+}
+.mdi-lock-smart::before {
+  content: "\F8B1";
+}
+.mdi-locker::before {
+  content: "\F7D6";
+}
+.mdi-locker-multiple::before {
+  content: "\F7D7";
+}
+.mdi-login::before {
+  content: "\F342";
+}
+.mdi-login-variant::before {
+  content: "\F5FC";
+}
+.mdi-logout::before {
+  content: "\F343";
+}
+.mdi-logout-variant::before {
+  content: "\F5FD";
+}
+.mdi-longitude::before {
+  content: "\FF77";
+}
+.mdi-looks::before {
+  content: "\F344";
+}
+.mdi-loupe::before {
+  content: "\F345";
+}
+.mdi-lumx::before {
+  content: "\F346";
+}
+.mdi-lungs::before {
+  content: "\F00AF";
+}
+.mdi-lyft::before {
+  content: "\FB1D";
+}
+.mdi-magnet::before {
+  content: "\F347";
+}
+.mdi-magnet-on::before {
+  content: "\F348";
+}
+.mdi-magnify::before {
+  content: "\F349";
+}
+.mdi-magnify-close::before {
+  content: "\F97F";
+}
+.mdi-magnify-minus::before {
+  content: "\F34A";
+}
+.mdi-magnify-minus-cursor::before {
+  content: "\FA61";
+}
+.mdi-magnify-minus-outline::before {
+  content: "\F6EB";
+}
+.mdi-magnify-plus::before {
+  content: "\F34B";
+}
+.mdi-magnify-plus-cursor::before {
+  content: "\FA62";
+}
+.mdi-magnify-plus-outline::before {
+  content: "\F6EC";
+}
+.mdi-magnify-remove-cursor::before {
+  content: "\F0237";
+}
+.mdi-magnify-remove-outline::before {
+  content: "\F0238";
+}
+.mdi-magnify-scan::before {
+  content: "\F02A1";
+}
+.mdi-mail::before {
+  content: "\FED8";
+}
+.mdi-mail-ru::before {
+  content: "\F34C";
+}
+.mdi-mailbox::before {
+  content: "\F6ED";
+}
+.mdi-mailbox-open::before {
+  content: "\FD64";
+}
+.mdi-mailbox-open-outline::before {
+  content: "\FD65";
+}
+.mdi-mailbox-open-up::before {
+  content: "\FD66";
+}
+.mdi-mailbox-open-up-outline::before {
+  content: "\FD67";
+}
+.mdi-mailbox-outline::before {
+  content: "\FD68";
+}
+.mdi-mailbox-up::before {
+  content: "\FD69";
+}
+.mdi-mailbox-up-outline::before {
+  content: "\FD6A";
+}
+.mdi-map::before {
+  content: "\F34D";
+}
+.mdi-map-check::before {
+  content: "\FED9";
+}
+.mdi-map-check-outline::before {
+  content: "\FEDA";
+}
+.mdi-map-clock::before {
+  content: "\FCFA";
+}
+.mdi-map-clock-outline::before {
+  content: "\FCFB";
+}
+.mdi-map-legend::before {
+  content: "\FA00";
+}
+.mdi-map-marker::before {
+  content: "\F34E";
+}
+.mdi-map-marker-alert::before {
+  content: "\FF22";
+}
+.mdi-map-marker-alert-outline::before {
+  content: "\FF23";
+}
+.mdi-map-marker-check::before {
+  content: "\FC71";
+}
+.mdi-map-marker-check-outline::before {
+  content: "\F0326";
+}
+.mdi-map-marker-circle::before {
+  content: "\F34F";
+}
+.mdi-map-marker-distance::before {
+  content: "\F8EF";
+}
+.mdi-map-marker-down::before {
+  content: "\F012D";
+}
+.mdi-map-marker-left::before {
+  content: "\F0306";
+}
+.mdi-map-marker-left-outline::before {
+  content: "\F0308";
+}
+.mdi-map-marker-minus::before {
+  content: "\F650";
+}
+.mdi-map-marker-minus-outline::before {
+  content: "\F0324";
+}
+.mdi-map-marker-multiple::before {
+  content: "\F350";
+}
+.mdi-map-marker-multiple-outline::before {
+  content: "\F02A2";
+}
+.mdi-map-marker-off::before {
+  content: "\F351";
+}
+.mdi-map-marker-off-outline::before {
+  content: "\F0328";
+}
+.mdi-map-marker-outline::before {
+  content: "\F7D8";
+}
+.mdi-map-marker-path::before {
+  content: "\FCFC";
+}
+.mdi-map-marker-plus::before {
+  content: "\F651";
+}
+.mdi-map-marker-plus-outline::before {
+  content: "\F0323";
+}
+.mdi-map-marker-question::before {
+  content: "\FF24";
+}
+.mdi-map-marker-question-outline::before {
+  content: "\FF25";
+}
+.mdi-map-marker-radius::before {
+  content: "\F352";
+}
+.mdi-map-marker-radius-outline::before {
+  content: "\F0327";
+}
+.mdi-map-marker-remove::before {
+  content: "\FF26";
+}
+.mdi-map-marker-remove-outline::before {
+  content: "\F0325";
+}
+.mdi-map-marker-remove-variant::before {
+  content: "\FF27";
+}
+.mdi-map-marker-right::before {
+  content: "\F0307";
+}
+.mdi-map-marker-right-outline::before {
+  content: "\F0309";
+}
+.mdi-map-marker-up::before {
+  content: "\F012E";
+}
+.mdi-map-minus::before {
+  content: "\F980";
+}
+.mdi-map-outline::before {
+  content: "\F981";
+}
+.mdi-map-plus::before {
+  content: "\F982";
+}
+.mdi-map-search::before {
+  content: "\F983";
+}
+.mdi-map-search-outline::before {
+  content: "\F984";
+}
+.mdi-mapbox::before {
+  content: "\FB86";
+}
+.mdi-margin::before {
+  content: "\F353";
+}
+.mdi-markdown::before {
+  content: "\F354";
+}
+.mdi-markdown-outline::before {
+  content: "\FF78";
+}
+.mdi-marker::before {
+  content: "\F652";
+}
+.mdi-marker-cancel::before {
+  content: "\FDB5";
+}
+.mdi-marker-check::before {
+  content: "\F355";
+}
+.mdi-mastodon::before {
+  content: "\FAD0";
+}
+.mdi-mastodon-variant::before {
+  content: "\FAD1";
+}
+.mdi-material-design::before {
+  content: "\F985";
+}
+.mdi-material-ui::before {
+  content: "\F357";
+}
+.mdi-math-compass::before {
+  content: "\F358";
+}
+.mdi-math-cos::before {
+  content: "\FC72";
+}
+.mdi-math-integral::before {
+  content: "\FFE8";
+}
+.mdi-math-integral-box::before {
+  content: "\FFE9";
+}
+.mdi-math-log::before {
+  content: "\F00B0";
+}
+.mdi-math-norm::before {
+  content: "\FFEA";
+}
+.mdi-math-norm-box::before {
+  content: "\FFEB";
+}
+.mdi-math-sin::before {
+  content: "\FC73";
+}
+.mdi-math-tan::before {
+  content: "\FC74";
+}
+.mdi-matrix::before {
+  content: "\F628";
+}
+.mdi-medal::before {
+  content: "\F986";
+}
+.mdi-medal-outline::before {
+  content: "\F0351";
+}
+.mdi-medical-bag::before {
+  content: "\F6EE";
+}
+.mdi-meditation::before {
+  content: "\F01A6";
+}
+.mdi-medium::before {
+  content: "\F35A";
+}
+.mdi-meetup::before {
+  content: "\FAD2";
+}
+.mdi-memory::before {
+  content: "\F35B";
+}
+.mdi-menu::before {
+  content: "\F35C";
+}
+.mdi-menu-down::before {
+  content: "\F35D";
+}
+.mdi-menu-down-outline::before {
+  content: "\F6B5";
+}
+.mdi-menu-left::before {
+  content: "\F35E";
+}
+.mdi-menu-left-outline::before {
+  content: "\FA01";
+}
+.mdi-menu-open::before {
+  content: "\FB87";
+}
+.mdi-menu-right::before {
+  content: "\F35F";
+}
+.mdi-menu-right-outline::before {
+  content: "\FA02";
+}
+.mdi-menu-swap::before {
+  content: "\FA63";
+}
+.mdi-menu-swap-outline::before {
+  content: "\FA64";
+}
+.mdi-menu-up::before {
+  content: "\F360";
+}
+.mdi-menu-up-outline::before {
+  content: "\F6B6";
+}
+.mdi-merge::before {
+  content: "\FF79";
+}
+.mdi-message::before {
+  content: "\F361";
+}
+.mdi-message-alert::before {
+  content: "\F362";
+}
+.mdi-message-alert-outline::before {
+  content: "\FA03";
+}
+.mdi-message-arrow-left::before {
+  content: "\F031D";
+}
+.mdi-message-arrow-left-outline::before {
+  content: "\F031E";
+}
+.mdi-message-arrow-right::before {
+  content: "\F031F";
+}
+.mdi-message-arrow-right-outline::before {
+  content: "\F0320";
+}
+.mdi-message-bulleted::before {
+  content: "\F6A1";
+}
+.mdi-message-bulleted-off::before {
+  content: "\F6A2";
+}
+.mdi-message-draw::before {
+  content: "\F363";
+}
+.mdi-message-image::before {
+  content: "\F364";
+}
+.mdi-message-image-outline::before {
+  content: "\F0197";
+}
+.mdi-message-lock::before {
+  content: "\FFEC";
+}
+.mdi-message-lock-outline::before {
+  content: "\F0198";
+}
+.mdi-message-minus::before {
+  content: "\F0199";
+}
+.mdi-message-minus-outline::before {
+  content: "\F019A";
+}
+.mdi-message-outline::before {
+  content: "\F365";
+}
+.mdi-message-plus::before {
+  content: "\F653";
+}
+.mdi-message-plus-outline::before {
+  content: "\F00E6";
+}
+.mdi-message-processing::before {
+  content: "\F366";
+}
+.mdi-message-processing-outline::before {
+  content: "\F019B";
+}
+.mdi-message-reply::before {
+  content: "\F367";
+}
+.mdi-message-reply-text::before {
+  content: "\F368";
+}
+.mdi-message-settings::before {
+  content: "\F6EF";
+}
+.mdi-message-settings-outline::before {
+  content: "\F019C";
+}
+.mdi-message-settings-variant::before {
+  content: "\F6F0";
+}
+.mdi-message-settings-variant-outline::before {
+  content: "\F019D";
+}
+.mdi-message-text::before {
+  content: "\F369";
+}
+.mdi-message-text-clock::before {
+  content: "\F019E";
+}
+.mdi-message-text-clock-outline::before {
+  content: "\F019F";
+}
+.mdi-message-text-lock::before {
+  content: "\FFED";
+}
+.mdi-message-text-lock-outline::before {
+  content: "\F01A0";
+}
+.mdi-message-text-outline::before {
+  content: "\F36A";
+}
+.mdi-message-video::before {
+  content: "\F36B";
+}
+.mdi-meteor::before {
+  content: "\F629";
+}
+.mdi-metronome::before {
+  content: "\F7D9";
+}
+.mdi-metronome-tick::before {
+  content: "\F7DA";
+}
+.mdi-micro-sd::before {
+  content: "\F7DB";
+}
+.mdi-microphone::before {
+  content: "\F36C";
+}
+.mdi-microphone-minus::before {
+  content: "\F8B2";
+}
+.mdi-microphone-off::before {
+  content: "\F36D";
+}
+.mdi-microphone-outline::before {
+  content: "\F36E";
+}
+.mdi-microphone-plus::before {
+  content: "\F8B3";
+}
+.mdi-microphone-settings::before {
+  content: "\F36F";
+}
+.mdi-microphone-variant::before {
+  content: "\F370";
+}
+.mdi-microphone-variant-off::before {
+  content: "\F371";
+}
+.mdi-microscope::before {
+  content: "\F654";
+}
+.mdi-microsoft::before {
+  content: "\F372";
+}
+.mdi-microsoft-dynamics::before {
+  content: "\F987";
+}
+.mdi-microwave::before {
+  content: "\FC75";
+}
+.mdi-middleware::before {
+  content: "\FF7A";
+}
+.mdi-middleware-outline::before {
+  content: "\FF7B";
+}
+.mdi-midi::before {
+  content: "\F8F0";
+}
+.mdi-midi-port::before {
+  content: "\F8F1";
+}
+.mdi-mine::before {
+  content: "\FDB6";
+}
+.mdi-minecraft::before {
+  content: "\F373";
+}
+.mdi-mini-sd::before {
+  content: "\FA04";
+}
+.mdi-minidisc::before {
+  content: "\FA05";
+}
+.mdi-minus::before {
+  content: "\F374";
+}
+.mdi-minus-box::before {
+  content: "\F375";
+}
+.mdi-minus-box-multiple::before {
+  content: "\F016C";
+}
+.mdi-minus-box-multiple-outline::before {
+  content: "\F016D";
+}
+.mdi-minus-box-outline::before {
+  content: "\F6F1";
+}
+.mdi-minus-circle::before {
+  content: "\F376";
+}
+.mdi-minus-circle-outline::before {
+  content: "\F377";
+}
+.mdi-minus-network::before {
+  content: "\F378";
+}
+.mdi-minus-network-outline::before {
+  content: "\FC76";
+}
+.mdi-mirror::before {
+  content: "\F0228";
+}
+.mdi-mixcloud::before {
+  content: "\F62A";
+}
+.mdi-mixed-martial-arts::before {
+  content: "\FD6B";
+}
+.mdi-mixed-reality::before {
+  content: "\F87E";
+}
+.mdi-mixer::before {
+  content: "\F7DC";
+}
+.mdi-molecule::before {
+  content: "\FB88";
+}
+.mdi-monitor::before {
+  content: "\F379";
+}
+.mdi-monitor-cellphone::before {
+  content: "\F988";
+}
+.mdi-monitor-cellphone-star::before {
+  content: "\F989";
+}
+.mdi-monitor-clean::before {
+  content: "\F012F";
+}
+.mdi-monitor-dashboard::before {
+  content: "\FA06";
+}
+.mdi-monitor-edit::before {
+  content: "\F02F1";
+}
+.mdi-monitor-lock::before {
+  content: "\FDB7";
+}
+.mdi-monitor-multiple::before {
+  content: "\F37A";
+}
+.mdi-monitor-off::before {
+  content: "\FD6C";
+}
+.mdi-monitor-screenshot::before {
+  content: "\FE34";
+}
+.mdi-monitor-speaker::before {
+  content: "\FF7C";
+}
+.mdi-monitor-speaker-off::before {
+  content: "\FF7D";
+}
+.mdi-monitor-star::before {
+  content: "\FDB8";
+}
+.mdi-moon-first-quarter::before {
+  content: "\FF7E";
+}
+.mdi-moon-full::before {
+  content: "\FF7F";
+}
+.mdi-moon-last-quarter::before {
+  content: "\FF80";
+}
+.mdi-moon-new::before {
+  content: "\FF81";
+}
+.mdi-moon-waning-crescent::before {
+  content: "\FF82";
+}
+.mdi-moon-waning-gibbous::before {
+  content: "\FF83";
+}
+.mdi-moon-waxing-crescent::before {
+  content: "\FF84";
+}
+.mdi-moon-waxing-gibbous::before {
+  content: "\FF85";
+}
+.mdi-moped::before {
+  content: "\F00B1";
+}
+.mdi-more::before {
+  content: "\F37B";
+}
+.mdi-mother-heart::before {
+  content: "\F033F";
+}
+.mdi-mother-nurse::before {
+  content: "\FCFD";
+}
+.mdi-motion-sensor::before {
+  content: "\FD6D";
+}
+.mdi-motorbike::before {
+  content: "\F37C";
+}
+.mdi-mouse::before {
+  content: "\F37D";
+}
+.mdi-mouse-bluetooth::before {
+  content: "\F98A";
+}
+.mdi-mouse-off::before {
+  content: "\F37E";
+}
+.mdi-mouse-variant::before {
+  content: "\F37F";
+}
+.mdi-mouse-variant-off::before {
+  content: "\F380";
+}
+.mdi-move-resize::before {
+  content: "\F655";
+}
+.mdi-move-resize-variant::before {
+  content: "\F656";
+}
+.mdi-movie::before {
+  content: "\F381";
+}
+.mdi-movie-edit::before {
+  content: "\F014D";
+}
+.mdi-movie-edit-outline::before {
+  content: "\F014E";
+}
+.mdi-movie-filter::before {
+  content: "\F014F";
+}
+.mdi-movie-filter-outline::before {
+  content: "\F0150";
+}
+.mdi-movie-open::before {
+  content: "\FFEE";
+}
+.mdi-movie-open-outline::before {
+  content: "\FFEF";
+}
+.mdi-movie-outline::before {
+  content: "\FDB9";
+}
+.mdi-movie-roll::before {
+  content: "\F7DD";
+}
+.mdi-movie-search::before {
+  content: "\F01FD";
+}
+.mdi-movie-search-outline::before {
+  content: "\F01FE";
+}
+.mdi-muffin::before {
+  content: "\F98B";
+}
+.mdi-multiplication::before {
+  content: "\F382";
+}
+.mdi-multiplication-box::before {
+  content: "\F383";
+}
+.mdi-mushroom::before {
+  content: "\F7DE";
+}
+.mdi-mushroom-outline::before {
+  content: "\F7DF";
+}
+.mdi-music::before {
+  content: "\F759";
+}
+.mdi-music-accidental-double-flat::before {
+  content: "\FF86";
+}
+.mdi-music-accidental-double-sharp::before {
+  content: "\FF87";
+}
+.mdi-music-accidental-flat::before {
+  content: "\FF88";
+}
+.mdi-music-accidental-natural::before {
+  content: "\FF89";
+}
+.mdi-music-accidental-sharp::before {
+  content: "\FF8A";
+}
+.mdi-music-box::before {
+  content: "\F384";
+}
+.mdi-music-box-outline::before {
+  content: "\F385";
+}
+.mdi-music-circle::before {
+  content: "\F386";
+}
+.mdi-music-circle-outline::before {
+  content: "\FAD3";
+}
+.mdi-music-clef-alto::before {
+  content: "\FF8B";
+}
+.mdi-music-clef-bass::before {
+  content: "\FF8C";
+}
+.mdi-music-clef-treble::before {
+  content: "\FF8D";
+}
+.mdi-music-note::before {
+  content: "\F387";
+}
+.mdi-music-note-bluetooth::before {
+  content: "\F5FE";
+}
+.mdi-music-note-bluetooth-off::before {
+  content: "\F5FF";
+}
+.mdi-music-note-eighth::before {
+  content: "\F388";
+}
+.mdi-music-note-eighth-dotted::before {
+  content: "\FF8E";
+}
+.mdi-music-note-half::before {
+  content: "\F389";
+}
+.mdi-music-note-half-dotted::before {
+  content: "\FF8F";
+}
+.mdi-music-note-off::before {
+  content: "\F38A";
+}
+.mdi-music-note-off-outline::before {
+  content: "\FF90";
+}
+.mdi-music-note-outline::before {
+  content: "\FF91";
+}
+.mdi-music-note-plus::before {
+  content: "\FDBA";
+}
+.mdi-music-note-quarter::before {
+  content: "\F38B";
+}
+.mdi-music-note-quarter-dotted::before {
+  content: "\FF92";
+}
+.mdi-music-note-sixteenth::before {
+  content: "\F38C";
+}
+.mdi-music-note-sixteenth-dotted::before {
+  content: "\FF93";
+}
+.mdi-music-note-whole::before {
+  content: "\F38D";
+}
+.mdi-music-note-whole-dotted::before {
+  content: "\FF94";
+}
+.mdi-music-off::before {
+  content: "\F75A";
+}
+.mdi-music-rest-eighth::before {
+  content: "\FF95";
+}
+.mdi-music-rest-half::before {
+  content: "\FF96";
+}
+.mdi-music-rest-quarter::before {
+  content: "\FF97";
+}
+.mdi-music-rest-sixteenth::before {
+  content: "\FF98";
+}
+.mdi-music-rest-whole::before {
+  content: "\FF99";
+}
+.mdi-nail::before {
+  content: "\FDBB";
+}
+.mdi-nas::before {
+  content: "\F8F2";
+}
+.mdi-nativescript::before {
+  content: "\F87F";
+}
+.mdi-nature::before {
+  content: "\F38E";
+}
+.mdi-nature-people::before {
+  content: "\F38F";
+}
+.mdi-navigation::before {
+  content: "\F390";
+}
+.mdi-near-me::before {
+  content: "\F5CD";
+}
+.mdi-necklace::before {
+  content: "\FF28";
+}
+.mdi-needle::before {
+  content: "\F391";
+}
+.mdi-netflix::before {
+  content: "\F745";
+}
+.mdi-network::before {
+  content: "\F6F2";
+}
+.mdi-network-off::before {
+  content: "\FC77";
+}
+.mdi-network-off-outline::before {
+  content: "\FC78";
+}
+.mdi-network-outline::before {
+  content: "\FC79";
+}
+.mdi-network-router::before {
+  content: "\F00B2";
+}
+.mdi-network-strength-1::before {
+  content: "\F8F3";
+}
+.mdi-network-strength-1-alert::before {
+  content: "\F8F4";
+}
+.mdi-network-strength-2::before {
+  content: "\F8F5";
+}
+.mdi-network-strength-2-alert::before {
+  content: "\F8F6";
+}
+.mdi-network-strength-3::before {
+  content: "\F8F7";
+}
+.mdi-network-strength-3-alert::before {
+  content: "\F8F8";
+}
+.mdi-network-strength-4::before {
+  content: "\F8F9";
+}
+.mdi-network-strength-4-alert::before {
+  content: "\F8FA";
+}
+.mdi-network-strength-off::before {
+  content: "\F8FB";
+}
+.mdi-network-strength-off-outline::before {
+  content: "\F8FC";
+}
+.mdi-network-strength-outline::before {
+  content: "\F8FD";
+}
+.mdi-new-box::before {
+  content: "\F394";
+}
+.mdi-newspaper::before {
+  content: "\F395";
+}
+.mdi-newspaper-minus::before {
+  content: "\FF29";
+}
+.mdi-newspaper-plus::before {
+  content: "\FF2A";
+}
+.mdi-newspaper-variant::before {
+  content: "\F0023";
+}
+.mdi-newspaper-variant-multiple::before {
+  content: "\F0024";
+}
+.mdi-newspaper-variant-multiple-outline::before {
+  content: "\F0025";
+}
+.mdi-newspaper-variant-outline::before {
+  content: "\F0026";
+}
+.mdi-nfc::before {
+  content: "\F396";
+}
+.mdi-nfc-off::before {
+  content: "\FE35";
+}
+.mdi-nfc-search-variant::before {
+  content: "\FE36";
+}
+.mdi-nfc-tap::before {
+  content: "\F397";
+}
+.mdi-nfc-variant::before {
+  content: "\F398";
+}
+.mdi-nfc-variant-off::before {
+  content: "\FE37";
+}
+.mdi-ninja::before {
+  content: "\F773";
+}
+.mdi-nintendo-switch::before {
+  content: "\F7E0";
+}
+.mdi-nix::before {
+  content: "\F0130";
+}
+.mdi-nodejs::before {
+  content: "\F399";
+}
+.mdi-noodles::before {
+  content: "\F01A9";
+}
+.mdi-not-equal::before {
+  content: "\F98C";
+}
+.mdi-not-equal-variant::before {
+  content: "\F98D";
+}
+.mdi-note::before {
+  content: "\F39A";
+}
+.mdi-note-multiple::before {
+  content: "\F6B7";
+}
+.mdi-note-multiple-outline::before {
+  content: "\F6B8";
+}
+.mdi-note-outline::before {
+  content: "\F39B";
+}
+.mdi-note-plus::before {
+  content: "\F39C";
+}
+.mdi-note-plus-outline::before {
+  content: "\F39D";
+}
+.mdi-note-text::before {
+  content: "\F39E";
+}
+.mdi-note-text-outline::before {
+  content: "\F0202";
+}
+.mdi-notebook::before {
+  content: "\F82D";
+}
+.mdi-notebook-multiple::before {
+  content: "\FE38";
+}
+.mdi-notebook-outline::before {
+  content: "\FEDC";
+}
+.mdi-notification-clear-all::before {
+  content: "\F39F";
+}
+.mdi-npm::before {
+  content: "\F6F6";
+}
+.mdi-npm-variant::before {
+  content: "\F98E";
+}
+.mdi-npm-variant-outline::before {
+  content: "\F98F";
+}
+.mdi-nuke::before {
+  content: "\F6A3";
+}
+.mdi-null::before {
+  content: "\F7E1";
+}
+.mdi-numeric::before {
+  content: "\F3A0";
+}
+.mdi-numeric-0::before {
+  content: "\30";
+}
+.mdi-numeric-0-box::before {
+  content: "\F3A1";
+}
+.mdi-numeric-0-box-multiple::before {
+  content: "\FF2B";
+}
+.mdi-numeric-0-box-multiple-outline::before {
+  content: "\F3A2";
+}
+.mdi-numeric-0-box-outline::before {
+  content: "\F3A3";
+}
+.mdi-numeric-0-circle::before {
+  content: "\FC7A";
+}
+.mdi-numeric-0-circle-outline::before {
+  content: "\FC7B";
+}
+.mdi-numeric-1::before {
+  content: "\31";
+}
+.mdi-numeric-1-box::before {
+  content: "\F3A4";
+}
+.mdi-numeric-1-box-multiple::before {
+  content: "\FF2C";
+}
+.mdi-numeric-1-box-multiple-outline::before {
+  content: "\F3A5";
+}
+.mdi-numeric-1-box-outline::before {
+  content: "\F3A6";
+}
+.mdi-numeric-1-circle::before {
+  content: "\FC7C";
+}
+.mdi-numeric-1-circle-outline::before {
+  content: "\FC7D";
+}
+.mdi-numeric-10::before {
+  content: "\F000A";
+}
+.mdi-numeric-10-box::before {
+  content: "\FF9A";
+}
+.mdi-numeric-10-box-multiple::before {
+  content: "\F000B";
+}
+.mdi-numeric-10-box-multiple-outline::before {
+  content: "\F000C";
+}
+.mdi-numeric-10-box-outline::before {
+  content: "\FF9B";
+}
+.mdi-numeric-10-circle::before {
+  content: "\F000D";
+}
+.mdi-numeric-10-circle-outline::before {
+  content: "\F000E";
+}
+.mdi-numeric-2::before {
+  content: "\32";
+}
+.mdi-numeric-2-box::before {
+  content: "\F3A7";
+}
+.mdi-numeric-2-box-multiple::before {
+  content: "\FF2D";
+}
+.mdi-numeric-2-box-multiple-outline::before {
+  content: "\F3A8";
+}
+.mdi-numeric-2-box-outline::before {
+  content: "\F3A9";
+}
+.mdi-numeric-2-circle::before {
+  content: "\FC7E";
+}
+.mdi-numeric-2-circle-outline::before {
+  content: "\FC7F";
+}
+.mdi-numeric-3::before {
+  content: "\33";
+}
+.mdi-numeric-3-box::before {
+  content: "\F3AA";
+}
+.mdi-numeric-3-box-multiple::before {
+  content: "\FF2E";
+}
+.mdi-numeric-3-box-multiple-outline::before {
+  content: "\F3AB";
+}
+.mdi-numeric-3-box-outline::before {
+  content: "\F3AC";
+}
+.mdi-numeric-3-circle::before {
+  content: "\FC80";
+}
+.mdi-numeric-3-circle-outline::before {
+  content: "\FC81";
+}
+.mdi-numeric-4::before {
+  content: "\34";
+}
+.mdi-numeric-4-box::before {
+  content: "\F3AD";
+}
+.mdi-numeric-4-box-multiple::before {
+  content: "\FF2F";
+}
+.mdi-numeric-4-box-multiple-outline::before {
+  content: "\F3AE";
+}
+.mdi-numeric-4-box-outline::before {
+  content: "\F3AF";
+}
+.mdi-numeric-4-circle::before {
+  content: "\FC82";
+}
+.mdi-numeric-4-circle-outline::before {
+  content: "\FC83";
+}
+.mdi-numeric-5::before {
+  content: "\35";
+}
+.mdi-numeric-5-box::before {
+  content: "\F3B0";
+}
+.mdi-numeric-5-box-multiple::before {
+  content: "\FF30";
+}
+.mdi-numeric-5-box-multiple-outline::before {
+  content: "\F3B1";
+}
+.mdi-numeric-5-box-outline::before {
+  content: "\F3B2";
+}
+.mdi-numeric-5-circle::before {
+  content: "\FC84";
+}
+.mdi-numeric-5-circle-outline::before {
+  content: "\FC85";
+}
+.mdi-numeric-6::before {
+  content: "\36";
+}
+.mdi-numeric-6-box::before {
+  content: "\F3B3";
+}
+.mdi-numeric-6-box-multiple::before {
+  content: "\FF31";
+}
+.mdi-numeric-6-box-multiple-outline::before {
+  content: "\F3B4";
+}
+.mdi-numeric-6-box-outline::before {
+  content: "\F3B5";
+}
+.mdi-numeric-6-circle::before {
+  content: "\FC86";
+}
+.mdi-numeric-6-circle-outline::before {
+  content: "\FC87";
+}
+.mdi-numeric-7::before {
+  content: "\37";
+}
+.mdi-numeric-7-box::before {
+  content: "\F3B6";
+}
+.mdi-numeric-7-box-multiple::before {
+  content: "\FF32";
+}
+.mdi-numeric-7-box-multiple-outline::before {
+  content: "\F3B7";
+}
+.mdi-numeric-7-box-outline::before {
+  content: "\F3B8";
+}
+.mdi-numeric-7-circle::before {
+  content: "\FC88";
+}
+.mdi-numeric-7-circle-outline::before {
+  content: "\FC89";
+}
+.mdi-numeric-8::before {
+  content: "\38";
+}
+.mdi-numeric-8-box::before {
+  content: "\F3B9";
+}
+.mdi-numeric-8-box-multiple::before {
+  content: "\FF33";
+}
+.mdi-numeric-8-box-multiple-outline::before {
+  content: "\F3BA";
+}
+.mdi-numeric-8-box-outline::before {
+  content: "\F3BB";
+}
+.mdi-numeric-8-circle::before {
+  content: "\FC8A";
+}
+.mdi-numeric-8-circle-outline::before {
+  content: "\FC8B";
+}
+.mdi-numeric-9::before {
+  content: "\39";
+}
+.mdi-numeric-9-box::before {
+  content: "\F3BC";
+}
+.mdi-numeric-9-box-multiple::before {
+  content: "\FF34";
+}
+.mdi-numeric-9-box-multiple-outline::before {
+  content: "\F3BD";
+}
+.mdi-numeric-9-box-outline::before {
+  content: "\F3BE";
+}
+.mdi-numeric-9-circle::before {
+  content: "\FC8C";
+}
+.mdi-numeric-9-circle-outline::before {
+  content: "\FC8D";
+}
+.mdi-numeric-9-plus::before {
+  content: "\F000F";
+}
+.mdi-numeric-9-plus-box::before {
+  content: "\F3BF";
+}
+.mdi-numeric-9-plus-box-multiple::before {
+  content: "\FF35";
+}
+.mdi-numeric-9-plus-box-multiple-outline::before {
+  content: "\F3C0";
+}
+.mdi-numeric-9-plus-box-outline::before {
+  content: "\F3C1";
+}
+.mdi-numeric-9-plus-circle::before {
+  content: "\FC8E";
+}
+.mdi-numeric-9-plus-circle-outline::before {
+  content: "\FC8F";
+}
+.mdi-numeric-negative-1::before {
+  content: "\F0074";
+}
+.mdi-nut::before {
+  content: "\F6F7";
+}
+.mdi-nutrition::before {
+  content: "\F3C2";
+}
+.mdi-nuxt::before {
+  content: "\F0131";
+}
+.mdi-oar::before {
+  content: "\F67B";
+}
+.mdi-ocarina::before {
+  content: "\FDBC";
+}
+.mdi-oci::before {
+  content: "\F0314";
+}
+.mdi-ocr::before {
+  content: "\F0165";
+}
+.mdi-octagon::before {
+  content: "\F3C3";
+}
+.mdi-octagon-outline::before {
+  content: "\F3C4";
+}
+.mdi-octagram::before {
+  content: "\F6F8";
+}
+.mdi-octagram-outline::before {
+  content: "\F774";
+}
+.mdi-odnoklassniki::before {
+  content: "\F3C5";
+}
+.mdi-offer::before {
+  content: "\F0246";
+}
+.mdi-office::before {
+  content: "\F3C6";
+}
+.mdi-office-building::before {
+  content: "\F990";
+}
+.mdi-oil::before {
+  content: "\F3C7";
+}
+.mdi-oil-lamp::before {
+  content: "\FF36";
+}
+.mdi-oil-level::before {
+  content: "\F0075";
+}
+.mdi-oil-temperature::before {
+  content: "\F0019";
+}
+.mdi-omega::before {
+  content: "\F3C9";
+}
+.mdi-one-up::before {
+  content: "\FB89";
+}
+.mdi-onedrive::before {
+  content: "\F3CA";
+}
+.mdi-onenote::before {
+  content: "\F746";
+}
+.mdi-onepassword::before {
+  content: "\F880";
+}
+.mdi-opacity::before {
+  content: "\F5CC";
+}
+.mdi-open-in-app::before {
+  content: "\F3CB";
+}
+.mdi-open-in-new::before {
+  content: "\F3CC";
+}
+.mdi-open-source-initiative::before {
+  content: "\FB8A";
+}
+.mdi-openid::before {
+  content: "\F3CD";
+}
+.mdi-opera::before {
+  content: "\F3CE";
+}
+.mdi-orbit::before {
+  content: "\F018";
+}
+.mdi-origin::before {
+  content: "\FB2B";
+}
+.mdi-ornament::before {
+  content: "\F3CF";
+}
+.mdi-ornament-variant::before {
+  content: "\F3D0";
+}
+.mdi-outdoor-lamp::before {
+  content: "\F0076";
+}
+.mdi-outlook::before {
+  content: "\FCFE";
+}
+.mdi-overscan::before {
+  content: "\F0027";
+}
+.mdi-owl::before {
+  content: "\F3D2";
+}
+.mdi-pac-man::before {
+  content: "\FB8B";
+}
+.mdi-package::before {
+  content: "\F3D3";
+}
+.mdi-package-down::before {
+  content: "\F3D4";
+}
+.mdi-package-up::before {
+  content: "\F3D5";
+}
+.mdi-package-variant::before {
+  content: "\F3D6";
+}
+.mdi-package-variant-closed::before {
+  content: "\F3D7";
+}
+.mdi-page-first::before {
+  content: "\F600";
+}
+.mdi-page-last::before {
+  content: "\F601";
+}
+.mdi-page-layout-body::before {
+  content: "\F6F9";
+}
+.mdi-page-layout-footer::before {
+  content: "\F6FA";
+}
+.mdi-page-layout-header::before {
+  content: "\F6FB";
+}
+.mdi-page-layout-header-footer::before {
+  content: "\FF9C";
+}
+.mdi-page-layout-sidebar-left::before {
+  content: "\F6FC";
+}
+.mdi-page-layout-sidebar-right::before {
+  content: "\F6FD";
+}
+.mdi-page-next::before {
+  content: "\FB8C";
+}
+.mdi-page-next-outline::before {
+  content: "\FB8D";
+}
+.mdi-page-previous::before {
+  content: "\FB8E";
+}
+.mdi-page-previous-outline::before {
+  content: "\FB8F";
+}
+.mdi-palette::before {
+  content: "\F3D8";
+}
+.mdi-palette-advanced::before {
+  content: "\F3D9";
+}
+.mdi-palette-outline::before {
+  content: "\FE6C";
+}
+.mdi-palette-swatch::before {
+  content: "\F8B4";
+}
+.mdi-palette-swatch-outline::before {
+  content: "\F0387";
+}
+.mdi-palm-tree::before {
+  content: "\F0077";
+}
+.mdi-pan::before {
+  content: "\FB90";
+}
+.mdi-pan-bottom-left::before {
+  content: "\FB91";
+}
+.mdi-pan-bottom-right::before {
+  content: "\FB92";
+}
+.mdi-pan-down::before {
+  content: "\FB93";
+}
+.mdi-pan-horizontal::before {
+  content: "\FB94";
+}
+.mdi-pan-left::before {
+  content: "\FB95";
+}
+.mdi-pan-right::before {
+  content: "\FB96";
+}
+.mdi-pan-top-left::before {
+  content: "\FB97";
+}
+.mdi-pan-top-right::before {
+  content: "\FB98";
+}
+.mdi-pan-up::before {
+  content: "\FB99";
+}
+.mdi-pan-vertical::before {
+  content: "\FB9A";
+}
+.mdi-panda::before {
+  content: "\F3DA";
+}
+.mdi-pandora::before {
+  content: "\F3DB";
+}
+.mdi-panorama::before {
+  content: "\F3DC";
+}
+.mdi-panorama-fisheye::before {
+  content: "\F3DD";
+}
+.mdi-panorama-horizontal::before {
+  content: "\F3DE";
+}
+.mdi-panorama-vertical::before {
+  content: "\F3DF";
+}
+.mdi-panorama-wide-angle::before {
+  content: "\F3E0";
+}
+.mdi-paper-cut-vertical::before {
+  content: "\F3E1";
+}
+.mdi-paper-roll::before {
+  content: "\F0182";
+}
+.mdi-paper-roll-outline::before {
+  content: "\F0183";
+}
+.mdi-paperclip::before {
+  content: "\F3E2";
+}
+.mdi-parachute::before {
+  content: "\FC90";
+}
+.mdi-parachute-outline::before {
+  content: "\FC91";
+}
+.mdi-parking::before {
+  content: "\F3E3";
+}
+.mdi-party-popper::before {
+  content: "\F0078";
+}
+.mdi-passport::before {
+  content: "\F7E2";
+}
+.mdi-passport-biometric::before {
+  content: "\FDBD";
+}
+.mdi-pasta::before {
+  content: "\F018B";
+}
+.mdi-patio-heater::before {
+  content: "\FF9D";
+}
+.mdi-patreon::before {
+  content: "\F881";
+}
+.mdi-pause::before {
+  content: "\F3E4";
+}
+.mdi-pause-circle::before {
+  content: "\F3E5";
+}
+.mdi-pause-circle-outline::before {
+  content: "\F3E6";
+}
+.mdi-pause-octagon::before {
+  content: "\F3E7";
+}
+.mdi-pause-octagon-outline::before {
+  content: "\F3E8";
+}
+.mdi-paw::before {
+  content: "\F3E9";
+}
+.mdi-paw-off::before {
+  content: "\F657";
+}
+.mdi-paypal::before {
+  content: "\F882";
+}
+.mdi-pdf-box::before {
+  content: "\FE39";
+}
+.mdi-peace::before {
+  content: "\F883";
+}
+.mdi-peanut::before {
+  content: "\F001E";
+}
+.mdi-peanut-off::before {
+  content: "\F001F";
+}
+.mdi-peanut-off-outline::before {
+  content: "\F0021";
+}
+.mdi-peanut-outline::before {
+  content: "\F0020";
+}
+.mdi-pen::before {
+  content: "\F3EA";
+}
+.mdi-pen-lock::before {
+  content: "\FDBE";
+}
+.mdi-pen-minus::before {
+  content: "\FDBF";
+}
+.mdi-pen-off::before {
+  content: "\FDC0";
+}
+.mdi-pen-plus::before {
+  content: "\FDC1";
+}
+.mdi-pen-remove::before {
+  content: "\FDC2";
+}
+.mdi-pencil::before {
+  content: "\F3EB";
+}
+.mdi-pencil-box::before {
+  content: "\F3EC";
+}
+.mdi-pencil-box-multiple::before {
+  content: "\F016F";
+}
+.mdi-pencil-box-multiple-outline::before {
+  content: "\F0170";
+}
+.mdi-pencil-box-outline::before {
+  content: "\F3ED";
+}
+.mdi-pencil-circle::before {
+  content: "\F6FE";
+}
+.mdi-pencil-circle-outline::before {
+  content: "\F775";
+}
+.mdi-pencil-lock::before {
+  content: "\F3EE";
+}
+.mdi-pencil-lock-outline::before {
+  content: "\FDC3";
+}
+.mdi-pencil-minus::before {
+  content: "\FDC4";
+}
+.mdi-pencil-minus-outline::before {
+  content: "\FDC5";
+}
+.mdi-pencil-off::before {
+  content: "\F3EF";
+}
+.mdi-pencil-off-outline::before {
+  content: "\FDC6";
+}
+.mdi-pencil-outline::before {
+  content: "\FC92";
+}
+.mdi-pencil-plus::before {
+  content: "\FDC7";
+}
+.mdi-pencil-plus-outline::before {
+  content: "\FDC8";
+}
+.mdi-pencil-remove::before {
+  content: "\FDC9";
+}
+.mdi-pencil-remove-outline::before {
+  content: "\FDCA";
+}
+.mdi-pencil-ruler::before {
+  content: "\F037E";
+}
+.mdi-penguin::before {
+  content: "\FEDD";
+}
+.mdi-pentagon::before {
+  content: "\F6FF";
+}
+.mdi-pentagon-outline::before {
+  content: "\F700";
+}
+.mdi-percent::before {
+  content: "\F3F0";
+}
+.mdi-percent-outline::before {
+  content: "\F02A3";
+}
+.mdi-periodic-table::before {
+  content: "\F8B5";
+}
+.mdi-periodic-table-co::before {
+  content: "\F0329";
+}
+.mdi-periodic-table-co2::before {
+  content: "\F7E3";
+}
+.mdi-periscope::before {
+  content: "\F747";
+}
+.mdi-perspective-less::before {
+  content: "\FCFF";
+}
+.mdi-perspective-more::before {
+  content: "\FD00";
+}
+.mdi-pharmacy::before {
+  content: "\F3F1";
+}
+.mdi-phone::before {
+  content: "\F3F2";
+}
+.mdi-phone-alert::before {
+  content: "\FF37";
+}
+.mdi-phone-alert-outline::before {
+  content: "\F01B9";
+}
+.mdi-phone-bluetooth::before {
+  content: "\F3F3";
+}
+.mdi-phone-bluetooth-outline::before {
+  content: "\F01BA";
+}
+.mdi-phone-cancel::before {
+  content: "\F00E7";
+}
+.mdi-phone-cancel-outline::before {
+  content: "\F01BB";
+}
+.mdi-phone-check::before {
+  content: "\F01D4";
+}
+.mdi-phone-check-outline::before {
+  content: "\F01D5";
+}
+.mdi-phone-classic::before {
+  content: "\F602";
+}
+.mdi-phone-classic-off::before {
+  content: "\F02A4";
+}
+.mdi-phone-forward::before {
+  content: "\F3F4";
+}
+.mdi-phone-forward-outline::before {
+  content: "\F01BC";
+}
+.mdi-phone-hangup::before {
+  content: "\F3F5";
+}
+.mdi-phone-hangup-outline::before {
+  content: "\F01BD";
+}
+.mdi-phone-in-talk::before {
+  content: "\F3F6";
+}
+.mdi-phone-in-talk-outline::before {
+  content: "\F01AD";
+}
+.mdi-phone-incoming::before {
+  content: "\F3F7";
+}
+.mdi-phone-incoming-outline::before {
+  content: "\F01BE";
+}
+.mdi-phone-lock::before {
+  content: "\F3F8";
+}
+.mdi-phone-lock-outline::before {
+  content: "\F01BF";
+}
+.mdi-phone-log::before {
+  content: "\F3F9";
+}
+.mdi-phone-log-outline::before {
+  content: "\F01C0";
+}
+.mdi-phone-message::before {
+  content: "\F01C1";
+}
+.mdi-phone-message-outline::before {
+  content: "\F01C2";
+}
+.mdi-phone-minus::before {
+  content: "\F658";
+}
+.mdi-phone-minus-outline::before {
+  content: "\F01C3";
+}
+.mdi-phone-missed::before {
+  content: "\F3FA";
+}
+.mdi-phone-missed-outline::before {
+  content: "\F01D0";
+}
+.mdi-phone-off::before {
+  content: "\FDCB";
+}
+.mdi-phone-off-outline::before {
+  content: "\F01D1";
+}
+.mdi-phone-outgoing::before {
+  content: "\F3FB";
+}
+.mdi-phone-outgoing-outline::before {
+  content: "\F01C4";
+}
+.mdi-phone-outline::before {
+  content: "\FDCC";
+}
+.mdi-phone-paused::before {
+  content: "\F3FC";
+}
+.mdi-phone-paused-outline::before {
+  content: "\F01C5";
+}
+.mdi-phone-plus::before {
+  content: "\F659";
+}
+.mdi-phone-plus-outline::before {
+  content: "\F01C6";
+}
+.mdi-phone-return::before {
+  content: "\F82E";
+}
+.mdi-phone-return-outline::before {
+  content: "\F01C7";
+}
+.mdi-phone-ring::before {
+  content: "\F01D6";
+}
+.mdi-phone-ring-outline::before {
+  content: "\F01D7";
+}
+.mdi-phone-rotate-landscape::before {
+  content: "\F884";
+}
+.mdi-phone-rotate-portrait::before {
+  content: "\F885";
+}
+.mdi-phone-settings::before {
+  content: "\F3FD";
+}
+.mdi-phone-settings-outline::before {
+  content: "\F01C8";
+}
+.mdi-phone-voip::before {
+  content: "\F3FE";
+}
+.mdi-pi::before {
+  content: "\F3FF";
+}
+.mdi-pi-box::before {
+  content: "\F400";
+}
+.mdi-pi-hole::before {
+  content: "\FDCD";
+}
+.mdi-piano::before {
+  content: "\F67C";
+}
+.mdi-pickaxe::before {
+  content: "\F8B6";
+}
+.mdi-picture-in-picture-bottom-right::before {
+  content: "\FE3A";
+}
+.mdi-picture-in-picture-bottom-right-outline::before {
+  content: "\FE3B";
+}
+.mdi-picture-in-picture-top-right::before {
+  content: "\FE3C";
+}
+.mdi-picture-in-picture-top-right-outline::before {
+  content: "\FE3D";
+}
+.mdi-pier::before {
+  content: "\F886";
+}
+.mdi-pier-crane::before {
+  content: "\F887";
+}
+.mdi-pig::before {
+  content: "\F401";
+}
+.mdi-pig-variant::before {
+  content: "\F0028";
+}
+.mdi-piggy-bank::before {
+  content: "\F0029";
+}
+.mdi-pill::before {
+  content: "\F402";
+}
+.mdi-pillar::before {
+  content: "\F701";
+}
+.mdi-pin::before {
+  content: "\F403";
+}
+.mdi-pin-off::before {
+  content: "\F404";
+}
+.mdi-pin-off-outline::before {
+  content: "\F92F";
+}
+.mdi-pin-outline::before {
+  content: "\F930";
+}
+.mdi-pine-tree::before {
+  content: "\F405";
+}
+.mdi-pine-tree-box::before {
+  content: "\F406";
+}
+.mdi-pinterest::before {
+  content: "\F407";
+}
+.mdi-pinterest-box::before {
+  content: "\F408";
+}
+.mdi-pinwheel::before {
+  content: "\FAD4";
+}
+.mdi-pinwheel-outline::before {
+  content: "\FAD5";
+}
+.mdi-pipe::before {
+  content: "\F7E4";
+}
+.mdi-pipe-disconnected::before {
+  content: "\F7E5";
+}
+.mdi-pipe-leak::before {
+  content: "\F888";
+}
+.mdi-pipe-wrench::before {
+  content: "\F037F";
+}
+.mdi-pirate::before {
+  content: "\FA07";
+}
+.mdi-pistol::before {
+  content: "\F702";
+}
+.mdi-piston::before {
+  content: "\F889";
+}
+.mdi-pizza::before {
+  content: "\F409";
+}
+.mdi-play::before {
+  content: "\F40A";
+}
+.mdi-play-box::before {
+  content: "\F02A5";
+}
+.mdi-play-box-outline::before {
+  content: "\F40B";
+}
+.mdi-play-circle::before {
+  content: "\F40C";
+}
+.mdi-play-circle-outline::before {
+  content: "\F40D";
+}
+.mdi-play-network::before {
+  content: "\F88A";
+}
+.mdi-play-network-outline::before {
+  content: "\FC93";
+}
+.mdi-play-outline::before {
+  content: "\FF38";
+}
+.mdi-play-pause::before {
+  content: "\F40E";
+}
+.mdi-play-protected-content::before {
+  content: "\F40F";
+}
+.mdi-play-speed::before {
+  content: "\F8FE";
+}
+.mdi-playlist-check::before {
+  content: "\F5C7";
+}
+.mdi-playlist-edit::before {
+  content: "\F8FF";
+}
+.mdi-playlist-minus::before {
+  content: "\F410";
+}
+.mdi-playlist-music::before {
+  content: "\FC94";
+}
+.mdi-playlist-music-outline::before {
+  content: "\FC95";
+}
+.mdi-playlist-play::before {
+  content: "\F411";
+}
+.mdi-playlist-plus::before {
+  content: "\F412";
+}
+.mdi-playlist-remove::before {
+  content: "\F413";
+}
+.mdi-playlist-star::before {
+  content: "\FDCE";
+}
+.mdi-playstation::before {
+  content: "\F414";
+}
+.mdi-plex::before {
+  content: "\F6B9";
+}
+.mdi-plus::before {
+  content: "\F415";
+}
+.mdi-plus-box::before {
+  content: "\F416";
+}
+.mdi-plus-box-multiple::before {
+  content: "\F334";
+}
+.mdi-plus-box-multiple-outline::before {
+  content: "\F016E";
+}
+.mdi-plus-box-outline::before {
+  content: "\F703";
+}
+.mdi-plus-circle::before {
+  content: "\F417";
+}
+.mdi-plus-circle-multiple-outline::before {
+  content: "\F418";
+}
+.mdi-plus-circle-outline::before {
+  content: "\F419";
+}
+.mdi-plus-minus::before {
+  content: "\F991";
+}
+.mdi-plus-minus-box::before {
+  content: "\F992";
+}
+.mdi-plus-network::before {
+  content: "\F41A";
+}
+.mdi-plus-network-outline::before {
+  content: "\FC96";
+}
+.mdi-plus-one::before {
+  content: "\F41B";
+}
+.mdi-plus-outline::before {
+  content: "\F704";
+}
+.mdi-plus-thick::before {
+  content: "\F0217";
+}
+.mdi-pocket::before {
+  content: "\F41C";
+}
+.mdi-podcast::before {
+  content: "\F993";
+}
+.mdi-podium::before {
+  content: "\FD01";
+}
+.mdi-podium-bronze::before {
+  content: "\FD02";
+}
+.mdi-podium-gold::before {
+  content: "\FD03";
+}
+.mdi-podium-silver::before {
+  content: "\FD04";
+}
+.mdi-point-of-sale::before {
+  content: "\FD6E";
+}
+.mdi-pokeball::before {
+  content: "\F41D";
+}
+.mdi-pokemon-go::before {
+  content: "\FA08";
+}
+.mdi-poker-chip::before {
+  content: "\F82F";
+}
+.mdi-polaroid::before {
+  content: "\F41E";
+}
+.mdi-police-badge::before {
+  content: "\F0192";
+}
+.mdi-police-badge-outline::before {
+  content: "\F0193";
+}
+.mdi-poll::before {
+  content: "\F41F";
+}
+.mdi-poll-box::before {
+  content: "\F420";
+}
+.mdi-poll-box-outline::before {
+  content: "\F02A6";
+}
+.mdi-polymer::before {
+  content: "\F421";
+}
+.mdi-pool::before {
+  content: "\F606";
+}
+.mdi-popcorn::before {
+  content: "\F422";
+}
+.mdi-post::before {
+  content: "\F002A";
+}
+.mdi-post-outline::before {
+  content: "\F002B";
+}
+.mdi-postage-stamp::before {
+  content: "\FC97";
+}
+.mdi-pot::before {
+  content: "\F65A";
+}
+.mdi-pot-mix::before {
+  content: "\F65B";
+}
+.mdi-pound::before {
+  content: "\F423";
+}
+.mdi-pound-box::before {
+  content: "\F424";
+}
+.mdi-pound-box-outline::before {
+  content: "\F01AA";
+}
+.mdi-power::before {
+  content: "\F425";
+}
+.mdi-power-cycle::before {
+  content: "\F900";
+}
+.mdi-power-off::before {
+  content: "\F901";
+}
+.mdi-power-on::before {
+  content: "\F902";
+}
+.mdi-power-plug::before {
+  content: "\F6A4";
+}
+.mdi-power-plug-off::before {
+  content: "\F6A5";
+}
+.mdi-power-settings::before {
+  content: "\F426";
+}
+.mdi-power-sleep::before {
+  content: "\F903";
+}
+.mdi-power-socket::before {
+  content: "\F427";
+}
+.mdi-power-socket-au::before {
+  content: "\F904";
+}
+.mdi-power-socket-de::before {
+  content: "\F0132";
+}
+.mdi-power-socket-eu::before {
+  content: "\F7E6";
+}
+.mdi-power-socket-fr::before {
+  content: "\F0133";
+}
+.mdi-power-socket-jp::before {
+  content: "\F0134";
+}
+.mdi-power-socket-uk::before {
+  content: "\F7E7";
+}
+.mdi-power-socket-us::before {
+  content: "\F7E8";
+}
+.mdi-power-standby::before {
+  content: "\F905";
+}
+.mdi-powershell::before {
+  content: "\FA09";
+}
+.mdi-prescription::before {
+  content: "\F705";
+}
+.mdi-presentation::before {
+  content: "\F428";
+}
+.mdi-presentation-play::before {
+  content: "\F429";
+}
+.mdi-printer::before {
+  content: "\F42A";
+}
+.mdi-printer-3d::before {
+  content: "\F42B";
+}
+.mdi-printer-3d-nozzle::before {
+  content: "\FE3E";
+}
+.mdi-printer-3d-nozzle-alert::before {
+  content: "\F01EB";
+}
+.mdi-printer-3d-nozzle-alert-outline::before {
+  content: "\F01EC";
+}
+.mdi-printer-3d-nozzle-outline::before {
+  content: "\FE3F";
+}
+.mdi-printer-alert::before {
+  content: "\F42C";
+}
+.mdi-printer-check::before {
+  content: "\F0171";
+}
+.mdi-printer-off::before {
+  content: "\FE40";
+}
+.mdi-printer-pos::before {
+  content: "\F0079";
+}
+.mdi-printer-settings::before {
+  content: "\F706";
+}
+.mdi-printer-wireless::before {
+  content: "\FA0A";
+}
+.mdi-priority-high::before {
+  content: "\F603";
+}
+.mdi-priority-low::before {
+  content: "\F604";
+}
+.mdi-professional-hexagon::before {
+  content: "\F42D";
+}
+.mdi-progress-alert::before {
+  content: "\FC98";
+}
+.mdi-progress-check::before {
+  content: "\F994";
+}
+.mdi-progress-clock::before {
+  content: "\F995";
+}
+.mdi-progress-close::before {
+  content: "\F0135";
+}
+.mdi-progress-download::before {
+  content: "\F996";
+}
+.mdi-progress-upload::before {
+  content: "\F997";
+}
+.mdi-progress-wrench::before {
+  content: "\FC99";
+}
+.mdi-projector::before {
+  content: "\F42E";
+}
+.mdi-projector-screen::before {
+  content: "\F42F";
+}
+.mdi-propane-tank::before {
+  content: "\F0382";
+}
+.mdi-propane-tank-outline::before {
+  content: "\F0383";
+}
+.mdi-protocol::before {
+  content: "\FFF9";
+}
+.mdi-publish::before {
+  content: "\F6A6";
+}
+.mdi-pulse::before {
+  content: "\F430";
+}
+.mdi-pumpkin::before {
+  content: "\FB9B";
+}
+.mdi-purse::before {
+  content: "\FF39";
+}
+.mdi-purse-outline::before {
+  content: "\FF3A";
+}
+.mdi-puzzle::before {
+  content: "\F431";
+}
+.mdi-puzzle-outline::before {
+  content: "\FA65";
+}
+.mdi-qi::before {
+  content: "\F998";
+}
+.mdi-qqchat::before {
+  content: "\F605";
+}
+.mdi-qrcode::before {
+  content: "\F432";
+}
+.mdi-qrcode-edit::before {
+  content: "\F8B7";
+}
+.mdi-qrcode-minus::before {
+  content: "\F01B7";
+}
+.mdi-qrcode-plus::before {
+  content: "\F01B6";
+}
+.mdi-qrcode-remove::before {
+  content: "\F01B8";
+}
+.mdi-qrcode-scan::before {
+  content: "\F433";
+}
+.mdi-quadcopter::before {
+  content: "\F434";
+}
+.mdi-quality-high::before {
+  content: "\F435";
+}
+.mdi-quality-low::before {
+  content: "\FA0B";
+}
+.mdi-quality-medium::before {
+  content: "\FA0C";
+}
+.mdi-quicktime::before {
+  content: "\F436";
+}
+.mdi-quora::before {
+  content: "\FD05";
+}
+.mdi-rabbit::before {
+  content: "\F906";
+}
+.mdi-racing-helmet::before {
+  content: "\FD6F";
+}
+.mdi-racquetball::before {
+  content: "\FD70";
+}
+.mdi-radar::before {
+  content: "\F437";
+}
+.mdi-radiator::before {
+  content: "\F438";
+}
+.mdi-radiator-disabled::before {
+  content: "\FAD6";
+}
+.mdi-radiator-off::before {
+  content: "\FAD7";
+}
+.mdi-radio::before {
+  content: "\F439";
+}
+.mdi-radio-am::before {
+  content: "\FC9A";
+}
+.mdi-radio-fm::before {
+  content: "\FC9B";
+}
+.mdi-radio-handheld::before {
+  content: "\F43A";
+}
+.mdi-radio-off::before {
+  content: "\F0247";
+}
+.mdi-radio-tower::before {
+  content: "\F43B";
+}
+.mdi-radioactive::before {
+  content: "\F43C";
+}
+.mdi-radioactive-off::before {
+  content: "\FEDE";
+}
+.mdi-radiobox-blank::before {
+  content: "\F43D";
+}
+.mdi-radiobox-marked::before {
+  content: "\F43E";
+}
+.mdi-radius::before {
+  content: "\FC9C";
+}
+.mdi-radius-outline::before {
+  content: "\FC9D";
+}
+.mdi-railroad-light::before {
+  content: "\FF3B";
+}
+.mdi-raspberry-pi::before {
+  content: "\F43F";
+}
+.mdi-ray-end::before {
+  content: "\F440";
+}
+.mdi-ray-end-arrow::before {
+  content: "\F441";
+}
+.mdi-ray-start::before {
+  content: "\F442";
+}
+.mdi-ray-start-arrow::before {
+  content: "\F443";
+}
+.mdi-ray-start-end::before {
+  content: "\F444";
+}
+.mdi-ray-vertex::before {
+  content: "\F445";
+}
+.mdi-react::before {
+  content: "\F707";
+}
+.mdi-read::before {
+  content: "\F447";
+}
+.mdi-receipt::before {
+  content: "\F449";
+}
+.mdi-record::before {
+  content: "\F44A";
+}
+.mdi-record-circle::before {
+  content: "\FEDF";
+}
+.mdi-record-circle-outline::before {
+  content: "\FEE0";
+}
+.mdi-record-player::before {
+  content: "\F999";
+}
+.mdi-record-rec::before {
+  content: "\F44B";
+}
+.mdi-rectangle::before {
+  content: "\FE41";
+}
+.mdi-rectangle-outline::before {
+  content: "\FE42";
+}
+.mdi-recycle::before {
+  content: "\F44C";
+}
+.mdi-reddit::before {
+  content: "\F44D";
+}
+.mdi-redhat::before {
+  content: "\F0146";
+}
+.mdi-redo::before {
+  content: "\F44E";
+}
+.mdi-redo-variant::before {
+  content: "\F44F";
+}
+.mdi-reflect-horizontal::before {
+  content: "\FA0D";
+}
+.mdi-reflect-vertical::before {
+  content: "\FA0E";
+}
+.mdi-refresh::before {
+  content: "\F450";
+}
+.mdi-refresh-circle::before {
+  content: "\F03A2";
+}
+.mdi-regex::before {
+  content: "\F451";
+}
+.mdi-registered-trademark::before {
+  content: "\FA66";
+}
+.mdi-relative-scale::before {
+  content: "\F452";
+}
+.mdi-reload::before {
+  content: "\F453";
+}
+.mdi-reload-alert::before {
+  content: "\F0136";
+}
+.mdi-reminder::before {
+  content: "\F88B";
+}
+.mdi-remote::before {
+  content: "\F454";
+}
+.mdi-remote-desktop::before {
+  content: "\F8B8";
+}
+.mdi-remote-off::before {
+  content: "\FEE1";
+}
+.mdi-remote-tv::before {
+  content: "\FEE2";
+}
+.mdi-remote-tv-off::before {
+  content: "\FEE3";
+}
+.mdi-rename-box::before {
+  content: "\F455";
+}
+.mdi-reorder-horizontal::before {
+  content: "\F687";
+}
+.mdi-reorder-vertical::before {
+  content: "\F688";
+}
+.mdi-repeat::before {
+  content: "\F456";
+}
+.mdi-repeat-off::before {
+  content: "\F457";
+}
+.mdi-repeat-once::before {
+  content: "\F458";
+}
+.mdi-replay::before {
+  content: "\F459";
+}
+.mdi-reply::before {
+  content: "\F45A";
+}
+.mdi-reply-all::before {
+  content: "\F45B";
+}
+.mdi-reply-all-outline::before {
+  content: "\FF3C";
+}
+.mdi-reply-circle::before {
+  content: "\F01D9";
+}
+.mdi-reply-outline::before {
+  content: "\FF3D";
+}
+.mdi-reproduction::before {
+  content: "\F45C";
+}
+.mdi-resistor::before {
+  content: "\FB1F";
+}
+.mdi-resistor-nodes::before {
+  content: "\FB20";
+}
+.mdi-resize::before {
+  content: "\FA67";
+}
+.mdi-resize-bottom-right::before {
+  content: "\F45D";
+}
+.mdi-responsive::before {
+  content: "\F45E";
+}
+.mdi-restart::before {
+  content: "\F708";
+}
+.mdi-restart-alert::before {
+  content: "\F0137";
+}
+.mdi-restart-off::before {
+  content: "\FD71";
+}
+.mdi-restore::before {
+  content: "\F99A";
+}
+.mdi-restore-alert::before {
+  content: "\F0138";
+}
+.mdi-rewind::before {
+  content: "\F45F";
+}
+.mdi-rewind-10::before {
+  content: "\FD06";
+}
+.mdi-rewind-30::before {
+  content: "\FD72";
+}
+.mdi-rewind-5::before {
+  content: "\F0224";
+}
+.mdi-rewind-outline::before {
+  content: "\F709";
+}
+.mdi-rhombus::before {
+  content: "\F70A";
+}
+.mdi-rhombus-medium::before {
+  content: "\FA0F";
+}
+.mdi-rhombus-outline::before {
+  content: "\F70B";
+}
+.mdi-rhombus-split::before {
+  content: "\FA10";
+}
+.mdi-ribbon::before {
+  content: "\F460";
+}
+.mdi-rice::before {
+  content: "\F7E9";
+}
+.mdi-ring::before {
+  content: "\F7EA";
+}
+.mdi-rivet::before {
+  content: "\FE43";
+}
+.mdi-road::before {
+  content: "\F461";
+}
+.mdi-road-variant::before {
+  content: "\F462";
+}
+.mdi-robber::before {
+  content: "\F007A";
+}
+.mdi-robot::before {
+  content: "\F6A8";
+}
+.mdi-robot-industrial::before {
+  content: "\FB21";
+}
+.mdi-robot-mower::before {
+  content: "\F0222";
+}
+.mdi-robot-mower-outline::before {
+  content: "\F021E";
+}
+.mdi-robot-vacuum::before {
+  content: "\F70C";
+}
+.mdi-robot-vacuum-variant::before {
+  content: "\F907";
+}
+.mdi-rocket::before {
+  content: "\F463";
+}
+.mdi-rodent::before {
+  content: "\F0352";
+}
+.mdi-roller-skate::before {
+  content: "\FD07";
+}
+.mdi-rollerblade::before {
+  content: "\FD08";
+}
+.mdi-rollupjs::before {
+  content: "\FB9C";
+}
+.mdi-roman-numeral-1::before {
+  content: "\F00B3";
+}
+.mdi-roman-numeral-10::before {
+  content: "\F00BC";
+}
+.mdi-roman-numeral-2::before {
+  content: "\F00B4";
+}
+.mdi-roman-numeral-3::before {
+  content: "\F00B5";
+}
+.mdi-roman-numeral-4::before {
+  content: "\F00B6";
+}
+.mdi-roman-numeral-5::before {
+  content: "\F00B7";
+}
+.mdi-roman-numeral-6::before {
+  content: "\F00B8";
+}
+.mdi-roman-numeral-7::before {
+  content: "\F00B9";
+}
+.mdi-roman-numeral-8::before {
+  content: "\F00BA";
+}
+.mdi-roman-numeral-9::before {
+  content: "\F00BB";
+}
+.mdi-room-service::before {
+  content: "\F88C";
+}
+.mdi-room-service-outline::before {
+  content: "\FD73";
+}
+.mdi-rotate-3d::before {
+  content: "\FEE4";
+}
+.mdi-rotate-3d-variant::before {
+  content: "\F464";
+}
+.mdi-rotate-left::before {
+  content: "\F465";
+}
+.mdi-rotate-left-variant::before {
+  content: "\F466";
+}
+.mdi-rotate-orbit::before {
+  content: "\FD74";
+}
+.mdi-rotate-right::before {
+  content: "\F467";
+}
+.mdi-rotate-right-variant::before {
+  content: "\F468";
+}
+.mdi-rounded-corner::before {
+  content: "\F607";
+}
+.mdi-router::before {
+  content: "\F020D";
+}
+.mdi-router-wireless::before {
+  content: "\F469";
+}
+.mdi-router-wireless-settings::before {
+  content: "\FA68";
+}
+.mdi-routes::before {
+  content: "\F46A";
+}
+.mdi-routes-clock::before {
+  content: "\F007B";
+}
+.mdi-rowing::before {
+  content: "\F608";
+}
+.mdi-rss::before {
+  content: "\F46B";
+}
+.mdi-rss-box::before {
+  content: "\F46C";
+}
+.mdi-rss-off::before {
+  content: "\FF3E";
+}
+.mdi-ruby::before {
+  content: "\FD09";
+}
+.mdi-rugby::before {
+  content: "\FD75";
+}
+.mdi-ruler::before {
+  content: "\F46D";
+}
+.mdi-ruler-square::before {
+  content: "\FC9E";
+}
+.mdi-ruler-square-compass::before {
+  content: "\FEDB";
+}
+.mdi-run::before {
+  content: "\F70D";
+}
+.mdi-run-fast::before {
+  content: "\F46E";
+}
+.mdi-rv-truck::before {
+  content: "\F01FF";
+}
+.mdi-sack::before {
+  content: "\FD0A";
+}
+.mdi-sack-percent::before {
+  content: "\FD0B";
+}
+.mdi-safe::before {
+  content: "\FA69";
+}
+.mdi-safe-square::before {
+  content: "\F02A7";
+}
+.mdi-safe-square-outline::before {
+  content: "\F02A8";
+}
+.mdi-safety-goggles::before {
+  content: "\FD0C";
+}
+.mdi-sailing::before {
+  content: "\FEE5";
+}
+.mdi-sale::before {
+  content: "\F46F";
+}
+.mdi-salesforce::before {
+  content: "\F88D";
+}
+.mdi-sass::before {
+  content: "\F7EB";
+}
+.mdi-satellite::before {
+  content: "\F470";
+}
+.mdi-satellite-uplink::before {
+  content: "\F908";
+}
+.mdi-satellite-variant::before {
+  content: "\F471";
+}
+.mdi-sausage::before {
+  content: "\F8B9";
+}
+.mdi-saw-blade::before {
+  content: "\FE44";
+}
+.mdi-saxophone::before {
+  content: "\F609";
+}
+.mdi-scale::before {
+  content: "\F472";
+}
+.mdi-scale-balance::before {
+  content: "\F5D1";
+}
+.mdi-scale-bathroom::before {
+  content: "\F473";
+}
+.mdi-scale-off::before {
+  content: "\F007C";
+}
+.mdi-scanner::before {
+  content: "\F6AA";
+}
+.mdi-scanner-off::before {
+  content: "\F909";
+}
+.mdi-scatter-plot::before {
+  content: "\FEE6";
+}
+.mdi-scatter-plot-outline::before {
+  content: "\FEE7";
+}
+.mdi-school::before {
+  content: "\F474";
+}
+.mdi-school-outline::before {
+  content: "\F01AB";
+}
+.mdi-scissors-cutting::before {
+  content: "\FA6A";
+}
+.mdi-scooter::before {
+  content: "\F0214";
+}
+.mdi-scoreboard::before {
+  content: "\F02A9";
+}
+.mdi-scoreboard-outline::before {
+  content: "\F02AA";
+}
+.mdi-screen-rotation::before {
+  content: "\F475";
+}
+.mdi-screen-rotation-lock::before {
+  content: "\F476";
+}
+.mdi-screw-flat-top::before {
+  content: "\FDCF";
+}
+.mdi-screw-lag::before {
+  content: "\FE54";
+}
+.mdi-screw-machine-flat-top::before {
+  content: "\FE55";
+}
+.mdi-screw-machine-round-top::before {
+  content: "\FE56";
+}
+.mdi-screw-round-top::before {
+  content: "\FE57";
+}
+.mdi-screwdriver::before {
+  content: "\F477";
+}
+.mdi-script::before {
+  content: "\FB9D";
+}
+.mdi-script-outline::before {
+  content: "\F478";
+}
+.mdi-script-text::before {
+  content: "\FB9E";
+}
+.mdi-script-text-outline::before {
+  content: "\FB9F";
+}
+.mdi-sd::before {
+  content: "\F479";
+}
+.mdi-seal::before {
+  content: "\F47A";
+}
+.mdi-seal-variant::before {
+  content: "\FFFA";
+}
+.mdi-search-web::before {
+  content: "\F70E";
+}
+.mdi-seat::before {
+  content: "\FC9F";
+}
+.mdi-seat-flat::before {
+  content: "\F47B";
+}
+.mdi-seat-flat-angled::before {
+  content: "\F47C";
+}
+.mdi-seat-individual-suite::before {
+  content: "\F47D";
+}
+.mdi-seat-legroom-extra::before {
+  content: "\F47E";
+}
+.mdi-seat-legroom-normal::before {
+  content: "\F47F";
+}
+.mdi-seat-legroom-reduced::before {
+  content: "\F480";
+}
+.mdi-seat-outline::before {
+  content: "\FCA0";
+}
+.mdi-seat-passenger::before {
+  content: "\F0274";
+}
+.mdi-seat-recline-extra::before {
+  content: "\F481";
+}
+.mdi-seat-recline-normal::before {
+  content: "\F482";
+}
+.mdi-seatbelt::before {
+  content: "\FCA1";
+}
+.mdi-security::before {
+  content: "\F483";
+}
+.mdi-security-network::before {
+  content: "\F484";
+}
+.mdi-seed::before {
+  content: "\FE45";
+}
+.mdi-seed-outline::before {
+  content: "\FE46";
+}
+.mdi-segment::before {
+  content: "\FEE8";
+}
+.mdi-select::before {
+  content: "\F485";
+}
+.mdi-select-all::before {
+  content: "\F486";
+}
+.mdi-select-color::before {
+  content: "\FD0D";
+}
+.mdi-select-compare::before {
+  content: "\FAD8";
+}
+.mdi-select-drag::before {
+  content: "\FA6B";
+}
+.mdi-select-group::before {
+  content: "\FF9F";
+}
+.mdi-select-inverse::before {
+  content: "\F487";
+}
+.mdi-select-marker::before {
+  content: "\F02AB";
+}
+.mdi-select-multiple::before {
+  content: "\F02AC";
+}
+.mdi-select-multiple-marker::before {
+  content: "\F02AD";
+}
+.mdi-select-off::before {
+  content: "\F488";
+}
+.mdi-select-place::before {
+  content: "\FFFB";
+}
+.mdi-select-search::before {
+  content: "\F022F";
+}
+.mdi-selection::before {
+  content: "\F489";
+}
+.mdi-selection-drag::before {
+  content: "\FA6C";
+}
+.mdi-selection-ellipse::before {
+  content: "\FD0E";
+}
+.mdi-selection-ellipse-arrow-inside::before {
+  content: "\FF3F";
+}
+.mdi-selection-marker::before {
+  content: "\F02AE";
+}
+.mdi-selection-multiple-marker::before {
+  content: "\F02AF";
+}
+.mdi-selection-mutliple::before {
+  content: "\F02B0";
+}
+.mdi-selection-off::before {
+  content: "\F776";
+}
+.mdi-selection-search::before {
+  content: "\F0230";
+}
+.mdi-semantic-web::before {
+  content: "\F0341";
+}
+.mdi-send::before {
+  content: "\F48A";
+}
+.mdi-send-check::before {
+  content: "\F018C";
+}
+.mdi-send-check-outline::before {
+  content: "\F018D";
+}
+.mdi-send-circle::before {
+  content: "\FE58";
+}
+.mdi-send-circle-outline::before {
+  content: "\FE59";
+}
+.mdi-send-clock::before {
+  content: "\F018E";
+}
+.mdi-send-clock-outline::before {
+  content: "\F018F";
+}
+.mdi-send-lock::before {
+  content: "\F7EC";
+}
+.mdi-send-lock-outline::before {
+  content: "\F0191";
+}
+.mdi-send-outline::before {
+  content: "\F0190";
+}
+.mdi-serial-port::before {
+  content: "\F65C";
+}
+.mdi-server::before {
+  content: "\F48B";
+}
+.mdi-server-minus::before {
+  content: "\F48C";
+}
+.mdi-server-network::before {
+  content: "\F48D";
+}
+.mdi-server-network-off::before {
+  content: "\F48E";
+}
+.mdi-server-off::before {
+  content: "\F48F";
+}
+.mdi-server-plus::before {
+  content: "\F490";
+}
+.mdi-server-remove::before {
+  content: "\F491";
+}
+.mdi-server-security::before {
+  content: "\F492";
+}
+.mdi-set-all::before {
+  content: "\F777";
+}
+.mdi-set-center::before {
+  content: "\F778";
+}
+.mdi-set-center-right::before {
+  content: "\F779";
+}
+.mdi-set-left::before {
+  content: "\F77A";
+}
+.mdi-set-left-center::before {
+  content: "\F77B";
+}
+.mdi-set-left-right::before {
+  content: "\F77C";
+}
+.mdi-set-none::before {
+  content: "\F77D";
+}
+.mdi-set-right::before {
+  content: "\F77E";
+}
+.mdi-set-top-box::before {
+  content: "\F99E";
+}
+.mdi-settings::before {
+  content: "\F493";
+}
+.mdi-settings-box::before {
+  content: "\F494";
+}
+.mdi-settings-helper::before {
+  content: "\FA6D";
+}
+.mdi-settings-outline::before {
+  content: "\F8BA";
+}
+.mdi-settings-transfer::before {
+  content: "\F007D";
+}
+.mdi-settings-transfer-outline::before {
+  content: "\F007E";
+}
+.mdi-shaker::before {
+  content: "\F0139";
+}
+.mdi-shaker-outline::before {
+  content: "\F013A";
+}
+.mdi-shape::before {
+  content: "\F830";
+}
+.mdi-shape-circle-plus::before {
+  content: "\F65D";
+}
+.mdi-shape-outline::before {
+  content: "\F831";
+}
+.mdi-shape-oval-plus::before {
+  content: "\F0225";
+}
+.mdi-shape-plus::before {
+  content: "\F495";
+}
+.mdi-shape-polygon-plus::before {
+  content: "\F65E";
+}
+.mdi-shape-rectangle-plus::before {
+  content: "\F65F";
+}
+.mdi-shape-square-plus::before {
+  content: "\F660";
+}
+.mdi-share::before {
+  content: "\F496";
+}
+.mdi-share-all::before {
+  content: "\F021F";
+}
+.mdi-share-all-outline::before {
+  content: "\F0220";
+}
+.mdi-share-circle::before {
+  content: "\F01D8";
+}
+.mdi-share-off::before {
+  content: "\FF40";
+}
+.mdi-share-off-outline::before {
+  content: "\FF41";
+}
+.mdi-share-outline::before {
+  content: "\F931";
+}
+.mdi-share-variant::before {
+  content: "\F497";
+}
+.mdi-sheep::before {
+  content: "\FCA2";
+}
+.mdi-shield::before {
+  content: "\F498";
+}
+.mdi-shield-account::before {
+  content: "\F88E";
+}
+.mdi-shield-account-outline::before {
+  content: "\FA11";
+}
+.mdi-shield-airplane::before {
+  content: "\F6BA";
+}
+.mdi-shield-airplane-outline::before {
+  content: "\FCA3";
+}
+.mdi-shield-alert::before {
+  content: "\FEE9";
+}
+.mdi-shield-alert-outline::before {
+  content: "\FEEA";
+}
+.mdi-shield-car::before {
+  content: "\FFA0";
+}
+.mdi-shield-check::before {
+  content: "\F565";
+}
+.mdi-shield-check-outline::before {
+  content: "\FCA4";
+}
+.mdi-shield-cross::before {
+  content: "\FCA5";
+}
+.mdi-shield-cross-outline::before {
+  content: "\FCA6";
+}
+.mdi-shield-edit::before {
+  content: "\F01CB";
+}
+.mdi-shield-edit-outline::before {
+  content: "\F01CC";
+}
+.mdi-shield-half::before {
+  content: "\F038B";
+}
+.mdi-shield-half-full::before {
+  content: "\F77F";
+}
+.mdi-shield-home::before {
+  content: "\F689";
+}
+.mdi-shield-home-outline::before {
+  content: "\FCA7";
+}
+.mdi-shield-key::before {
+  content: "\FBA0";
+}
+.mdi-shield-key-outline::before {
+  content: "\FBA1";
+}
+.mdi-shield-link-variant::before {
+  content: "\FD0F";
+}
+.mdi-shield-link-variant-outline::before {
+  content: "\FD10";
+}
+.mdi-shield-lock::before {
+  content: "\F99C";
+}
+.mdi-shield-lock-outline::before {
+  content: "\FCA8";
+}
+.mdi-shield-off::before {
+  content: "\F99D";
+}
+.mdi-shield-off-outline::before {
+  content: "\F99B";
+}
+.mdi-shield-outline::before {
+  content: "\F499";
+}
+.mdi-shield-plus::before {
+  content: "\FAD9";
+}
+.mdi-shield-plus-outline::before {
+  content: "\FADA";
+}
+.mdi-shield-refresh::before {
+  content: "\F01CD";
+}
+.mdi-shield-refresh-outline::before {
+  content: "\F01CE";
+}
+.mdi-shield-remove::before {
+  content: "\FADB";
+}
+.mdi-shield-remove-outline::before {
+  content: "\FADC";
+}
+.mdi-shield-search::before {
+  content: "\FD76";
+}
+.mdi-shield-star::before {
+  content: "\F0166";
+}
+.mdi-shield-star-outline::before {
+  content: "\F0167";
+}
+.mdi-shield-sun::before {
+  content: "\F007F";
+}
+.mdi-shield-sun-outline::before {
+  content: "\F0080";
+}
+.mdi-ship-wheel::before {
+  content: "\F832";
+}
+.mdi-shoe-formal::before {
+  content: "\FB22";
+}
+.mdi-shoe-heel::before {
+  content: "\FB23";
+}
+.mdi-shoe-print::before {
+  content: "\FE5A";
+}
+.mdi-shopify::before {
+  content: "\FADD";
+}
+.mdi-shopping::before {
+  content: "\F49A";
+}
+.mdi-shopping-music::before {
+  content: "\F49B";
+}
+.mdi-shopping-outline::before {
+  content: "\F0200";
+}
+.mdi-shopping-search::before {
+  content: "\FFA1";
+}
+.mdi-shovel::before {
+  content: "\F70F";
+}
+.mdi-shovel-off::before {
+  content: "\F710";
+}
+.mdi-shower::before {
+  content: "\F99F";
+}
+.mdi-shower-head::before {
+  content: "\F9A0";
+}
+.mdi-shredder::before {
+  content: "\F49C";
+}
+.mdi-shuffle::before {
+  content: "\F49D";
+}
+.mdi-shuffle-disabled::before {
+  content: "\F49E";
+}
+.mdi-shuffle-variant::before {
+  content: "\F49F";
+}
+.mdi-shuriken::before {
+  content: "\F03AA";
+}
+.mdi-sigma::before {
+  content: "\F4A0";
+}
+.mdi-sigma-lower::before {
+  content: "\F62B";
+}
+.mdi-sign-caution::before {
+  content: "\F4A1";
+}
+.mdi-sign-direction::before {
+  content: "\F780";
+}
+.mdi-sign-direction-minus::before {
+  content: "\F0022";
+}
+.mdi-sign-direction-plus::before {
+  content: "\FFFD";
+}
+.mdi-sign-direction-remove::before {
+  content: "\FFFE";
+}
+.mdi-sign-real-estate::before {
+  content: "\F0143";
+}
+.mdi-sign-text::before {
+  content: "\F781";
+}
+.mdi-signal::before {
+  content: "\F4A2";
+}
+.mdi-signal-2g::before {
+  content: "\F711";
+}
+.mdi-signal-3g::before {
+  content: "\F712";
+}
+.mdi-signal-4g::before {
+  content: "\F713";
+}
+.mdi-signal-5g::before {
+  content: "\FA6E";
+}
+.mdi-signal-cellular-1::before {
+  content: "\F8BB";
+}
+.mdi-signal-cellular-2::before {
+  content: "\F8BC";
+}
+.mdi-signal-cellular-3::before {
+  content: "\F8BD";
+}
+.mdi-signal-cellular-outline::before {
+  content: "\F8BE";
+}
+.mdi-signal-distance-variant::before {
+  content: "\FE47";
+}
+.mdi-signal-hspa::before {
+  content: "\F714";
+}
+.mdi-signal-hspa-plus::before {
+  content: "\F715";
+}
+.mdi-signal-off::before {
+  content: "\F782";
+}
+.mdi-signal-variant::before {
+  content: "\F60A";
+}
+.mdi-signature::before {
+  content: "\FE5B";
+}
+.mdi-signature-freehand::before {
+  content: "\FE5C";
+}
+.mdi-signature-image::before {
+  content: "\FE5D";
+}
+.mdi-signature-text::before {
+  content: "\FE5E";
+}
+.mdi-silo::before {
+  content: "\FB24";
+}
+.mdi-silverware::before {
+  content: "\F4A3";
+}
+.mdi-silverware-clean::before {
+  content: "\FFFF";
+}
+.mdi-silverware-fork::before {
+  content: "\F4A4";
+}
+.mdi-silverware-fork-knife::before {
+  content: "\FA6F";
+}
+.mdi-silverware-spoon::before {
+  content: "\F4A5";
+}
+.mdi-silverware-variant::before {
+  content: "\F4A6";
+}
+.mdi-sim::before {
+  content: "\F4A7";
+}
+.mdi-sim-alert::before {
+  content: "\F4A8";
+}
+.mdi-sim-off::before {
+  content: "\F4A9";
+}
+.mdi-simple-icons::before {
+  content: "\F0348";
+}
+.mdi-sina-weibo::before {
+  content: "\FADE";
+}
+.mdi-sitemap::before {
+  content: "\F4AA";
+}
+.mdi-skate::before {
+  content: "\FD11";
+}
+.mdi-skew-less::before {
+  content: "\FD12";
+}
+.mdi-skew-more::before {
+  content: "\FD13";
+}
+.mdi-ski::before {
+  content: "\F032F";
+}
+.mdi-ski-cross-country::before {
+  content: "\F0330";
+}
+.mdi-ski-water::before {
+  content: "\F0331";
+}
+.mdi-skip-backward::before {
+  content: "\F4AB";
+}
+.mdi-skip-backward-outline::before {
+  content: "\FF42";
+}
+.mdi-skip-forward::before {
+  content: "\F4AC";
+}
+.mdi-skip-forward-outline::before {
+  content: "\FF43";
+}
+.mdi-skip-next::before {
+  content: "\F4AD";
+}
+.mdi-skip-next-circle::before {
+  content: "\F661";
+}
+.mdi-skip-next-circle-outline::before {
+  content: "\F662";
+}
+.mdi-skip-next-outline::before {
+  content: "\FF44";
+}
+.mdi-skip-previous::before {
+  content: "\F4AE";
+}
+.mdi-skip-previous-circle::before {
+  content: "\F663";
+}
+.mdi-skip-previous-circle-outline::before {
+  content: "\F664";
+}
+.mdi-skip-previous-outline::before {
+  content: "\FF45";
+}
+.mdi-skull::before {
+  content: "\F68B";
+}
+.mdi-skull-crossbones::before {
+  content: "\FBA2";
+}
+.mdi-skull-crossbones-outline::before {
+  content: "\FBA3";
+}
+.mdi-skull-outline::before {
+  content: "\FBA4";
+}
+.mdi-skype::before {
+  content: "\F4AF";
+}
+.mdi-skype-business::before {
+  content: "\F4B0";
+}
+.mdi-slack::before {
+  content: "\F4B1";
+}
+.mdi-slackware::before {
+  content: "\F90A";
+}
+.mdi-slash-forward::before {
+  content: "\F0000";
+}
+.mdi-slash-forward-box::before {
+  content: "\F0001";
+}
+.mdi-sleep::before {
+  content: "\F4B2";
+}
+.mdi-sleep-off::before {
+  content: "\F4B3";
+}
+.mdi-slope-downhill::before {
+  content: "\FE5F";
+}
+.mdi-slope-uphill::before {
+  content: "\FE60";
+}
+.mdi-slot-machine::before {
+  content: "\F013F";
+}
+.mdi-slot-machine-outline::before {
+  content: "\F0140";
+}
+.mdi-smart-card::before {
+  content: "\F00E8";
+}
+.mdi-smart-card-outline::before {
+  content: "\F00E9";
+}
+.mdi-smart-card-reader::before {
+  content: "\F00EA";
+}
+.mdi-smart-card-reader-outline::before {
+  content: "\F00EB";
+}
+.mdi-smog::before {
+  content: "\FA70";
+}
+.mdi-smoke-detector::before {
+  content: "\F392";
+}
+.mdi-smoking::before {
+  content: "\F4B4";
+}
+.mdi-smoking-off::before {
+  content: "\F4B5";
+}
+.mdi-snapchat::before {
+  content: "\F4B6";
+}
+.mdi-snowboard::before {
+  content: "\F0332";
+}
+.mdi-snowflake::before {
+  content: "\F716";
+}
+.mdi-snowflake-alert::before {
+  content: "\FF46";
+}
+.mdi-snowflake-melt::before {
+  content: "\F02F6";
+}
+.mdi-snowflake-variant::before {
+  content: "\FF47";
+}
+.mdi-snowman::before {
+  content: "\F4B7";
+}
+.mdi-soccer::before {
+  content: "\F4B8";
+}
+.mdi-soccer-field::before {
+  content: "\F833";
+}
+.mdi-sofa::before {
+  content: "\F4B9";
+}
+.mdi-solar-panel::before {
+  content: "\FD77";
+}
+.mdi-solar-panel-large::before {
+  content: "\FD78";
+}
+.mdi-solar-power::before {
+  content: "\FA71";
+}
+.mdi-soldering-iron::before {
+  content: "\F00BD";
+}
+.mdi-solid::before {
+  content: "\F68C";
+}
+.mdi-sort::before {
+  content: "\F4BA";
+}
+.mdi-sort-alphabetical::before {
+  content: "\F4BB";
+}
+.mdi-sort-alphabetical-ascending::before {
+  content: "\F0173";
+}
+.mdi-sort-alphabetical-descending::before {
+  content: "\F0174";
+}
+.mdi-sort-ascending::before {
+  content: "\F4BC";
+}
+.mdi-sort-descending::before {
+  content: "\F4BD";
+}
+.mdi-sort-numeric::before {
+  content: "\F4BE";
+}
+.mdi-sort-variant::before {
+  content: "\F4BF";
+}
+.mdi-sort-variant-lock::before {
+  content: "\FCA9";
+}
+.mdi-sort-variant-lock-open::before {
+  content: "\FCAA";
+}
+.mdi-sort-variant-remove::before {
+  content: "\F0172";
+}
+.mdi-soundcloud::before {
+  content: "\F4C0";
+}
+.mdi-source-branch::before {
+  content: "\F62C";
+}
+.mdi-source-commit::before {
+  content: "\F717";
+}
+.mdi-source-commit-end::before {
+  content: "\F718";
+}
+.mdi-source-commit-end-local::before {
+  content: "\F719";
+}
+.mdi-source-commit-local::before {
+  content: "\F71A";
+}
+.mdi-source-commit-next-local::before {
+  content: "\F71B";
+}
+.mdi-source-commit-start::before {
+  content: "\F71C";
+}
+.mdi-source-commit-start-next-local::before {
+  content: "\F71D";
+}
+.mdi-source-fork::before {
+  content: "\F4C1";
+}
+.mdi-source-merge::before {
+  content: "\F62D";
+}
+.mdi-source-pull::before {
+  content: "\F4C2";
+}
+.mdi-source-repository::before {
+  content: "\FCAB";
+}
+.mdi-source-repository-multiple::before {
+  content: "\FCAC";
+}
+.mdi-soy-sauce::before {
+  content: "\F7ED";
+}
+.mdi-spa::before {
+  content: "\FCAD";
+}
+.mdi-spa-outline::before {
+  content: "\FCAE";
+}
+.mdi-space-invaders::before {
+  content: "\FBA5";
+}
+.mdi-space-station::before {
+  content: "\F03AE";
+}
+.mdi-spade::before {
+  content: "\FE48";
+}
+.mdi-speaker::before {
+  content: "\F4C3";
+}
+.mdi-speaker-bluetooth::before {
+  content: "\F9A1";
+}
+.mdi-speaker-multiple::before {
+  content: "\FD14";
+}
+.mdi-speaker-off::before {
+  content: "\F4C4";
+}
+.mdi-speaker-wireless::before {
+  content: "\F71E";
+}
+.mdi-speedometer::before {
+  content: "\F4C5";
+}
+.mdi-speedometer-medium::before {
+  content: "\FFA2";
+}
+.mdi-speedometer-slow::before {
+  content: "\FFA3";
+}
+.mdi-spellcheck::before {
+  content: "\F4C6";
+}
+.mdi-spider::before {
+  content: "\F0215";
+}
+.mdi-spider-thread::before {
+  content: "\F0216";
+}
+.mdi-spider-web::before {
+  content: "\FBA6";
+}
+.mdi-spotify::before {
+  content: "\F4C7";
+}
+.mdi-spotlight::before {
+  content: "\F4C8";
+}
+.mdi-spotlight-beam::before {
+  content: "\F4C9";
+}
+.mdi-spray::before {
+  content: "\F665";
+}
+.mdi-spray-bottle::before {
+  content: "\FADF";
+}
+.mdi-sprinkler::before {
+  content: "\F0081";
+}
+.mdi-sprinkler-variant::before {
+  content: "\F0082";
+}
+.mdi-sprout::before {
+  content: "\FE49";
+}
+.mdi-sprout-outline::before {
+  content: "\FE4A";
+}
+.mdi-square::before {
+  content: "\F763";
+}
+.mdi-square-edit-outline::before {
+  content: "\F90B";
+}
+.mdi-square-inc::before {
+  content: "\F4CA";
+}
+.mdi-square-inc-cash::before {
+  content: "\F4CB";
+}
+.mdi-square-medium::before {
+  content: "\FA12";
+}
+.mdi-square-medium-outline::before {
+  content: "\FA13";
+}
+.mdi-square-off::before {
+  content: "\F0319";
+}
+.mdi-square-off-outline::before {
+  content: "\F031A";
+}
+.mdi-square-outline::before {
+  content: "\F762";
+}
+.mdi-square-root::before {
+  content: "\F783";
+}
+.mdi-square-root-box::before {
+  content: "\F9A2";
+}
+.mdi-square-small::before {
+  content: "\FA14";
+}
+.mdi-squeegee::before {
+  content: "\FAE0";
+}
+.mdi-ssh::before {
+  content: "\F8BF";
+}
+.mdi-stack-exchange::before {
+  content: "\F60B";
+}
+.mdi-stack-overflow::before {
+  content: "\F4CC";
+}
+.mdi-stackpath::before {
+  content: "\F359";
+}
+.mdi-stadium::before {
+  content: "\F001A";
+}
+.mdi-stadium-variant::before {
+  content: "\F71F";
+}
+.mdi-stairs::before {
+  content: "\F4CD";
+}
+.mdi-stairs-down::before {
+  content: "\F02E9";
+}
+.mdi-stairs-up::before {
+  content: "\F02E8";
+}
+.mdi-stamper::before {
+  content: "\FD15";
+}
+.mdi-standard-definition::before {
+  content: "\F7EE";
+}
+.mdi-star::before {
+  content: "\F4CE";
+}
+.mdi-star-box::before {
+  content: "\FA72";
+}
+.mdi-star-box-multiple::before {
+  content: "\F02B1";
+}
+.mdi-star-box-multiple-outline::before {
+  content: "\F02B2";
+}
+.mdi-star-box-outline::before {
+  content: "\FA73";
+}
+.mdi-star-circle::before {
+  content: "\F4CF";
+}
+.mdi-star-circle-outline::before {
+  content: "\F9A3";
+}
+.mdi-star-face::before {
+  content: "\F9A4";
+}
+.mdi-star-four-points::before {
+  content: "\FAE1";
+}
+.mdi-star-four-points-outline::before {
+  content: "\FAE2";
+}
+.mdi-star-half::before {
+  content: "\F4D0";
+}
+.mdi-star-off::before {
+  content: "\F4D1";
+}
+.mdi-star-outline::before {
+  content: "\F4D2";
+}
+.mdi-star-three-points::before {
+  content: "\FAE3";
+}
+.mdi-star-three-points-outline::before {
+  content: "\FAE4";
+}
+.mdi-state-machine::before {
+  content: "\F021A";
+}
+.mdi-steam::before {
+  content: "\F4D3";
+}
+.mdi-steam-box::before {
+  content: "\F90C";
+}
+.mdi-steering::before {
+  content: "\F4D4";
+}
+.mdi-steering-off::before {
+  content: "\F90D";
+}
+.mdi-step-backward::before {
+  content: "\F4D5";
+}
+.mdi-step-backward-2::before {
+  content: "\F4D6";
+}
+.mdi-step-forward::before {
+  content: "\F4D7";
+}
+.mdi-step-forward-2::before {
+  content: "\F4D8";
+}
+.mdi-stethoscope::before {
+  content: "\F4D9";
+}
+.mdi-sticker::before {
+  content: "\F038F";
+}
+.mdi-sticker-alert::before {
+  content: "\F0390";
+}
+.mdi-sticker-alert-outline::before {
+  content: "\F0391";
+}
+.mdi-sticker-check::before {
+  content: "\F0392";
+}
+.mdi-sticker-check-outline::before {
+  content: "\F0393";
+}
+.mdi-sticker-circle-outline::before {
+  content: "\F5D0";
+}
+.mdi-sticker-emoji::before {
+  content: "\F784";
+}
+.mdi-sticker-minus::before {
+  content: "\F0394";
+}
+.mdi-sticker-minus-outline::before {
+  content: "\F0395";
+}
+.mdi-sticker-outline::before {
+  content: "\F0396";
+}
+.mdi-sticker-plus::before {
+  content: "\F0397";
+}
+.mdi-sticker-plus-outline::before {
+  content: "\F0398";
+}
+.mdi-sticker-remove::before {
+  content: "\F0399";
+}
+.mdi-sticker-remove-outline::before {
+  content: "\F039A";
+}
+.mdi-stocking::before {
+  content: "\F4DA";
+}
+.mdi-stomach::before {
+  content: "\F00BE";
+}
+.mdi-stop::before {
+  content: "\F4DB";
+}
+.mdi-stop-circle::before {
+  content: "\F666";
+}
+.mdi-stop-circle-outline::before {
+  content: "\F667";
+}
+.mdi-store::before {
+  content: "\F4DC";
+}
+.mdi-store-24-hour::before {
+  content: "\F4DD";
+}
+.mdi-store-outline::before {
+  content: "\F038C";
+}
+.mdi-storefront::before {
+  content: "\F00EC";
+}
+.mdi-stove::before {
+  content: "\F4DE";
+}
+.mdi-strategy::before {
+  content: "\F0201";
+}
+.mdi-strava::before {
+  content: "\FB25";
+}
+.mdi-stretch-to-page::before {
+  content: "\FF48";
+}
+.mdi-stretch-to-page-outline::before {
+  content: "\FF49";
+}
+.mdi-string-lights::before {
+  content: "\F02E5";
+}
+.mdi-string-lights-off::before {
+  content: "\F02E6";
+}
+.mdi-subdirectory-arrow-left::before {
+  content: "\F60C";
+}
+.mdi-subdirectory-arrow-right::before {
+  content: "\F60D";
+}
+.mdi-subtitles::before {
+  content: "\FA15";
+}
+.mdi-subtitles-outline::before {
+  content: "\FA16";
+}
+.mdi-subway::before {
+  content: "\F6AB";
+}
+.mdi-subway-alert-variant::before {
+  content: "\FD79";
+}
+.mdi-subway-variant::before {
+  content: "\F4DF";
+}
+.mdi-summit::before {
+  content: "\F785";
+}
+.mdi-sunglasses::before {
+  content: "\F4E0";
+}
+.mdi-surround-sound::before {
+  content: "\F5C5";
+}
+.mdi-surround-sound-2-0::before {
+  content: "\F7EF";
+}
+.mdi-surround-sound-3-1::before {
+  content: "\F7F0";
+}
+.mdi-surround-sound-5-1::before {
+  content: "\F7F1";
+}
+.mdi-surround-sound-7-1::before {
+  content: "\F7F2";
+}
+.mdi-svg::before {
+  content: "\F720";
+}
+.mdi-swap-horizontal::before {
+  content: "\F4E1";
+}
+.mdi-swap-horizontal-bold::before {
+  content: "\FBA9";
+}
+.mdi-swap-horizontal-circle::before {
+  content: "\F0002";
+}
+.mdi-swap-horizontal-circle-outline::before {
+  content: "\F0003";
+}
+.mdi-swap-horizontal-variant::before {
+  content: "\F8C0";
+}
+.mdi-swap-vertical::before {
+  content: "\F4E2";
+}
+.mdi-swap-vertical-bold::before {
+  content: "\FBAA";
+}
+.mdi-swap-vertical-circle::before {
+  content: "\F0004";
+}
+.mdi-swap-vertical-circle-outline::before {
+  content: "\F0005";
+}
+.mdi-swap-vertical-variant::before {
+  content: "\F8C1";
+}
+.mdi-swim::before {
+  content: "\F4E3";
+}
+.mdi-switch::before {
+  content: "\F4E4";
+}
+.mdi-sword::before {
+  content: "\F4E5";
+}
+.mdi-sword-cross::before {
+  content: "\F786";
+}
+.mdi-syllabary-hangul::before {
+  content: "\F035E";
+}
+.mdi-syllabary-hiragana::before {
+  content: "\F035F";
+}
+.mdi-syllabary-katakana::before {
+  content: "\F0360";
+}
+.mdi-syllabary-katakana-half-width::before {
+  content: "\F0361";
+}
+.mdi-symfony::before {
+  content: "\FAE5";
+}
+.mdi-sync::before {
+  content: "\F4E6";
+}
+.mdi-sync-alert::before {
+  content: "\F4E7";
+}
+.mdi-sync-circle::before {
+  content: "\F03A3";
+}
+.mdi-sync-off::before {
+  content: "\F4E8";
+}
+.mdi-tab::before {
+  content: "\F4E9";
+}
+.mdi-tab-minus::before {
+  content: "\FB26";
+}
+.mdi-tab-plus::before {
+  content: "\F75B";
+}
+.mdi-tab-remove::before {
+  content: "\FB27";
+}
+.mdi-tab-unselected::before {
+  content: "\F4EA";
+}
+.mdi-table::before {
+  content: "\F4EB";
+}
+.mdi-table-border::before {
+  content: "\FA17";
+}
+.mdi-table-chair::before {
+  content: "\F0083";
+}
+.mdi-table-column::before {
+  content: "\F834";
+}
+.mdi-table-column-plus-after::before {
+  content: "\F4EC";
+}
+.mdi-table-column-plus-before::before {
+  content: "\F4ED";
+}
+.mdi-table-column-remove::before {
+  content: "\F4EE";
+}
+.mdi-table-column-width::before {
+  content: "\F4EF";
+}
+.mdi-table-edit::before {
+  content: "\F4F0";
+}
+.mdi-table-eye::before {
+  content: "\F00BF";
+}
+.mdi-table-headers-eye::before {
+  content: "\F0248";
+}
+.mdi-table-headers-eye-off::before {
+  content: "\F0249";
+}
+.mdi-table-large::before {
+  content: "\F4F1";
+}
+.mdi-table-large-plus::before {
+  content: "\FFA4";
+}
+.mdi-table-large-remove::before {
+  content: "\FFA5";
+}
+.mdi-table-merge-cells::before {
+  content: "\F9A5";
+}
+.mdi-table-of-contents::before {
+  content: "\F835";
+}
+.mdi-table-plus::before {
+  content: "\FA74";
+}
+.mdi-table-remove::before {
+  content: "\FA75";
+}
+.mdi-table-row::before {
+  content: "\F836";
+}
+.mdi-table-row-height::before {
+  content: "\F4F2";
+}
+.mdi-table-row-plus-after::before {
+  content: "\F4F3";
+}
+.mdi-table-row-plus-before::before {
+  content: "\F4F4";
+}
+.mdi-table-row-remove::before {
+  content: "\F4F5";
+}
+.mdi-table-search::before {
+  content: "\F90E";
+}
+.mdi-table-settings::before {
+  content: "\F837";
+}
+.mdi-table-tennis::before {
+  content: "\FE4B";
+}
+.mdi-tablet::before {
+  content: "\F4F6";
+}
+.mdi-tablet-android::before {
+  content: "\F4F7";
+}
+.mdi-tablet-cellphone::before {
+  content: "\F9A6";
+}
+.mdi-tablet-dashboard::before {
+  content: "\FEEB";
+}
+.mdi-tablet-ipad::before {
+  content: "\F4F8";
+}
+.mdi-taco::before {
+  content: "\F761";
+}
+.mdi-tag::before {
+  content: "\F4F9";
+}
+.mdi-tag-faces::before {
+  content: "\F4FA";
+}
+.mdi-tag-heart::before {
+  content: "\F68A";
+}
+.mdi-tag-heart-outline::before {
+  content: "\FBAB";
+}
+.mdi-tag-minus::before {
+  content: "\F90F";
+}
+.mdi-tag-minus-outline::before {
+  content: "\F024A";
+}
+.mdi-tag-multiple::before {
+  content: "\F4FB";
+}
+.mdi-tag-multiple-outline::before {
+  content: "\F0322";
+}
+.mdi-tag-off::before {
+  content: "\F024B";
+}
+.mdi-tag-off-outline::before {
+  content: "\F024C";
+}
+.mdi-tag-outline::before {
+  content: "\F4FC";
+}
+.mdi-tag-plus::before {
+  content: "\F721";
+}
+.mdi-tag-plus-outline::before {
+  content: "\F024D";
+}
+.mdi-tag-remove::before {
+  content: "\F722";
+}
+.mdi-tag-remove-outline::before {
+  content: "\F024E";
+}
+.mdi-tag-text::before {
+  content: "\F024F";
+}
+.mdi-tag-text-outline::before {
+  content: "\F4FD";
+}
+.mdi-tank::before {
+  content: "\FD16";
+}
+.mdi-tanker-truck::before {
+  content: "\F0006";
+}
+.mdi-tape-measure::before {
+  content: "\FB28";
+}
+.mdi-target::before {
+  content: "\F4FE";
+}
+.mdi-target-account::before {
+  content: "\FBAC";
+}
+.mdi-target-variant::before {
+  content: "\FA76";
+}
+.mdi-taxi::before {
+  content: "\F4FF";
+}
+.mdi-tea::before {
+  content: "\FD7A";
+}
+.mdi-tea-outline::before {
+  content: "\FD7B";
+}
+.mdi-teach::before {
+  content: "\F88F";
+}
+.mdi-teamviewer::before {
+  content: "\F500";
+}
+.mdi-telegram::before {
+  content: "\F501";
+}
+.mdi-telescope::before {
+  content: "\FB29";
+}
+.mdi-television::before {
+  content: "\F502";
+}
+.mdi-television-ambient-light::before {
+  content: "\F0381";
+}
+.mdi-television-box::before {
+  content: "\F838";
+}
+.mdi-television-classic::before {
+  content: "\F7F3";
+}
+.mdi-television-classic-off::before {
+  content: "\F839";
+}
+.mdi-television-clean::before {
+  content: "\F013B";
+}
+.mdi-television-guide::before {
+  content: "\F503";
+}
+.mdi-television-off::before {
+  content: "\F83A";
+}
+.mdi-television-pause::before {
+  content: "\FFA6";
+}
+.mdi-television-play::before {
+  content: "\FEEC";
+}
+.mdi-television-stop::before {
+  content: "\FFA7";
+}
+.mdi-temperature-celsius::before {
+  content: "\F504";
+}
+.mdi-temperature-fahrenheit::before {
+  content: "\F505";
+}
+.mdi-temperature-kelvin::before {
+  content: "\F506";
+}
+.mdi-tennis::before {
+  content: "\FD7C";
+}
+.mdi-tennis-ball::before {
+  content: "\F507";
+}
+.mdi-tent::before {
+  content: "\F508";
+}
+.mdi-terraform::before {
+  content: "\F0084";
+}
+.mdi-terrain::before {
+  content: "\F509";
+}
+.mdi-test-tube::before {
+  content: "\F668";
+}
+.mdi-test-tube-empty::before {
+  content: "\F910";
+}
+.mdi-test-tube-off::before {
+  content: "\F911";
+}
+.mdi-text::before {
+  content: "\F9A7";
+}
+.mdi-text-recognition::before {
+  content: "\F0168";
+}
+.mdi-text-shadow::before {
+  content: "\F669";
+}
+.mdi-text-short::before {
+  content: "\F9A8";
+}
+.mdi-text-subject::before {
+  content: "\F9A9";
+}
+.mdi-text-to-speech::before {
+  content: "\F50A";
+}
+.mdi-text-to-speech-off::before {
+  content: "\F50B";
+}
+.mdi-textarea::before {
+  content: "\F00C0";
+}
+.mdi-textbox::before {
+  content: "\F60E";
+}
+.mdi-textbox-lock::before {
+  content: "\F0388";
+}
+.mdi-textbox-password::before {
+  content: "\F7F4";
+}
+.mdi-texture::before {
+  content: "\F50C";
+}
+.mdi-texture-box::before {
+  content: "\F0007";
+}
+.mdi-theater::before {
+  content: "\F50D";
+}
+.mdi-theme-light-dark::before {
+  content: "\F50E";
+}
+.mdi-thermometer::before {
+  content: "\F50F";
+}
+.mdi-thermometer-alert::before {
+  content: "\FE61";
+}
+.mdi-thermometer-chevron-down::before {
+  content: "\FE62";
+}
+.mdi-thermometer-chevron-up::before {
+  content: "\FE63";
+}
+.mdi-thermometer-high::before {
+  content: "\F00ED";
+}
+.mdi-thermometer-lines::before {
+  content: "\F510";
+}
+.mdi-thermometer-low::before {
+  content: "\F00EE";
+}
+.mdi-thermometer-minus::before {
+  content: "\FE64";
+}
+.mdi-thermometer-plus::before {
+  content: "\FE65";
+}
+.mdi-thermostat::before {
+  content: "\F393";
+}
+.mdi-thermostat-box::before {
+  content: "\F890";
+}
+.mdi-thought-bubble::before {
+  content: "\F7F5";
+}
+.mdi-thought-bubble-outline::before {
+  content: "\F7F6";
+}
+.mdi-thumb-down::before {
+  content: "\F511";
+}
+.mdi-thumb-down-outline::before {
+  content: "\F512";
+}
+.mdi-thumb-up::before {
+  content: "\F513";
+}
+.mdi-thumb-up-outline::before {
+  content: "\F514";
+}
+.mdi-thumbs-up-down::before {
+  content: "\F515";
+}
+.mdi-ticket::before {
+  content: "\F516";
+}
+.mdi-ticket-account::before {
+  content: "\F517";
+}
+.mdi-ticket-confirmation::before {
+  content: "\F518";
+}
+.mdi-ticket-outline::before {
+  content: "\F912";
+}
+.mdi-ticket-percent::before {
+  content: "\F723";
+}
+.mdi-tie::before {
+  content: "\F519";
+}
+.mdi-tilde::before {
+  content: "\F724";
+}
+.mdi-timelapse::before {
+  content: "\F51A";
+}
+.mdi-timeline::before {
+  content: "\FBAD";
+}
+.mdi-timeline-alert::before {
+  content: "\FFB2";
+}
+.mdi-timeline-alert-outline::before {
+  content: "\FFB5";
+}
+.mdi-timeline-clock::before {
+  content: "\F0226";
+}
+.mdi-timeline-clock-outline::before {
+  content: "\F0227";
+}
+.mdi-timeline-help::before {
+  content: "\FFB6";
+}
+.mdi-timeline-help-outline::before {
+  content: "\FFB7";
+}
+.mdi-timeline-outline::before {
+  content: "\FBAE";
+}
+.mdi-timeline-plus::before {
+  content: "\FFB3";
+}
+.mdi-timeline-plus-outline::before {
+  content: "\FFB4";
+}
+.mdi-timeline-text::before {
+  content: "\FBAF";
+}
+.mdi-timeline-text-outline::before {
+  content: "\FBB0";
+}
+.mdi-timer::before {
+  content: "\F51B";
+}
+.mdi-timer-10::before {
+  content: "\F51C";
+}
+.mdi-timer-3::before {
+  content: "\F51D";
+}
+.mdi-timer-off::before {
+  content: "\F51E";
+}
+.mdi-timer-sand::before {
+  content: "\F51F";
+}
+.mdi-timer-sand-empty::before {
+  content: "\F6AC";
+}
+.mdi-timer-sand-full::before {
+  content: "\F78B";
+}
+.mdi-timetable::before {
+  content: "\F520";
+}
+.mdi-toaster::before {
+  content: "\F0085";
+}
+.mdi-toaster-off::before {
+  content: "\F01E2";
+}
+.mdi-toaster-oven::before {
+  content: "\FCAF";
+}
+.mdi-toggle-switch::before {
+  content: "\F521";
+}
+.mdi-toggle-switch-off::before {
+  content: "\F522";
+}
+.mdi-toggle-switch-off-outline::before {
+  content: "\FA18";
+}
+.mdi-toggle-switch-outline::before {
+  content: "\FA19";
+}
+.mdi-toilet::before {
+  content: "\F9AA";
+}
+.mdi-toolbox::before {
+  content: "\F9AB";
+}
+.mdi-toolbox-outline::before {
+  content: "\F9AC";
+}
+.mdi-tools::before {
+  content: "\F0086";
+}
+.mdi-tooltip::before {
+  content: "\F523";
+}
+.mdi-tooltip-account::before {
+  content: "\F00C";
+}
+.mdi-tooltip-edit::before {
+  content: "\F524";
+}
+.mdi-tooltip-edit-outline::before {
+  content: "\F02F0";
+}
+.mdi-tooltip-image::before {
+  content: "\F525";
+}
+.mdi-tooltip-image-outline::before {
+  content: "\FBB1";
+}
+.mdi-tooltip-outline::before {
+  content: "\F526";
+}
+.mdi-tooltip-plus::before {
+  content: "\FBB2";
+}
+.mdi-tooltip-plus-outline::before {
+  content: "\F527";
+}
+.mdi-tooltip-text::before {
+  content: "\F528";
+}
+.mdi-tooltip-text-outline::before {
+  content: "\FBB3";
+}
+.mdi-tooth::before {
+  content: "\F8C2";
+}
+.mdi-tooth-outline::before {
+  content: "\F529";
+}
+.mdi-toothbrush::before {
+  content: "\F0154";
+}
+.mdi-toothbrush-electric::before {
+  content: "\F0157";
+}
+.mdi-toothbrush-paste::before {
+  content: "\F0155";
+}
+.mdi-tor::before {
+  content: "\F52A";
+}
+.mdi-tortoise::before {
+  content: "\FD17";
+}
+.mdi-toslink::before {
+  content: "\F02E3";
+}
+.mdi-tournament::before {
+  content: "\F9AD";
+}
+.mdi-tower-beach::before {
+  content: "\F680";
+}
+.mdi-tower-fire::before {
+  content: "\F681";
+}
+.mdi-towing::before {
+  content: "\F83B";
+}
+.mdi-toy-brick::before {
+  content: "\F02B3";
+}
+.mdi-toy-brick-marker::before {
+  content: "\F02B4";
+}
+.mdi-toy-brick-marker-outline::before {
+  content: "\F02B5";
+}
+.mdi-toy-brick-minus::before {
+  content: "\F02B6";
+}
+.mdi-toy-brick-minus-outline::before {
+  content: "\F02B7";
+}
+.mdi-toy-brick-outline::before {
+  content: "\F02B8";
+}
+.mdi-toy-brick-plus::before {
+  content: "\F02B9";
+}
+.mdi-toy-brick-plus-outline::before {
+  content: "\F02BA";
+}
+.mdi-toy-brick-remove::before {
+  content: "\F02BB";
+}
+.mdi-toy-brick-remove-outline::before {
+  content: "\F02BC";
+}
+.mdi-toy-brick-search::before {
+  content: "\F02BD";
+}
+.mdi-toy-brick-search-outline::before {
+  content: "\F02BE";
+}
+.mdi-track-light::before {
+  content: "\F913";
+}
+.mdi-trackpad::before {
+  content: "\F7F7";
+}
+.mdi-trackpad-lock::before {
+  content: "\F932";
+}
+.mdi-tractor::before {
+  content: "\F891";
+}
+.mdi-trademark::before {
+  content: "\FA77";
+}
+.mdi-traffic-cone::before {
+  content: "\F03A7";
+}
+.mdi-traffic-light::before {
+  content: "\F52B";
+}
+.mdi-train::before {
+  content: "\F52C";
+}
+.mdi-train-car::before {
+  content: "\FBB4";
+}
+.mdi-train-variant::before {
+  content: "\F8C3";
+}
+.mdi-tram::before {
+  content: "\F52D";
+}
+.mdi-tram-side::before {
+  content: "\F0008";
+}
+.mdi-transcribe::before {
+  content: "\F52E";
+}
+.mdi-transcribe-close::before {
+  content: "\F52F";
+}
+.mdi-transfer::before {
+  content: "\F0087";
+}
+.mdi-transfer-down::before {
+  content: "\FD7D";
+}
+.mdi-transfer-left::before {
+  content: "\FD7E";
+}
+.mdi-transfer-right::before {
+  content: "\F530";
+}
+.mdi-transfer-up::before {
+  content: "\FD7F";
+}
+.mdi-transit-connection::before {
+  content: "\FD18";
+}
+.mdi-transit-connection-variant::before {
+  content: "\FD19";
+}
+.mdi-transit-detour::before {
+  content: "\FFA8";
+}
+.mdi-transit-transfer::before {
+  content: "\F6AD";
+}
+.mdi-transition::before {
+  content: "\F914";
+}
+.mdi-transition-masked::before {
+  content: "\F915";
+}
+.mdi-translate::before {
+  content: "\F5CA";
+}
+.mdi-translate-off::before {
+  content: "\FE66";
+}
+.mdi-transmission-tower::before {
+  content: "\FD1A";
+}
+.mdi-trash-can::before {
+  content: "\FA78";
+}
+.mdi-trash-can-outline::before {
+  content: "\FA79";
+}
+.mdi-tray::before {
+  content: "\F02BF";
+}
+.mdi-tray-alert::before {
+  content: "\F02C0";
+}
+.mdi-tray-full::before {
+  content: "\F02C1";
+}
+.mdi-tray-minus::before {
+  content: "\F02C2";
+}
+.mdi-tray-plus::before {
+  content: "\F02C3";
+}
+.mdi-tray-remove::before {
+  content: "\F02C4";
+}
+.mdi-treasure-chest::before {
+  content: "\F725";
+}
+.mdi-tree::before {
+  content: "\F531";
+}
+.mdi-tree-outline::before {
+  content: "\FE4C";
+}
+.mdi-trello::before {
+  content: "\F532";
+}
+.mdi-trending-down::before {
+  content: "\F533";
+}
+.mdi-trending-neutral::before {
+  content: "\F534";
+}
+.mdi-trending-up::before {
+  content: "\F535";
+}
+.mdi-triangle::before {
+  content: "\F536";
+}
+.mdi-triangle-outline::before {
+  content: "\F537";
+}
+.mdi-triforce::before {
+  content: "\FBB5";
+}
+.mdi-trophy::before {
+  content: "\F538";
+}
+.mdi-trophy-award::before {
+  content: "\F539";
+}
+.mdi-trophy-broken::before {
+  content: "\FD80";
+}
+.mdi-trophy-outline::before {
+  content: "\F53A";
+}
+.mdi-trophy-variant::before {
+  content: "\F53B";
+}
+.mdi-trophy-variant-outline::before {
+  content: "\F53C";
+}
+.mdi-truck::before {
+  content: "\F53D";
+}
+.mdi-truck-check::before {
+  content: "\FCB0";
+}
+.mdi-truck-check-outline::before {
+  content: "\F02C5";
+}
+.mdi-truck-delivery::before {
+  content: "\F53E";
+}
+.mdi-truck-delivery-outline::before {
+  content: "\F02C6";
+}
+.mdi-truck-fast::before {
+  content: "\F787";
+}
+.mdi-truck-fast-outline::before {
+  content: "\F02C7";
+}
+.mdi-truck-outline::before {
+  content: "\F02C8";
+}
+.mdi-truck-trailer::before {
+  content: "\F726";
+}
+.mdi-trumpet::before {
+  content: "\F00C1";
+}
+.mdi-tshirt-crew::before {
+  content: "\FA7A";
+}
+.mdi-tshirt-crew-outline::before {
+  content: "\F53F";
+}
+.mdi-tshirt-v::before {
+  content: "\FA7B";
+}
+.mdi-tshirt-v-outline::before {
+  content: "\F540";
+}
+.mdi-tumble-dryer::before {
+  content: "\F916";
+}
+.mdi-tumble-dryer-alert::before {
+  content: "\F01E5";
+}
+.mdi-tumble-dryer-off::before {
+  content: "\F01E6";
+}
+.mdi-tumblr::before {
+  content: "\F541";
+}
+.mdi-tumblr-box::before {
+  content: "\F917";
+}
+.mdi-tumblr-reblog::before {
+  content: "\F542";
+}
+.mdi-tune::before {
+  content: "\F62E";
+}
+.mdi-tune-vertical::before {
+  content: "\F66A";
+}
+.mdi-turnstile::before {
+  content: "\FCB1";
+}
+.mdi-turnstile-outline::before {
+  content: "\FCB2";
+}
+.mdi-turtle::before {
+  content: "\FCB3";
+}
+.mdi-twitch::before {
+  content: "\F543";
+}
+.mdi-twitter::before {
+  content: "\F544";
+}
+.mdi-twitter-box::before {
+  content: "\F545";
+}
+.mdi-twitter-circle::before {
+  content: "\F546";
+}
+.mdi-twitter-retweet::before {
+  content: "\F547";
+}
+.mdi-two-factor-authentication::before {
+  content: "\F9AE";
+}
+.mdi-typewriter::before {
+  content: "\FF4A";
+}
+.mdi-uber::before {
+  content: "\F748";
+}
+.mdi-ubisoft::before {
+  content: "\FBB6";
+}
+.mdi-ubuntu::before {
+  content: "\F548";
+}
+.mdi-ufo::before {
+  content: "\F00EF";
+}
+.mdi-ufo-outline::before {
+  content: "\F00F0";
+}
+.mdi-ultra-high-definition::before {
+  content: "\F7F8";
+}
+.mdi-umbraco::before {
+  content: "\F549";
+}
+.mdi-umbrella::before {
+  content: "\F54A";
+}
+.mdi-umbrella-closed::before {
+  content: "\F9AF";
+}
+.mdi-umbrella-outline::before {
+  content: "\F54B";
+}
+.mdi-undo::before {
+  content: "\F54C";
+}
+.mdi-undo-variant::before {
+  content: "\F54D";
+}
+.mdi-unfold-less-horizontal::before {
+  content: "\F54E";
+}
+.mdi-unfold-less-vertical::before {
+  content: "\F75F";
+}
+.mdi-unfold-more-horizontal::before {
+  content: "\F54F";
+}
+.mdi-unfold-more-vertical::before {
+  content: "\F760";
+}
+.mdi-ungroup::before {
+  content: "\F550";
+}
+.mdi-unicode::before {
+  content: "\FEED";
+}
+.mdi-unity::before {
+  content: "\F6AE";
+}
+.mdi-unreal::before {
+  content: "\F9B0";
+}
+.mdi-untappd::before {
+  content: "\F551";
+}
+.mdi-update::before {
+  content: "\F6AF";
+}
+.mdi-upload::before {
+  content: "\F552";
+}
+.mdi-upload-lock::before {
+  content: "\F039E";
+}
+.mdi-upload-lock-outline::before {
+  content: "\F039F";
+}
+.mdi-upload-multiple::before {
+  content: "\F83C";
+}
+.mdi-upload-network::before {
+  content: "\F6F5";
+}
+.mdi-upload-network-outline::before {
+  content: "\FCB4";
+}
+.mdi-upload-off::before {
+  content: "\F00F1";
+}
+.mdi-upload-off-outline::before {
+  content: "\F00F2";
+}
+.mdi-upload-outline::before {
+  content: "\FE67";
+}
+.mdi-usb::before {
+  content: "\F553";
+}
+.mdi-usb-flash-drive::before {
+  content: "\F02C9";
+}
+.mdi-usb-flash-drive-outline::before {
+  content: "\F02CA";
+}
+.mdi-usb-port::before {
+  content: "\F021B";
+}
+.mdi-valve::before {
+  content: "\F0088";
+}
+.mdi-valve-closed::before {
+  content: "\F0089";
+}
+.mdi-valve-open::before {
+  content: "\F008A";
+}
+.mdi-van-passenger::before {
+  content: "\F7F9";
+}
+.mdi-van-utility::before {
+  content: "\F7FA";
+}
+.mdi-vanish::before {
+  content: "\F7FB";
+}
+.mdi-vanity-light::before {
+  content: "\F020C";
+}
+.mdi-variable::before {
+  content: "\FAE6";
+}
+.mdi-variable-box::before {
+  content: "\F013C";
+}
+.mdi-vector-arrange-above::before {
+  content: "\F554";
+}
+.mdi-vector-arrange-below::before {
+  content: "\F555";
+}
+.mdi-vector-bezier::before {
+  content: "\FAE7";
+}
+.mdi-vector-circle::before {
+  content: "\F556";
+}
+.mdi-vector-circle-variant::before {
+  content: "\F557";
+}
+.mdi-vector-combine::before {
+  content: "\F558";
+}
+.mdi-vector-curve::before {
+  content: "\F559";
+}
+.mdi-vector-difference::before {
+  content: "\F55A";
+}
+.mdi-vector-difference-ab::before {
+  content: "\F55B";
+}
+.mdi-vector-difference-ba::before {
+  content: "\F55C";
+}
+.mdi-vector-ellipse::before {
+  content: "\F892";
+}
+.mdi-vector-intersection::before {
+  content: "\F55D";
+}
+.mdi-vector-line::before {
+  content: "\F55E";
+}
+.mdi-vector-link::before {
+  content: "\F0009";
+}
+.mdi-vector-point::before {
+  content: "\F55F";
+}
+.mdi-vector-polygon::before {
+  content: "\F560";
+}
+.mdi-vector-polyline::before {
+  content: "\F561";
+}
+.mdi-vector-polyline-edit::before {
+  content: "\F0250";
+}
+.mdi-vector-polyline-minus::before {
+  content: "\F0251";
+}
+.mdi-vector-polyline-plus::before {
+  content: "\F0252";
+}
+.mdi-vector-polyline-remove::before {
+  content: "\F0253";
+}
+.mdi-vector-radius::before {
+  content: "\F749";
+}
+.mdi-vector-rectangle::before {
+  content: "\F5C6";
+}
+.mdi-vector-selection::before {
+  content: "\F562";
+}
+.mdi-vector-square::before {
+  content: "\F001";
+}
+.mdi-vector-triangle::before {
+  content: "\F563";
+}
+.mdi-vector-union::before {
+  content: "\F564";
+}
+.mdi-venmo::before {
+  content: "\F578";
+}
+.mdi-vhs::before {
+  content: "\FA1A";
+}
+.mdi-vibrate::before {
+  content: "\F566";
+}
+.mdi-vibrate-off::before {
+  content: "\FCB5";
+}
+.mdi-video::before {
+  content: "\F567";
+}
+.mdi-video-3d::before {
+  content: "\F7FC";
+}
+.mdi-video-3d-variant::before {
+  content: "\FEEE";
+}
+.mdi-video-4k-box::before {
+  content: "\F83D";
+}
+.mdi-video-account::before {
+  content: "\F918";
+}
+.mdi-video-check::before {
+  content: "\F008B";
+}
+.mdi-video-check-outline::before {
+  content: "\F008C";
+}
+.mdi-video-image::before {
+  content: "\F919";
+}
+.mdi-video-input-antenna::before {
+  content: "\F83E";
+}
+.mdi-video-input-component::before {
+  content: "\F83F";
+}
+.mdi-video-input-hdmi::before {
+  content: "\F840";
+}
+.mdi-video-input-scart::before {
+  content: "\FFA9";
+}
+.mdi-video-input-svideo::before {
+  content: "\F841";
+}
+.mdi-video-minus::before {
+  content: "\F9B1";
+}
+.mdi-video-off::before {
+  content: "\F568";
+}
+.mdi-video-off-outline::before {
+  content: "\FBB7";
+}
+.mdi-video-outline::before {
+  content: "\FBB8";
+}
+.mdi-video-plus::before {
+  content: "\F9B2";
+}
+.mdi-video-stabilization::before {
+  content: "\F91A";
+}
+.mdi-video-switch::before {
+  content: "\F569";
+}
+.mdi-video-vintage::before {
+  content: "\FA1B";
+}
+.mdi-video-wireless::before {
+  content: "\FEEF";
+}
+.mdi-video-wireless-outline::before {
+  content: "\FEF0";
+}
+.mdi-view-agenda::before {
+  content: "\F56A";
+}
+.mdi-view-agenda-outline::before {
+  content: "\F0203";
+}
+.mdi-view-array::before {
+  content: "\F56B";
+}
+.mdi-view-carousel::before {
+  content: "\F56C";
+}
+.mdi-view-column::before {
+  content: "\F56D";
+}
+.mdi-view-comfy::before {
+  content: "\FE4D";
+}
+.mdi-view-compact::before {
+  content: "\FE4E";
+}
+.mdi-view-compact-outline::before {
+  content: "\FE4F";
+}
+.mdi-view-dashboard::before {
+  content: "\F56E";
+}
+.mdi-view-dashboard-outline::before {
+  content: "\FA1C";
+}
+.mdi-view-dashboard-variant::before {
+  content: "\F842";
+}
+.mdi-view-day::before {
+  content: "\F56F";
+}
+.mdi-view-grid::before {
+  content: "\F570";
+}
+.mdi-view-grid-outline::before {
+  content: "\F0204";
+}
+.mdi-view-grid-plus::before {
+  content: "\FFAA";
+}
+.mdi-view-grid-plus-outline::before {
+  content: "\F0205";
+}
+.mdi-view-headline::before {
+  content: "\F571";
+}
+.mdi-view-list::before {
+  content: "\F572";
+}
+.mdi-view-module::before {
+  content: "\F573";
+}
+.mdi-view-parallel::before {
+  content: "\F727";
+}
+.mdi-view-quilt::before {
+  content: "\F574";
+}
+.mdi-view-sequential::before {
+  content: "\F728";
+}
+.mdi-view-split-horizontal::before {
+  content: "\FBA7";
+}
+.mdi-view-split-vertical::before {
+  content: "\FBA8";
+}
+.mdi-view-stream::before {
+  content: "\F575";
+}
+.mdi-view-week::before {
+  content: "\F576";
+}
+.mdi-vimeo::before {
+  content: "\F577";
+}
+.mdi-violin::before {
+  content: "\F60F";
+}
+.mdi-virtual-reality::before {
+  content: "\F893";
+}
+.mdi-visual-studio::before {
+  content: "\F610";
+}
+.mdi-visual-studio-code::before {
+  content: "\FA1D";
+}
+.mdi-vk::before {
+  content: "\F579";
+}
+.mdi-vk-box::before {
+  content: "\F57A";
+}
+.mdi-vk-circle::before {
+  content: "\F57B";
+}
+.mdi-vlc::before {
+  content: "\F57C";
+}
+.mdi-voice::before {
+  content: "\F5CB";
+}
+.mdi-voice-off::before {
+  content: "\FEF1";
+}
+.mdi-voicemail::before {
+  content: "\F57D";
+}
+.mdi-volleyball::before {
+  content: "\F9B3";
+}
+.mdi-volume-high::before {
+  content: "\F57E";
+}
+.mdi-volume-low::before {
+  content: "\F57F";
+}
+.mdi-volume-medium::before {
+  content: "\F580";
+}
+.mdi-volume-minus::before {
+  content: "\F75D";
+}
+.mdi-volume-mute::before {
+  content: "\F75E";
+}
+.mdi-volume-off::before {
+  content: "\F581";
+}
+.mdi-volume-plus::before {
+  content: "\F75C";
+}
+.mdi-volume-source::before {
+  content: "\F014B";
+}
+.mdi-volume-variant-off::before {
+  content: "\FE68";
+}
+.mdi-volume-vibrate::before {
+  content: "\F014C";
+}
+.mdi-vote::before {
+  content: "\FA1E";
+}
+.mdi-vote-outline::before {
+  content: "\FA1F";
+}
+.mdi-vpn::before {
+  content: "\F582";
+}
+.mdi-vuejs::before {
+  content: "\F843";
+}
+.mdi-vuetify::before {
+  content: "\FE50";
+}
+.mdi-walk::before {
+  content: "\F583";
+}
+.mdi-wall::before {
+  content: "\F7FD";
+}
+.mdi-wall-sconce::before {
+  content: "\F91B";
+}
+.mdi-wall-sconce-flat::before {
+  content: "\F91C";
+}
+.mdi-wall-sconce-variant::before {
+  content: "\F91D";
+}
+.mdi-wallet::before {
+  content: "\F584";
+}
+.mdi-wallet-giftcard::before {
+  content: "\F585";
+}
+.mdi-wallet-membership::before {
+  content: "\F586";
+}
+.mdi-wallet-outline::before {
+  content: "\FBB9";
+}
+.mdi-wallet-plus::before {
+  content: "\FFAB";
+}
+.mdi-wallet-plus-outline::before {
+  content: "\FFAC";
+}
+.mdi-wallet-travel::before {
+  content: "\F587";
+}
+.mdi-wallpaper::before {
+  content: "\FE69";
+}
+.mdi-wan::before {
+  content: "\F588";
+}
+.mdi-wardrobe::before {
+  content: "\FFAD";
+}
+.mdi-wardrobe-outline::before {
+  content: "\FFAE";
+}
+.mdi-warehouse::before {
+  content: "\FFBB";
+}
+.mdi-washing-machine::before {
+  content: "\F729";
+}
+.mdi-washing-machine-alert::before {
+  content: "\F01E7";
+}
+.mdi-washing-machine-off::before {
+  content: "\F01E8";
+}
+.mdi-watch::before {
+  content: "\F589";
+}
+.mdi-watch-export::before {
+  content: "\F58A";
+}
+.mdi-watch-export-variant::before {
+  content: "\F894";
+}
+.mdi-watch-import::before {
+  content: "\F58B";
+}
+.mdi-watch-import-variant::before {
+  content: "\F895";
+}
+.mdi-watch-variant::before {
+  content: "\F896";
+}
+.mdi-watch-vibrate::before {
+  content: "\F6B0";
+}
+.mdi-watch-vibrate-off::before {
+  content: "\FCB6";
+}
+.mdi-water::before {
+  content: "\F58C";
+}
+.mdi-water-boiler::before {
+  content: "\FFAF";
+}
+.mdi-water-boiler-alert::before {
+  content: "\F01DE";
+}
+.mdi-water-boiler-off::before {
+  content: "\F01DF";
+}
+.mdi-water-off::before {
+  content: "\F58D";
+}
+.mdi-water-outline::before {
+  content: "\FE6A";
+}
+.mdi-water-percent::before {
+  content: "\F58E";
+}
+.mdi-water-polo::before {
+  content: "\F02CB";
+}
+.mdi-water-pump::before {
+  content: "\F58F";
+}
+.mdi-water-pump-off::before {
+  content: "\FFB0";
+}
+.mdi-water-well::before {
+  content: "\F008D";
+}
+.mdi-water-well-outline::before {
+  content: "\F008E";
+}
+.mdi-watermark::before {
+  content: "\F612";
+}
+.mdi-wave::before {
+  content: "\FF4B";
+}
+.mdi-waves::before {
+  content: "\F78C";
+}
+.mdi-waze::before {
+  content: "\FBBA";
+}
+.mdi-weather-cloudy::before {
+  content: "\F590";
+}
+.mdi-weather-cloudy-alert::before {
+  content: "\FF4C";
+}
+.mdi-weather-cloudy-arrow-right::before {
+  content: "\FE51";
+}
+.mdi-weather-fog::before {
+  content: "\F591";
+}
+.mdi-weather-hail::before {
+  content: "\F592";
+}
+.mdi-weather-hazy::before {
+  content: "\FF4D";
+}
+.mdi-weather-hurricane::before {
+  content: "\F897";
+}
+.mdi-weather-lightning::before {
+  content: "\F593";
+}
+.mdi-weather-lightning-rainy::before {
+  content: "\F67D";
+}
+.mdi-weather-night::before {
+  content: "\F594";
+}
+.mdi-weather-night-partly-cloudy::before {
+  content: "\FF4E";
+}
+.mdi-weather-partly-cloudy::before {
+  content: "\F595";
+}
+.mdi-weather-partly-lightning::before {
+  content: "\FF4F";
+}
+.mdi-weather-partly-rainy::before {
+  content: "\FF50";
+}
+.mdi-weather-partly-snowy::before {
+  content: "\FF51";
+}
+.mdi-weather-partly-snowy-rainy::before {
+  content: "\FF52";
+}
+.mdi-weather-pouring::before {
+  content: "\F596";
+}
+.mdi-weather-rainy::before {
+  content: "\F597";
+}
+.mdi-weather-snowy::before {
+  content: "\F598";
+}
+.mdi-weather-snowy-heavy::before {
+  content: "\FF53";
+}
+.mdi-weather-snowy-rainy::before {
+  content: "\F67E";
+}
+.mdi-weather-sunny::before {
+  content: "\F599";
+}
+.mdi-weather-sunny-alert::before {
+  content: "\FF54";
+}
+.mdi-weather-sunset::before {
+  content: "\F59A";
+}
+.mdi-weather-sunset-down::before {
+  content: "\F59B";
+}
+.mdi-weather-sunset-up::before {
+  content: "\F59C";
+}
+.mdi-weather-tornado::before {
+  content: "\FF55";
+}
+.mdi-weather-windy::before {
+  content: "\F59D";
+}
+.mdi-weather-windy-variant::before {
+  content: "\F59E";
+}
+.mdi-web::before {
+  content: "\F59F";
+}
+.mdi-web-box::before {
+  content: "\FFB1";
+}
+.mdi-web-clock::before {
+  content: "\F0275";
+}
+.mdi-webcam::before {
+  content: "\F5A0";
+}
+.mdi-webhook::before {
+  content: "\F62F";
+}
+.mdi-webpack::before {
+  content: "\F72A";
+}
+.mdi-webrtc::before {
+  content: "\F0273";
+}
+.mdi-wechat::before {
+  content: "\F611";
+}
+.mdi-weight::before {
+  content: "\F5A1";
+}
+.mdi-weight-gram::before {
+  content: "\FD1B";
+}
+.mdi-weight-kilogram::before {
+  content: "\F5A2";
+}
+.mdi-weight-lifter::before {
+  content: "\F0188";
+}
+.mdi-weight-pound::before {
+  content: "\F9B4";
+}
+.mdi-whatsapp::before {
+  content: "\F5A3";
+}
+.mdi-wheelchair-accessibility::before {
+  content: "\F5A4";
+}
+.mdi-whistle::before {
+  content: "\F9B5";
+}
+.mdi-whistle-outline::before {
+  content: "\F02E7";
+}
+.mdi-white-balance-auto::before {
+  content: "\F5A5";
+}
+.mdi-white-balance-incandescent::before {
+  content: "\F5A6";
+}
+.mdi-white-balance-iridescent::before {
+  content: "\F5A7";
+}
+.mdi-white-balance-sunny::before {
+  content: "\F5A8";
+}
+.mdi-widgets::before {
+  content: "\F72B";
+}
+.mdi-widgets-outline::before {
+  content: "\F0380";
+}
+.mdi-wifi::before {
+  content: "\F5A9";
+}
+.mdi-wifi-off::before {
+  content: "\F5AA";
+}
+.mdi-wifi-star::before {
+  content: "\FE6B";
+}
+.mdi-wifi-strength-1::before {
+  content: "\F91E";
+}
+.mdi-wifi-strength-1-alert::before {
+  content: "\F91F";
+}
+.mdi-wifi-strength-1-lock::before {
+  content: "\F920";
+}
+.mdi-wifi-strength-2::before {
+  content: "\F921";
+}
+.mdi-wifi-strength-2-alert::before {
+  content: "\F922";
+}
+.mdi-wifi-strength-2-lock::before {
+  content: "\F923";
+}
+.mdi-wifi-strength-3::before {
+  content: "\F924";
+}
+.mdi-wifi-strength-3-alert::before {
+  content: "\F925";
+}
+.mdi-wifi-strength-3-lock::before {
+  content: "\F926";
+}
+.mdi-wifi-strength-4::before {
+  content: "\F927";
+}
+.mdi-wifi-strength-4-alert::before {
+  content: "\F928";
+}
+.mdi-wifi-strength-4-lock::before {
+  content: "\F929";
+}
+.mdi-wifi-strength-alert-outline::before {
+  content: "\F92A";
+}
+.mdi-wifi-strength-lock-outline::before {
+  content: "\F92B";
+}
+.mdi-wifi-strength-off::before {
+  content: "\F92C";
+}
+.mdi-wifi-strength-off-outline::before {
+  content: "\F92D";
+}
+.mdi-wifi-strength-outline::before {
+  content: "\F92E";
+}
+.mdi-wii::before {
+  content: "\F5AB";
+}
+.mdi-wiiu::before {
+  content: "\F72C";
+}
+.mdi-wikipedia::before {
+  content: "\F5AC";
+}
+.mdi-wind-turbine::before {
+  content: "\FD81";
+}
+.mdi-window-close::before {
+  content: "\F5AD";
+}
+.mdi-window-closed::before {
+  content: "\F5AE";
+}
+.mdi-window-closed-variant::before {
+  content: "\F0206";
+}
+.mdi-window-maximize::before {
+  content: "\F5AF";
+}
+.mdi-window-minimize::before {
+  content: "\F5B0";
+}
+.mdi-window-open::before {
+  content: "\F5B1";
+}
+.mdi-window-open-variant::before {
+  content: "\F0207";
+}
+.mdi-window-restore::before {
+  content: "\F5B2";
+}
+.mdi-window-shutter::before {
+  content: "\F0147";
+}
+.mdi-window-shutter-alert::before {
+  content: "\F0148";
+}
+.mdi-window-shutter-open::before {
+  content: "\F0149";
+}
+.mdi-windows::before {
+  content: "\F5B3";
+}
+.mdi-windows-classic::before {
+  content: "\FA20";
+}
+.mdi-wiper::before {
+  content: "\FAE8";
+}
+.mdi-wiper-wash::before {
+  content: "\FD82";
+}
+.mdi-wordpress::before {
+  content: "\F5B4";
+}
+.mdi-worker::before {
+  content: "\F5B5";
+}
+.mdi-wrap::before {
+  content: "\F5B6";
+}
+.mdi-wrap-disabled::before {
+  content: "\FBBB";
+}
+.mdi-wrench::before {
+  content: "\F5B7";
+}
+.mdi-wrench-outline::before {
+  content: "\FBBC";
+}
+.mdi-wunderlist::before {
+  content: "\F5B8";
+}
+.mdi-xamarin::before {
+  content: "\F844";
+}
+.mdi-xamarin-outline::before {
+  content: "\F845";
+}
+.mdi-xaml::before {
+  content: "\F673";
+}
+.mdi-xbox::before {
+  content: "\F5B9";
+}
+.mdi-xbox-controller::before {
+  content: "\F5BA";
+}
+.mdi-xbox-controller-battery-alert::before {
+  content: "\F74A";
+}
+.mdi-xbox-controller-battery-charging::before {
+  content: "\FA21";
+}
+.mdi-xbox-controller-battery-empty::before {
+  content: "\F74B";
+}
+.mdi-xbox-controller-battery-full::before {
+  content: "\F74C";
+}
+.mdi-xbox-controller-battery-low::before {
+  content: "\F74D";
+}
+.mdi-xbox-controller-battery-medium::before {
+  content: "\F74E";
+}
+.mdi-xbox-controller-battery-unknown::before {
+  content: "\F74F";
+}
+.mdi-xbox-controller-menu::before {
+  content: "\FE52";
+}
+.mdi-xbox-controller-off::before {
+  content: "\F5BB";
+}
+.mdi-xbox-controller-view::before {
+  content: "\FE53";
+}
+.mdi-xda::before {
+  content: "\F5BC";
+}
+.mdi-xing::before {
+  content: "\F5BD";
+}
+.mdi-xing-box::before {
+  content: "\F5BE";
+}
+.mdi-xing-circle::before {
+  content: "\F5BF";
+}
+.mdi-xml::before {
+  content: "\F5C0";
+}
+.mdi-xmpp::before {
+  content: "\F7FE";
+}
+.mdi-yahoo::before {
+  content: "\FB2A";
+}
+.mdi-yammer::before {
+  content: "\F788";
+}
+.mdi-yeast::before {
+  content: "\F5C1";
+}
+.mdi-yelp::before {
+  content: "\F5C2";
+}
+.mdi-yin-yang::before {
+  content: "\F67F";
+}
+.mdi-yoga::before {
+  content: "\F01A7";
+}
+.mdi-youtube::before {
+  content: "\F5C3";
+}
+.mdi-youtube-creator-studio::before {
+  content: "\F846";
+}
+.mdi-youtube-gaming::before {
+  content: "\F847";
+}
+.mdi-youtube-subscription::before {
+  content: "\FD1C";
+}
+.mdi-youtube-tv::before {
+  content: "\F448";
+}
+.mdi-z-wave::before {
+  content: "\FAE9";
+}
+.mdi-zend::before {
+  content: "\FAEA";
+}
+.mdi-zigbee::before {
+  content: "\FD1D";
+}
+.mdi-zip-box::before {
+  content: "\F5C4";
+}
+.mdi-zip-box-outline::before {
+  content: "\F001B";
+}
+.mdi-zip-disk::before {
+  content: "\FA22";
+}
+.mdi-zodiac-aquarius::before {
+  content: "\FA7C";
+}
+.mdi-zodiac-aries::before {
+  content: "\FA7D";
+}
+.mdi-zodiac-cancer::before {
+  content: "\FA7E";
+}
+.mdi-zodiac-capricorn::before {
+  content: "\FA7F";
+}
+.mdi-zodiac-gemini::before {
+  content: "\FA80";
+}
+.mdi-zodiac-leo::before {
+  content: "\FA81";
+}
+.mdi-zodiac-libra::before {
+  content: "\FA82";
+}
+.mdi-zodiac-pisces::before {
+  content: "\FA83";
+}
+.mdi-zodiac-sagittarius::before {
+  content: "\FA84";
+}
+.mdi-zodiac-scorpio::before {
+  content: "\FA85";
+}
+.mdi-zodiac-taurus::before {
+  content: "\FA86";
+}
+.mdi-zodiac-virgo::before {
+  content: "\FA87";
+}
+.mdi-blank::before {
+  content: "\F68C";
+  visibility: hidden;
+}
+.mdi-18px.mdi-set,
+.mdi-18px.mdi:before {
+  font-size: 18px;
+}
+.mdi-24px.mdi-set,
+.mdi-24px.mdi:before {
+  font-size: 24px;
+}
+.mdi-36px.mdi-set,
+.mdi-36px.mdi:before {
+  font-size: 36px;
+}
+.mdi-48px.mdi-set,
+.mdi-48px.mdi:before {
+  font-size: 48px;
+}
+.mdi-dark:before {
+  color: rgba(0, 0, 0, 0.54);
+}
+.mdi-dark.mdi-inactive:before {
+  color: rgba(0, 0, 0, 0.26);
+}
+.mdi-light:before {
+  color: #fff;
+}
+.mdi-light.mdi-inactive:before {
+  color: rgba(255, 255, 255, 0.3);
+}
+.mdi-rotate-45:before {
+  -webkit-transform: rotate(45deg);
+  -ms-transform: rotate(45deg);
+  transform: rotate(45deg);
+}
+.mdi-rotate-90:before {
+  -webkit-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+.mdi-rotate-135:before {
+  -webkit-transform: rotate(135deg);
+  -ms-transform: rotate(135deg);
+  transform: rotate(135deg);
+}
+.mdi-rotate-180:before {
+  -webkit-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+.mdi-rotate-225:before {
+  -webkit-transform: rotate(225deg);
+  -ms-transform: rotate(225deg);
+  transform: rotate(225deg);
+}
+.mdi-rotate-270:before {
+  -webkit-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+.mdi-rotate-315:before {
+  -webkit-transform: rotate(315deg);
+  -ms-transform: rotate(315deg);
+  transform: rotate(315deg);
+}
+.mdi-flip-h:before {
+  -webkit-transform: scaleX(-1);
+  transform: scaleX(-1);
+  filter: FlipH;
+  -ms-filter: "FlipH";
+}
+.mdi-flip-v:before {
+  -webkit-transform: scaleY(-1);
+  transform: scaleY(-1);
+  filter: FlipV;
+  -ms-filter: "FlipV";
+}
+.mdi-spin:before {
+  -webkit-animation: mdi-spin 2s infinite linear;
+  animation: mdi-spin 2s infinite linear;
+}
+@-webkit-keyframes mdi-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+@keyframes mdi-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
 
 /*# sourceMappingURL=materialdesignicons.css.map */
diff --git a/packages/merchant-backoffice-ui/src/scss/libs/_all.scss 
b/packages/merchant-backoffice-ui/src/scss/libs/_all.scss
index aaaff6853..cba6f26eb 100644
--- a/packages/merchant-backoffice-ui/src/scss/libs/_all.scss
+++ b/packages/merchant-backoffice-ui/src/scss/libs/_all.scss
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
diff --git a/packages/merchant-backoffice-ui/src/sw.js 
b/packages/merchant-backoffice-ui/src/sw.js
index 617ae647c..0b1799e23 100644
--- a/packages/merchant-backoffice-ui/src/sw.js
+++ b/packages/merchant-backoffice-ui/src/sw.js
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
- /**
+/**
  *
  * @author Sebastian Javier Marchano (sebasjm)
  */
diff --git a/packages/merchant-backoffice-ui/src/utils/amount.ts 
b/packages/merchant-backoffice-ui/src/utils/amount.ts
index 23ced34bd..bdc37952f 100644
--- a/packages/merchant-backoffice-ui/src/utils/amount.ts
+++ b/packages/merchant-backoffice-ui/src/utils/amount.ts
@@ -13,7 +13,11 @@
  You should have received a copy of the GNU General Public License along with
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
-import { amountFractionalBase, AmountJson, Amounts } from 
"@gnu-taler/taler-util";
+import {
+  amountFractionalBase,
+  AmountJson,
+  Amounts,
+} from "@gnu-taler/taler-util";
 import { MerchantBackend } from "../declaration.js";
 
 /**
@@ -23,10 +27,10 @@ import { MerchantBackend } from "../declaration.js";
  * @returns
  */
 const sumPrices = (one: string, two: string) => {
-  const [currency, valueOne] = one.split(':')
-  const [, valueTwo] = two.split(':')
-  return `${currency}:${parseInt(valueOne, 10) + parseInt(valueTwo, 10)}`
-}
+  const [currency, valueOne] = one.split(":");
+  const [, valueTwo] = two.split(":");
+  return `${currency}:${parseInt(valueOne, 10) + parseInt(valueTwo, 10)}`;
+};
 
 /**
  * merge refund with the same description and a difference less than one minute
@@ -34,37 +38,43 @@ const sumPrices = (one: string, two: string) => {
  * @param cur new refund to add to the list
  * @returns list with the new refund, may be merged with the last
  */
-export function mergeRefunds(prev: MerchantBackend.Orders.RefundDetails[], 
cur: MerchantBackend.Orders.RefundDetails) {
+export function mergeRefunds(
+  prev: MerchantBackend.Orders.RefundDetails[],
+  cur: MerchantBackend.Orders.RefundDetails,
+) {
   let tail;
 
-  if (prev.length === 0 ||  //empty list
-    cur.timestamp.t_s === 'never' || //current does not have timestamp
-    (tail = prev[prev.length - 1]).timestamp.t_s === 'never' || // last does 
not have timestamp
+  if (
+    prev.length === 0 || //empty list
+    cur.timestamp.t_s === "never" || //current does not have timestamp
+    (tail = prev[prev.length - 1]).timestamp.t_s === "never" || // last does 
not have timestamp
     cur.reason !== tail.reason || //different reason
     cur.pending !== tail.pending || //different pending state
-    Math.abs(cur.timestamp.t_s - tail.timestamp.t_s) > 1000 * 60) {//more than 
1 minute difference
+    Math.abs(cur.timestamp.t_s - tail.timestamp.t_s) > 1000 * 60
+  ) {
+    //more than 1 minute difference
 
-    prev.push(cur)
-    return prev
+    prev.push(cur);
+    return prev;
   }
 
   prev[prev.length - 1] = {
     ...tail,
-    amount: sumPrices(tail.amount, cur.amount)
-  }
+    amount: sumPrices(tail.amount, cur.amount),
+  };
 
-  return prev
+  return prev;
 }
 
 export const rate = (one: string, two: string) => {
-  const a = Amounts.parseOrThrow(one)
-  const b = Amounts.parseOrThrow(two)
-  const af = toFloat(a)
-  const bf = toFloat(b)
-  if (bf === 0) return 0
-  return af / bf
-}
+  const a = Amounts.parseOrThrow(one);
+  const b = Amounts.parseOrThrow(two);
+  const af = toFloat(a);
+  const bf = toFloat(b);
+  if (bf === 0) return 0;
+  return af / bf;
+};
 
 function toFloat(amount: AmountJson) {
-  return amount.value + (amount.fraction / amountFractionalBase);
+  return amount.value + amount.fraction / amountFractionalBase;
 }
diff --git a/packages/merchant-backoffice-ui/src/utils/constants.ts 
b/packages/merchant-backoffice-ui/src/utils/constants.ts
index 90f133c6a..fea9cb7e2 100644
--- a/packages/merchant-backoffice-ui/src/utils/constants.ts
+++ b/packages/merchant-backoffice-ui/src/utils/constants.ts
@@ -15,26 +15,30 @@
  */
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 //https://tools.ietf.org/html/rfc8905
-export const PAYTO_REGEX = 
/^payto:\/\/[a-zA-Z][a-zA-Z0-9-.]+(\/[a-zA-Z0-9\-\.\~\(\)@_%:!$&'*+,;=]*)*\??((amount|receiver-name|sender-name|instruction|message)=[a-zA-Z0-9\-\.\~\(\)@_%:!$'*+,;=]*&?)*$/
-export const PAYTO_WIRE_METHOD_LOOKUP = 
/payto:\/\/([a-zA-Z][a-zA-Z0-9-.]+)\/.*/
+export const PAYTO_REGEX =
+  
/^payto:\/\/[a-zA-Z][a-zA-Z0-9-.]+(\/[a-zA-Z0-9\-\.\~\(\)@_%:!$&'*+,;=]*)*\??((amount|receiver-name|sender-name|instruction|message)=[a-zA-Z0-9\-\.\~\(\)@_%:!$'*+,;=]*&?)*$/;
+export const PAYTO_WIRE_METHOD_LOOKUP =
+  /payto:\/\/([a-zA-Z][a-zA-Z0-9-.]+)\/.*/;
 
-export const AMOUNT_REGEX = /^[a-zA-Z][a-zA-Z]*:[0-9][0-9,]*\.?[0-9,]*$/
+export const AMOUNT_REGEX = /^[a-zA-Z][a-zA-Z]*:[0-9][0-9,]*\.?[0-9,]*$/;
 
-export const INSTANCE_ID_LOOKUP = /\/instances\/([^/]*)\/?$/
+export const INSTANCE_ID_LOOKUP = /\/instances\/([^/]*)\/?$/;
 
-export const AMOUNT_ZERO_REGEX = /^[a-zA-Z][a-zA-Z]*:0$/
+export const AMOUNT_ZERO_REGEX = /^[a-zA-Z][a-zA-Z]*:0$/;
 
-export const CROCKFORD_BASE32_REGEX = 
/^[0123456789ABCDEFGHJKMNPQRSTVWXYZ]+[*~$=U]*$/
+export const CROCKFORD_BASE32_REGEX =
+  /^[0123456789ABCDEFGHJKMNPQRSTVWXYZ]+[*~$=U]*$/;
 
-export const URL_REGEX = 
/^((https?:)(\/\/\/?)([\w]*(?::[\w]*)?@)?([\d\w\.-]+)(?::(\d+))?)\/$/
+export const URL_REGEX =
+  /^((https?:)(\/\/\/?)([\w]*(?::[\w]*)?@)?([\d\w\.-]+)(?::(\d+))?)\/$/;
 
 // how much rows we add every time user hit load more
-export const PAGE_SIZE = 20
+export const PAGE_SIZE = 20;
 // how bigger can be the result set
 // after this threshold, load more with move the cursor
 export const MAX_RESULT_SIZE = PAGE_SIZE * 2 - 1;
@@ -44,7 +48,7 @@ export const DEFAULT_REQUEST_TIMEOUT = 10;
 
 export const MAX_IMAGE_SIZE = 1024 * 1024;
 
-export const INSTANCE_ID_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9_.@-]+$/
+export const INSTANCE_ID_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9_.@-]+$/;
 
 export const COUNTRY_TABLE = {
   AE: "U.A.E.",
@@ -189,6 +193,5 @@ export const COUNTRY_TABLE = {
   VN: "Viet Nam",
   YE: "Yemen",
   ZA: "South Africa",
-  ZW: "Zimbabwe"
-}
-
+  ZW: "Zimbabwe",
+};
diff --git a/packages/merchant-backoffice-ui/src/utils/switchableAxios.ts 
b/packages/merchant-backoffice-ui/src/utils/switchableAxios.ts
index 1010dd7fb..20ce7043e 100644
--- a/packages/merchant-backoffice-ui/src/utils/switchableAxios.ts
+++ b/packages/merchant-backoffice-ui/src/utils/switchableAxios.ts
@@ -23,44 +23,51 @@ import axios, { AxiosPromise, AxiosRequestConfig } from 
"axios";
 
 export let removeAxiosCancelToken = false;
 
-export let axiosHandler = function doAxiosRequest(config: AxiosRequestConfig): 
AxiosPromise<any> {
-  return axios(config)
-}
+export let axiosHandler = function doAxiosRequest(
+  config: AxiosRequestConfig,
+): AxiosPromise<any> {
+  return axios(config);
+};
 
 /**
  * Set this backend library to testing mode.
  * Instead of calling the axios library the @handler will be called
- * 
- * @param handler callback that will mock axios 
+ *
+ * @param handler callback that will mock axios
  */
-export function setAxiosRequestAsTestingEnvironment(handler: AxiosHandler): 
void {
+export function setAxiosRequestAsTestingEnvironment(
+  handler: AxiosHandler,
+): void {
   removeAxiosCancelToken = true;
   axiosHandler = function defaultTestingHandler(config) {
-    const currentHanlder = listOfHandlersToUseOnce.shift()
+    const currentHanlder = listOfHandlersToUseOnce.shift();
     if (!currentHanlder) {
-      return handler(config)
+      return handler(config);
     }
 
-    return currentHanlder(config)
-  }
+    return currentHanlder(config);
+  };
 }
 
 type AxiosHandler = (config: AxiosRequestConfig) => AxiosPromise<any>;
-type AxiosArguments = { args: AxiosRequestConfig | undefined }
+type AxiosArguments = { args: AxiosRequestConfig | undefined };
 
-
-const listOfHandlersToUseOnce = new Array<AxiosHandler>()
+const listOfHandlersToUseOnce = new Array<AxiosHandler>();
 
 /**
- * 
+ *
  * @param handler mock function
  * @returns savedArgs
  */
-export function mockAxiosOnce(handler: AxiosHandler): { args: 
AxiosRequestConfig | undefined } {
-  const savedArgs: AxiosArguments = { args: undefined }
-  listOfHandlersToUseOnce.push((config: AxiosRequestConfig): AxiosPromise<any> 
=> {
-    savedArgs.args = config;
-    return handler(config)
-  })
+export function mockAxiosOnce(handler: AxiosHandler): {
+  args: AxiosRequestConfig | undefined;
+} {
+  const savedArgs: AxiosArguments = { args: undefined };
+  listOfHandlersToUseOnce.push(
+    (config: AxiosRequestConfig): AxiosPromise<any> => {
+      savedArgs.args = config;
+      return handler(config);
+    },
+  );
   return savedArgs;
 }
diff --git a/packages/merchant-backoffice-ui/src/utils/table.ts 
b/packages/merchant-backoffice-ui/src/utils/table.ts
index a79edfdcc..71358e25f 100644
--- a/packages/merchant-backoffice-ui/src/utils/table.ts
+++ b/packages/merchant-backoffice-ui/src/utils/table.ts
@@ -17,37 +17,41 @@
 import { WithId } from "../declaration.js";
 
 /**
-*
-* @author Sebastian Javier Marchano (sebasjm)
-*/
+ *
+ * @author Sebastian Javier Marchano (sebasjm)
+ */
 
 export interface Actions<T extends WithId> {
   element: T;
-  type: 'DELETE' | 'UPDATE';
+  type: "DELETE" | "UPDATE";
 }
 
 function notEmpty<TValue>(value: TValue | null | undefined): value is TValue {
   return value !== null && value !== undefined;
 }
 
-export function buildActions<T extends WithId>(instances: T[], selected: 
string[], action: 'DELETE'): Actions<T>[] {
-  return selected.map(id => instances.find(i => i.id === id))
+export function buildActions<T extends WithId>(
+  instances: T[],
+  selected: string[],
+  action: "DELETE",
+): Actions<T>[] {
+  return selected
+    .map((id) => instances.find((i) => i.id === id))
     .filter(notEmpty)
-    .map(id => ({ element: id, type: action }))
+    .map((id) => ({ element: id, type: action }));
 }
 
 /**
  * For any object or array, return the same object if is not empty.
- * not empty: 
+ * not empty:
  *  - for arrays: at least one element not undefined
  *  - for objects: at least one property not undefined
- * @param obj 
- * @returns 
+ * @param obj
+ * @returns
  */
-export function undefinedIfEmpty<T extends Record<string, 
unknown>|Array<unknown>>(obj: T): T | undefined {
-  if (obj === undefined) return undefined
-  return Object.values(obj).some((v) => v !== undefined)
-    ? obj
-    : undefined;
+export function undefinedIfEmpty<
+  T extends Record<string, unknown> | Array<unknown>,
+>(obj: T): T | undefined {
+  if (obj === undefined) return undefined;
+  return Object.values(obj).some((v) => v !== undefined) ? obj : undefined;
 }
-

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]