From 8c18e98906e429f038f0ed2af0fa3e6193dd1b35 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=B2=20P?= <nicolo.paraciani@cnr.it>
Date: Mon, 28 Aug 2023 12:55:24 +0200
Subject: [PATCH] Initial commit

---
 .gitignore                |    3 +
 css/qrihs.css             |   26 +
 css/spectre-icons.css     |  597 ++++++
 css/spectre.css           | 3760 +++++++++++++++++++++++++++++++++++++
 img/e-rihsit_logo.png     |  Bin 0 -> 20339 bytes
 img/logo_ispc.png         |  Bin 0 -> 18690 bytes
 index.html                |   44 +
 js/index.js               |   61 +
 js/package.json           |    3 +
 js/qrious.min.js          |    6 +
 js/qrious.min.js.map      |    1 +
 js/vendor/.yarn-integrity |   16 +
 js/yarn.lock              |    4 +
 13 files changed, 4521 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 css/qrihs.css
 create mode 100644 css/spectre-icons.css
 create mode 100644 css/spectre.css
 create mode 100644 img/e-rihsit_logo.png
 create mode 100644 img/logo_ispc.png
 create mode 100644 index.html
 create mode 100644 js/index.js
 create mode 100644 js/package.json
 create mode 100644 js/qrious.min.js
 create mode 100644 js/qrious.min.js.map
 create mode 100644 js/vendor/.yarn-integrity
 create mode 100644 js/yarn.lock

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..32f539a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+*.zip
+SVG_*
+etichetta.png
\ No newline at end of file
diff --git a/css/qrihs.css b/css/qrihs.css
new file mode 100644
index 0000000..9d5804b
--- /dev/null
+++ b/css/qrihs.css
@@ -0,0 +1,26 @@
+h1 {
+    margin-top: 3rem;
+}
+canvas {
+    margin: 0 auto;
+}
+input[type="text"] {
+    width: 100%;
+    border-top: none;
+    border-left: none;
+    border-right: none;
+}
+input[type="text"],
+button {
+    margin-bottom: 1.5rem;
+}
+footer {
+    margin-top: 3rem;
+}
+.main {
+    margin-top: 4rem;
+    margin-bottom: 4rem;
+    width: 65vw;
+    margin-left: auto;
+    margin-right: auto;
+}
\ No newline at end of file
diff --git a/css/spectre-icons.css b/css/spectre-icons.css
new file mode 100644
index 0000000..fd881f1
--- /dev/null
+++ b/css/spectre-icons.css
@@ -0,0 +1,597 @@
+/*! Spectre.css Icons v0.5.9 | MIT License | github.com/picturepan2/spectre */
+.icon {
+  box-sizing: border-box;
+  display: inline-block;
+  font-size: inherit;
+  font-style: normal;
+  height: 1em;
+  position: relative;
+  text-indent: -9999px;
+  vertical-align: middle;
+  width: 1em;
+}
+
+.icon::before,
+.icon::after {
+  content: "";
+  display: block;
+  left: 50%;
+  position: absolute;
+  top: 50%;
+  transform: translate(-50%, -50%);
+}
+
+.icon.icon-2x {
+  font-size: 1.6rem;
+}
+
+.icon.icon-3x {
+  font-size: 2.4rem;
+}
+
+.icon.icon-4x {
+  font-size: 3.2rem;
+}
+
+.accordion .icon,
+.btn .icon,
+.toast .icon,
+.menu .icon {
+  vertical-align: -10%;
+}
+
+.btn-lg .icon {
+  vertical-align: -15%;
+}
+
+.icon-arrow-down::before,
+.icon-arrow-left::before,
+.icon-arrow-right::before,
+.icon-arrow-up::before,
+.icon-downward::before,
+.icon-back::before,
+.icon-forward::before,
+.icon-upward::before {
+  border: .1rem solid currentColor;
+  border-bottom: 0;
+  border-right: 0;
+  height: .65em;
+  width: .65em;
+}
+
+.icon-arrow-down::before {
+  transform: translate(-50%, -75%) rotate(225deg);
+}
+
+.icon-arrow-left::before {
+  transform: translate(-25%, -50%) rotate(-45deg);
+}
+
+.icon-arrow-right::before {
+  transform: translate(-75%, -50%) rotate(135deg);
+}
+
+.icon-arrow-up::before {
+  transform: translate(-50%, -25%) rotate(45deg);
+}
+
+.icon-back::after,
+.icon-forward::after {
+  background: currentColor;
+  height: .1rem;
+  width: .8em;
+}
+
+.icon-downward::after,
+.icon-upward::after {
+  background: currentColor;
+  height: .8em;
+  width: .1rem;
+}
+
+.icon-back::after {
+  left: 55%;
+}
+
+.icon-back::before {
+  transform: translate(-50%, -50%) rotate(-45deg);
+}
+
+.icon-downward::after {
+  top: 45%;
+}
+
+.icon-downward::before {
+  transform: translate(-50%, -50%) rotate(-135deg);
+}
+
+.icon-forward::after {
+  left: 45%;
+}
+
+.icon-forward::before {
+  transform: translate(-50%, -50%) rotate(135deg);
+}
+
+.icon-upward::after {
+  top: 55%;
+}
+
+.icon-upward::before {
+  transform: translate(-50%, -50%) rotate(45deg);
+}
+
+.icon-caret::before {
+  border-left: .3em solid transparent;
+  border-right: .3em solid transparent;
+  border-top: .3em solid currentColor;
+  height: 0;
+  transform: translate(-50%, -25%);
+  width: 0;
+}
+
+.icon-menu::before {
+  background: currentColor;
+  box-shadow: 0 -.35em, 0 .35em;
+  height: .1rem;
+  width: 100%;
+}
+
+.icon-apps::before {
+  background: currentColor;
+  box-shadow: -.35em -.35em, -.35em 0, -.35em .35em, 0 -.35em, 0 .35em, .35em -.35em, .35em 0, .35em .35em;
+  height: 3px;
+  width: 3px;
+}
+
+.icon-resize-horiz::before,
+.icon-resize-horiz::after,
+.icon-resize-vert::before,
+.icon-resize-vert::after {
+  border: .1rem solid currentColor;
+  border-bottom: 0;
+  border-right: 0;
+  height: .45em;
+  width: .45em;
+}
+
+.icon-resize-horiz::before,
+.icon-resize-vert::before {
+  transform: translate(-50%, -90%) rotate(45deg);
+}
+
+.icon-resize-horiz::after,
+.icon-resize-vert::after {
+  transform: translate(-50%, -10%) rotate(225deg);
+}
+
+.icon-resize-horiz::before {
+  transform: translate(-90%, -50%) rotate(-45deg);
+}
+
+.icon-resize-horiz::after {
+  transform: translate(-10%, -50%) rotate(135deg);
+}
+
+.icon-more-horiz::before,
+.icon-more-vert::before {
+  background: currentColor;
+  border-radius: 50%;
+  box-shadow: -.4em 0, .4em 0;
+  height: 3px;
+  width: 3px;
+}
+
+.icon-more-vert::before {
+  box-shadow: 0 -.4em, 0 .4em;
+}
+
+.icon-plus::before,
+.icon-minus::before,
+.icon-cross::before {
+  background: currentColor;
+  height: .1rem;
+  width: 100%;
+}
+
+.icon-plus::after,
+.icon-cross::after {
+  background: currentColor;
+  height: 100%;
+  width: .1rem;
+}
+
+.icon-cross::before {
+  width: 100%;
+}
+
+.icon-cross::after {
+  height: 100%;
+}
+
+.icon-cross::before,
+.icon-cross::after {
+  transform: translate(-50%, -50%) rotate(45deg);
+}
+
+.icon-check::before {
+  border: .1rem solid currentColor;
+  border-right: 0;
+  border-top: 0;
+  height: .5em;
+  transform: translate(-50%, -75%) rotate(-45deg); 
+  width: .9em;
+}
+
+.icon-stop {
+  border: .1rem solid currentColor;
+  border-radius: 50%;
+}
+
+.icon-stop::before {
+  background: currentColor;
+  height: .1rem;
+  transform: translate(-50%, -50%) rotate(45deg);
+  width: 1em;
+}
+
+.icon-shutdown {
+  border: .1rem solid currentColor;
+  border-radius: 50%;
+  border-top-color: transparent;
+}
+
+.icon-shutdown::before {
+  background: currentColor;
+  content: "";
+  height: .5em;
+  top: .1em;
+  width: .1rem;
+}
+
+.icon-refresh::before {
+  border: .1rem solid currentColor;
+  border-radius: 50%;
+  border-right-color: transparent;
+  height: 1em;
+  width: 1em;
+}
+
+.icon-refresh::after {
+  border: .2em solid currentColor;
+  border-left-color: transparent;
+  border-top-color: transparent;
+  height: 0;
+  left: 80%;
+  top: 20%;
+  width: 0;
+}
+
+.icon-search::before {
+  border: .1rem solid currentColor;
+  border-radius: 50%;
+  height: .75em;
+  left: 5%;
+  top: 5%;
+  transform: translate(0, 0) rotate(45deg);
+  width: .75em;
+}
+
+.icon-search::after {
+  background: currentColor;
+  height: .1rem;
+  left: 80%;
+  top: 80%;
+  transform: translate(-50%, -50%) rotate(45deg);
+  width: .4em;
+}
+
+.icon-edit::before {
+  border: .1rem solid currentColor;
+  height: .4em;
+  transform: translate(-40%, -60%) rotate(-45deg);
+  width: .85em;
+}
+
+.icon-edit::after {
+  border: .15em solid currentColor;
+  border-right-color: transparent;
+  border-top-color: transparent;
+  height: 0;
+  left: 5%;
+  top: 95%;
+  transform: translate(0, -100%);
+  width: 0;
+}
+
+.icon-delete::before {
+  border: .1rem solid currentColor;
+  border-bottom-left-radius: .1rem;
+  border-bottom-right-radius: .1rem;
+  border-top: 0;
+  height: .75em;
+  top: 60%;
+  width: .75em;
+}
+
+.icon-delete::after {
+  background: currentColor;
+  box-shadow: -.25em .2em, .25em .2em;
+  height: .1rem;
+  top: .05rem;
+  width: .5em;
+}
+
+.icon-share {
+  border: .1rem solid currentColor;
+  border-radius: .1rem;
+  border-right: 0;
+  border-top: 0;
+}
+
+.icon-share::before {
+  border: .1rem solid currentColor;
+  border-left: 0;
+  border-top: 0;
+  height: .4em;
+  left: 100%;
+  top: .25em;
+  transform: translate(-125%, -50%) rotate(-45deg);
+  width: .4em;
+}
+
+.icon-share::after {
+  border: .1rem solid currentColor;
+  border-bottom: 0;
+  border-radius: 75% 0;
+  border-right: 0;
+  height: .5em;
+  width: .6em;
+}
+
+.icon-flag::before {
+  background: currentColor;
+  height: 1em;
+  left: 15%;
+  width: .1rem;
+}
+
+.icon-flag::after {
+  border: .1rem solid currentColor;
+  border-bottom-right-radius: .1rem;
+  border-left: 0;
+  border-top-right-radius: .1rem;
+  height: .65em;
+  left: 60%;
+  top: 35%;
+  width: .8em;
+}
+
+.icon-bookmark::before {
+  border: .1rem solid currentColor;
+  border-bottom: 0;
+  border-top-left-radius: .1rem;
+  border-top-right-radius: .1rem;
+  height: .9em;
+  width: .8em;
+}
+
+.icon-bookmark::after {
+  border: .1rem solid currentColor;
+  border-bottom: 0;
+  border-left: 0;
+  border-radius: .1rem;
+  height: .5em;
+  transform: translate(-50%, 35%) rotate(-45deg) skew(15deg, 15deg);
+  width: .5em;
+}
+
+.icon-download,
+.icon-upload {
+  border-bottom: .1rem solid currentColor;
+}
+
+.icon-download::before,
+.icon-upload::before {
+  border: .1rem solid currentColor;
+  border-bottom: 0;
+  border-right: 0;
+  height: .5em;
+  transform: translate(-50%, -60%) rotate(-135deg); 
+  width: .5em;
+}
+
+.icon-download::after,
+.icon-upload::after {
+  background: currentColor;
+  height: .6em;
+  top: 40%;
+  width: .1rem;
+}
+
+.icon-upload::before {
+  transform: translate(-50%, -60%) rotate(45deg);
+}
+
+.icon-upload::after {
+  top: 50%;
+}
+
+.icon-copy::before {
+  border: .1rem solid currentColor;
+  border-bottom: 0;
+  border-radius: .1rem;
+  border-right: 0;
+  height: .8em;
+  left: 40%;
+  top: 35%;
+  width: .8em;
+}
+
+.icon-copy::after {
+  border: .1rem solid currentColor;
+  border-radius: .1rem;
+  height: .8em;
+  left: 60%;
+  top: 60%;
+  width: .8em;
+}
+
+.icon-time {
+  border: .1rem solid currentColor;
+  border-radius: 50%;
+}
+
+.icon-time::before {
+  background: currentColor;
+  height: .4em;
+  transform: translate(-50%, -75%);
+  width: .1rem;
+}
+
+.icon-time::after {
+  background: currentColor;
+  height: .3em;
+  transform: translate(-50%, -75%) rotate(90deg);
+  transform-origin: 50% 90%;
+  width: .1rem;
+}
+
+.icon-mail::before {
+  border: .1rem solid currentColor;
+  border-radius: .1rem;
+  height: .8em;
+  width: 1em;
+}
+
+.icon-mail::after {
+  border: .1rem solid currentColor;
+  border-right: 0;
+  border-top: 0;
+  height: .5em;
+  transform: translate(-50%, -90%) rotate(-45deg) skew(10deg, 10deg);
+  width: .5em;
+}
+
+.icon-people::before {
+  border: .1rem solid currentColor;
+  border-radius: 50%;
+  height: .45em;
+  top: 25%;
+  width: .45em;
+}
+
+.icon-people::after {
+  border: .1rem solid currentColor;
+  border-radius: 50% 50% 0 0;
+  height: .4em;
+  top: 75%;
+  width: .9em;
+}
+
+.icon-message {
+  border: .1rem solid currentColor;
+  border-bottom: 0;
+  border-radius: .1rem;
+  border-right: 0;
+}
+
+.icon-message::before {
+  border: .1rem solid currentColor;
+  border-bottom-right-radius: .1rem;
+  border-left: 0;
+  border-top: 0;
+  height: .8em;
+  left: 65%;
+  top: 40%;
+  width: .7em;
+}
+
+.icon-message::after {
+  background: currentColor;
+  border-radius: .1rem;
+  height: .3em;
+  left: 10%;
+  top: 100%;
+  transform: translate(0, -90%) rotate(45deg);
+  width: .1rem;
+}
+
+.icon-photo {
+  border: .1rem solid currentColor;
+  border-radius: .1rem;
+}
+
+.icon-photo::before {
+  border: .1rem solid currentColor;
+  border-radius: 50%;
+  height: .25em;
+  left: 35%;
+  top: 35%;
+  width: .25em;
+}
+
+.icon-photo::after {
+  border: .1rem solid currentColor;
+  border-bottom: 0;
+  border-left: 0;
+  height: .5em;
+  left: 60%;
+  transform: translate(-50%, 25%) rotate(-45deg);
+  width: .5em;
+}
+
+.icon-link::before,
+.icon-link::after {
+  border: .1rem solid currentColor;
+  border-radius: 5em 0 0 5em;
+  border-right: 0;
+  height: .5em;
+  width: .75em;
+}
+
+.icon-link::before {
+  transform: translate(-70%, -45%) rotate(-45deg);
+}
+
+.icon-link::after {
+  transform: translate(-30%, -55%) rotate(135deg);
+}
+
+.icon-location::before {
+  border: .1rem solid currentColor;
+  border-radius: 50% 50% 50% 0;
+  height: .8em;
+  transform: translate(-50%, -60%) rotate(-45deg);
+  width: .8em;
+}
+
+.icon-location::after {
+  border: .1rem solid currentColor;
+  border-radius: 50%;
+  height: .2em;
+  transform: translate(-50%, -80%);
+  width: .2em;
+}
+
+.icon-emoji {
+  border: .1rem solid currentColor;
+  border-radius: 50%;
+}
+
+.icon-emoji::before {
+  border-radius: 50%;
+  box-shadow: -.17em -.1em, .17em -.1em;
+  height: .15em;
+  width: .15em;
+}
+
+.icon-emoji::after {
+  border: .1rem solid currentColor;
+  border-bottom-color: transparent;
+  border-radius: 50%;
+  border-right-color: transparent;
+  height: .5em;
+  transform: translate(-50%, -40%) rotate(-135deg);
+  width: .5em;
+}
\ No newline at end of file
diff --git a/css/spectre.css b/css/spectre.css
new file mode 100644
index 0000000..1499dcc
--- /dev/null
+++ b/css/spectre.css
@@ -0,0 +1,3760 @@
+/*! Spectre.css v0.5.9 | MIT License | github.com/picturepan2/spectre */
+/* Manually forked from Normalize.css */
+/* normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */
+/** 1. Change the default font family in all browsers (opinionated). 2. Correct the line height in all browsers. 3. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS. */
+/* Document ========================================================================== */
+html {
+  font-family: sans-serif; /* 1 */
+  -webkit-text-size-adjust: 100%; /* 3 */ 
+  -ms-text-size-adjust: 100%; /* 3 */
+}
+
+/* Sections ========================================================================== */
+/** Remove the margin in all browsers (opinionated). */
+body {
+  margin: 0;
+}
+
+/** Add the correct display in IE 9-. */
+article,
+aside,
+footer,
+header,
+nav,
+section {
+  display: block;
+}
+
+/** Correct the font size and margin on `h1` elements within `section` and `article` contexts in Chrome, Firefox, and Safari. */
+h1 {
+  font-size: 2em;
+  margin: .67em 0;
+}
+
+/* Grouping content ========================================================================== */
+/** Add the correct display in IE 9-. 1. Add the correct display in IE. */
+figcaption,
+figure,
+main {
+  /* 1 */ display: block;
+}
+
+/** Add the correct margin in IE 8 (removed). */
+/** 1. Add the correct box sizing in Firefox. 2. Show the overflow in Edge and IE. */
+hr {
+  box-sizing: content-box; /* 1 */
+  height: 0; /* 1 */
+  overflow: visible; /* 2 */
+}
+
+/** 1. Correct the inheritance and scaling of font size in all browsers. (removed) 2. Correct the odd `em` font sizing in all browsers. */
+/* Text-level semantics ========================================================================== */
+/** 1. Remove the gray background on active links in IE 10. 2. Remove gaps in links underline in iOS 8+ and Safari 8+. */
+a {
+  background-color: transparent; /* 1 */
+  -webkit-text-decoration-skip: objects; /* 2 */
+}
+
+/** Remove the outline on focused links when they are also active or hovered in all browsers (opinionated). */
+a:active,
+a:hover {
+  outline-width: 0;
+}
+
+/** Modify default styling of address. */
+address {
+  font-style: normal;
+}
+
+/** 1. Remove the bottom border in Firefox 39-. 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. (removed) */
+/** Prevent the duplicate application of `bolder` by the next rule in Safari 6. */
+b,
+strong {
+  font-weight: inherit;
+}
+
+/** Add the correct font weight in Chrome, Edge, and Safari. */
+b,
+strong {
+  font-weight: bolder;
+}
+
+/** 1. Correct the inheritance and scaling of font size in all browsers. 2. Correct the odd `em` font sizing in all browsers. */
+code,
+kbd,
+pre,
+samp {
+  font-family: "SF Mono", "Segoe UI Mono", "Roboto Mono", Menlo, Courier, monospace; /* 1 (changed) */
+  font-size: 1em; /* 2 */
+}
+
+/** Add the correct font style in Android 4.3-. */
+dfn {
+  font-style: italic;
+}
+
+/** Add the correct background and color in IE 9-. (Removed) */
+/** Add the correct font size in all browsers. */
+small {
+  font-size: 80%;
+  font-weight: 400; /* (added) */
+}
+
+/** Prevent `sub` and `sup` elements from affecting the line height in all browsers. */
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -.25em;
+}
+
+sup {
+  top: -.5em;
+}
+
+/* Embedded content ========================================================================== */
+/** Add the correct display in IE 9-. */
+audio,
+video {
+  display: inline-block;
+}
+
+/** Add the correct display in iOS 4-7. */
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+
+/** Remove the border on images inside links in IE 10-. */
+img {
+  border-style: none;
+}
+
+/** Hide the overflow in IE. */
+svg:not(:root) {
+  overflow: hidden;
+}
+
+/* Forms ========================================================================== */
+/** 1. Change the font styles in all browsers (opinionated). 2. Remove the margin in Firefox and Safari. */
+button,
+input,
+optgroup,
+select,
+textarea {
+  font-family: inherit; /* 1 (changed) */
+  font-size: inherit; /* 1 (changed) */
+  line-height: inherit; /* 1 (changed) */
+  margin: 0; /* 2 */
+}
+
+/** Show the overflow in IE. 1. Show the overflow in Edge. */
+button,
+input {
+  /* 1 */ overflow: visible;
+}
+
+/** Remove the inheritance of text transform in Edge, Firefox, and IE. 1. Remove the inheritance of text transform in Firefox. */
+button,
+select {
+  /* 1 */ text-transform: none;
+}
+
+/** 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` controls in Android 4. 2. Correct the inability to style clickable types in iOS and Safari. */
+button,
+html [type="button"],
+[type="reset"],
+[type="submit"] {
+  -webkit-appearance: button; /* 2 */
+}
+
+/** Remove the inner border and padding in Firefox. */
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+  border-style: none;
+  padding: 0;
+}
+
+/** Restore the focus styles unset by the previous rule (removed). */
+/** Change the border, margin, and padding in all browsers (opinionated) (changed). */
+fieldset {
+  border: 0;
+  margin: 0;
+  padding: 0;
+}
+
+/** 1. Correct the text wrapping in Edge and IE. 2. Correct the color inheritance from `fieldset` elements in IE. 3. Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers. */
+legend {
+  box-sizing: border-box; /* 1 */
+  color: inherit; /* 2 */
+  display: table; /* 1 */
+  max-width: 100%; /* 1 */
+  padding: 0; /* 3 */
+  white-space: normal; /* 1 */
+}
+
+/** 1. Add the correct display in IE 9-. 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. */
+progress {
+  display: inline-block; /* 1 */
+  vertical-align: baseline; /* 2 */
+}
+
+/** Remove the default vertical scrollbar in IE. */
+textarea {
+  overflow: auto;
+}
+
+/** 1. Add the correct box sizing in IE 10-. 2. Remove the padding in IE 10-. */
+[type="checkbox"],
+[type="radio"] {
+  box-sizing: border-box; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/** Correct the cursor style of increment and decrement buttons in Chrome. */
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/** 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */
+[type="search"] {
+  -webkit-appearance: textfield; /* 1 */
+  outline-offset: -2px; /* 2 */
+}
+
+/** Remove the inner padding and cancel buttons in Chrome and Safari on macOS. */
+[type="search"]::-webkit-search-cancel-button,
+[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+/** 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */
+::-webkit-file-upload-button {
+  -webkit-appearance: button; /* 1 */
+  font: inherit; /* 2 */
+}
+
+/* Interactive ========================================================================== */
+/* Add the correct display in IE 9-. 1. Add the correct display in Edge, IE, and Firefox. */
+details,
+menu {
+  display: block;
+}
+
+/* Add the correct display in all browsers. */
+summary {
+  display: list-item;
+  outline: none;
+}
+
+/* Scripting ========================================================================== */
+/** Add the correct display in IE 9-. */
+canvas {
+  display: inline-block;
+}
+
+/** Add the correct display in IE. */
+template {
+  display: none;
+}
+
+/* Hidden ========================================================================== */
+/** Add the correct display in IE 10-. */
+[hidden] {
+  display: none;
+}
+
+*,
+*::before,
+*::after {
+  box-sizing: inherit;
+}
+
+html {
+  box-sizing: border-box;
+  font-size: 20px;
+  line-height: 1.5;
+  -webkit-tap-highlight-color: transparent;
+}
+
+body {
+  background: #fff;
+  color: #3b4351;
+  font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
+  font-size: .8rem;
+  overflow-x: hidden;
+  text-rendering: optimizeLegibility;
+}
+
+a {
+  color: #5755d9;
+  outline: none;
+  text-decoration: none;
+}
+
+a:focus {
+  box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2);
+}
+
+a:focus,
+a:hover,
+a:active,
+a.active {
+  color: #302ecd;
+  text-decoration: underline;
+}
+
+a:visited {
+  color: #807fe2;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  color: inherit;
+  font-weight: 500;
+  line-height: 1.2;
+  margin-bottom: .5em;
+  margin-top: 0;
+}
+
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+  font-weight: 500;
+}
+
+h1,
+.h1 {
+  font-size: 2rem;
+}
+
+h2,
+.h2 {
+  font-size: 1.6rem;
+}
+
+h3,
+.h3 {
+  font-size: 1.4rem;
+}
+
+h4,
+.h4 {
+  font-size: 1.2rem;
+}
+
+h5,
+.h5 {
+  font-size: 1rem;
+}
+
+h6,
+.h6 {
+  font-size: .8rem;
+}
+
+p {
+  margin: 0 0 1.2rem;
+}
+
+a,
+ins,
+u {
+  -webkit-text-decoration-skip: ink edges;
+  text-decoration-skip: ink edges;
+}
+
+abbr[title] {
+  border-bottom: .05rem dotted;
+  cursor: help;
+  text-decoration: none;
+}
+
+kbd {
+  background: #303742;
+  border-radius: .1rem;
+  color: #fff;
+  font-size: .7rem; 
+  line-height: 1.25;
+  padding: .1rem .2rem;
+}
+
+mark {
+  background: #ffe9b3;
+  border-bottom: .05rem solid #ffd367;
+  border-radius: .1rem;
+  color: #3b4351;
+  padding: .05rem .1rem 0;
+}
+
+blockquote {
+  border-left: .1rem solid #dadee4;
+  margin-left: 0;
+  padding: .4rem .8rem;
+}
+
+blockquote p:last-child {
+  margin-bottom: 0;
+}
+
+ul,
+ol {
+  margin: .8rem 0 .8rem .8rem;
+  padding: 0;
+}
+
+ul ul,
+ul ol,
+ol ul,
+ol ol {
+  margin: .8rem 0 .8rem .8rem;
+}
+
+ul li,
+ol li {
+  margin-top: .4rem;
+}
+
+ul {
+  list-style: disc inside;
+}
+
+ul ul {
+  list-style-type: circle;
+}
+
+ol {
+  list-style: decimal inside;
+}
+
+ol ol {
+  list-style-type: lower-alpha;
+}
+
+dl dt {
+  font-weight: bold;
+}
+
+dl dd {
+  margin: .4rem 0 .8rem 0;
+}
+
+html:lang(zh),
+html:lang(zh-Hans),
+.lang-zh,
+.lang-zh-hans {
+  font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif;
+}
+
+html:lang(zh-Hant),
+.lang-zh-hant {
+  font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang TC", "Hiragino Sans CNS", "Microsoft JhengHei", "Helvetica Neue", sans-serif;
+}
+
+html:lang(ja),
+.lang-ja {
+  font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Hiragino Sans", "Hiragino Kaku Gothic Pro", "Yu Gothic", YuGothic, Meiryo, "Helvetica Neue", sans-serif;
+}
+
+html:lang(ko),
+.lang-ko {
+  font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Malgun Gothic", "Helvetica Neue", sans-serif;
+}
+
+:lang(zh) ins,
+:lang(zh) u,
+:lang(ja) ins,
+:lang(ja) u,
+.lang-cjk ins,
+.lang-cjk u {
+  border-bottom: .05rem solid;
+  text-decoration: none;
+}
+
+:lang(zh) del + del,
+:lang(zh) del + s,
+:lang(zh) ins + ins,
+:lang(zh) ins + u,
+:lang(zh) s + del,
+:lang(zh) s + s,
+:lang(zh) u + ins,
+:lang(zh) u + u,
+:lang(ja) del + del,
+:lang(ja) del + s,
+:lang(ja) ins + ins,
+:lang(ja) ins + u,
+:lang(ja) s + del,
+:lang(ja) s + s,
+:lang(ja) u + ins,
+:lang(ja) u + u,
+.lang-cjk del + del,
+.lang-cjk del + s,
+.lang-cjk ins + ins,
+.lang-cjk ins + u,
+.lang-cjk s + del,
+.lang-cjk s + s,
+.lang-cjk u + ins,
+.lang-cjk u + u {
+  margin-left: .125em;
+}
+
+.table {
+  border-collapse: collapse;
+  border-spacing: 0;
+  text-align: left; 
+  width: 100%;
+}
+
+.table.table-striped tbody tr:nth-of-type(odd) {
+  background: #f7f8f9;
+}
+
+.table tbody tr.active,
+.table.table-striped tbody tr.active {
+  background: #eef0f3;
+}
+
+.table.table-hover tbody tr:hover {
+  background: #eef0f3;
+}
+
+.table.table-scroll {
+  display: block;
+  overflow-x: auto;
+  padding-bottom: .75rem;
+  white-space: nowrap;
+}
+
+.table td,
+.table th {
+  border-bottom: .05rem solid #dadee4;
+  padding: .6rem .4rem;
+}
+
+.table th {
+  border-bottom-width: .1rem;
+}
+
+.btn {
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  background: #fff;
+  border: .05rem solid #5755d9;
+  border-radius: .1rem;
+  color: #5755d9;
+  cursor: pointer;
+  display: inline-block;
+  font-size: .8rem;
+  height: 1.8rem;
+  line-height: 1.2rem;
+  outline: none;
+  padding: .25rem .4rem;
+  text-align: center;
+  text-decoration: none;
+  transition: background .2s, border .2s, box-shadow .2s, color .2s;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  vertical-align: middle;
+  white-space: nowrap;
+}
+
+.btn:focus {
+  box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2);
+}
+
+.btn:focus,
+.btn:hover {
+  background: #f1f1fc;
+  border-color: #4b48d6;
+  text-decoration: none;
+}
+
+.btn:active,
+.btn.active {
+  background: #4b48d6;
+  border-color: #3634d2;
+  color: #fff;
+  text-decoration: none;
+}
+
+.btn:active.loading::after,
+.btn.active.loading::after {
+  border-bottom-color: #fff;
+  border-left-color: #fff;
+}
+
+.btn[disabled],
+.btn:disabled,
+.btn.disabled {
+  cursor: default;
+  opacity: .5;
+  pointer-events: none;
+}
+
+.btn.btn-primary {
+  background: #5755d9;
+  border-color: #4b48d6;
+  color: #fff;
+}
+
+.btn.btn-primary:focus,
+.btn.btn-primary:hover {
+  background: #4240d4;
+  border-color: #3634d2;
+  color: #fff;
+}
+
+.btn.btn-primary:active,
+.btn.btn-primary.active {
+  background: #3a38d2;
+  border-color: #302ecd;
+  color: #fff;
+}
+
+.btn.btn-primary.loading::after {
+  border-bottom-color: #fff;
+  border-left-color: #fff;
+}
+
+.btn.btn-success {
+  background: #32b643;
+  border-color: #2faa3f;
+  color: #fff;
+}
+
+.btn.btn-success:focus {
+  box-shadow: 0 0 0 .1rem rgba(50, 182, 67, .2);
+}
+
+.btn.btn-success:focus,
+.btn.btn-success:hover {
+  background: #30ae40;
+  border-color: #2da23c;
+  color: #fff;
+}
+
+.btn.btn-success:active,
+.btn.btn-success.active {
+  background: #2a9a39;
+  border-color: #278e34;
+  color: #fff;
+}
+
+.btn.btn-success.loading::after {
+  border-bottom-color: #fff;
+  border-left-color: #fff;
+}
+
+.btn.btn-error {
+  background: #e85600;
+  border-color: #d95000;
+  color: #fff;
+}
+
+.btn.btn-error:focus {
+  box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2);
+}
+
+.btn.btn-error:focus,
+.btn.btn-error:hover {
+  background: #de5200;
+  border-color: #cf4d00;
+  color: #fff;
+}
+
+.btn.btn-error:active,
+.btn.btn-error.active {
+  background: #c44900;
+  border-color: #b54300;
+  color: #fff;
+}
+
+.btn.btn-error.loading::after {
+  border-bottom-color: #fff;
+  border-left-color: #fff;
+}
+
+.btn.btn-link {
+  background: transparent;
+  border-color: transparent;
+  color: #5755d9;
+}
+
+.btn.btn-link:focus,
+.btn.btn-link:hover,
+.btn.btn-link:active,
+.btn.btn-link.active {
+  color: #302ecd;
+}
+
+.btn.btn-sm {
+  font-size: .7rem;
+  height: 1.4rem;
+  padding: .05rem .3rem;
+}
+
+.btn.btn-lg {
+  font-size: .9rem;
+  height: 2rem;
+  padding: .35rem .6rem;
+}
+
+.btn.btn-block {
+  display: block;
+  width: 100%;
+}
+
+.btn.btn-action {
+  padding-left: 0;
+  padding-right: 0; 
+  width: 1.8rem;
+}
+
+.btn.btn-action.btn-sm {
+  width: 1.4rem;
+}
+
+.btn.btn-action.btn-lg {
+  width: 2rem;
+}
+
+.btn.btn-clear {
+  background: transparent;
+  border: 0;
+  color: currentColor;
+  height: 1rem;
+  line-height: .8rem;
+  margin-left: .2rem;
+  margin-right: -2px;
+  opacity: 1;
+  padding: .1rem;
+  text-decoration: none;
+  width: 1rem;
+}
+
+.btn.btn-clear:focus,
+.btn.btn-clear:hover {
+  background: rgba(247, 248, 249, .5);
+  opacity: .95;
+}
+
+.btn.btn-clear::before {
+  content: "\2715";
+}
+
+.btn-group {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+}
+
+.btn-group .btn {
+  -ms-flex: 1 0 auto;
+  flex: 1 0 auto;
+}
+
+.btn-group .btn:first-child:not(:last-child) {
+  border-bottom-right-radius: 0;
+  border-top-right-radius: 0;
+}
+
+.btn-group .btn:not(:first-child):not(:last-child) {
+  border-radius: 0;
+  margin-left: -.05rem;
+}
+
+.btn-group .btn:last-child:not(:first-child) {
+  border-bottom-left-radius: 0;
+  border-top-left-radius: 0;
+  margin-left: -.05rem;
+}
+
+.btn-group .btn:focus,
+.btn-group .btn:hover,
+.btn-group .btn:active,
+.btn-group .btn.active {
+  z-index: 1;
+}
+
+.btn-group.btn-group-block {
+  display: -ms-flexbox;
+  display: flex;
+}
+
+.btn-group.btn-group-block .btn {
+  -ms-flex: 1 0 0;
+  flex: 1 0 0;
+}
+
+.form-group:not(:last-child) {
+  margin-bottom: .4rem;
+}
+
+fieldset {
+  margin-bottom: .8rem;
+}
+
+legend {
+  font-size: .9rem;
+  font-weight: 500;
+  margin-bottom: .8rem;
+}
+
+.form-label {
+  display: block;
+  line-height: 1.2rem;
+  padding: .3rem 0;
+}
+
+.form-label.label-sm {
+  font-size: .7rem;
+  padding: .1rem 0;
+}
+
+.form-label.label-lg {
+  font-size: .9rem;
+  padding: .4rem 0;
+}
+
+.form-input {
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  background: #fff;
+  background-image: none;
+  border: .05rem solid #bcc3ce;
+  border-radius: .1rem;
+  color: #3b4351;
+  display: block;
+  font-size: .8rem;
+  height: 1.8rem;
+  line-height: 1.2rem;
+  max-width: 100%;
+  outline: none;
+  padding: .25rem .4rem;
+  position: relative;
+  transition: background .2s, border .2s, box-shadow .2s, color .2s;
+  width: 100%;
+}
+
+.form-input:focus {
+  border-color: #5755d9; 
+  box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2);
+}
+
+.form-input:-ms-input-placeholder {
+  color: #bcc3ce;
+}
+
+.form-input::-ms-input-placeholder {
+  color: #bcc3ce;
+}
+
+.form-input::placeholder {
+  color: #bcc3ce;
+}
+
+.form-input.input-sm {
+  font-size: .7rem;
+  height: 1.4rem;
+  padding: .05rem .3rem;
+}
+
+.form-input.input-lg {
+  font-size: .9rem;
+  height: 2rem;
+  padding: .35rem .6rem;
+}
+
+.form-input.input-inline {
+  display: inline-block;
+  vertical-align: middle;
+  width: auto;
+}
+
+.form-input[type="file"] {
+  height: auto;
+}
+
+textarea.form-input,
+textarea.form-input.input-lg,
+textarea.form-input.input-sm {
+  height: auto;
+}
+
+.form-input-hint {
+  color: #bcc3ce;
+  font-size: .7rem;
+  margin-top: .2rem;
+}
+
+.has-success .form-input-hint,
+.is-success + .form-input-hint {
+  color: #32b643;
+}
+
+.has-error .form-input-hint,
+.is-error + .form-input-hint {
+  color: #e85600;
+}
+
+.form-select {
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  background: #fff; 
+  border: .05rem solid #bcc3ce;
+  border-radius: .1rem;
+  color: inherit;
+  font-size: .8rem;
+  height: 1.8rem;
+  line-height: 1.2rem;
+  outline: none;
+  padding: .25rem .4rem;
+  vertical-align: middle;
+  width: 100%;
+}
+
+.form-select:focus {
+  border-color: #5755d9; 
+  box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2);
+}
+
+.form-select::-ms-expand {
+  display: none;
+}
+
+.form-select.select-sm {
+  font-size: .7rem;
+  height: 1.4rem;
+  padding: .05rem 1.1rem .05rem .3rem;
+}
+
+.form-select.select-lg {
+  font-size: .9rem;
+  height: 2rem;
+  padding: .35rem 1.4rem .35rem .6rem;
+}
+
+.form-select[size],
+.form-select[multiple] {
+  height: auto;
+  padding: .25rem .4rem;
+}
+
+.form-select[size] option,
+.form-select[multiple] option {
+  padding: .1rem .2rem;
+}
+
+.form-select:not([multiple]):not([size]) {
+  background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%204%205'%3E%3Cpath%20fill='%23667189'%20d='M2%200L0%202h4zm0%205L0%203h4z'/%3E%3C/svg%3E") no-repeat right .35rem center/.4rem .5rem;
+  padding-right: 1.2rem;
+}
+
+.has-icon-left,
+.has-icon-right {
+  position: relative;
+}
+
+.has-icon-left .form-icon,
+.has-icon-right .form-icon {
+  height: .8rem;
+  margin: 0 .25rem;
+  position: absolute;
+  top: 50%;
+  transform: translateY(-50%);
+  width: .8rem;
+  z-index: 2;
+}
+
+.has-icon-left .form-icon {
+  left: .05rem;
+}
+
+.has-icon-left .form-input {
+  padding-left: 1.3rem;
+}
+
+.has-icon-right .form-icon {
+  right: .05rem;
+}
+
+.has-icon-right .form-input {
+  padding-right: 1.3rem;
+}
+
+.form-checkbox,
+.form-radio,
+.form-switch {
+  display: block;
+  line-height: 1.2rem;
+  margin: .2rem 0;
+  min-height: 1.4rem;
+  padding: .1rem .4rem .1rem 1.2rem;
+  position: relative;
+}
+
+.form-checkbox input,
+.form-radio input,
+.form-switch input {
+  clip: rect(0, 0, 0, 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  position: absolute;
+  width: 1px;
+}
+
+.form-checkbox input:focus + .form-icon,
+.form-radio input:focus + .form-icon,
+.form-switch input:focus + .form-icon {
+  border-color: #5755d9; 
+  box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2);
+}
+
+.form-checkbox input:checked + .form-icon,
+.form-radio input:checked + .form-icon,
+.form-switch input:checked + .form-icon {
+  background: #5755d9;
+  border-color: #5755d9;
+}
+
+.form-checkbox .form-icon,
+.form-radio .form-icon,
+.form-switch .form-icon {
+  border: .05rem solid #bcc3ce;
+  cursor: pointer;
+  display: inline-block;
+  position: absolute;
+  transition: background .2s, border .2s, box-shadow .2s, color .2s;
+}
+
+.form-checkbox.input-sm,
+.form-radio.input-sm,
+.form-switch.input-sm {
+  font-size: .7rem;
+  margin: 0;
+}
+
+.form-checkbox.input-lg,
+.form-radio.input-lg,
+.form-switch.input-lg {
+  font-size: .9rem;
+  margin: .3rem 0;
+}
+
+.form-checkbox .form-icon,
+.form-radio .form-icon {
+  background: #fff;
+  height: .8rem;
+  left: 0;
+  top: .3rem;
+  width: .8rem;
+}
+
+.form-checkbox input:active + .form-icon,
+.form-radio input:active + .form-icon {
+  background: #eef0f3;
+}
+
+.form-checkbox .form-icon {
+  border-radius: .1rem;
+}
+
+.form-checkbox input:checked + .form-icon::before {
+  background-clip: padding-box;
+  border: .1rem solid #fff;
+  border-left-width: 0;
+  border-top-width: 0;
+  content: "";
+  height: 9px;
+  left: 50%;
+  margin-left: -3px;
+  margin-top: -6px;
+  position: absolute;
+  top: 50%;
+  transform: rotate(45deg);
+  width: 6px;
+}
+
+.form-checkbox input:indeterminate + .form-icon {
+  background: #5755d9;
+  border-color: #5755d9;
+}
+
+.form-checkbox input:indeterminate + .form-icon::before {
+  background: #fff;
+  content: "";
+  height: 2px;
+  left: 50%;
+  margin-left: -5px;
+  margin-top: -1px;
+  position: absolute;
+  top: 50%;
+  width: 10px;
+}
+
+.form-radio .form-icon {
+  border-radius: 50%;
+}
+
+.form-radio input:checked + .form-icon::before {
+  background: #fff;
+  border-radius: 50%;
+  content: "";
+  height: 6px;
+  left: 50%;
+  position: absolute;
+  top: 50%;
+  transform: translate(-50%, -50%);
+  width: 6px;
+}
+
+.form-switch {
+  padding-left: 2rem;
+}
+
+.form-switch .form-icon {
+  background: #bcc3ce;
+  background-clip: padding-box;
+  border-radius: .45rem;
+  height: .9rem;
+  left: 0;
+  top: .25rem;
+  width: 1.6rem;
+}
+
+.form-switch .form-icon::before {
+  background: #fff;
+  border-radius: 50%;
+  content: "";
+  display: block;
+  height: .8rem;
+  left: 0;
+  position: absolute;
+  top: 0;
+  transition: background .2s, border .2s, box-shadow .2s, color .2s, left .2s;
+  width: .8rem;
+}
+
+.form-switch input:checked + .form-icon::before {
+  left: 14px;
+}
+
+.form-switch input:active + .form-icon::before {
+  background: #f7f8f9;
+}
+
+.input-group {
+  display: -ms-flexbox;
+  display: flex;
+}
+
+.input-group .input-group-addon {
+  background: #f7f8f9;
+  border: .05rem solid #bcc3ce;
+  border-radius: .1rem;
+  line-height: 1.2rem;
+  padding: .25rem .4rem;
+  white-space: nowrap;
+}
+
+.input-group .input-group-addon.addon-sm {
+  font-size: .7rem;
+  padding: .05rem .3rem;
+}
+
+.input-group .input-group-addon.addon-lg {
+  font-size: .9rem;
+  padding: .35rem .6rem;
+}
+
+.input-group .form-input,
+.input-group .form-select {
+  -ms-flex: 1 1 auto;
+  flex: 1 1 auto;
+  width: 1%;
+}
+
+.input-group .input-group-btn {
+  z-index: 1;
+}
+
+.input-group .form-input:first-child:not(:last-child),
+.input-group .form-select:first-child:not(:last-child),
+.input-group .input-group-addon:first-child:not(:last-child),
+.input-group .input-group-btn:first-child:not(:last-child) {
+  border-bottom-right-radius: 0;
+  border-top-right-radius: 0;
+}
+
+.input-group .form-input:not(:first-child):not(:last-child),
+.input-group .form-select:not(:first-child):not(:last-child),
+.input-group .input-group-addon:not(:first-child):not(:last-child),
+.input-group .input-group-btn:not(:first-child):not(:last-child) {
+  border-radius: 0;
+  margin-left: -.05rem;
+}
+
+.input-group .form-input:last-child:not(:first-child),
+.input-group .form-select:last-child:not(:first-child),
+.input-group .input-group-addon:last-child:not(:first-child),
+.input-group .input-group-btn:last-child:not(:first-child) {
+  border-bottom-left-radius: 0;
+  border-top-left-radius: 0;
+  margin-left: -.05rem;
+}
+
+.input-group .form-input:focus,
+.input-group .form-select:focus,
+.input-group .input-group-addon:focus,
+.input-group .input-group-btn:focus {
+  z-index: 2;
+}
+
+.input-group .form-select {
+  width: auto;
+}
+
+.input-group.input-inline {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+}
+
+.has-success .form-input,
+.form-input.is-success,
+.has-success .form-select,
+.form-select.is-success {
+  background: #f9fdfa;
+  border-color: #32b643;
+}
+
+.has-success .form-input:focus,
+.form-input.is-success:focus,
+.has-success .form-select:focus,
+.form-select.is-success:focus {
+  box-shadow: 0 0 0 .1rem rgba(50, 182, 67, .2);
+}
+
+.has-error .form-input,
+.form-input.is-error,
+.has-error .form-select,
+.form-select.is-error {
+  background: #fffaf7;
+  border-color: #e85600;
+}
+
+.has-error .form-input:focus,
+.form-input.is-error:focus,
+.has-error .form-select:focus,
+.form-select.is-error:focus {
+  box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2);
+}
+
+.has-error .form-checkbox .form-icon,
+.form-checkbox.is-error .form-icon,
+.has-error .form-radio .form-icon,
+.form-radio.is-error .form-icon,
+.has-error .form-switch .form-icon,
+.form-switch.is-error .form-icon {
+  border-color: #e85600;
+}
+
+.has-error .form-checkbox input:checked + .form-icon,
+.form-checkbox.is-error input:checked + .form-icon,
+.has-error .form-radio input:checked + .form-icon,
+.form-radio.is-error input:checked + .form-icon,
+.has-error .form-switch input:checked + .form-icon,
+.form-switch.is-error input:checked + .form-icon {
+  background: #e85600;
+  border-color: #e85600;
+}
+
+.has-error .form-checkbox input:focus + .form-icon,
+.form-checkbox.is-error input:focus + .form-icon,
+.has-error .form-radio input:focus + .form-icon,
+.form-radio.is-error input:focus + .form-icon,
+.has-error .form-switch input:focus + .form-icon,
+.form-switch.is-error input:focus + .form-icon {
+  border-color: #e85600; 
+  box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2);
+}
+
+.has-error .form-checkbox input:indeterminate + .form-icon,
+.form-checkbox.is-error input:indeterminate + .form-icon {
+  background: #e85600;
+  border-color: #e85600;
+}
+
+.form-input:not(:-ms-input-placeholder):invalid {
+  border-color: #e85600;
+}
+
+.form-input:not(:placeholder-shown):invalid {
+  border-color: #e85600;
+}
+
+.form-input:not(:-ms-input-placeholder):invalid:focus {
+  background: #fffaf7; 
+  box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2);
+}
+
+.form-input:not(:placeholder-shown):invalid:focus {
+  background: #fffaf7; 
+  box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2);
+}
+
+.form-input:not(:-ms-input-placeholder):invalid + .form-input-hint {
+  color: #e85600;
+}
+
+.form-input:not(:placeholder-shown):invalid + .form-input-hint {
+  color: #e85600;
+}
+
+.form-input:disabled,
+.form-input.disabled,
+.form-select:disabled,
+.form-select.disabled {
+  background-color: #eef0f3;
+  cursor: not-allowed;
+  opacity: .5;
+}
+
+.form-input[readonly] {
+  background-color: #f7f8f9;
+}
+
+input:disabled + .form-icon,
+input.disabled + .form-icon {
+  background: #eef0f3;
+  cursor: not-allowed;
+  opacity: .5;
+}
+
+.form-switch input:disabled + .form-icon::before,
+.form-switch input.disabled + .form-icon::before {
+  background: #fff;
+}
+
+.form-horizontal {
+  padding: .4rem 0;
+}
+
+.form-horizontal .form-group {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+}
+
+.form-inline {
+  display: inline-block;
+}
+
+.label {
+  background: #eef0f3;
+  border-radius: .1rem;
+  color: #455060;
+  display: inline-block; 
+  line-height: 1.25;
+  padding: .1rem .2rem;
+}
+
+.label.label-rounded {
+  border-radius: 5rem;
+  padding-left: .4rem;
+  padding-right: .4rem;
+}
+
+.label.label-primary {
+  background: #5755d9;
+  color: #fff;
+}
+
+.label.label-secondary {
+  background: #f1f1fc;
+  color: #5755d9;
+}
+
+.label.label-success {
+  background: #32b643;
+  color: #fff;
+}
+
+.label.label-warning {
+  background: #ffb700;
+  color: #fff;
+}
+
+.label.label-error {
+  background: #e85600;
+  color: #fff;
+}
+
+code {
+  background: #fcf2f2;
+  border-radius: .1rem;
+  color: #d73e48;
+  font-size: 85%; 
+  line-height: 1.25;
+  padding: .1rem .2rem;
+}
+
+.code {
+  border-radius: .1rem;
+  color: #3b4351;
+  position: relative;
+}
+
+.code::before {
+  color: #bcc3ce;
+  content: attr(data-lang);
+  font-size: .7rem;
+  position: absolute;
+  right: .4rem;
+  top: .1rem;
+}
+
+.code code {
+  background: #f7f8f9;
+  color: inherit;
+  display: block;
+  line-height: 1.5;
+  overflow-x: auto;
+  padding: 1rem;
+  width: 100%;
+}
+
+.img-responsive {
+  display: block;
+  height: auto;
+  max-width: 100%;
+}
+
+.img-fit-cover {
+  object-fit: cover;
+}
+
+.img-fit-contain {
+  object-fit: contain;
+}
+
+.video-responsive {
+  display: block;
+  overflow: hidden;
+  padding: 0;
+  position: relative;
+  width: 100%;
+}
+
+.video-responsive::before {
+  content: "";
+  display: block;
+  padding-bottom: 56.25%;
+}
+
+.video-responsive iframe,
+.video-responsive object,
+.video-responsive embed {
+  border: 0;
+  bottom: 0;
+  height: 100%;
+  left: 0;
+  position: absolute;
+  right: 0;
+  top: 0;
+  width: 100%;
+}
+
+video.video-responsive {
+  height: auto;
+  max-width: 100%;
+}
+
+video.video-responsive::before {
+  content: none;
+}
+
+.video-responsive-4-3::before {
+  padding-bottom: 75%;
+}
+
+.video-responsive-1-1::before {
+  padding-bottom: 100%;
+}
+
+.figure {
+  margin: 0 0 .4rem 0;
+}
+
+.figure .figure-caption {
+  color: #66758c;
+  margin-top: .4rem;
+}
+
+.container {
+  margin-left: auto;
+  margin-right: auto;
+  padding-left: .4rem;
+  padding-right: .4rem;
+  width: 100%;
+}
+
+.container.grid-xl {
+  max-width: 1296px;
+}
+
+.container.grid-lg {
+  max-width: 976px;
+}
+
+.container.grid-md {
+  max-width: 856px;
+}
+
+.container.grid-sm {
+  max-width: 616px;
+}
+
+.container.grid-xs {
+  max-width: 496px;
+}
+
+.show-xs,
+.show-sm,
+.show-md,
+.show-lg,
+.show-xl {
+  display: none !important;
+}
+
+.cols,
+.columns {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+  margin-left: -.4rem;
+  margin-right: -.4rem;
+}
+
+.cols.col-gapless,
+.columns.col-gapless {
+  margin-left: 0;
+  margin-right: 0;
+}
+
+.cols.col-gapless > .column,
+.columns.col-gapless > .column {
+  padding-left: 0;
+  padding-right: 0;
+}
+
+.cols.col-oneline,
+.columns.col-oneline {
+  -ms-flex-wrap: nowrap;
+  flex-wrap: nowrap;
+  overflow-x: auto;
+}
+
+[class~="col-"],
+.column {
+  -ms-flex: 1;
+  flex: 1;
+  max-width: 100%;
+  padding-left: .4rem;
+  padding-right: .4rem;
+}
+
+[class~="col-"].col-12,
+[class~="col-"].col-11,
+[class~="col-"].col-10,
+[class~="col-"].col-9,
+[class~="col-"].col-8,
+[class~="col-"].col-7,
+[class~="col-"].col-6,
+[class~="col-"].col-5,
+[class~="col-"].col-4,
+[class~="col-"].col-3,
+[class~="col-"].col-2,
+[class~="col-"].col-1,
+[class~="col-"].col-auto,
+.column.col-12,
+.column.col-11,
+.column.col-10,
+.column.col-9,
+.column.col-8,
+.column.col-7,
+.column.col-6,
+.column.col-5,
+.column.col-4,
+.column.col-3,
+.column.col-2,
+.column.col-1,
+.column.col-auto {
+  -ms-flex: none;
+  flex: none;
+}
+
+.col-12 {
+  width: 100%;
+}
+
+.col-11 {
+  width: 91.66666667%;
+}
+
+.col-10 {
+  width: 83.33333333%;
+}
+
+.col-9 {
+  width: 75%;
+}
+
+.col-8 {
+  width: 66.66666667%;
+}
+
+.col-7 {
+  width: 58.33333333%;
+}
+
+.col-6 {
+  width: 50%;
+}
+
+.col-5 {
+  width: 41.66666667%;
+}
+
+.col-4 {
+  width: 33.33333333%;
+}
+
+.col-3 {
+  width: 25%;
+}
+
+.col-2 {
+  width: 16.66666667%;
+}
+
+.col-1 {
+  width: 8.33333333%;
+}
+
+.col-auto {
+  -ms-flex: 0 0 auto;
+  flex: 0 0 auto;
+  max-width: none;
+  width: auto;
+}
+
+.col-mx-auto {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.col-ml-auto {
+  margin-left: auto;
+}
+
+.col-mr-auto {
+  margin-right: auto;
+}
+
+@media (max-width: 1280px) {
+  .col-xl-12,
+  .col-xl-11,
+  .col-xl-10,
+  .col-xl-9,
+  .col-xl-8,
+  .col-xl-7,
+  .col-xl-6,
+  .col-xl-5,
+  .col-xl-4,
+  .col-xl-3,
+  .col-xl-2,
+  .col-xl-1,
+  .col-xl-auto {
+    -ms-flex: none;
+    flex: none;
+  }
+  .col-xl-12 {
+    width: 100%;
+  }
+  .col-xl-11 {
+    width: 91.66666667%;
+  }
+  .col-xl-10 {
+    width: 83.33333333%;
+  }
+  .col-xl-9 {
+    width: 75%;
+  }
+  .col-xl-8 {
+    width: 66.66666667%;
+  }
+  .col-xl-7 {
+    width: 58.33333333%;
+  }
+  .col-xl-6 {
+    width: 50%;
+  }
+  .col-xl-5 {
+    width: 41.66666667%;
+  }
+  .col-xl-4 {
+    width: 33.33333333%;
+  }
+  .col-xl-3 {
+    width: 25%;
+  }
+  .col-xl-2 {
+    width: 16.66666667%;
+  }
+  .col-xl-1 {
+    width: 8.33333333%;
+  }
+  .col-xl-auto {
+    width: auto;
+  }
+  .hide-xl {
+    display: none !important;
+  }
+  .show-xl {
+    display: block !important;
+  }
+}
+
+@media (max-width: 960px) {
+  .col-lg-12,
+  .col-lg-11,
+  .col-lg-10,
+  .col-lg-9,
+  .col-lg-8,
+  .col-lg-7,
+  .col-lg-6,
+  .col-lg-5,
+  .col-lg-4,
+  .col-lg-3,
+  .col-lg-2,
+  .col-lg-1,
+  .col-lg-auto {
+    -ms-flex: none;
+    flex: none;
+  }
+  .col-lg-12 {
+    width: 100%;
+  }
+  .col-lg-11 {
+    width: 91.66666667%;
+  }
+  .col-lg-10 {
+    width: 83.33333333%;
+  }
+  .col-lg-9 {
+    width: 75%;
+  }
+  .col-lg-8 {
+    width: 66.66666667%;
+  }
+  .col-lg-7 {
+    width: 58.33333333%;
+  }
+  .col-lg-6 {
+    width: 50%;
+  }
+  .col-lg-5 {
+    width: 41.66666667%;
+  }
+  .col-lg-4 {
+    width: 33.33333333%;
+  }
+  .col-lg-3 {
+    width: 25%;
+  }
+  .col-lg-2 {
+    width: 16.66666667%;
+  }
+  .col-lg-1 {
+    width: 8.33333333%;
+  }
+  .col-lg-auto {
+    width: auto;
+  }
+  .hide-lg {
+    display: none !important;
+  }
+  .show-lg {
+    display: block !important;
+  }
+}
+
+@media (max-width: 840px) {
+  .col-md-12,
+  .col-md-11,
+  .col-md-10,
+  .col-md-9,
+  .col-md-8,
+  .col-md-7,
+  .col-md-6,
+  .col-md-5,
+  .col-md-4,
+  .col-md-3,
+  .col-md-2,
+  .col-md-1,
+  .col-md-auto {
+    -ms-flex: none;
+    flex: none;
+  }
+  .col-md-12 {
+    width: 100%;
+  }
+  .col-md-11 {
+    width: 91.66666667%;
+  }
+  .col-md-10 {
+    width: 83.33333333%;
+  }
+  .col-md-9 {
+    width: 75%;
+  }
+  .col-md-8 {
+    width: 66.66666667%;
+  }
+  .col-md-7 {
+    width: 58.33333333%;
+  }
+  .col-md-6 {
+    width: 50%;
+  }
+  .col-md-5 {
+    width: 41.66666667%;
+  }
+  .col-md-4 {
+    width: 33.33333333%;
+  }
+  .col-md-3 {
+    width: 25%;
+  }
+  .col-md-2 {
+    width: 16.66666667%;
+  }
+  .col-md-1 {
+    width: 8.33333333%;
+  }
+  .col-md-auto {
+    width: auto;
+  }
+  .hide-md {
+    display: none !important;
+  }
+  .show-md {
+    display: block !important;
+  }
+}
+
+@media (max-width: 600px) {
+  .col-sm-12,
+  .col-sm-11,
+  .col-sm-10,
+  .col-sm-9,
+  .col-sm-8,
+  .col-sm-7,
+  .col-sm-6,
+  .col-sm-5,
+  .col-sm-4,
+  .col-sm-3,
+  .col-sm-2,
+  .col-sm-1,
+  .col-sm-auto {
+    -ms-flex: none;
+    flex: none;
+  }
+  .col-sm-12 {
+    width: 100%;
+  }
+  .col-sm-11 {
+    width: 91.66666667%;
+  }
+  .col-sm-10 {
+    width: 83.33333333%;
+  }
+  .col-sm-9 {
+    width: 75%;
+  }
+  .col-sm-8 {
+    width: 66.66666667%;
+  }
+  .col-sm-7 {
+    width: 58.33333333%;
+  }
+  .col-sm-6 {
+    width: 50%;
+  }
+  .col-sm-5 {
+    width: 41.66666667%;
+  }
+  .col-sm-4 {
+    width: 33.33333333%;
+  }
+  .col-sm-3 {
+    width: 25%;
+  }
+  .col-sm-2 {
+    width: 16.66666667%;
+  }
+  .col-sm-1 {
+    width: 8.33333333%;
+  }
+  .col-sm-auto {
+    width: auto;
+  }
+  .hide-sm {
+    display: none !important;
+  }
+  .show-sm {
+    display: block !important;
+  }
+}
+
+@media (max-width: 480px) {
+  .col-xs-12,
+  .col-xs-11,
+  .col-xs-10,
+  .col-xs-9,
+  .col-xs-8,
+  .col-xs-7,
+  .col-xs-6,
+  .col-xs-5,
+  .col-xs-4,
+  .col-xs-3,
+  .col-xs-2,
+  .col-xs-1,
+  .col-xs-auto {
+    -ms-flex: none;
+    flex: none;
+  }
+  .col-xs-12 {
+    width: 100%;
+  }
+  .col-xs-11 {
+    width: 91.66666667%;
+  }
+  .col-xs-10 {
+    width: 83.33333333%;
+  }
+  .col-xs-9 {
+    width: 75%;
+  }
+  .col-xs-8 {
+    width: 66.66666667%;
+  }
+  .col-xs-7 {
+    width: 58.33333333%;
+  }
+  .col-xs-6 {
+    width: 50%;
+  }
+  .col-xs-5 {
+    width: 41.66666667%;
+  }
+  .col-xs-4 {
+    width: 33.33333333%;
+  }
+  .col-xs-3 {
+    width: 25%;
+  }
+  .col-xs-2 {
+    width: 16.66666667%;
+  }
+  .col-xs-1 {
+    width: 8.33333333%;
+  }
+  .col-xs-auto {
+    width: auto;
+  }
+  .hide-xs {
+    display: none !important;
+  }
+  .show-xs {
+    display: block !important;
+  }
+}
+
+.hero {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-direction: column;
+  flex-direction: column;
+  -ms-flex-pack: justify;
+  justify-content: space-between;
+  padding-bottom: 4rem;
+  padding-top: 4rem;
+}
+
+.hero.hero-sm {
+  padding-bottom: 2rem;
+  padding-top: 2rem;
+}
+
+.hero.hero-lg {
+  padding-bottom: 8rem;
+  padding-top: 8rem;
+}
+
+.hero .hero-body {
+  padding: .4rem;
+}
+
+.navbar {
+  align-items: stretch;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: stretch;
+  -ms-flex-pack: justify;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+  justify-content: space-between;
+}
+
+.navbar .navbar-section {
+  align-items: center;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex: 1 0 0;
+  flex: 1 0 0; 
+  -ms-flex-align: center;
+}
+
+.navbar .navbar-section:not(:first-child):last-child {
+  -ms-flex-pack: end;
+  justify-content: flex-end;
+}
+
+.navbar .navbar-center {
+  align-items: center;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex: 0 0 auto;
+  flex: 0 0 auto; 
+  -ms-flex-align: center;
+}
+
+.navbar .navbar-brand {
+  font-size: .9rem;
+  text-decoration: none;
+}
+
+.accordion input:checked ~ .accordion-header > .icon:first-child,
+.accordion[open] .accordion-header > .icon:first-child {
+  transform: rotate(90deg);
+}
+
+.accordion input:checked ~ .accordion-body,
+.accordion[open] .accordion-body {
+  max-height: 50rem;
+}
+
+.accordion .accordion-header {
+  display: block;
+  padding: .2rem .4rem;
+}
+
+.accordion .accordion-header .icon {
+  transition: transform .25s;
+}
+
+.accordion .accordion-body {
+  margin-bottom: .4rem;
+  max-height: 0;
+  overflow: hidden;
+  transition: max-height .25s;
+}
+
+summary.accordion-header::-webkit-details-marker {
+  display: none;
+}
+
+.avatar {
+  background: #5755d9;
+  border-radius: 50%;
+  color: rgba(255, 255, 255, .85);
+  display: inline-block;
+  font-size: .8rem;
+  font-weight: 300;
+  height: 1.6rem;
+  line-height: 1.25;
+  margin: 0;
+  position: relative;
+  vertical-align: middle; 
+  width: 1.6rem;
+}
+
+.avatar.avatar-xs {
+  font-size: .4rem;
+  height: .8rem;
+  width: .8rem;
+}
+
+.avatar.avatar-sm {
+  font-size: .6rem;
+  height: 1.2rem;
+  width: 1.2rem;
+}
+
+.avatar.avatar-lg {
+  font-size: 1.2rem;
+  height: 2.4rem;
+  width: 2.4rem;
+}
+
+.avatar.avatar-xl {
+  font-size: 1.6rem;
+  height: 3.2rem;
+  width: 3.2rem;
+}
+
+.avatar img {
+  border-radius: 50%;
+  height: 100%;
+  position: relative;
+  width: 100%;
+  z-index: 1;
+}
+
+.avatar .avatar-icon,
+.avatar .avatar-presence {
+  background: #fff;
+  bottom: 14.64%;
+  height: 50%;
+  padding: .1rem;
+  position: absolute;
+  right: 14.64%;
+  transform: translate(50%, 50%);
+  width: 50%;
+  z-index: 2;
+}
+
+.avatar .avatar-presence {
+  background: #bcc3ce;
+  border-radius: 50%;
+  box-shadow: 0 0 0 .1rem #fff;
+  height: .5em;
+  width: .5em;
+}
+
+.avatar .avatar-presence.online {
+  background: #32b643;
+}
+
+.avatar .avatar-presence.busy {
+  background: #e85600;
+}
+
+.avatar .avatar-presence.away {
+  background: #ffb700;
+}
+
+.avatar[data-initial]::before {
+  color: currentColor;
+  content: attr(data-initial);
+  left: 50%;
+  position: absolute;
+  top: 50%;
+  transform: translate(-50%, -50%);
+  z-index: 1;
+}
+
+.badge {
+  position: relative;
+  white-space: nowrap;
+}
+
+.badge[data-badge]::after,
+.badge:not([data-badge])::after {
+  background: #5755d9;
+  background-clip: padding-box;
+  border-radius: .5rem;
+  box-shadow: 0 0 0 .1rem #fff;
+  color: #fff;
+  content: attr(data-badge);
+  display: inline-block;
+  transform: translate(-.05rem, -.5rem);
+}
+
+.badge[data-badge]::after {
+  font-size: .7rem;
+  height: .9rem;
+  line-height: 1;
+  min-width: .9rem;
+  padding: .1rem .2rem;
+  text-align: center;
+  white-space: nowrap;
+}
+
+.badge:not([data-badge])::after,
+.badge[data-badge=""]::after {
+  height: 6px;
+  min-width: 6px;
+  padding: 0;
+  width: 6px;
+}
+
+.badge.btn::after {
+  position: absolute;
+  right: 0;
+  top: 0;
+  transform: translate(50%, -50%);
+}
+
+.badge.avatar::after {
+  position: absolute;
+  right: 14.64%;
+  top: 14.64%;
+  transform: translate(50%, -50%);
+  z-index: 100;
+}
+
+.breadcrumb {
+  list-style: none;
+  margin: .2rem 0;
+  padding: .2rem 0;
+}
+
+.breadcrumb .breadcrumb-item {
+  color: #66758c;
+  display: inline-block;
+  margin: 0;
+  padding: .2rem 0;
+}
+
+.breadcrumb .breadcrumb-item:not(:last-child) {
+  margin-right: .2rem;
+}
+
+.breadcrumb .breadcrumb-item:not(:last-child) a {
+  color: #66758c;
+}
+
+.breadcrumb .breadcrumb-item:not(:first-child)::before {
+  color: #66758c;
+  content: "/";
+  padding-right: .4rem;
+}
+
+.bar {
+  background: #eef0f3;
+  border-radius: .1rem;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-wrap: nowrap;
+  flex-wrap: nowrap;
+  height: .8rem;
+  width: 100%;
+}
+
+.bar.bar-sm {
+  height: .2rem;
+}
+
+.bar .bar-item {
+  background: #5755d9;
+  color: #fff;
+  display: block;
+  -ms-flex-negative: 0;
+  flex-shrink: 0;
+  font-size: .7rem;
+  height: 100%;
+  line-height: .8rem;
+  position: relative;
+  text-align: center;
+  width: 0;
+}
+
+.bar .bar-item:first-child {
+  border-bottom-left-radius: .1rem;
+  border-top-left-radius: .1rem;
+}
+
+.bar .bar-item:last-child {
+  border-bottom-right-radius: .1rem;
+  border-top-right-radius: .1rem;
+  -ms-flex-negative: 1;
+  flex-shrink: 1;
+}
+
+.bar-slider {
+  height: .1rem;
+  margin: .4rem 0;
+  position: relative;
+}
+
+.bar-slider .bar-item {
+  left: 0;
+  padding: 0;
+  position: absolute;
+}
+
+.bar-slider .bar-item:not(:last-child):first-child {
+  background: #eef0f3;
+  z-index: 1;
+}
+
+.bar-slider .bar-slider-btn {
+  background: #5755d9;
+  border: 0;
+  border-radius: 50%;
+  height: .6rem;
+  padding: 0;
+  position: absolute;
+  right: 0;
+  top: 50%;
+  transform: translate(50%, -50%);
+  width: .6rem;
+}
+
+.bar-slider .bar-slider-btn:active {
+  box-shadow: 0 0 0 .1rem #5755d9;
+}
+
+.card {
+  background: #fff;
+  border: .05rem solid #dadee4;
+  border-radius: .1rem;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-direction: column;
+  flex-direction: column;
+}
+
+.card .card-header,
+.card .card-body,
+.card .card-footer {
+  padding: .8rem;
+  padding-bottom: 0;
+}
+
+.card .card-header:last-child,
+.card .card-body:last-child,
+.card .card-footer:last-child {
+  padding-bottom: .8rem;
+}
+
+.card .card-body {
+  -ms-flex: 1 1 auto;
+  flex: 1 1 auto;
+}
+
+.card .card-image {
+  padding-top: .8rem;
+}
+
+.card .card-image:first-child {
+  padding-top: 0;
+}
+
+.card .card-image:first-child img {
+  border-top-left-radius: .1rem;
+  border-top-right-radius: .1rem;
+}
+
+.card .card-image:last-child img {
+  border-bottom-left-radius: .1rem;
+  border-bottom-right-radius: .1rem;
+}
+
+.chip {
+  align-items: center;
+  background: #eef0f3;
+  border-radius: 5rem;
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -ms-flex-align: center;
+  font-size: 90%;
+  height: 1.2rem;
+  line-height: .8rem;
+  margin: .1rem;
+  max-width: 320px;
+  overflow: hidden;
+  padding: .2rem .4rem;
+  text-decoration: none;
+  text-overflow: ellipsis;
+  vertical-align: middle;
+  white-space: nowrap;
+}
+
+.chip.active {
+  background: #5755d9;
+  color: #fff;
+}
+
+.chip .avatar {
+  margin-left: -.4rem;
+  margin-right: .2rem;
+}
+
+.chip .btn-clear {
+  border-radius: 50%;
+  transform: scale(.75);
+}
+
+.dropdown {
+  display: inline-block;
+  position: relative;
+}
+
+.dropdown .menu {
+  animation: slide-down .15s ease 1;
+  display: none;
+  left: 0;
+  max-height: 50vh;
+  overflow-y: auto;
+  position: absolute;
+  top: 100%;
+}
+
+.dropdown.dropdown-right .menu {
+  left: auto;
+  right: 0;
+}
+
+.dropdown.active .menu,
+.dropdown .dropdown-toggle:focus + .menu,
+.dropdown .menu:hover {
+  display: block;
+}
+
+.dropdown .btn-group .dropdown-toggle:nth-last-child(2) {
+  border-bottom-right-radius: .1rem;
+  border-top-right-radius: .1rem;
+}
+
+.empty {
+  background: #f7f8f9;
+  border-radius: .1rem;
+  color: #66758c;
+  padding: 3.2rem 1.6rem; 
+  text-align: center;
+}
+
+.empty .empty-icon {
+  margin-bottom: .8rem;
+}
+
+.empty .empty-title,
+.empty .empty-subtitle {
+  margin: .4rem auto;
+}
+
+.empty .empty-action {
+  margin-top: .8rem;
+}
+
+.menu {
+  background: #fff;
+  border-radius: .1rem;
+  box-shadow: 0 .05rem .2rem rgba(48, 55, 66, .3);
+  list-style: none;
+  margin: 0;
+  min-width: 180px;
+  padding: .4rem;
+  transform: translateY(.2rem);
+  z-index: 300;
+}
+
+.menu.menu-nav {
+  background: transparent;
+  box-shadow: none;
+}
+
+.menu .menu-item {
+  margin-top: 0;
+  padding: 0 .4rem;
+  position: relative;
+  text-decoration: none;
+}
+
+.menu .menu-item > a {
+  border-radius: .1rem;
+  color: inherit;
+  display: block;
+  margin: 0 -.4rem;
+  padding: .2rem .4rem;
+  text-decoration: none;
+}
+
+.menu .menu-item > a:focus,
+.menu .menu-item > a:hover {
+  background: #f1f1fc;
+  color: #5755d9;
+}
+
+.menu .menu-item > a:active,
+.menu .menu-item > a.active {
+  background: #f1f1fc;
+  color: #5755d9;
+}
+
+.menu .menu-item .form-checkbox,
+.menu .menu-item .form-radio,
+.menu .menu-item .form-switch {
+  margin: .1rem 0;
+}
+
+.menu .menu-item + .menu-item {
+  margin-top: .2rem;
+}
+
+.menu .menu-badge {
+  align-items: center;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+  height: 100%;
+  position: absolute;
+  right: 0;
+  top: 0;
+}
+
+.menu .menu-badge .label {
+  margin-right: .4rem;
+}
+
+.modal {
+  align-items: center;
+  bottom: 0;
+  display: none;
+  -ms-flex-align: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+  left: 0;
+  opacity: 0;
+  overflow: hidden;
+  padding: .4rem;
+  position: fixed;
+  right: 0;
+  top: 0;
+}
+
+.modal:target,
+.modal.active {
+  display: -ms-flexbox;
+  display: flex;
+  opacity: 1;
+  z-index: 400;
+}
+
+.modal:target .modal-overlay,
+.modal.active .modal-overlay {
+  background: rgba(247, 248, 249, .75);
+  bottom: 0;
+  cursor: default;
+  display: block;
+  left: 0;
+  position: absolute;
+  right: 0;
+  top: 0;
+}
+
+.modal:target .modal-container,
+.modal.active .modal-container {
+  animation: slide-down .2s ease 1;
+  z-index: 1;
+}
+
+.modal.modal-sm .modal-container {
+  max-width: 320px;
+  padding: 0 .4rem;
+}
+
+.modal.modal-lg .modal-overlay {
+  background: #fff;
+}
+
+.modal.modal-lg .modal-container {
+  box-shadow: none;
+  max-width: 960px;
+}
+
+.modal-container {
+  background: #fff;
+  border-radius: .1rem;
+  box-shadow: 0 .2rem .5rem rgba(48, 55, 66, .3);
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-direction: column;
+  flex-direction: column;
+  max-height: 75vh;
+  max-width: 640px;
+  padding: 0 .8rem;
+  width: 100%;
+}
+
+.modal-container.modal-fullheight {
+  max-height: 100vh;
+}
+
+.modal-container .modal-header {
+  color: #303742;
+  padding: .8rem;
+}
+
+.modal-container .modal-body {
+  overflow-y: auto;
+  padding: .8rem;
+  position: relative;
+}
+
+.modal-container .modal-footer {
+  padding: .8rem;
+  text-align: right;
+}
+
+.nav {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-direction: column;
+  flex-direction: column;
+  list-style: none;
+  margin: .2rem 0;
+}
+
+.nav .nav-item a {
+  color: #66758c;
+  padding: .2rem .4rem;
+  text-decoration: none;
+}
+
+.nav .nav-item a:focus,
+.nav .nav-item a:hover {
+  color: #5755d9;
+}
+
+.nav .nav-item.active > a {
+  color: #505c6e;
+  font-weight: bold;
+}
+
+.nav .nav-item.active > a:focus,
+.nav .nav-item.active > a:hover {
+  color: #5755d9;
+}
+
+.nav .nav {
+  margin-bottom: .4rem;
+  margin-left: .8rem;
+}
+
+.pagination {
+  display: -ms-flexbox;
+  display: flex;
+  list-style: none;
+  margin: .2rem 0;
+  padding: .2rem 0;
+}
+
+.pagination .page-item {
+  margin: .2rem .05rem;
+}
+
+.pagination .page-item span {
+  display: inline-block;
+  padding: .2rem .2rem;
+}
+
+.pagination .page-item a {
+  border-radius: .1rem;
+  display: inline-block;
+  padding: .2rem .4rem;
+  text-decoration: none;
+}
+
+.pagination .page-item a:focus,
+.pagination .page-item a:hover {
+  color: #5755d9;
+}
+
+.pagination .page-item.disabled a {
+  cursor: default;
+  opacity: .5;
+  pointer-events: none;
+}
+
+.pagination .page-item.active a {
+  background: #5755d9;
+  color: #fff;
+}
+
+.pagination .page-item.page-prev,
+.pagination .page-item.page-next {
+  -ms-flex: 1 0 50%;
+  flex: 1 0 50%;
+}
+
+.pagination .page-item.page-next {
+  text-align: right;
+}
+
+.pagination .page-item .page-item-title {
+  margin: 0;
+}
+
+.pagination .page-item .page-item-subtitle {
+  margin: 0;
+  opacity: .5;
+}
+
+.panel {
+  border: .05rem solid #dadee4;
+  border-radius: .1rem;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-direction: column;
+  flex-direction: column;
+}
+
+.panel .panel-header,
+.panel .panel-footer {
+  -ms-flex: 0 0 auto;
+  flex: 0 0 auto;
+  padding: .8rem;
+}
+
+.panel .panel-nav {
+  -ms-flex: 0 0 auto;
+  flex: 0 0 auto;
+}
+
+.panel .panel-body {
+  -ms-flex: 1 1 auto;
+  flex: 1 1 auto;
+  overflow-y: auto;
+  padding: 0 .8rem;
+}
+
+.popover {
+  display: inline-block;
+  position: relative;
+}
+
+.popover .popover-container {
+  left: 50%;
+  opacity: 0;
+  padding: .4rem;
+  position: absolute;
+  top: 0;
+  transform: translate(-50%, -50%) scale(0);
+  transition: transform .2s;
+  width: 320px;
+  z-index: 300;
+}
+
+.popover *:focus + .popover-container,
+.popover:hover .popover-container {
+  display: block;
+  opacity: 1;
+  transform: translate(-50%, -100%) scale(1);
+}
+
+.popover.popover-right .popover-container {
+  left: 100%;
+  top: 50%;
+}
+
+.popover.popover-right *:focus + .popover-container,
+.popover.popover-right:hover .popover-container {
+  transform: translate(0, -50%) scale(1);
+}
+
+.popover.popover-bottom .popover-container {
+  left: 50%;
+  top: 100%;
+}
+
+.popover.popover-bottom *:focus + .popover-container,
+.popover.popover-bottom:hover .popover-container {
+  transform: translate(-50%, 0) scale(1);
+}
+
+.popover.popover-left .popover-container {
+  left: 0;
+  top: 50%;
+}
+
+.popover.popover-left *:focus + .popover-container,
+.popover.popover-left:hover .popover-container {
+  transform: translate(-100%, -50%) scale(1);
+}
+
+.popover .card {
+  border: 0; 
+  box-shadow: 0 .2rem .5rem rgba(48, 55, 66, .3);
+}
+
+.step {
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-wrap: nowrap;
+  flex-wrap: nowrap;
+  list-style: none;
+  margin: .2rem 0;
+  width: 100%;
+}
+
+.step .step-item {
+  -ms-flex: 1 1 0;
+  flex: 1 1 0;
+  margin-top: 0;
+  min-height: 1rem;
+  position: relative; 
+  text-align: center;
+}
+
+.step .step-item:not(:first-child)::before {
+  background: #5755d9;
+  content: "";
+  height: 2px;
+  left: -50%;
+  position: absolute;
+  top: 9px;
+  width: 100%;
+}
+
+.step .step-item a {
+  color: #5755d9;
+  display: inline-block;
+  padding: 20px 10px 0;
+  text-decoration: none;
+}
+
+.step .step-item a::before {
+  background: #5755d9;
+  border: .1rem solid #fff;
+  border-radius: 50%;
+  content: "";
+  display: block;
+  height: .6rem;
+  left: 50%;
+  position: absolute;
+  top: .2rem;
+  transform: translateX(-50%);
+  width: .6rem;
+  z-index: 1;
+}
+
+.step .step-item.active a::before {
+  background: #fff;
+  border: .1rem solid #5755d9;
+}
+
+.step .step-item.active ~ .step-item::before {
+  background: #dadee4;
+}
+
+.step .step-item.active ~ .step-item a {
+  color: #bcc3ce;
+}
+
+.step .step-item.active ~ .step-item a::before {
+  background: #dadee4;
+}
+
+.tab {
+  align-items: center;
+  border-bottom: .05rem solid #dadee4;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+  list-style: none;
+  margin: .2rem 0 .15rem 0;
+}
+
+.tab .tab-item {
+  margin-top: 0;
+}
+
+.tab .tab-item a {
+  border-bottom: .1rem solid transparent;
+  color: inherit;
+  display: block;
+  margin: 0 .4rem 0 0;
+  padding: .4rem .2rem .3rem .2rem;
+  text-decoration: none;
+}
+
+.tab .tab-item a:focus,
+.tab .tab-item a:hover {
+  color: #5755d9;
+}
+
+.tab .tab-item.active a,
+.tab .tab-item a.active {
+  border-bottom-color: #5755d9;
+  color: #5755d9;
+}
+
+.tab .tab-item.tab-action {
+  -ms-flex: 1 0 auto;
+  flex: 1 0 auto;
+  text-align: right;
+}
+
+.tab .tab-item .btn-clear {
+  margin-top: -.2rem;
+}
+
+.tab.tab-block .tab-item {
+  -ms-flex: 1 0 0;
+  flex: 1 0 0;
+  text-align: center;
+}
+
+.tab.tab-block .tab-item a {
+  margin: 0;
+}
+
+.tab.tab-block .tab-item .badge[data-badge]::after {
+  position: absolute;
+  right: .1rem;
+  top: .1rem;
+  transform: translate(0, 0);
+}
+
+.tab:not(.tab-block) .badge {
+  padding-right: 0;
+}
+
+.tile {
+  align-content: space-between;
+  align-items: flex-start;
+  display: -ms-flexbox;
+  display: flex; 
+  -ms-flex-align: start;
+  -ms-flex-line-pack: justify;
+}
+
+.tile .tile-icon,
+.tile .tile-action {
+  -ms-flex: 0 0 auto;
+  flex: 0 0 auto;
+}
+
+.tile .tile-content {
+  -ms-flex: 1 1 auto;
+  flex: 1 1 auto;
+}
+
+.tile .tile-content:not(:first-child) {
+  padding-left: .4rem;
+}
+
+.tile .tile-content:not(:last-child) {
+  padding-right: .4rem;
+}
+
+.tile .tile-title,
+.tile .tile-subtitle {
+  line-height: 1.2rem;
+}
+
+.tile.tile-centered {
+  align-items: center; 
+  -ms-flex-align: center;
+}
+
+.tile.tile-centered .tile-content {
+  overflow: hidden;
+}
+
+.tile.tile-centered .tile-title,
+.tile.tile-centered .tile-subtitle {
+  margin-bottom: 0; 
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.toast {
+  background: rgba(48, 55, 66, .95);
+  border: .05rem solid #303742;
+  border-color: #303742;
+  border-radius: .1rem;
+  color: #fff;
+  display: block;
+  padding: .4rem;
+  width: 100%;
+}
+
+.toast.toast-primary {
+  background: rgba(87, 85, 217, .95);
+  border-color: #5755d9;
+}
+
+.toast.toast-success {
+  background: rgba(50, 182, 67, .95);
+  border-color: #32b643;
+}
+
+.toast.toast-warning {
+  background: rgba(255, 183, 0, .95);
+  border-color: #ffb700;
+}
+
+.toast.toast-error {
+  background: rgba(232, 86, 0, .95);
+  border-color: #e85600;
+}
+
+.toast a {
+  color: #fff;
+  text-decoration: underline;
+}
+
+.toast a:focus,
+.toast a:hover,
+.toast a:active,
+.toast a.active {
+  opacity: .75;
+}
+
+.toast .btn-clear {
+  margin: .1rem;
+}
+
+.toast p:last-child {
+  margin-bottom: 0;
+}
+
+.tooltip {
+  position: relative;
+}
+
+.tooltip::after {
+  background: rgba(48, 55, 66, .95);
+  border-radius: .1rem;
+  bottom: 100%;
+  color: #fff;
+  content: attr(data-tooltip);
+  display: block;
+  font-size: .7rem;
+  left: 50%;
+  max-width: 320px;
+  opacity: 0;
+  overflow: hidden;
+  padding: .2rem .4rem;
+  pointer-events: none;
+  position: absolute;
+  text-overflow: ellipsis;
+  transform: translate(-50%, .4rem);
+  transition: opacity .2s, transform .2s;
+  white-space: pre;
+  z-index: 300;
+}
+
+.tooltip:focus::after,
+.tooltip:hover::after {
+  opacity: 1;
+  transform: translate(-50%, -.2rem);
+}
+
+.tooltip[disabled],
+.tooltip.disabled {
+  pointer-events: auto;
+}
+
+.tooltip.tooltip-right::after {
+  bottom: 50%;
+  left: 100%;
+  transform: translate(-.2rem, 50%);
+}
+
+.tooltip.tooltip-right:focus::after,
+.tooltip.tooltip-right:hover::after {
+  transform: translate(.2rem, 50%);
+}
+
+.tooltip.tooltip-bottom::after {
+  bottom: auto;
+  top: 100%;
+  transform: translate(-50%, -.4rem);
+}
+
+.tooltip.tooltip-bottom:focus::after,
+.tooltip.tooltip-bottom:hover::after {
+  transform: translate(-50%, .2rem);
+}
+
+.tooltip.tooltip-left::after {
+  bottom: 50%;
+  left: auto;
+  right: 100%;
+  transform: translate(.4rem, 50%);
+}
+
+.tooltip.tooltip-left:focus::after,
+.tooltip.tooltip-left:hover::after {
+  transform: translate(-.2rem, 50%);
+}
+
+@keyframes loading {
+  0% {
+    transform: rotate(0deg);
+  }
+  100% {
+    transform: rotate(360deg);
+  }
+}
+
+@keyframes slide-down {
+  0% {
+    opacity: 0;
+    transform: translateY(-1.6rem);
+  }
+  100% {
+    opacity: 1;
+    transform: translateY(0);
+  }
+}
+
+.text-primary {
+  color: #5755d9 !important;
+}
+
+a.text-primary:focus,
+a.text-primary:hover {
+  color: #4240d4;
+}
+
+a.text-primary:visited {
+  color: #6c6ade;
+}
+
+.text-secondary {
+  color: #e5e5f9 !important;
+}
+
+a.text-secondary:focus,
+a.text-secondary:hover {
+  color: #d1d0f4;
+}
+
+a.text-secondary:visited {
+  color: #fafafe;
+}
+
+.text-gray {
+  color: #bcc3ce !important;
+}
+
+a.text-gray:focus,
+a.text-gray:hover {
+  color: #adb6c4;
+}
+
+a.text-gray:visited {
+  color: #cbd0d9;
+}
+
+.text-light {
+  color: #fff !important;
+}
+
+a.text-light:focus,
+a.text-light:hover {
+  color: #f2f2f2;
+}
+
+a.text-light:visited {
+  color: white;
+}
+
+.text-dark {
+  color: #3b4351 !important;
+}
+
+a.text-dark:focus,
+a.text-dark:hover {
+  color: #303742;
+}
+
+a.text-dark:visited {
+  color: #455060;
+}
+
+.text-success {
+  color: #32b643 !important;
+}
+
+a.text-success:focus,
+a.text-success:hover {
+  color: #2da23c;
+}
+
+a.text-success:visited {
+  color: #39c94b;
+}
+
+.text-warning {
+  color: #ffb700 !important;
+}
+
+a.text-warning:focus,
+a.text-warning:hover {
+  color: #e6a500;
+}
+
+a.text-warning:visited {
+  color: #ffbe1a;
+}
+
+.text-error {
+  color: #e85600 !important;
+}
+
+a.text-error:focus,
+a.text-error:hover {
+  color: #cf4d00;
+}
+
+a.text-error:visited {
+  color: #ff6003;
+}
+
+.bg-primary {
+  background: #5755d9 !important;
+  color: #fff;
+}
+
+.bg-secondary {
+  background: #f1f1fc !important;
+}
+
+.bg-dark {
+  background: #303742 !important;
+  color: #fff;
+}
+
+.bg-gray {
+  background: #f7f8f9 !important;
+}
+
+.bg-success {
+  background: #32b643 !important;
+  color: #fff;
+}
+
+.bg-warning {
+  background: #ffb700 !important;
+  color: #fff;
+}
+
+.bg-error {
+  background: #e85600 !important;
+  color: #fff;
+}
+
+.c-hand {
+  cursor: pointer;
+}
+
+.c-move {
+  cursor: move;
+}
+
+.c-zoom-in {
+  cursor: zoom-in;
+}
+
+.c-zoom-out {
+  cursor: zoom-out;
+}
+
+.c-not-allowed {
+  cursor: not-allowed;
+}
+
+.c-auto {
+  cursor: auto;
+}
+
+.d-block {
+  display: block;
+}
+
+.d-inline {
+  display: inline;
+}
+
+.d-inline-block {
+  display: inline-block;
+}
+
+.d-flex {
+  display: -ms-flexbox;
+  display: flex;
+}
+
+.d-inline-flex {
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+}
+
+.d-none,
+.d-hide {
+  display: none !important;
+}
+
+.d-visible {
+  visibility: visible;
+}
+
+.d-invisible {
+  visibility: hidden;
+}
+
+.text-hide {
+  background: transparent;
+  border: 0;
+  color: transparent;
+  font-size: 0;
+  line-height: 0;
+  text-shadow: none;
+}
+
+.text-assistive {
+  border: 0;
+  clip: rect(0, 0, 0, 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px;
+}
+
+.divider,
+.divider-vert {
+  display: block;
+  position: relative;
+}
+
+.divider[data-content]::after,
+.divider-vert[data-content]::after {
+  background: #fff;
+  color: #bcc3ce;
+  content: attr(data-content);
+  display: inline-block;
+  font-size: .7rem;
+  padding: 0 .4rem;
+  transform: translateY(-.65rem);
+}
+
+.divider {
+  border-top: .05rem solid #f1f3f5;
+  height: .05rem;
+  margin: .4rem 0;
+}
+
+.divider[data-content] {
+  margin: .8rem 0;
+}
+
+.divider-vert {
+  display: block;
+  padding: .8rem;
+}
+
+.divider-vert::before {
+  border-left: .05rem solid #dadee4;
+  bottom: .4rem;
+  content: "";
+  display: block;
+  left: 50%;
+  position: absolute;
+  top: .4rem;
+  transform: translateX(-50%);
+}
+
+.divider-vert[data-content]::after {
+  left: 50%;
+  padding: .2rem 0;
+  position: absolute;
+  top: 50%;
+  transform: translate(-50%, -50%);
+}
+
+.loading {
+  color: transparent !important;
+  min-height: .8rem;
+  pointer-events: none;
+  position: relative;
+}
+
+.loading::after {
+  animation: loading 500ms infinite linear;
+  background: transparent;
+  border: .1rem solid #5755d9;
+  border-radius: 50%;
+  border-right-color: transparent;
+  border-top-color: transparent;
+  content: "";
+  display: block;
+  height: .8rem;
+  left: 50%;
+  margin-left: -.4rem;
+  margin-top: -.4rem;
+  opacity: 1;
+  padding: 0;
+  position: absolute;
+  top: 50%;
+  width: .8rem;
+  z-index: 1;
+}
+
+.loading.loading-lg {
+  min-height: 2rem;
+}
+
+.loading.loading-lg::after {
+  height: 1.6rem;
+  margin-left: -.8rem;
+  margin-top: -.8rem;
+  width: 1.6rem;
+}
+
+.clearfix::after {
+  clear: both;
+  content: "";
+  display: table;
+}
+
+.float-left {
+  float: left !important;
+}
+
+.float-right {
+  float: right !important;
+}
+
+.p-relative {
+  position: relative !important;
+}
+
+.p-absolute {
+  position: absolute !important;
+}
+
+.p-fixed {
+  position: fixed !important;
+}
+
+.p-sticky {
+  position: -webkit-sticky !important;
+  position: sticky !important;
+}
+
+.p-centered {
+  display: block;
+  float: none;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.flex-centered {
+  align-items: center;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-align: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+}
+
+.m-0 {
+  margin: 0 !important;
+}
+
+.mb-0 {
+  margin-bottom: 0 !important;
+}
+
+.ml-0 {
+  margin-left: 0 !important;
+}
+
+.mr-0 {
+  margin-right: 0 !important;
+}
+
+.mt-0 {
+  margin-top: 0 !important;
+}
+
+.mx-0 {
+  margin-left: 0 !important;
+  margin-right: 0 !important;
+}
+
+.my-0 {
+  margin-bottom: 0 !important;
+  margin-top: 0 !important;
+}
+
+.m-1 {
+  margin: .2rem !important;
+}
+
+.mb-1 {
+  margin-bottom: .2rem !important;
+}
+
+.ml-1 {
+  margin-left: .2rem !important;
+}
+
+.mr-1 {
+  margin-right: .2rem !important;
+}
+
+.mt-1 {
+  margin-top: .2rem !important;
+}
+
+.mx-1 {
+  margin-left: .2rem !important;
+  margin-right: .2rem !important;
+}
+
+.my-1 {
+  margin-bottom: .2rem !important;
+  margin-top: .2rem !important;
+}
+
+.m-2 {
+  margin: .4rem !important;
+}
+
+.mb-2 {
+  margin-bottom: .4rem !important;
+}
+
+.ml-2 {
+  margin-left: .4rem !important;
+}
+
+.mr-2 {
+  margin-right: .4rem !important;
+}
+
+.mt-2 {
+  margin-top: .4rem !important;
+}
+
+.mx-2 {
+  margin-left: .4rem !important;
+  margin-right: .4rem !important;
+}
+
+.my-2 {
+  margin-bottom: .4rem !important;
+  margin-top: .4rem !important;
+}
+
+.p-0 {
+  padding: 0 !important;
+}
+
+.pb-0 {
+  padding-bottom: 0 !important;
+}
+
+.pl-0 {
+  padding-left: 0 !important;
+}
+
+.pr-0 {
+  padding-right: 0 !important;
+}
+
+.pt-0 {
+  padding-top: 0 !important;
+}
+
+.px-0 {
+  padding-left: 0 !important;
+  padding-right: 0 !important;
+}
+
+.py-0 {
+  padding-bottom: 0 !important;
+  padding-top: 0 !important;
+}
+
+.p-1 {
+  padding: .2rem !important;
+}
+
+.pb-1 {
+  padding-bottom: .2rem !important;
+}
+
+.pl-1 {
+  padding-left: .2rem !important;
+}
+
+.pr-1 {
+  padding-right: .2rem !important;
+}
+
+.pt-1 {
+  padding-top: .2rem !important;
+}
+
+.px-1 {
+  padding-left: .2rem !important;
+  padding-right: .2rem !important;
+}
+
+.py-1 {
+  padding-bottom: .2rem !important;
+  padding-top: .2rem !important;
+}
+
+.p-2 {
+  padding: .4rem !important;
+}
+
+.pb-2 {
+  padding-bottom: .4rem !important;
+}
+
+.pl-2 {
+  padding-left: .4rem !important;
+}
+
+.pr-2 {
+  padding-right: .4rem !important;
+}
+
+.pt-2 {
+  padding-top: .4rem !important;
+}
+
+.px-2 {
+  padding-left: .4rem !important;
+  padding-right: .4rem !important;
+}
+
+.py-2 {
+  padding-bottom: .4rem !important;
+  padding-top: .4rem !important;
+}
+
+.s-rounded {
+  border-radius: .1rem;
+}
+
+.s-circle {
+  border-radius: 50%;
+}
+
+.text-left {
+  text-align: left;
+}
+
+.text-right {
+  text-align: right;
+}
+
+.text-center {
+  text-align: center;
+}
+
+.text-justify {
+  text-align: justify;
+}
+
+.text-lowercase {
+  text-transform: lowercase;
+}
+
+.text-uppercase {
+  text-transform: uppercase;
+}
+
+.text-capitalize {
+  text-transform: capitalize;
+}
+
+.text-normal {
+  font-weight: normal;
+}
+
+.text-bold {
+  font-weight: bold;
+}
+
+.text-italic {
+  font-style: italic;
+}
+
+.text-large {
+  font-size: 1.2em;
+}
+
+.text-small {
+  font-size: .9em;
+}
+
+.text-tiny {
+  font-size: .8em;
+}
+
+.text-muted {
+  opacity: .8;
+}
+
+.text-ellipsis {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.text-clip {
+  overflow: hidden;
+  text-overflow: clip;
+  white-space: nowrap;
+}
+
+.text-break {
+  -webkit-hyphens: auto;
+  -ms-hyphens: auto;
+  hyphens: auto;
+  word-break: break-word;
+  word-wrap: break-word;
+}
\ No newline at end of file
diff --git a/img/e-rihsit_logo.png b/img/e-rihsit_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..f0a325de9b690504134cb77da6c5488cf50ae439
GIT binary patch
literal 20339
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%0AbBAN%v4HW^etTek@Jd(^wJ;%N;r+r<OG7LMkv
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
M07*qoM6N<$f(L9NRR910

literal 0
HcmV?d00001

diff --git a/img/logo_ispc.png b/img/logo_ispc.png
new file mode 100644
index 0000000000000000000000000000000000000000..97891b5a4bff6f6cadce5954b48450bc3bc2d26d
GIT binary patch
literal 18690
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

literal 0
HcmV?d00001

diff --git a/index.html b/index.html
new file mode 100644
index 0000000..eb7720b
--- /dev/null
+++ b/index.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="UTF-8" />
+    <link rel="stylesheet" href="css/spectre.css" />
+    <link rel="stylesheet" href="css/qrihs.css" />
+    <script src="js/qrious.min.js" type="text/javascript"></script>
+    <script src="js/index.js" type="text/javascript"></script>
+    <title>Q-RIHS</title>
+</head>
+<body>
+    <h1 class="text-center">Q-RIHS</h1>
+
+    <h2 class="text-center">Tracciamento strumenti E-RIHS</h2>
+
+    <p class="text-center p-2">Inserire link e ID strumento per generare l'etichetta con il QR Code</p>
+
+    <div class="container main">
+        <div class="columns mt-2">
+            <div class="column col-lg-7 col-xl-8 col-sm-12 p-2">
+                <input class="d-block" type="text" name="link" placeholder="Inserire link" />
+                <input class="d-block" type="text" name="id-str" placeholder="Inserire ID strumento" />
+                <button class="btn btn-primary c-hand" id="gen">
+                    Genera etichetta
+                </button>
+                <div class="divider"></div>
+                <button class="btn btn-primary disabled c-hand mt-2" id="download">
+                    Scarica PNG
+                </button>
+            </div>
+            <div class="column col-lg-5 col-xl-4 col-sm-12 text-center" style="border: #ccc 1px solid;">
+                <canvas id="qrcode" width="244" height="468">
+                    Etichetta strumento
+                </canvas>
+                <p class="text-center">Anteprima</p>
+            </div>
+        </div>
+    </div>
+    <footer class="text-center text-italic p-2">
+        Powered by NicoPa
+    </footer>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/js/index.js b/js/index.js
new file mode 100644
index 0000000..14fdc89
--- /dev/null
+++ b/js/index.js
@@ -0,0 +1,61 @@
+document.addEventListener('DOMContentLoaded', () => {
+    const download = document.querySelector('#download');
+
+    console.log('I\'m outside clickers');
+
+    document.querySelector('#gen').addEventListener('click', () => {
+        let link = document.querySelector('input[name="link"]').value;
+        let idInstr =document.querySelector('input[name="id-str"]').value; 
+
+        let canvas = document.querySelector('canvas');
+        const ctx = canvas.getContext('2d');
+        ctx.clearRect(0,0,canvas.width, canvas.height);
+
+        ctx.fillStyle = "#333";
+
+        // Prepare img elements
+        const qrImg = new Image();
+        const ispcLogo = new Image();
+        const erihsLogo = new Image();
+
+        ispcLogo.src = "./img/logo_ispc.png";
+        erihsLogo.src = "./img/e-rihsit_logo.png";
+
+        let qr = new QRious({element: qrImg});
+
+        qr.set({
+            size: 200,
+            value: link
+        })
+
+        // Draw images
+        ispcLogo.onload = () => {
+            ctx.drawImage(ispcLogo, 25, 10, 200, 75)
+        }
+
+        qrImg.src = qr.toDataURL();
+        qrImg.onload = () => {
+            ctx.drawImage(qrImg, 25, 90, 200, 200)
+        }
+        // Draw instrument ID as text
+        ctx.font = '48px sans-serif';
+        ctx.fillText(idInstr, 45, 330);
+
+        erihsLogo.onload = () => {
+            ctx.drawImage(erihsLogo, 25, 355, 200, 41)
+        }
+        download.classList.remove('disabled');
+    });
+
+    download.addEventListener('click', () => {
+        let downloadLink = document.createElement('a');
+        downloadLink.setAttribute('download', 'etichetta.png');
+        let canvas = document.querySelector('canvas');
+
+        canvas.toBlob(function(blob) {
+            let url = URL.createObjectURL(blob);
+            downloadLink.setAttribute('href', url);
+            downloadLink.click();
+        });
+    });
+});
\ No newline at end of file
diff --git a/js/package.json b/js/package.json
new file mode 100644
index 0000000..18a1e41
--- /dev/null
+++ b/js/package.json
@@ -0,0 +1,3 @@
+{
+  "dependencies": {}
+}
diff --git a/js/qrious.min.js b/js/qrious.min.js
new file mode 100644
index 0000000..5735ea6
--- /dev/null
+++ b/js/qrious.min.js
@@ -0,0 +1,6 @@
+/*! QRious v4.0.2 | (C) 2017 Alasdair Mercer | GPL v3 License
+Based on jsqrencode | (C) 2010 tz@execpc.com | GPL v3 License
+*/
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.QRious=e()}(this,function(){"use strict";function t(t,e){var n;return"function"==typeof Object.create?n=Object.create(t):(s.prototype=t,n=new s,s.prototype=null),e&&i(!0,n,e),n}function e(e,n,s,r){var o=this;return"string"!=typeof e&&(r=s,s=n,n=e,e=null),"function"!=typeof n&&(r=s,s=n,n=function(){return o.apply(this,arguments)}),i(!1,n,o,r),n.prototype=t(o.prototype,s),n.prototype.constructor=n,n.class_=e||o.class_,n.super_=o,n}function i(t,e,i){for(var n,s,a=0,h=(i=o.call(arguments,2)).length;a<h;a++){s=i[a];for(n in s)t&&!r.call(s,n)||(e[n]=s[n])}}function n(){}var s=function(){},r=Object.prototype.hasOwnProperty,o=Array.prototype.slice,a=e;n.class_="Nevis",n.super_=Object,n.extend=a;var h=n,f=h.extend(function(t,e,i){this.qrious=t,this.element=e,this.element.qrious=t,this.enabled=Boolean(i)},{draw:function(t){},getElement:function(){return this.enabled||(this.enabled=!0,this.render()),this.element},getModuleSize:function(t){var e=this.qrious,i=e.padding||0,n=Math.floor((e.size-2*i)/t.width);return Math.max(1,n)},getOffset:function(t){var e=this.qrious,i=e.padding;if(null!=i)return i;var n=this.getModuleSize(t),s=Math.floor((e.size-n*t.width)/2);return Math.max(0,s)},render:function(t){this.enabled&&(this.resize(),this.reset(),this.draw(t))},reset:function(){},resize:function(){}}),c=f.extend({draw:function(t){var e,i,n=this.qrious,s=this.getModuleSize(t),r=this.getOffset(t),o=this.element.getContext("2d");for(o.fillStyle=n.foreground,o.globalAlpha=n.foregroundAlpha,e=0;e<t.width;e++)for(i=0;i<t.width;i++)t.buffer[i*t.width+e]&&o.fillRect(s*e+r,s*i+r,s,s)},reset:function(){var t=this.qrious,e=this.element.getContext("2d"),i=t.size;e.lineWidth=1,e.clearRect(0,0,i,i),e.fillStyle=t.background,e.globalAlpha=t.backgroundAlpha,e.fillRect(0,0,i,i)},resize:function(){var t=this.element;t.width=t.height=this.qrious.size}}),u=h.extend(null,{BLOCK:[0,11,15,19,23,27,31,16,18,20,22,24,26,28,20,22,24,24,26,28,28,22,24,24,26,26,28,28,24,24,26,26,26,28,28,24,26,26,26,28,28]}),l=h.extend(null,{BLOCKS:[1,0,19,7,1,0,16,10,1,0,13,13,1,0,9,17,1,0,34,10,1,0,28,16,1,0,22,22,1,0,16,28,1,0,55,15,1,0,44,26,2,0,17,18,2,0,13,22,1,0,80,20,2,0,32,18,2,0,24,26,4,0,9,16,1,0,108,26,2,0,43,24,2,2,15,18,2,2,11,22,2,0,68,18,4,0,27,16,4,0,19,24,4,0,15,28,2,0,78,20,4,0,31,18,2,4,14,18,4,1,13,26,2,0,97,24,2,2,38,22,4,2,18,22,4,2,14,26,2,0,116,30,3,2,36,22,4,4,16,20,4,4,12,24,2,2,68,18,4,1,43,26,6,2,19,24,6,2,15,28,4,0,81,20,1,4,50,30,4,4,22,28,3,8,12,24,2,2,92,24,6,2,36,22,4,6,20,26,7,4,14,28,4,0,107,26,8,1,37,22,8,4,20,24,12,4,11,22,3,1,115,30,4,5,40,24,11,5,16,20,11,5,12,24,5,1,87,22,5,5,41,24,5,7,24,30,11,7,12,24,5,1,98,24,7,3,45,28,15,2,19,24,3,13,15,30,1,5,107,28,10,1,46,28,1,15,22,28,2,17,14,28,5,1,120,30,9,4,43,26,17,1,22,28,2,19,14,28,3,4,113,28,3,11,44,26,17,4,21,26,9,16,13,26,3,5,107,28,3,13,41,26,15,5,24,30,15,10,15,28,4,4,116,28,17,0,42,26,17,6,22,28,19,6,16,30,2,7,111,28,17,0,46,28,7,16,24,30,34,0,13,24,4,5,121,30,4,14,47,28,11,14,24,30,16,14,15,30,6,4,117,30,6,14,45,28,11,16,24,30,30,2,16,30,8,4,106,26,8,13,47,28,7,22,24,30,22,13,15,30,10,2,114,28,19,4,46,28,28,6,22,28,33,4,16,30,8,4,122,30,22,3,45,28,8,26,23,30,12,28,15,30,3,10,117,30,3,23,45,28,4,31,24,30,11,31,15,30,7,7,116,30,21,7,45,28,1,37,23,30,19,26,15,30,5,10,115,30,19,10,47,28,15,25,24,30,23,25,15,30,13,3,115,30,2,29,46,28,42,1,24,30,23,28,15,30,17,0,115,30,10,23,46,28,10,35,24,30,19,35,15,30,17,1,115,30,14,21,46,28,29,19,24,30,11,46,15,30,13,6,115,30,14,23,46,28,44,7,24,30,59,1,16,30,12,7,121,30,12,26,47,28,39,14,24,30,22,41,15,30,6,14,121,30,6,34,47,28,46,10,24,30,2,64,15,30,17,4,122,30,29,14,46,28,49,10,24,30,24,46,15,30,4,18,122,30,13,32,46,28,48,14,24,30,42,32,15,30,20,4,117,30,40,7,47,28,43,22,24,30,10,67,15,30,19,6,118,30,18,31,47,28,34,34,24,30,20,61,15,30],FINAL_FORMAT:[30660,29427,32170,30877,26159,25368,27713,26998,21522,20773,24188,23371,17913,16590,20375,19104,13663,12392,16177,14854,9396,8579,11994,11245,5769,5054,7399,6608,1890,597,3340,2107],LEVELS:{L:1,M:2,Q:3,H:4}}),_=h.extend(null,{EXPONENT:[1,2,4,8,16,32,64,128,29,58,116,232,205,135,19,38,76,152,45,90,180,117,234,201,143,3,6,12,24,48,96,192,157,39,78,156,37,74,148,53,106,212,181,119,238,193,159,35,70,140,5,10,20,40,80,160,93,186,105,210,185,111,222,161,95,190,97,194,153,47,94,188,101,202,137,15,30,60,120,240,253,231,211,187,107,214,177,127,254,225,223,163,91,182,113,226,217,175,67,134,17,34,68,136,13,26,52,104,208,189,103,206,129,31,62,124,248,237,199,147,59,118,236,197,151,51,102,204,133,23,46,92,184,109,218,169,79,158,33,66,132,21,42,84,168,77,154,41,82,164,85,170,73,146,57,114,228,213,183,115,230,209,191,99,198,145,63,126,252,229,215,179,123,246,241,255,227,219,171,75,150,49,98,196,149,55,110,220,165,87,174,65,130,25,50,100,200,141,7,14,28,56,112,224,221,167,83,166,81,162,89,178,121,242,249,239,195,155,43,86,172,69,138,9,18,36,72,144,61,122,244,245,247,243,251,235,203,139,11,22,44,88,176,125,250,233,207,131,27,54,108,216,173,71,142,0],LOG:[255,0,1,25,2,50,26,198,3,223,51,238,27,104,199,75,4,100,224,14,52,141,239,129,28,193,105,248,200,8,76,113,5,138,101,47,225,36,15,33,53,147,142,218,240,18,130,69,29,181,194,125,106,39,249,185,201,154,9,120,77,228,114,166,6,191,139,98,102,221,48,253,226,152,37,179,16,145,34,136,54,208,148,206,143,150,219,189,241,210,19,92,131,56,70,64,30,66,182,163,195,72,126,110,107,58,40,84,250,133,186,61,202,94,155,159,10,21,121,43,78,212,229,172,115,243,167,87,7,112,192,247,140,128,99,13,103,74,222,237,49,197,254,24,227,165,153,119,38,184,180,124,17,68,146,217,35,32,137,46,55,63,209,91,149,188,207,205,144,135,151,178,220,252,190,97,242,86,211,171,20,42,93,158,132,60,57,83,71,109,65,162,31,45,67,216,183,123,164,118,196,23,73,236,127,12,111,246,108,161,59,82,41,157,85,170,251,96,134,177,187,204,62,90,203,89,95,176,156,169,160,81,11,245,22,235,122,117,44,215,79,174,213,233,230,231,173,232,116,214,244,234,168,80,88,175]}),d=h.extend(null,{BLOCK:[3220,1468,2713,1235,3062,1890,2119,1549,2344,2936,1117,2583,1330,2470,1667,2249,2028,3780,481,4011,142,3098,831,3445,592,2517,1776,2234,1951,2827,1070,2660,1345,3177]}),v=h.extend(function(t){var e,i,n,s,r,o=t.value.length;for(this._badness=[],this._level=l.LEVELS[t.level],this._polynomial=[],this._value=t.value,this._version=0,this._stringBuffer=[];this._version<40&&(this._version++,n=4*(this._level-1)+16*(this._version-1),s=l.BLOCKS[n++],r=l.BLOCKS[n++],e=l.BLOCKS[n++],i=l.BLOCKS[n],n=e*(s+r)+r-3+(this._version<=9),!(o<=n)););this._dataBlock=e,this._eccBlock=i,this._neccBlock1=s,this._neccBlock2=r;var a=this.width=17+4*this._version;this.buffer=v._createArray(a*a),this._ecc=v._createArray(e+(e+i)*(s+r)+r),this._mask=v._createArray((a*(a+1)+1)/2),this._insertFinders(),this._insertAlignments(),this.buffer[8+a*(a-8)]=1,this._insertTimingGap(),this._reverseMask(),this._insertTimingRowAndColumn(),this._insertVersion(),this._syncMask(),this._convertBitStream(o),this._calculatePolynomial(),this._appendEccToData(),this._interleaveBlocks(),this._pack(),this._finish()},{_addAlignment:function(t,e){var i,n=this.buffer,s=this.width;for(n[t+s*e]=1,i=-2;i<2;i++)n[t+i+s*(e-2)]=1,n[t-2+s*(e+i+1)]=1,n[t+2+s*(e+i)]=1,n[t+i+1+s*(e+2)]=1;for(i=0;i<2;i++)this._setMask(t-1,e+i),this._setMask(t+1,e-i),this._setMask(t-i,e-1),this._setMask(t+i,e+1)},_appendData:function(t,e,i,n){var s,r,o,a=this._polynomial,h=this._stringBuffer;for(r=0;r<n;r++)h[i+r]=0;for(r=0;r<e;r++){if(255!==(s=_.LOG[h[t+r]^h[i]]))for(o=1;o<n;o++)h[i+o-1]=h[i+o]^_.EXPONENT[v._modN(s+a[n-o])];else for(o=i;o<i+n;o++)h[o]=h[o+1];h[i+n-1]=255===s?0:_.EXPONENT[v._modN(s+a[0])]}},_appendEccToData:function(){var t,e=0,i=this._dataBlock,n=this._calculateMaxLength(),s=this._eccBlock;for(t=0;t<this._neccBlock1;t++)this._appendData(e,i,n,s),e+=i,n+=s;for(t=0;t<this._neccBlock2;t++)this._appendData(e,i+1,n,s),e+=i+1,n+=s},_applyMask:function(t){var e,i,n,s,r=this.buffer,o=this.width;switch(t){case 0:for(s=0;s<o;s++)for(n=0;n<o;n++)n+s&1||this._isMasked(n,s)||(r[n+s*o]^=1);break;case 1:for(s=0;s<o;s++)for(n=0;n<o;n++)1&s||this._isMasked(n,s)||(r[n+s*o]^=1);break;case 2:for(s=0;s<o;s++)for(e=0,n=0;n<o;n++,e++)3===e&&(e=0),e||this._isMasked(n,s)||(r[n+s*o]^=1);break;case 3:for(i=0,s=0;s<o;s++,i++)for(3===i&&(i=0),e=i,n=0;n<o;n++,e++)3===e&&(e=0),e||this._isMasked(n,s)||(r[n+s*o]^=1);break;case 4:for(s=0;s<o;s++)for(e=0,i=s>>1&1,n=0;n<o;n++,e++)3===e&&(e=0,i=!i),i||this._isMasked(n,s)||(r[n+s*o]^=1);break;case 5:for(i=0,s=0;s<o;s++,i++)for(3===i&&(i=0),e=0,n=0;n<o;n++,e++)3===e&&(e=0),(n&s&1)+!(!e|!i)||this._isMasked(n,s)||(r[n+s*o]^=1);break;case 6:for(i=0,s=0;s<o;s++,i++)for(3===i&&(i=0),e=0,n=0;n<o;n++,e++)3===e&&(e=0),(n&s&1)+(e&&e===i)&1||this._isMasked(n,s)||(r[n+s*o]^=1);break;case 7:for(i=0,s=0;s<o;s++,i++)for(3===i&&(i=0),e=0,n=0;n<o;n++,e++)3===e&&(e=0),(e&&e===i)+(n+s&1)&1||this._isMasked(n,s)||(r[n+s*o]^=1)}},_calculateMaxLength:function(){return this._dataBlock*(this._neccBlock1+this._neccBlock2)+this._neccBlock2},_calculatePolynomial:function(){var t,e,i=this._eccBlock,n=this._polynomial;for(n[0]=1,t=0;t<i;t++){for(n[t+1]=1,e=t;e>0;e--)n[e]=n[e]?n[e-1]^_.EXPONENT[v._modN(_.LOG[n[e]]+t)]:n[e-1];n[0]=_.EXPONENT[v._modN(_.LOG[n[0]]+t)]}for(t=0;t<=i;t++)n[t]=_.LOG[n[t]]},_checkBadness:function(){var t,e,i,n,s,r=0,o=this._badness,a=this.buffer,h=this.width;for(s=0;s<h-1;s++)for(n=0;n<h-1;n++)(a[n+h*s]&&a[n+1+h*s]&&a[n+h*(s+1)]&&a[n+1+h*(s+1)]||!(a[n+h*s]||a[n+1+h*s]||a[n+h*(s+1)]||a[n+1+h*(s+1)]))&&(r+=v.N2);var f=0;for(s=0;s<h;s++){for(i=0,o[0]=0,t=0,n=0;n<h;n++)t===(e=a[n+h*s])?o[i]++:o[++i]=1,f+=(t=e)?1:-1;r+=this._getBadness(i)}f<0&&(f=-f);var c=0,u=f;for(u+=u<<2,u<<=1;u>h*h;)u-=h*h,c++;for(r+=c*v.N4,n=0;n<h;n++){for(i=0,o[0]=0,t=0,s=0;s<h;s++)t===(e=a[n+h*s])?o[i]++:o[++i]=1,t=e;r+=this._getBadness(i)}return r},_convertBitStream:function(t){var e,i,n=this._ecc,s=this._version;for(i=0;i<t;i++)n[i]=this._value.charCodeAt(i);var r=this._stringBuffer=n.slice(),o=this._calculateMaxLength();t>=o-2&&(t=o-2,s>9&&t--);var a=t;if(s>9){for(r[a+2]=0,r[a+3]=0;a--;)e=r[a],r[a+3]|=255&e<<4,r[a+2]=e>>4;r[2]|=255&t<<4,r[1]=t>>4,r[0]=64|t>>12}else{for(r[a+1]=0,r[a+2]=0;a--;)e=r[a],r[a+2]|=255&e<<4,r[a+1]=e>>4;r[1]|=255&t<<4,r[0]=64|t>>4}for(a=t+3-(s<10);a<o;)r[a++]=236,r[a++]=17},_getBadness:function(t){var e,i=0,n=this._badness;for(e=0;e<=t;e++)n[e]>=5&&(i+=v.N1+n[e]-5);for(e=3;e<t-1;e+=2)n[e-2]===n[e+2]&&n[e+2]===n[e-1]&&n[e-1]===n[e+1]&&3*n[e-1]===n[e]&&(0===n[e-3]||e+3>t||3*n[e-3]>=4*n[e]||3*n[e+3]>=4*n[e])&&(i+=v.N3);return i},_finish:function(){this._stringBuffer=this.buffer.slice();var t,e,i=0,n=3e4;for(e=0;e<8&&(this._applyMask(e),(t=this._checkBadness())<n&&(n=t,i=e),7!==i);e++)this.buffer=this._stringBuffer.slice();i!==e&&this._applyMask(i),n=l.FINAL_FORMAT[i+(this._level-1<<3)];var s=this.buffer,r=this.width;for(e=0;e<8;e++,n>>=1)1&n&&(s[r-1-e+8*r]=1,e<6?s[8+r*e]=1:s[8+r*(e+1)]=1);for(e=0;e<7;e++,n>>=1)1&n&&(s[8+r*(r-7+e)]=1,e?s[6-e+8*r]=1:s[7+8*r]=1)},_interleaveBlocks:function(){var t,e,i=this._dataBlock,n=this._ecc,s=this._eccBlock,r=0,o=this._calculateMaxLength(),a=this._neccBlock1,h=this._neccBlock2,f=this._stringBuffer;for(t=0;t<i;t++){for(e=0;e<a;e++)n[r++]=f[t+e*i];for(e=0;e<h;e++)n[r++]=f[a*i+t+e*(i+1)]}for(e=0;e<h;e++)n[r++]=f[a*i+t+e*(i+1)];for(t=0;t<s;t++)for(e=0;e<a+h;e++)n[r++]=f[o+t+e*s];this._stringBuffer=n},_insertAlignments:function(){var t,e,i,n=this._version,s=this.width;if(n>1)for(t=u.BLOCK[n],i=s-7;;){for(e=s-7;e>t-3&&(this._addAlignment(e,i),!(e<t));)e-=t;if(i<=t+9)break;i-=t,this._addAlignment(6,i),this._addAlignment(i,6)}},_insertFinders:function(){var t,e,i,n,s=this.buffer,r=this.width;for(t=0;t<3;t++){for(e=0,n=0,1===t&&(e=r-7),2===t&&(n=r-7),s[n+3+r*(e+3)]=1,i=0;i<6;i++)s[n+i+r*e]=1,s[n+r*(e+i+1)]=1,s[n+6+r*(e+i)]=1,s[n+i+1+r*(e+6)]=1;for(i=1;i<5;i++)this._setMask(n+i,e+1),this._setMask(n+1,e+i+1),this._setMask(n+5,e+i),this._setMask(n+i+1,e+5);for(i=2;i<4;i++)s[n+i+r*(e+2)]=1,s[n+2+r*(e+i+1)]=1,s[n+4+r*(e+i)]=1,s[n+i+1+r*(e+4)]=1}},_insertTimingGap:function(){var t,e,i=this.width;for(e=0;e<7;e++)this._setMask(7,e),this._setMask(i-8,e),this._setMask(7,e+i-7);for(t=0;t<8;t++)this._setMask(t,7),this._setMask(t+i-8,7),this._setMask(t,i-8)},_insertTimingRowAndColumn:function(){var t,e=this.buffer,i=this.width;for(t=0;t<i-14;t++)1&t?(this._setMask(8+t,6),this._setMask(6,8+t)):(e[8+t+6*i]=1,e[6+i*(8+t)]=1)},_insertVersion:function(){var t,e,i,n,s=this.buffer,r=this._version,o=this.width;if(r>6)for(t=d.BLOCK[r-7],e=17,i=0;i<6;i++)for(n=0;n<3;n++,e--)1&(e>11?r>>e-12:t>>e)?(s[5-i+o*(2-n+o-11)]=1,s[2-n+o-11+o*(5-i)]=1):(this._setMask(5-i,2-n+o-11),this._setMask(2-n+o-11,5-i))},_isMasked:function(t,e){var i=v._getMaskBit(t,e);return 1===this._mask[i]},_pack:function(){var t,e,i,n=1,s=1,r=this.width,o=r-1,a=r-1,h=(this._dataBlock+this._eccBlock)*(this._neccBlock1+this._neccBlock2)+this._neccBlock2;for(e=0;e<h;e++)for(t=this._stringBuffer[e],i=0;i<8;i++,t<<=1){128&t&&(this.buffer[o+r*a]=1);do{s?o--:(o++,n?0!==a?a--:(n=!n,6===(o-=2)&&(o--,a=9)):a!==r-1?a++:(n=!n,6===(o-=2)&&(o--,a-=8))),s=!s}while(this._isMasked(o,a))}},_reverseMask:function(){var t,e,i=this.width;for(t=0;t<9;t++)this._setMask(t,8);for(t=0;t<8;t++)this._setMask(t+i-8,8),this._setMask(8,t);for(e=0;e<7;e++)this._setMask(8,e+i-7)},_setMask:function(t,e){var i=v._getMaskBit(t,e);this._mask[i]=1},_syncMask:function(){var t,e,i=this.width;for(e=0;e<i;e++)for(t=0;t<=e;t++)this.buffer[t+i*e]&&this._setMask(t,e)}},{_createArray:function(t){var e,i=[];for(e=0;e<t;e++)i[e]=0;return i},_getMaskBit:function(t,e){var i;return t>e&&(i=t,t=e,e=i),i=e,i+=e*e,i>>=1,i+=t},_modN:function(t){for(;t>=255;)t=((t-=255)>>8)+(255&t);return t},N1:3,N2:3,N3:40,N4:10}),p=v,m=f.extend({draw:function(){this.element.src=this.qrious.toDataURL()},reset:function(){this.element.src=""},resize:function(){var t=this.element;t.width=t.height=this.qrious.size}}),g=h.extend(function(t,e,i,n){this.name=t,this.modifiable=Boolean(e),this.defaultValue=i,this._valueTransformer=n},{transform:function(t){var e=this._valueTransformer;return"function"==typeof e?e(t,this):t}}),k=h.extend(null,{abs:function(t){return null!=t?Math.abs(t):null},hasOwn:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},noop:function(){},toUpperCase:function(t){return null!=t?t.toUpperCase():null}}),w=h.extend(function(t){this.options={},t.forEach(function(t){this.options[t.name]=t},this)},{exists:function(t){return null!=this.options[t]},get:function(t,e){return w._get(this.options[t],e)},getAll:function(t){var e,i=this.options,n={};for(e in i)k.hasOwn(i,e)&&(n[e]=w._get(i[e],t));return n},init:function(t,e,i){"function"!=typeof i&&(i=k.noop);var n,s;for(n in this.options)k.hasOwn(this.options,n)&&(s=this.options[n],w._set(s,s.defaultValue,e),w._createAccessor(s,e,i));this._setAll(t,e,!0)},set:function(t,e,i){return this._set(t,e,i)},setAll:function(t,e){return this._setAll(t,e)},_set:function(t,e,i,n){var s=this.options[t];if(!s)throw new Error("Invalid option: "+t);if(!s.modifiable&&!n)throw new Error("Option cannot be modified: "+t);return w._set(s,e,i)},_setAll:function(t,e,i){if(!t)return!1;var n,s=!1;for(n in t)k.hasOwn(t,n)&&this._set(n,t[n],e,i)&&(s=!0);return s}},{_createAccessor:function(t,e,i){var n={get:function(){return w._get(t,e)}};t.modifiable&&(n.set=function(n){w._set(t,n,e)&&i(n,t)}),Object.defineProperty(e,t.name,n)},_get:function(t,e){return e["_"+t.name]},_set:function(t,e,i){var n="_"+t.name,s=i[n],r=t.transform(null!=e?e:t.defaultValue);return i[n]=r,r!==s}}),M=w,b=h.extend(function(){this._services={}},{getService:function(t){var e=this._services[t];if(!e)throw new Error("Service is not being managed with name: "+t);return e},setService:function(t,e){if(this._services[t])throw new Error("Service is already managed with name: "+t);e&&(this._services[t]=e)}}),B=new M([new g("background",!0,"white"),new g("backgroundAlpha",!0,1,k.abs),new g("element"),new g("foreground",!0,"black"),new g("foregroundAlpha",!0,1,k.abs),new g("level",!0,"L",k.toUpperCase),new g("mime",!0,"image/png"),new g("padding",!0,null,k.abs),new g("size",!0,100,k.abs),new g("value",!0,"")]),y=new b,O=h.extend(function(t){B.init(t,this,this.update.bind(this));var e=B.get("element",this),i=y.getService("element"),n=e&&i.isCanvas(e)?e:i.createCanvas(),s=e&&i.isImage(e)?e:i.createImage();this._canvasRenderer=new c(this,n,!0),this._imageRenderer=new m(this,s,s===e),this.update()},{get:function(){return B.getAll(this)},set:function(t){B.setAll(t,this)&&this.update()},toDataURL:function(t){return this.canvas.toDataURL(t||this.mime)},update:function(){var t=new p({level:this.level,value:this.value});this._canvasRenderer.render(t),this._imageRenderer.render(t)}},{use:function(t){y.setService(t.getName(),t)}});Object.defineProperties(O.prototype,{canvas:{get:function(){return this._canvasRenderer.getElement()}},image:{get:function(){return this._imageRenderer.getElement()}}});var A=O,L=h.extend({getName:function(){}}).extend({createCanvas:function(){},createImage:function(){},getName:function(){return"element"},isCanvas:function(t){},isImage:function(t){}}).extend({createCanvas:function(){return document.createElement("canvas")},createImage:function(){return document.createElement("img")},isCanvas:function(t){return t instanceof HTMLCanvasElement},isImage:function(t){return t instanceof HTMLImageElement}});return A.use(new L),A});
+
+//# sourceMappingURL=qrious.min.js.map
\ No newline at end of file
diff --git a/js/qrious.min.js.map b/js/qrious.min.js.map
new file mode 100644
index 0000000..ff65e0b
--- /dev/null
+++ b/js/qrious.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"qrious.min.js","sources":["../node_modules/nevis/src/extend.js","../node_modules/nevis/src/nevis.js","../node_modules/qrious-core/src/renderer/Renderer.js","../node_modules/qrious-core/src/renderer/CanvasRenderer.js","../node_modules/qrious-core/src/Alignment.js","../node_modules/qrious-core/src/ErrorCorrection.js","../node_modules/qrious-core/src/Galois.js","../node_modules/qrious-core/src/Version.js","../node_modules/qrious-core/src/Frame.js","../node_modules/qrious-core/src/renderer/ImageRenderer.js","../node_modules/qrious-core/src/option/Option.js","../node_modules/qrious-core/src/util/Utilities.js","../node_modules/qrious-core/src/option/OptionManager.js","../node_modules/qrious-core/src/service/ServiceManager.js","../node_modules/qrious-core/src/QRious.js","../node_modules/qrious-core/src/service/Service.js","../node_modules/qrious-core/src/service/element/ElementService.js","../src/service/element/BrowserElementService.js","../src/QRious.js"],"sourcesContent":["/*\n * Copyright (C) 2017 Alasdair Mercer, !ninja\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n'use strict';\n\n/**\n * A bare-bones constructor for surrogate prototype swapping.\n *\n * @private\n * @constructor\n */\nvar Constructor = /* istanbul ignore next */ function() {};\n/**\n * A reference to <code>Object.prototype.hasOwnProperty</code>.\n *\n * @private\n * @type {Function}\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * A reference to <code>Array.prototype.slice</code>.\n *\n * @private\n * @type {Function}\n */\nvar slice = Array.prototype.slice;\n\n/**\n * Creates an object which inherits the given <code>prototype</code>.\n *\n * Optionally, the created object can be extended further with the specified <code>properties</code>.\n *\n * @param {Object} prototype - the prototype to be inherited by the created object\n * @param {Object} [properties] - the optional properties to be extended by the created object\n * @return {Object} The newly created object.\n * @private\n */\nfunction createObject(prototype, properties) {\n  var result;\n  /* istanbul ignore next */\n  if (typeof Object.create === 'function') {\n    result = Object.create(prototype);\n  } else {\n    Constructor.prototype = prototype;\n    result = new Constructor();\n    Constructor.prototype = null;\n  }\n\n  if (properties) {\n    extendObject(true, result, properties);\n  }\n\n  return result;\n}\n\n/**\n * Extends the constructor to which this method is associated with the <code>prototype</code> and/or\n * <code>statics</code> provided.\n *\n * If <code>name</code> is provided, it will be used as the class name and can be accessed via a special\n * <code>class_</code> property on the child constructor, otherwise the class name of the super constructor will be used\n * instead. The class name may also be used string representation for instances of the child constructor (via\n * <code>toString</code>), but this is not applicable to the <i>lite</i> version of Nevis.\n *\n * If <code>constructor</code> is provided, it will be used as the constructor for the child, otherwise a simple\n * constructor which only calls the super constructor will be used instead.\n *\n * The super constructor can be accessed via a special <code>super_</code> property on the child constructor.\n *\n * @param {string} [name=this.class_] - the class name to be used for the child constructor\n * @param {Function} [constructor] - the constructor for the child\n * @param {Object} [prototype] - the prototype properties to be defined for the child\n * @param {Object} [statics] - the static properties to be defined for the child\n * @return {Function} The child <code>constructor</code> provided or the one created if none was given.\n * @public\n */\nfunction extend(name, constructor, prototype, statics) {\n  var superConstructor = this;\n\n  if (typeof name !== 'string') {\n    statics = prototype;\n    prototype = constructor;\n    constructor = name;\n    name = null;\n  }\n\n  if (typeof constructor !== 'function') {\n    statics = prototype;\n    prototype = constructor;\n    constructor = function() {\n      return superConstructor.apply(this, arguments);\n    };\n  }\n\n  extendObject(false, constructor, superConstructor, statics);\n\n  constructor.prototype = createObject(superConstructor.prototype, prototype);\n  constructor.prototype.constructor = constructor;\n\n  constructor.class_ = name || superConstructor.class_;\n  constructor.super_ = superConstructor;\n\n  return constructor;\n}\n\n/**\n * Extends the specified <code>target</code> object with the properties in each of the <code>sources</code> provided.\n *\n * if any source is <code>null</code> it will be ignored.\n *\n * @param {boolean} own - <code>true</code> to only copy <b>own</b> properties from <code>sources</code> onto\n * <code>target</code>; otherwise <code>false</code>\n * @param {Object} target - the target object which should be extended\n * @param {...Object} [sources] - the source objects whose properties are to be copied onto <code>target</code>\n * @return {void}\n * @private\n */\nfunction extendObject(own, target, sources) {\n  sources = slice.call(arguments, 2);\n\n  var property;\n  var source;\n\n  for (var i = 0, length = sources.length; i < length; i++) {\n    source = sources[i];\n\n    for (property in source) {\n      if (!own || hasOwnProperty.call(source, property)) {\n        target[property] = source[property];\n      }\n    }\n  }\n}\n\nmodule.exports = extend;\n","/*\n * Copyright (C) 2017 Alasdair Mercer, !ninja\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n'use strict';\n\nvar extend = require('./extend');\n\n/**\n * The base class from which all others should extend.\n *\n * @public\n * @constructor\n */\nfunction Nevis() {}\nNevis.class_ = 'Nevis';\nNevis.super_ = Object;\n\n/**\n * Extends the constructor to which this method is associated with the <code>prototype</code> and/or\n * <code>statics</code> provided.\n *\n * If <code>name</code> is provided, it will be used as the class name and can be accessed via a special\n * <code>class_</code> property on the child constructor, otherwise the class name of the super constructor will be used\n * instead. The class name may also be used string representation for instances of the child constructor (via\n * <code>toString</code>), but this is not applicable to the <i>lite</i> version of Nevis.\n *\n * If <code>constructor</code> is provided, it will be used as the constructor for the child, otherwise a simple\n * constructor which only calls the super constructor will be used instead.\n *\n * The super constructor can be accessed via a special <code>super_</code> property on the child constructor.\n *\n * @param {string} [name=this.class_] - the class name to be used for the child constructor\n * @param {Function} [constructor] - the constructor for the child\n * @param {Object} [prototype] - the prototype properties to be defined for the child\n * @param {Object} [statics] - the static properties to be defined for the child\n * @return {Function} The child <code>constructor</code> provided or the one created if none was given.\n * @public\n * @static\n * @memberof Nevis\n */\nNevis.extend = extend;\n\nmodule.exports = Nevis;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Responsible for rendering a QR code {@link Frame} on a specific type of element.\n *\n * A renderer may be dependant on the rendering of another element, so the ordering of their execution is important.\n *\n * The rendering of a element can be deferred by disabling the renderer initially, however, any attempt get the element\n * from the renderer will result in it being immediately enabled and the element being rendered.\n *\n * @param {QRious} qrious - the {@link QRious} instance to be used\n * @param {*} element - the element onto which the QR code is to be rendered\n * @param {boolean} [enabled] - <code>true</code> this {@link Renderer} is enabled; otherwise <code>false</code>.\n * @public\n * @class\n * @extends Nevis\n */\nvar Renderer = Nevis.extend(function(qrious, element, enabled) {\n  /**\n   * The {@link QRious} instance.\n   *\n   * @protected\n   * @type {QRious}\n   * @memberof Renderer#\n   */\n  this.qrious = qrious;\n\n  /**\n   * The element onto which this {@link Renderer} is rendering the QR code.\n   *\n   * @protected\n   * @type {*}\n   * @memberof Renderer#\n   */\n  this.element = element;\n  this.element.qrious = qrious;\n\n  /**\n   * Whether this {@link Renderer} is enabled.\n   *\n   * @protected\n   * @type {boolean}\n   * @memberof Renderer#\n   */\n  this.enabled = Boolean(enabled);\n}, {\n\n  /**\n   * Draws the specified QR code <code>frame</code> on the underlying element.\n   *\n   * Implementations of {@link Renderer} <b>must</b> override this method with their own specific logic.\n   *\n   * @param {Frame} frame - the {@link Frame} to be drawn\n   * @return {void}\n   * @protected\n   * @abstract\n   * @memberof Renderer#\n   */\n  draw: function(frame) {},\n\n  /**\n   * Returns the element onto which this {@link Renderer} is rendering the QR code.\n   *\n   * If this method is called while this {@link Renderer} is disabled, it will be immediately enabled and rendered\n   * before the element is returned.\n   *\n   * @return {*} The element.\n   * @public\n   * @memberof Renderer#\n   */\n  getElement: function() {\n    if (!this.enabled) {\n      this.enabled = true;\n      this.render();\n    }\n\n    return this.element;\n  },\n\n  /**\n   * Calculates the size (in pixel units) to represent an individual module within the QR code based on the\n   * <code>frame</code> provided.\n   *\n   * Any configured padding will be excluded from the returned size.\n   *\n   * The returned value will be at least one, even in cases where the size of the QR code does not fit its contents.\n   * This is done so that the inevitable clipping is handled more gracefully since this way at least something is\n   * displayed instead of just a blank space filled by the background color.\n   *\n   * @param {Frame} frame - the {@link Frame} from which the module size is to be derived\n   * @return {number} The pixel size for each module in the QR code which will be no less than one.\n   * @protected\n   * @memberof Renderer#\n   */\n  getModuleSize: function(frame) {\n    var qrious = this.qrious;\n    var padding = qrious.padding || 0;\n    var pixels = Math.floor((qrious.size - (padding * 2)) / frame.width);\n\n    return Math.max(1, pixels);\n  },\n\n  /**\n   * Calculates the offset/padding (in pixel units) to be inserted before the QR code based on the <code>frame</code>\n   * provided.\n   *\n   * The returned value will be zero if there is no available offset or if the size of the QR code does not fit its\n   * contents. It will never be a negative value. This is done so that the inevitable clipping appears more naturally\n   * and it is not clipped from all directions.\n   *\n   * @param {Frame} frame - the {@link Frame} from which the offset is to be derived\n   * @return {number} The pixel offset for the QR code which will be no less than zero.\n   * @protected\n   * @memberof Renderer#\n   */\n  getOffset: function(frame) {\n    var qrious = this.qrious;\n    var padding = qrious.padding;\n\n    if (padding != null) {\n      return padding;\n    }\n\n    var moduleSize = this.getModuleSize(frame);\n    var offset = Math.floor((qrious.size - (moduleSize * frame.width)) / 2);\n\n    return Math.max(0, offset);\n  },\n\n  /**\n   * Renders a QR code on the underlying element based on the <code>frame</code> provided.\n   *\n   * @param {Frame} frame - the {@link Frame} to be rendered\n   * @return {void}\n   * @public\n   * @memberof Renderer#\n   */\n  render: function(frame) {\n    if (this.enabled) {\n      this.resize();\n      this.reset();\n      this.draw(frame);\n    }\n  },\n\n  /**\n   * Resets the underlying element, effectively clearing any previously rendered QR code.\n   *\n   * Implementations of {@link Renderer} <b>must</b> override this method with their own specific logic.\n   *\n   * @return {void}\n   * @protected\n   * @abstract\n   * @memberof Renderer#\n   */\n  reset: function() {},\n\n  /**\n   * Ensures that the size of the underlying element matches that defined on the associated {@link QRious} instance.\n   *\n   * Implementations of {@link Renderer} <b>must</b> override this method with their own specific logic.\n   *\n   * @return {void}\n   * @protected\n   * @abstract\n   * @memberof Renderer#\n   */\n  resize: function() {}\n\n});\n\nmodule.exports = Renderer;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar Renderer = require('./Renderer');\n\n/**\n * An implementation of {@link Renderer} for working with <code>canvas</code> elements.\n *\n * @public\n * @class\n * @extends Renderer\n */\nvar CanvasRenderer = Renderer.extend({\n\n  /**\n   * @override\n   */\n  draw: function(frame) {\n    var i, j;\n    var qrious = this.qrious;\n    var moduleSize = this.getModuleSize(frame);\n    var offset = this.getOffset(frame);\n    var context = this.element.getContext('2d');\n\n    context.fillStyle = qrious.foreground;\n    context.globalAlpha = qrious.foregroundAlpha;\n\n    for (i = 0; i < frame.width; i++) {\n      for (j = 0; j < frame.width; j++) {\n        if (frame.buffer[(j * frame.width) + i]) {\n          context.fillRect((moduleSize * i) + offset, (moduleSize * j) + offset, moduleSize, moduleSize);\n        }\n      }\n    }\n  },\n\n  /**\n   * @override\n   */\n  reset: function() {\n    var qrious = this.qrious;\n    var context = this.element.getContext('2d');\n    var size = qrious.size;\n\n    context.lineWidth = 1;\n    context.clearRect(0, 0, size, size);\n    context.fillStyle = qrious.background;\n    context.globalAlpha = qrious.backgroundAlpha;\n    context.fillRect(0, 0, size, size);\n  },\n\n  /**\n   * @override\n   */\n  resize: function() {\n    var element = this.element;\n\n    element.width = element.height = this.qrious.size;\n  }\n\n});\n\nmodule.exports = CanvasRenderer;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\n/* eslint no-multi-spaces: \"off\" */\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Contains alignment pattern information.\n *\n * @public\n * @class\n * @extends Nevis\n */\nvar Alignment = Nevis.extend(null, {\n\n  /**\n   * The alignment pattern block.\n   *\n   * @public\n   * @static\n   * @type {number[]}\n   * @memberof Alignment\n   */\n  BLOCK: [\n    0,  11, 15, 19, 23, 27, 31,\n    16, 18, 20, 22, 24, 26, 28, 20, 22, 24, 24, 26, 28, 28, 22, 24, 24,\n    26, 26, 28, 28, 24, 24, 26, 26, 26, 28, 28, 24, 26, 26, 26, 28, 28\n  ]\n\n});\n\nmodule.exports = Alignment;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\n/* eslint no-multi-spaces: \"off\" */\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Contains error correction information.\n *\n * @public\n * @class\n * @extends Nevis\n */\nvar ErrorCorrection = Nevis.extend(null, {\n\n  /**\n   * The error correction blocks.\n   *\n   * There are four elements per version. The first two indicate the number of blocks, then the data width, and finally\n   * the ECC width.\n   *\n   * @public\n   * @static\n   * @type {number[]}\n   * @memberof ErrorCorrection\n   */\n  BLOCKS: [\n    1,  0,  19,  7,     1,  0,  16,  10,    1,  0,  13,  13,    1,  0,  9,   17,\n    1,  0,  34,  10,    1,  0,  28,  16,    1,  0,  22,  22,    1,  0,  16,  28,\n    1,  0,  55,  15,    1,  0,  44,  26,    2,  0,  17,  18,    2,  0,  13,  22,\n    1,  0,  80,  20,    2,  0,  32,  18,    2,  0,  24,  26,    4,  0,  9,   16,\n    1,  0,  108, 26,    2,  0,  43,  24,    2,  2,  15,  18,    2,  2,  11,  22,\n    2,  0,  68,  18,    4,  0,  27,  16,    4,  0,  19,  24,    4,  0,  15,  28,\n    2,  0,  78,  20,    4,  0,  31,  18,    2,  4,  14,  18,    4,  1,  13,  26,\n    2,  0,  97,  24,    2,  2,  38,  22,    4,  2,  18,  22,    4,  2,  14,  26,\n    2,  0,  116, 30,    3,  2,  36,  22,    4,  4,  16,  20,    4,  4,  12,  24,\n    2,  2,  68,  18,    4,  1,  43,  26,    6,  2,  19,  24,    6,  2,  15,  28,\n    4,  0,  81,  20,    1,  4,  50,  30,    4,  4,  22,  28,    3,  8,  12,  24,\n    2,  2,  92,  24,    6,  2,  36,  22,    4,  6,  20,  26,    7,  4,  14,  28,\n    4,  0,  107, 26,    8,  1,  37,  22,    8,  4,  20,  24,    12, 4,  11,  22,\n    3,  1,  115, 30,    4,  5,  40,  24,    11, 5,  16,  20,    11, 5,  12,  24,\n    5,  1,  87,  22,    5,  5,  41,  24,    5,  7,  24,  30,    11, 7,  12,  24,\n    5,  1,  98,  24,    7,  3,  45,  28,    15, 2,  19,  24,    3,  13, 15,  30,\n    1,  5,  107, 28,    10, 1,  46,  28,    1,  15, 22,  28,    2,  17, 14,  28,\n    5,  1,  120, 30,    9,  4,  43,  26,    17, 1,  22,  28,    2,  19, 14,  28,\n    3,  4,  113, 28,    3,  11, 44,  26,    17, 4,  21,  26,    9,  16, 13,  26,\n    3,  5,  107, 28,    3,  13, 41,  26,    15, 5,  24,  30,    15, 10, 15,  28,\n    4,  4,  116, 28,    17, 0,  42,  26,    17, 6,  22,  28,    19, 6,  16,  30,\n    2,  7,  111, 28,    17, 0,  46,  28,    7,  16, 24,  30,    34, 0,  13,  24,\n    4,  5,  121, 30,    4,  14, 47,  28,    11, 14, 24,  30,    16, 14, 15,  30,\n    6,  4,  117, 30,    6,  14, 45,  28,    11, 16, 24,  30,    30, 2,  16,  30,\n    8,  4,  106, 26,    8,  13, 47,  28,    7,  22, 24,  30,    22, 13, 15,  30,\n    10, 2,  114, 28,    19, 4,  46,  28,    28, 6,  22,  28,    33, 4,  16,  30,\n    8,  4,  122, 30,    22, 3,  45,  28,    8,  26, 23,  30,    12, 28, 15,  30,\n    3,  10, 117, 30,    3,  23, 45,  28,    4,  31, 24,  30,    11, 31, 15,  30,\n    7,  7,  116, 30,    21, 7,  45,  28,    1,  37, 23,  30,    19, 26, 15,  30,\n    5,  10, 115, 30,    19, 10, 47,  28,    15, 25, 24,  30,    23, 25, 15,  30,\n    13, 3,  115, 30,    2,  29, 46,  28,    42, 1,  24,  30,    23, 28, 15,  30,\n    17, 0,  115, 30,    10, 23, 46,  28,    10, 35, 24,  30,    19, 35, 15,  30,\n    17, 1,  115, 30,    14, 21, 46,  28,    29, 19, 24,  30,    11, 46, 15,  30,\n    13, 6,  115, 30,    14, 23, 46,  28,    44, 7,  24,  30,    59, 1,  16,  30,\n    12, 7,  121, 30,    12, 26, 47,  28,    39, 14, 24,  30,    22, 41, 15,  30,\n    6,  14, 121, 30,    6,  34, 47,  28,    46, 10, 24,  30,    2,  64, 15,  30,\n    17, 4,  122, 30,    29, 14, 46,  28,    49, 10, 24,  30,    24, 46, 15,  30,\n    4,  18, 122, 30,    13, 32, 46,  28,    48, 14, 24,  30,    42, 32, 15,  30,\n    20, 4,  117, 30,    40, 7,  47,  28,    43, 22, 24,  30,    10, 67, 15,  30,\n    19, 6,  118, 30,    18, 31, 47,  28,    34, 34, 24,  30,    20, 61, 15,  30\n  ],\n\n  /**\n   * The final format bits with mask (level << 3 | mask).\n   *\n   * @public\n   * @static\n   * @type {number[]}\n   * @memberof ErrorCorrection\n   */\n  FINAL_FORMAT: [\n    // L\n    0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976,\n    // M\n    0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0,\n    // Q\n    0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed,\n    // H\n    0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b\n  ],\n\n  /**\n   * A map of human-readable ECC levels.\n   *\n   * @public\n   * @static\n   * @type {Object.<string, number>}\n   * @memberof ErrorCorrection\n   */\n  LEVELS: {\n    L: 1,\n    M: 2,\n    Q: 3,\n    H: 4\n  }\n\n});\n\nmodule.exports = ErrorCorrection;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Contains Galois field information.\n *\n * @public\n * @class\n * @extends Nevis\n */\nvar Galois = Nevis.extend(null, {\n\n  /**\n   * The Galois field exponent table.\n   *\n   * @public\n   * @static\n   * @type {number[]}\n   * @memberof Galois\n   */\n  EXPONENT: [\n    0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1d, 0x3a, 0x74, 0xe8, 0xcd, 0x87, 0x13, 0x26,\n    0x4c, 0x98, 0x2d, 0x5a, 0xb4, 0x75, 0xea, 0xc9, 0x8f, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0,\n    0x9d, 0x27, 0x4e, 0x9c, 0x25, 0x4a, 0x94, 0x35, 0x6a, 0xd4, 0xb5, 0x77, 0xee, 0xc1, 0x9f, 0x23,\n    0x46, 0x8c, 0x05, 0x0a, 0x14, 0x28, 0x50, 0xa0, 0x5d, 0xba, 0x69, 0xd2, 0xb9, 0x6f, 0xde, 0xa1,\n    0x5f, 0xbe, 0x61, 0xc2, 0x99, 0x2f, 0x5e, 0xbc, 0x65, 0xca, 0x89, 0x0f, 0x1e, 0x3c, 0x78, 0xf0,\n    0xfd, 0xe7, 0xd3, 0xbb, 0x6b, 0xd6, 0xb1, 0x7f, 0xfe, 0xe1, 0xdf, 0xa3, 0x5b, 0xb6, 0x71, 0xe2,\n    0xd9, 0xaf, 0x43, 0x86, 0x11, 0x22, 0x44, 0x88, 0x0d, 0x1a, 0x34, 0x68, 0xd0, 0xbd, 0x67, 0xce,\n    0x81, 0x1f, 0x3e, 0x7c, 0xf8, 0xed, 0xc7, 0x93, 0x3b, 0x76, 0xec, 0xc5, 0x97, 0x33, 0x66, 0xcc,\n    0x85, 0x17, 0x2e, 0x5c, 0xb8, 0x6d, 0xda, 0xa9, 0x4f, 0x9e, 0x21, 0x42, 0x84, 0x15, 0x2a, 0x54,\n    0xa8, 0x4d, 0x9a, 0x29, 0x52, 0xa4, 0x55, 0xaa, 0x49, 0x92, 0x39, 0x72, 0xe4, 0xd5, 0xb7, 0x73,\n    0xe6, 0xd1, 0xbf, 0x63, 0xc6, 0x91, 0x3f, 0x7e, 0xfc, 0xe5, 0xd7, 0xb3, 0x7b, 0xf6, 0xf1, 0xff,\n    0xe3, 0xdb, 0xab, 0x4b, 0x96, 0x31, 0x62, 0xc4, 0x95, 0x37, 0x6e, 0xdc, 0xa5, 0x57, 0xae, 0x41,\n    0x82, 0x19, 0x32, 0x64, 0xc8, 0x8d, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0, 0xdd, 0xa7, 0x53, 0xa6,\n    0x51, 0xa2, 0x59, 0xb2, 0x79, 0xf2, 0xf9, 0xef, 0xc3, 0x9b, 0x2b, 0x56, 0xac, 0x45, 0x8a, 0x09,\n    0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5, 0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0x0b, 0x16,\n    0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83, 0x1b, 0x36, 0x6c, 0xd8, 0xad, 0x47, 0x8e, 0x00\n  ],\n\n  /**\n   * The Galois field log table.\n   *\n   * @public\n   * @static\n   * @type {number[]}\n   * @memberof Galois\n   */\n  LOG: [\n    0xff, 0x00, 0x01, 0x19, 0x02, 0x32, 0x1a, 0xc6, 0x03, 0xdf, 0x33, 0xee, 0x1b, 0x68, 0xc7, 0x4b,\n    0x04, 0x64, 0xe0, 0x0e, 0x34, 0x8d, 0xef, 0x81, 0x1c, 0xc1, 0x69, 0xf8, 0xc8, 0x08, 0x4c, 0x71,\n    0x05, 0x8a, 0x65, 0x2f, 0xe1, 0x24, 0x0f, 0x21, 0x35, 0x93, 0x8e, 0xda, 0xf0, 0x12, 0x82, 0x45,\n    0x1d, 0xb5, 0xc2, 0x7d, 0x6a, 0x27, 0xf9, 0xb9, 0xc9, 0x9a, 0x09, 0x78, 0x4d, 0xe4, 0x72, 0xa6,\n    0x06, 0xbf, 0x8b, 0x62, 0x66, 0xdd, 0x30, 0xfd, 0xe2, 0x98, 0x25, 0xb3, 0x10, 0x91, 0x22, 0x88,\n    0x36, 0xd0, 0x94, 0xce, 0x8f, 0x96, 0xdb, 0xbd, 0xf1, 0xd2, 0x13, 0x5c, 0x83, 0x38, 0x46, 0x40,\n    0x1e, 0x42, 0xb6, 0xa3, 0xc3, 0x48, 0x7e, 0x6e, 0x6b, 0x3a, 0x28, 0x54, 0xfa, 0x85, 0xba, 0x3d,\n    0xca, 0x5e, 0x9b, 0x9f, 0x0a, 0x15, 0x79, 0x2b, 0x4e, 0xd4, 0xe5, 0xac, 0x73, 0xf3, 0xa7, 0x57,\n    0x07, 0x70, 0xc0, 0xf7, 0x8c, 0x80, 0x63, 0x0d, 0x67, 0x4a, 0xde, 0xed, 0x31, 0xc5, 0xfe, 0x18,\n    0xe3, 0xa5, 0x99, 0x77, 0x26, 0xb8, 0xb4, 0x7c, 0x11, 0x44, 0x92, 0xd9, 0x23, 0x20, 0x89, 0x2e,\n    0x37, 0x3f, 0xd1, 0x5b, 0x95, 0xbc, 0xcf, 0xcd, 0x90, 0x87, 0x97, 0xb2, 0xdc, 0xfc, 0xbe, 0x61,\n    0xf2, 0x56, 0xd3, 0xab, 0x14, 0x2a, 0x5d, 0x9e, 0x84, 0x3c, 0x39, 0x53, 0x47, 0x6d, 0x41, 0xa2,\n    0x1f, 0x2d, 0x43, 0xd8, 0xb7, 0x7b, 0xa4, 0x76, 0xc4, 0x17, 0x49, 0xec, 0x7f, 0x0c, 0x6f, 0xf6,\n    0x6c, 0xa1, 0x3b, 0x52, 0x29, 0x9d, 0x55, 0xaa, 0xfb, 0x60, 0x86, 0xb1, 0xbb, 0xcc, 0x3e, 0x5a,\n    0xcb, 0x59, 0x5f, 0xb0, 0x9c, 0xa9, 0xa0, 0x51, 0x0b, 0xf5, 0x16, 0xeb, 0x7a, 0x75, 0x2c, 0xd7,\n    0x4f, 0xae, 0xd5, 0xe9, 0xe6, 0xe7, 0xad, 0xe8, 0x74, 0xd6, 0xf4, 0xea, 0xa8, 0x50, 0x58, 0xaf\n  ]\n\n});\n\nmodule.exports = Galois;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Contains version pattern information.\n *\n * @public\n * @class\n * @extends Nevis\n */\nvar Version = Nevis.extend(null, {\n\n  /**\n   * The version pattern block.\n   *\n   * @public\n   * @static\n   * @type {number[]}\n   * @memberof Version\n   */\n  BLOCK: [\n    0xc94, 0x5bc, 0xa99, 0x4d3, 0xbf6, 0x762, 0x847, 0x60d, 0x928, 0xb78, 0x45d, 0xa17, 0x532,\n    0x9a6, 0x683, 0x8c9, 0x7ec, 0xec4, 0x1e1, 0xfab, 0x08e, 0xc1a, 0x33f, 0xd75, 0x250, 0x9d5,\n    0x6f0, 0x8ba, 0x79f, 0xb0b, 0x42e, 0xa64, 0x541, 0xc69\n  ]\n\n});\n\nmodule.exports = Version;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\nvar Alignment = require('./Alignment');\nvar ErrorCorrection = require('./ErrorCorrection');\nvar Galois = require('./Galois');\nvar Version = require('./Version');\n\n/**\n * Generates information for a QR code frame based on a specific value to be encoded.\n *\n * @param {Frame~Options} options - the options to be used\n * @public\n * @class\n * @extends Nevis\n */\nvar Frame = Nevis.extend(function(options) {\n  var dataBlock, eccBlock, index, neccBlock1, neccBlock2;\n  var valueLength = options.value.length;\n\n  this._badness = [];\n  this._level = ErrorCorrection.LEVELS[options.level];\n  this._polynomial = [];\n  this._value = options.value;\n  this._version = 0;\n  this._stringBuffer = [];\n\n  while (this._version < 40) {\n    this._version++;\n\n    index = ((this._level - 1) * 4) + ((this._version - 1) * 16);\n\n    neccBlock1 = ErrorCorrection.BLOCKS[index++];\n    neccBlock2 = ErrorCorrection.BLOCKS[index++];\n    dataBlock = ErrorCorrection.BLOCKS[index++];\n    eccBlock = ErrorCorrection.BLOCKS[index];\n\n    index = (dataBlock * (neccBlock1 + neccBlock2)) + neccBlock2 - 3 + (this._version <= 9);\n\n    if (valueLength <= index) {\n      break;\n    }\n  }\n\n  this._dataBlock = dataBlock;\n  this._eccBlock = eccBlock;\n  this._neccBlock1 = neccBlock1;\n  this._neccBlock2 = neccBlock2;\n\n  /**\n   * The data width is based on version.\n   *\n   * @public\n   * @type {number}\n   * @memberof Frame#\n   */\n  // FIXME: Ensure that it fits instead of being truncated.\n  var width = this.width = 17 + (4 * this._version);\n\n  /**\n   * The image buffer.\n   *\n   * @public\n   * @type {number[]}\n   * @memberof Frame#\n   */\n  this.buffer = Frame._createArray(width * width);\n\n  this._ecc = Frame._createArray(dataBlock + ((dataBlock + eccBlock) * (neccBlock1 + neccBlock2)) + neccBlock2);\n  this._mask = Frame._createArray(((width * (width + 1)) + 1) / 2);\n\n  this._insertFinders();\n  this._insertAlignments();\n\n  // Insert single foreground cell.\n  this.buffer[8 + (width * (width - 8))] = 1;\n\n  this._insertTimingGap();\n  this._reverseMask();\n  this._insertTimingRowAndColumn();\n  this._insertVersion();\n  this._syncMask();\n  this._convertBitStream(valueLength);\n  this._calculatePolynomial();\n  this._appendEccToData();\n  this._interleaveBlocks();\n  this._pack();\n  this._finish();\n}, {\n\n  _addAlignment: function(x, y) {\n    var i;\n    var buffer = this.buffer;\n    var width = this.width;\n\n    buffer[x + (width * y)] = 1;\n\n    for (i = -2; i < 2; i++) {\n      buffer[x + i + (width * (y - 2))] = 1;\n      buffer[x - 2 + (width * (y + i + 1))] = 1;\n      buffer[x + 2 + (width * (y + i))] = 1;\n      buffer[x + i + 1 + (width * (y + 2))] = 1;\n    }\n\n    for (i = 0; i < 2; i++) {\n      this._setMask(x - 1, y + i);\n      this._setMask(x + 1, y - i);\n      this._setMask(x - i, y - 1);\n      this._setMask(x + i, y + 1);\n    }\n  },\n\n  _appendData: function(data, dataLength, ecc, eccLength) {\n    var bit, i, j;\n    var polynomial = this._polynomial;\n    var stringBuffer = this._stringBuffer;\n\n    for (i = 0; i < eccLength; i++) {\n      stringBuffer[ecc + i] = 0;\n    }\n\n    for (i = 0; i < dataLength; i++) {\n      bit = Galois.LOG[stringBuffer[data + i] ^ stringBuffer[ecc]];\n\n      if (bit !== 255) {\n        for (j = 1; j < eccLength; j++) {\n          stringBuffer[ecc + j - 1] = stringBuffer[ecc + j] ^\n            Galois.EXPONENT[Frame._modN(bit + polynomial[eccLength - j])];\n        }\n      } else {\n        for (j = ecc; j < ecc + eccLength; j++) {\n          stringBuffer[j] = stringBuffer[j + 1];\n        }\n      }\n\n      stringBuffer[ecc + eccLength - 1] = bit === 255 ? 0 : Galois.EXPONENT[Frame._modN(bit + polynomial[0])];\n    }\n  },\n\n  _appendEccToData: function() {\n    var i;\n    var data = 0;\n    var dataBlock = this._dataBlock;\n    var ecc = this._calculateMaxLength();\n    var eccBlock = this._eccBlock;\n\n    for (i = 0; i < this._neccBlock1; i++) {\n      this._appendData(data, dataBlock, ecc, eccBlock);\n\n      data += dataBlock;\n      ecc += eccBlock;\n    }\n\n    for (i = 0; i < this._neccBlock2; i++) {\n      this._appendData(data, dataBlock + 1, ecc, eccBlock);\n\n      data += dataBlock + 1;\n      ecc += eccBlock;\n    }\n  },\n\n  _applyMask: function(mask) {\n    var r3x, r3y, x, y;\n    var buffer = this.buffer;\n    var width = this.width;\n\n    switch (mask) {\n    case 0:\n      for (y = 0; y < width; y++) {\n        for (x = 0; x < width; x++) {\n          if (!((x + y) & 1) && !this._isMasked(x, y)) {\n            buffer[x + (y * width)] ^= 1;\n          }\n        }\n      }\n\n      break;\n    case 1:\n      for (y = 0; y < width; y++) {\n        for (x = 0; x < width; x++) {\n          if (!(y & 1) && !this._isMasked(x, y)) {\n            buffer[x + (y * width)] ^= 1;\n          }\n        }\n      }\n\n      break;\n    case 2:\n      for (y = 0; y < width; y++) {\n        for (r3x = 0, x = 0; x < width; x++, r3x++) {\n          if (r3x === 3) {\n            r3x = 0;\n          }\n\n          if (!r3x && !this._isMasked(x, y)) {\n            buffer[x + (y * width)] ^= 1;\n          }\n        }\n      }\n\n      break;\n    case 3:\n      for (r3y = 0, y = 0; y < width; y++, r3y++) {\n        if (r3y === 3) {\n          r3y = 0;\n        }\n\n        for (r3x = r3y, x = 0; x < width; x++, r3x++) {\n          if (r3x === 3) {\n            r3x = 0;\n          }\n\n          if (!r3x && !this._isMasked(x, y)) {\n            buffer[x + (y * width)] ^= 1;\n          }\n        }\n      }\n\n      break;\n    case 4:\n      for (y = 0; y < width; y++) {\n        for (r3x = 0, r3y = (y >> 1) & 1, x = 0; x < width; x++, r3x++) {\n          if (r3x === 3) {\n            r3x = 0;\n            r3y = !r3y;\n          }\n\n          if (!r3y && !this._isMasked(x, y)) {\n            buffer[x + (y * width)] ^= 1;\n          }\n        }\n      }\n\n      break;\n    case 5:\n      for (r3y = 0, y = 0; y < width; y++, r3y++) {\n        if (r3y === 3) {\n          r3y = 0;\n        }\n\n        for (r3x = 0, x = 0; x < width; x++, r3x++) {\n          if (r3x === 3) {\n            r3x = 0;\n          }\n\n          if (!((x & y & 1) + !(!r3x | !r3y)) && !this._isMasked(x, y)) {\n            buffer[x + (y * width)] ^= 1;\n          }\n        }\n      }\n\n      break;\n    case 6:\n      for (r3y = 0, y = 0; y < width; y++, r3y++) {\n        if (r3y === 3) {\n          r3y = 0;\n        }\n\n        for (r3x = 0, x = 0; x < width; x++, r3x++) {\n          if (r3x === 3) {\n            r3x = 0;\n          }\n\n          if (!((x & y & 1) + (r3x && r3x === r3y) & 1) && !this._isMasked(x, y)) {\n            buffer[x + (y * width)] ^= 1;\n          }\n        }\n      }\n\n      break;\n    case 7:\n      for (r3y = 0, y = 0; y < width; y++, r3y++) {\n        if (r3y === 3) {\n          r3y = 0;\n        }\n\n        for (r3x = 0, x = 0; x < width; x++, r3x++) {\n          if (r3x === 3) {\n            r3x = 0;\n          }\n\n          if (!((r3x && r3x === r3y) + (x + y & 1) & 1) && !this._isMasked(x, y)) {\n            buffer[x + (y * width)] ^= 1;\n          }\n        }\n      }\n\n      break;\n    }\n  },\n\n  _calculateMaxLength: function() {\n    return (this._dataBlock * (this._neccBlock1 + this._neccBlock2)) + this._neccBlock2;\n  },\n\n  _calculatePolynomial: function() {\n    var i, j;\n    var eccBlock = this._eccBlock;\n    var polynomial = this._polynomial;\n\n    polynomial[0] = 1;\n\n    for (i = 0; i < eccBlock; i++) {\n      polynomial[i + 1] = 1;\n\n      for (j = i; j > 0; j--) {\n        polynomial[j] = polynomial[j] ? polynomial[j - 1] ^\n          Galois.EXPONENT[Frame._modN(Galois.LOG[polynomial[j]] + i)] : polynomial[j - 1];\n      }\n\n      polynomial[0] = Galois.EXPONENT[Frame._modN(Galois.LOG[polynomial[0]] + i)];\n    }\n\n    // Use logs for generator polynomial to save calculation step.\n    for (i = 0; i <= eccBlock; i++) {\n      polynomial[i] = Galois.LOG[polynomial[i]];\n    }\n  },\n\n  _checkBadness: function() {\n    var b, b1, h, x, y;\n    var bad = 0;\n    var badness = this._badness;\n    var buffer = this.buffer;\n    var width = this.width;\n\n    // Blocks of same colour.\n    for (y = 0; y < width - 1; y++) {\n      for (x = 0; x < width - 1; x++) {\n        // All foreground colour.\n        if ((buffer[x + (width * y)] &&\n          buffer[x + 1 + (width * y)] &&\n          buffer[x + (width * (y + 1))] &&\n          buffer[x + 1 + (width * (y + 1))]) ||\n          // All background colour.\n          !(buffer[x + (width * y)] ||\n          buffer[x + 1 + (width * y)] ||\n          buffer[x + (width * (y + 1))] ||\n          buffer[x + 1 + (width * (y + 1))])) {\n          bad += Frame.N2;\n        }\n      }\n    }\n\n    var bw = 0;\n\n    // X runs.\n    for (y = 0; y < width; y++) {\n      h = 0;\n\n      badness[0] = 0;\n\n      for (b = 0, x = 0; x < width; x++) {\n        b1 = buffer[x + (width * y)];\n\n        if (b === b1) {\n          badness[h]++;\n        } else {\n          badness[++h] = 1;\n        }\n\n        b = b1;\n        bw += b ? 1 : -1;\n      }\n\n      bad += this._getBadness(h);\n    }\n\n    if (bw < 0) {\n      bw = -bw;\n    }\n\n    var count = 0;\n    var big = bw;\n    big += big << 2;\n    big <<= 1;\n\n    while (big > width * width) {\n      big -= width * width;\n      count++;\n    }\n\n    bad += count * Frame.N4;\n\n    // Y runs.\n    for (x = 0; x < width; x++) {\n      h = 0;\n\n      badness[0] = 0;\n\n      for (b = 0, y = 0; y < width; y++) {\n        b1 = buffer[x + (width * y)];\n\n        if (b === b1) {\n          badness[h]++;\n        } else {\n          badness[++h] = 1;\n        }\n\n        b = b1;\n      }\n\n      bad += this._getBadness(h);\n    }\n\n    return bad;\n  },\n\n  _convertBitStream: function(length) {\n    var bit, i;\n    var ecc = this._ecc;\n    var version = this._version;\n\n    // Convert string to bit stream. 8-bit data to QR-coded 8-bit data (numeric, alphanumeric, or kanji not supported).\n    for (i = 0; i < length; i++) {\n      ecc[i] = this._value.charCodeAt(i);\n    }\n\n    var stringBuffer = this._stringBuffer = ecc.slice();\n    var maxLength = this._calculateMaxLength();\n\n    if (length >= maxLength - 2) {\n      length = maxLength - 2;\n\n      if (version > 9) {\n        length--;\n      }\n    }\n\n    // Shift and re-pack to insert length prefix.\n    var index = length;\n\n    if (version > 9) {\n      stringBuffer[index + 2] = 0;\n      stringBuffer[index + 3] = 0;\n\n      while (index--) {\n        bit = stringBuffer[index];\n\n        stringBuffer[index + 3] |= 255 & (bit << 4);\n        stringBuffer[index + 2] = bit >> 4;\n      }\n\n      stringBuffer[2] |= 255 & (length << 4);\n      stringBuffer[1] = length >> 4;\n      stringBuffer[0] = 0x40 | (length >> 12);\n    } else {\n      stringBuffer[index + 1] = 0;\n      stringBuffer[index + 2] = 0;\n\n      while (index--) {\n        bit = stringBuffer[index];\n\n        stringBuffer[index + 2] |= 255 & (bit << 4);\n        stringBuffer[index + 1] = bit >> 4;\n      }\n\n      stringBuffer[1] |= 255 & (length << 4);\n      stringBuffer[0] = 0x40 | (length >> 4);\n    }\n\n    // Fill to end with pad pattern.\n    index = length + 3 - (version < 10);\n\n    while (index < maxLength) {\n      stringBuffer[index++] = 0xec;\n      stringBuffer[index++] = 0x11;\n    }\n  },\n\n  _getBadness: function(length) {\n    var i;\n    var badRuns = 0;\n    var badness = this._badness;\n\n    for (i = 0; i <= length; i++) {\n      if (badness[i] >= 5) {\n        badRuns += Frame.N1 + badness[i] - 5;\n      }\n    }\n\n    // FBFFFBF as in finder.\n    for (i = 3; i < length - 1; i += 2) {\n      if (badness[i - 2] === badness[i + 2] &&\n        badness[i + 2] === badness[i - 1] &&\n        badness[i - 1] === badness[i + 1] &&\n        badness[i - 1] * 3 === badness[i] &&\n        // Background around the foreground pattern? Not part of the specs.\n        (badness[i - 3] === 0 || i + 3 > length ||\n        badness[i - 3] * 3 >= badness[i] * 4 ||\n        badness[i + 3] * 3 >= badness[i] * 4)) {\n        badRuns += Frame.N3;\n      }\n    }\n\n    return badRuns;\n  },\n\n  _finish: function() {\n    // Save pre-mask copy of frame.\n    this._stringBuffer = this.buffer.slice();\n\n    var currentMask, i;\n    var bit = 0;\n    var mask = 30000;\n\n    /*\n     * Using for instead of while since in original Arduino code if an early mask was \"good enough\" it wouldn't try for\n     * a better one since they get more complex and take longer.\n     */\n    for (i = 0; i < 8; i++) {\n      // Returns foreground-background imbalance.\n      this._applyMask(i);\n\n      currentMask = this._checkBadness();\n\n      // Is current mask better than previous best?\n      if (currentMask < mask) {\n        mask = currentMask;\n        bit = i;\n      }\n\n      // Don't increment \"i\" to a void redoing mask.\n      if (bit === 7) {\n        break;\n      }\n\n      // Reset for next pass.\n      this.buffer = this._stringBuffer.slice();\n    }\n\n    // Redo best mask as none were \"good enough\" (i.e. last wasn't bit).\n    if (bit !== i) {\n      this._applyMask(bit);\n    }\n\n    // Add in final mask/ECC level bytes.\n    mask = ErrorCorrection.FINAL_FORMAT[bit + (this._level - 1 << 3)];\n\n    var buffer = this.buffer;\n    var width = this.width;\n\n    // Low byte.\n    for (i = 0; i < 8; i++, mask >>= 1) {\n      if (mask & 1) {\n        buffer[width - 1 - i + (width * 8)] = 1;\n\n        if (i < 6) {\n          buffer[8 + (width * i)] = 1;\n        } else {\n          buffer[8 + (width * (i + 1))] = 1;\n        }\n      }\n    }\n\n    // High byte.\n    for (i = 0; i < 7; i++, mask >>= 1) {\n      if (mask & 1) {\n        buffer[8 + (width * (width - 7 + i))] = 1;\n\n        if (i) {\n          buffer[6 - i + (width * 8)] = 1;\n        } else {\n          buffer[7 + (width * 8)] = 1;\n        }\n      }\n    }\n  },\n\n  _interleaveBlocks: function() {\n    var i, j;\n    var dataBlock = this._dataBlock;\n    var ecc = this._ecc;\n    var eccBlock = this._eccBlock;\n    var k = 0;\n    var maxLength = this._calculateMaxLength();\n    var neccBlock1 = this._neccBlock1;\n    var neccBlock2 = this._neccBlock2;\n    var stringBuffer = this._stringBuffer;\n\n    for (i = 0; i < dataBlock; i++) {\n      for (j = 0; j < neccBlock1; j++) {\n        ecc[k++] = stringBuffer[i + (j * dataBlock)];\n      }\n\n      for (j = 0; j < neccBlock2; j++) {\n        ecc[k++] = stringBuffer[(neccBlock1 * dataBlock) + i + (j * (dataBlock + 1))];\n      }\n    }\n\n    for (j = 0; j < neccBlock2; j++) {\n      ecc[k++] = stringBuffer[(neccBlock1 * dataBlock) + i + (j * (dataBlock + 1))];\n    }\n\n    for (i = 0; i < eccBlock; i++) {\n      for (j = 0; j < neccBlock1 + neccBlock2; j++) {\n        ecc[k++] = stringBuffer[maxLength + i + (j * eccBlock)];\n      }\n    }\n\n    this._stringBuffer = ecc;\n  },\n\n  _insertAlignments: function() {\n    var i, x, y;\n    var version = this._version;\n    var width = this.width;\n\n    if (version > 1) {\n      i = Alignment.BLOCK[version];\n      y = width - 7;\n\n      for (;;) {\n        x = width - 7;\n\n        while (x > i - 3) {\n          this._addAlignment(x, y);\n\n          if (x < i) {\n            break;\n          }\n\n          x -= i;\n        }\n\n        if (y <= i + 9) {\n          break;\n        }\n\n        y -= i;\n\n        this._addAlignment(6, y);\n        this._addAlignment(y, 6);\n      }\n    }\n  },\n\n  _insertFinders: function() {\n    var i, j, x, y;\n    var buffer = this.buffer;\n    var width = this.width;\n\n    for (i = 0; i < 3; i++) {\n      j = 0;\n      y = 0;\n\n      if (i === 1) {\n        j = width - 7;\n      }\n      if (i === 2) {\n        y = width - 7;\n      }\n\n      buffer[y + 3 + (width * (j + 3))] = 1;\n\n      for (x = 0; x < 6; x++) {\n        buffer[y + x + (width * j)] = 1;\n        buffer[y + (width * (j + x + 1))] = 1;\n        buffer[y + 6 + (width * (j + x))] = 1;\n        buffer[y + x + 1 + (width * (j + 6))] = 1;\n      }\n\n      for (x = 1; x < 5; x++) {\n        this._setMask(y + x, j + 1);\n        this._setMask(y + 1, j + x + 1);\n        this._setMask(y + 5, j + x);\n        this._setMask(y + x + 1, j + 5);\n      }\n\n      for (x = 2; x < 4; x++) {\n        buffer[y + x + (width * (j + 2))] = 1;\n        buffer[y + 2 + (width * (j + x + 1))] = 1;\n        buffer[y + 4 + (width * (j + x))] = 1;\n        buffer[y + x + 1 + (width * (j + 4))] = 1;\n      }\n    }\n  },\n\n  _insertTimingGap: function() {\n    var x, y;\n    var width = this.width;\n\n    for (y = 0; y < 7; y++) {\n      this._setMask(7, y);\n      this._setMask(width - 8, y);\n      this._setMask(7, y + width - 7);\n    }\n\n    for (x = 0; x < 8; x++) {\n      this._setMask(x, 7);\n      this._setMask(x + width - 8, 7);\n      this._setMask(x, width - 8);\n    }\n  },\n\n  _insertTimingRowAndColumn: function() {\n    var x;\n    var buffer = this.buffer;\n    var width = this.width;\n\n    for (x = 0; x < width - 14; x++) {\n      if (x & 1) {\n        this._setMask(8 + x, 6);\n        this._setMask(6, 8 + x);\n      } else {\n        buffer[8 + x + (width * 6)] = 1;\n        buffer[6 + (width * (8 + x))] = 1;\n      }\n    }\n  },\n\n  _insertVersion: function() {\n    var i, j, x, y;\n    var buffer = this.buffer;\n    var version = this._version;\n    var width = this.width;\n\n    if (version > 6) {\n      i = Version.BLOCK[version - 7];\n      j = 17;\n\n      for (x = 0; x < 6; x++) {\n        for (y = 0; y < 3; y++, j--) {\n          if (1 & (j > 11 ? version >> j - 12 : i >> j)) {\n            buffer[5 - x + (width * (2 - y + width - 11))] = 1;\n            buffer[2 - y + width - 11 + (width * (5 - x))] = 1;\n          } else {\n            this._setMask(5 - x, 2 - y + width - 11);\n            this._setMask(2 - y + width - 11, 5 - x);\n          }\n        }\n      }\n    }\n  },\n\n  _isMasked: function(x, y) {\n    var bit = Frame._getMaskBit(x, y);\n\n    return this._mask[bit] === 1;\n  },\n\n  _pack: function() {\n    var bit, i, j;\n    var k = 1;\n    var v = 1;\n    var width = this.width;\n    var x = width - 1;\n    var y = width - 1;\n\n    // Interleaved data and ECC codes.\n    var length = ((this._dataBlock + this._eccBlock) * (this._neccBlock1 + this._neccBlock2)) + this._neccBlock2;\n\n    for (i = 0; i < length; i++) {\n      bit = this._stringBuffer[i];\n\n      for (j = 0; j < 8; j++, bit <<= 1) {\n        if (0x80 & bit) {\n          this.buffer[x + (width * y)] = 1;\n        }\n\n        // Find next fill position.\n        do {\n          if (v) {\n            x--;\n          } else {\n            x++;\n\n            if (k) {\n              if (y !== 0) {\n                y--;\n              } else {\n                x -= 2;\n                k = !k;\n\n                if (x === 6) {\n                  x--;\n                  y = 9;\n                }\n              }\n            } else if (y !== width - 1) {\n              y++;\n            } else {\n              x -= 2;\n              k = !k;\n\n              if (x === 6) {\n                x--;\n                y -= 8;\n              }\n            }\n          }\n\n          v = !v;\n        } while (this._isMasked(x, y));\n      }\n    }\n  },\n\n  _reverseMask: function() {\n    var x, y;\n    var width = this.width;\n\n    for (x = 0; x < 9; x++) {\n      this._setMask(x, 8);\n    }\n\n    for (x = 0; x < 8; x++) {\n      this._setMask(x + width - 8, 8);\n      this._setMask(8, x);\n    }\n\n    for (y = 0; y < 7; y++) {\n      this._setMask(8, y + width - 7);\n    }\n  },\n\n  _setMask: function(x, y) {\n    var bit = Frame._getMaskBit(x, y);\n\n    this._mask[bit] = 1;\n  },\n\n  _syncMask: function() {\n    var x, y;\n    var width = this.width;\n\n    for (y = 0; y < width; y++) {\n      for (x = 0; x <= y; x++) {\n        if (this.buffer[x + (width * y)]) {\n          this._setMask(x, y);\n        }\n      }\n    }\n  }\n\n}, {\n\n  _createArray: function(length) {\n    var i;\n    var array = [];\n\n    for (i = 0; i < length; i++) {\n      array[i] = 0;\n    }\n\n    return array;\n  },\n\n  _getMaskBit: function(x, y) {\n    var bit;\n\n    if (x > y) {\n      bit = x;\n      x = y;\n      y = bit;\n    }\n\n    bit = y;\n    bit += y * y;\n    bit >>= 1;\n    bit += x;\n\n    return bit;\n  },\n\n  _modN: function(x) {\n    while (x >= 255) {\n      x -= 255;\n      x = (x >> 8) + (x & 255);\n    }\n\n    return x;\n  },\n\n  // *Badness* coefficients.\n  N1: 3,\n  N2: 3,\n  N3: 40,\n  N4: 10\n\n});\n\nmodule.exports = Frame;\n\n/**\n * The options used by {@link Frame}.\n *\n * @typedef {Object} Frame~Options\n * @property {string} level - The ECC level to be used.\n * @property {string} value - The value to be encoded.\n */\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar Renderer = require('./Renderer');\n\n/**\n * An implementation of {@link Renderer} for working with <code>img</code> elements.\n *\n * This depends on {@link CanvasRenderer} being executed first as this implementation simply applies the data URL from\n * the rendered <code>canvas</code> element as the <code>src</code> for the <code>img</code> element being rendered.\n *\n * @public\n * @class\n * @extends Renderer\n */\nvar ImageRenderer = Renderer.extend({\n\n  /**\n   * @override\n   */\n  draw: function() {\n    this.element.src = this.qrious.toDataURL();\n  },\n\n  /**\n   * @override\n   */\n  reset: function() {\n    this.element.src = '';\n  },\n\n  /**\n   * @override\n   */\n  resize: function() {\n    var element = this.element;\n\n    element.width = element.height = this.qrious.size;\n  }\n\n});\n\nmodule.exports = ImageRenderer;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Defines an available option while also configuring how values are applied to the target object.\n *\n * Optionally, a default value can be specified as well a value transformer for greater control over how the option\n * value is applied.\n *\n * If no value transformer is specified, then any specified option will be applied directly. All values are maintained\n * on the target object itself as a field using the option name prefixed with a single underscore.\n *\n * When an option is specified as modifiable, the {@link OptionManager} will be required to include a setter for the\n * property that is defined on the target object that uses the option name.\n *\n * @param {string} name - the name to be used\n * @param {boolean} [modifiable] - <code>true</code> if the property defined on target objects should include a setter;\n * otherwise <code>false</code>\n * @param {*} [defaultValue] - the default value to be used\n * @param {Option~ValueTransformer} [valueTransformer] - the value transformer to be used\n * @public\n * @class\n * @extends Nevis\n */\nvar Option = Nevis.extend(function(name, modifiable, defaultValue, valueTransformer) {\n  /**\n   * The name for this {@link Option}.\n   *\n   * @public\n   * @type {string}\n   * @memberof Option#\n   */\n  this.name = name;\n\n  /**\n   * Whether a setter should be included on the property defined on target objects for this {@link Option}.\n   *\n   * @public\n   * @type {boolean}\n   * @memberof Option#\n   */\n  this.modifiable = Boolean(modifiable);\n\n  /**\n   * The default value for this {@link Option}.\n   *\n   * @public\n   * @type {*}\n   * @memberof Option#\n   */\n  this.defaultValue = defaultValue;\n\n  this._valueTransformer = valueTransformer;\n}, {\n\n  /**\n   * Transforms the specified <code>value</code> so that it can be applied for this {@link Option}.\n   *\n   * If a value transformer has been specified for this {@link Option}, it will be called upon to transform\n   * <code>value</code>. Otherwise, <code>value</code> will be returned directly.\n   *\n   * @param {*} value - the value to be transformed\n   * @return {*} The transformed value or <code>value</code> if no value transformer is specified.\n   * @public\n   * @memberof Option#\n   */\n  transform: function(value) {\n    var transformer = this._valueTransformer;\n    if (typeof transformer === 'function') {\n      return transformer(value, this);\n    }\n\n    return value;\n  }\n\n});\n\nmodule.exports = Option;\n\n/**\n * Returns a transformed value for the specified <code>value</code> to be applied for the <code>option</code> provided.\n *\n * @callback Option~ValueTransformer\n * @param {*} value - the value to be transformed\n * @param {Option} option - the {@link Option} for which <code>value</code> is being transformed\n * @return {*} The transform value.\n */\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Contains utility methods that are useful throughout the library.\n *\n * @public\n * @class\n * @extends Nevis\n */\nvar Utilities = Nevis.extend(null, {\n\n  /**\n   * Returns the absolute value of a given number.\n   *\n   * This method is simply a convenient shorthand for <code>Math.abs</code> while ensuring that nulls are returned as\n   * <code>null</code> instead of zero.\n   *\n   * @param {number} value - the number whose absolute value is to be returned\n   * @return {number} The absolute value of <code>value</code> or <code>null</code> if <code>value</code> is\n   * <code>null</code>.\n   * @public\n   * @static\n   * @memberof Utilities\n   */\n  abs: function(value) {\n    return value != null ? Math.abs(value) : null;\n  },\n\n  /**\n   * Returns whether the specified <code>object</code> has a property with the specified <code>name</code> as an own\n   * (not inherited) property.\n   *\n   * @param {Object} object - the object on which the property is to be checked\n   * @param {string} name - the name of the property to be checked\n   * @return {boolean} <code>true</code> if <code>object</code> has an own property with <code>name</code>.\n   * @public\n   * @static\n   * @memberof Utilities\n   */\n  hasOwn: function(object, name) {\n    return Object.prototype.hasOwnProperty.call(object, name);\n  },\n\n  /**\n   * A non-operation method that does absolutely nothing.\n   *\n   * @return {void}\n   * @public\n   * @static\n   * @memberof Utilities\n   */\n  noop: function() {},\n\n  /**\n   * Transforms the specified <code>string</code> to upper case while remaining null-safe.\n   *\n   * @param {string} string - the string to be transformed to upper case\n   * @return {string} <code>string</code> transformed to upper case if <code>string</code> is not <code>null</code>.\n   * @public\n   * @static\n   * @memberof Utilities\n   */\n  toUpperCase: function(string) {\n    return string != null ? string.toUpperCase() : null;\n  }\n\n});\n\nmodule.exports = Utilities;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\nvar Utilities = require('../util/Utilities');\n\n/**\n * Manages multiple {@link Option} instances that are intended to be used by multiple implementations.\n *\n * Although the option definitions are shared between targets, the values are maintained on the targets themselves.\n *\n * @param {Option[]} options - the options to be used\n * @public\n * @class\n * @extends Nevis\n */\nvar OptionManager = Nevis.extend(function(options) {\n  /**\n   * The available options for this {@link OptionManager}.\n   *\n   * @public\n   * @type {Object.<string, Option>}\n   * @memberof OptionManager#\n   */\n  this.options = {};\n\n  options.forEach(function(option) {\n    this.options[option.name] = option;\n  }, this);\n}, {\n\n  /**\n   * Returns whether an option with the specified <code>name</code> is available.\n   *\n   * @param {string} name - the name of the {@link Option} whose existence is to be checked\n   * @return {boolean} <code>true</code> if an {@link Option} exists with <code>name</code>; otherwise\n   * <code>false</code>.\n   * @public\n   * @memberof OptionManager#\n   */\n  exists: function(name) {\n    return this.options[name] != null;\n  },\n\n  /**\n   * Returns the value of the option with the specified <code>name</code> on the <code>target</code> object provided.\n   *\n   * @param {string} name - the name of the {@link Option} whose value on <code>target</code> is to be returned\n   * @param {Object} target - the object from which the value of the named {@link Option} is to be returned\n   * @return {*} The value of the {@link Option} with <code>name</code> on <code>target</code>.\n   * @public\n   * @memberof OptionManager#\n   */\n  get: function(name, target) {\n    return OptionManager._get(this.options[name], target);\n  },\n\n  /**\n   * Returns a copy of all of the available options on the <code>target</code> object provided.\n   *\n   * @param {Object} target - the object from which the option name/value pairs are to be returned\n   * @return {Object.<string, *>} A hash containing the name/value pairs of all options on <code>target</code>.\n   * @public\n   * @memberof OptionManager#\n   */\n  getAll: function(target) {\n    var name;\n    var options = this.options;\n    var result = {};\n\n    for (name in options) {\n      if (Utilities.hasOwn(options, name)) {\n        result[name] = OptionManager._get(options[name], target);\n      }\n    }\n\n    return result;\n  },\n\n  /**\n   * Initializes the available options for the <code>target</code> object provided and then applies the initial values\n   * within the speciifed <code>options</code>.\n   *\n   * This method will throw an error if any of the names within <code>options</code> does not match an available option.\n   *\n   * This involves setting the default values and defining properties for all of the available options on\n   * <code>target</code> before finally calling {@link OptionMananger#setAll} with <code>options</code> and\n   * <code>target</code>. Any options that are configured to be modifiable will have a setter included in their defined\n   * property that will allow its corresponding value to be modified.\n   *\n   * If a change handler is specified, it will be called whenever the value changes on <code>target</code> for a\n   * modifiable option, but only when done so via the defined property's setter.\n   *\n   * @param {Object.<string, *>} options - the name/value pairs of the initial options to be set\n   * @param {Object} target - the object on which the options are to be initialized\n   * @param {Function} [changeHandler] - the function to be called whenever the value of an modifiable option changes on\n   * <code>target</code>\n   * @return {void}\n   * @throws {Error} If <code>options</code> contains an invalid option name.\n   * @public\n   * @memberof OptionManager#\n   */\n  init: function(options, target, changeHandler) {\n    if (typeof changeHandler !== 'function') {\n      changeHandler = Utilities.noop;\n    }\n\n    var name, option;\n\n    for (name in this.options) {\n      if (Utilities.hasOwn(this.options, name)) {\n        option = this.options[name];\n\n        OptionManager._set(option, option.defaultValue, target);\n        OptionManager._createAccessor(option, target, changeHandler);\n      }\n    }\n\n    this._setAll(options, target, true);\n  },\n\n  /**\n   * Sets the value of the option with the specified <code>name</code> on the <code>target</code> object provided to\n   * <code>value</code>.\n   *\n   * This method will throw an error if <code>name</code> does not match an available option or matches an option that\n   * cannot be modified.\n   *\n   * If <code>value</code> is <code>null</code> and the {@link Option} has a default value configured, then that default\n   * value will be used instead. If the {@link Option} also has a value transformer configured, it will be used to\n   * transform whichever value was determined to be used.\n   *\n   * This method returns whether the value of the underlying field on <code>target</code> was changed as a result.\n   *\n   * @param {string} name - the name of the {@link Option} whose value is to be set\n   * @param {*} value - the value to be set for the named {@link Option} on <code>target</code>\n   * @param {Object} target - the object on which <code>value</code> is to be set for the named {@link Option}\n   * @return {boolean} <code>true</code> if the underlying field on <code>target</code> was changed; otherwise\n   * <code>false</code>.\n   * @throws {Error} If <code>name</code> is invalid or is for an option that cannot be modified.\n   * @public\n   * @memberof OptionManager#\n   */\n  set: function(name, value, target) {\n    return this._set(name, value, target);\n  },\n\n  /**\n   * Sets all of the specified <code>options</code> on the <code>target</code> object provided to their corresponding\n   * values.\n   *\n   * This method will throw an error if any of the names within <code>options</code> does not match an available option\n   * or matches an option that cannot be modified.\n   *\n   * If any value within <code>options</code> is <code>null</code> and the corresponding {@link Option} has a default\n   * value configured, then that default value will be used instead. If an {@link Option} also has a value transformer\n   * configured, it will be used to transform whichever value was determined to be used.\n   *\n   * This method returns whether the value for any of the underlying fields on <code>target</code> were changed as a\n   * result.\n   *\n   * @param {Object.<string, *>} options - the name/value pairs of options to be set\n   * @param {Object} target - the object on which the options are to be set\n   * @return {boolean} <code>true</code> if any of the underlying fields on <code>target</code> were changed; otherwise\n   * <code>false</code>.\n   * @throws {Error} If <code>options</code> contains an invalid option name or an option that cannot be modiifed.\n   * @public\n   * @memberof OptionManager#\n   */\n  setAll: function(options, target) {\n    return this._setAll(options, target);\n  },\n\n  _set: function(name, value, target, allowUnmodifiable) {\n    var option = this.options[name];\n    if (!option) {\n      throw new Error('Invalid option: ' + name);\n    }\n    if (!option.modifiable && !allowUnmodifiable) {\n      throw new Error('Option cannot be modified: ' + name);\n    }\n\n    return OptionManager._set(option, value, target);\n  },\n\n  _setAll: function(options, target, allowUnmodifiable) {\n    if (!options) {\n      return false;\n    }\n\n    var name;\n    var changed = false;\n\n    for (name in options) {\n      if (Utilities.hasOwn(options, name) && this._set(name, options[name], target, allowUnmodifiable)) {\n        changed = true;\n      }\n    }\n\n    return changed;\n  }\n\n}, {\n\n  _createAccessor: function(option, target, changeHandler) {\n    var descriptor = {\n      get: function() {\n        return OptionManager._get(option, target);\n      }\n    };\n\n    if (option.modifiable) {\n      descriptor.set = function(value) {\n        if (OptionManager._set(option, value, target)) {\n          changeHandler(value, option);\n        }\n      };\n    }\n\n    Object.defineProperty(target, option.name, descriptor);\n  },\n\n  _get: function(option, target) {\n    return target['_' + option.name];\n  },\n\n  _set: function(option, value, target) {\n    var fieldName = '_' + option.name;\n    var oldValue = target[fieldName];\n    var newValue = option.transform(value != null ? value : option.defaultValue);\n\n    target[fieldName] = newValue;\n\n    return newValue !== oldValue;\n  }\n\n});\n\nmodule.exports = OptionManager;\n\n/**\n * Called whenever the value of a modifiable {@link Option} is changed on a target object via the defined property's\n * setter.\n *\n * @callback OptionManager~ChangeHandler\n * @param {*} value - the new value for <code>option</code> on the target object\n * @param {Option} option - the modifable {@link Option} whose value has changed on the target object.\n * @return {void}\n */\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\n/**\n * A basic manager for {@link Service} implementations that are mapped to simple names.\n *\n * @public\n * @class\n * @extends Nevis\n */\nvar ServiceManager = Nevis.extend(function() {\n  this._services = {};\n}, {\n\n  /**\n   * Returns the {@link Service} being managed with the specified <code>name</code>.\n   *\n   * @param {string} name - the name of the {@link Service} to be returned\n   * @return {Service} The {@link Service} is being managed with <code>name</code>.\n   * @throws {Error} If no {@link Service} is being managed with <code>name</code>.\n   * @public\n   * @memberof ServiceManager#\n   */\n  getService: function(name) {\n    var service = this._services[name];\n    if (!service) {\n      throw new Error('Service is not being managed with name: ' + name);\n    }\n\n    return service;\n  },\n\n  /**\n   * Sets the {@link Service} implementation to be managed for the specified <code>name</code> to the\n   * <code>service</code> provided.\n   *\n   * @param {string} name - the name of the {@link Service} to be managed with <code>name</code>\n   * @param {Service} service - the {@link Service} implementation to be managed\n   * @return {void}\n   * @throws {Error} If a {@link Service} is already being managed with the same <code>name</code>.\n   * @public\n   * @memberof ServiceManager#\n   */\n  setService: function(name, service) {\n    if (this._services[name]) {\n      throw new Error('Service is already managed with name: ' + name);\n    }\n\n    if (service) {\n      this._services[name] = service;\n    }\n  }\n\n});\n\nmodule.exports = ServiceManager;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\nvar CanvasRenderer = require('./renderer/CanvasRenderer');\nvar Frame = require('./Frame');\nvar ImageRenderer = require('./renderer/ImageRenderer');\nvar Option = require('./option/Option');\nvar OptionManager = require('./option/OptionManager');\nvar ServiceManager = require('./service/ServiceManager');\nvar Utilities = require('./util/Utilities');\n\nvar optionManager = new OptionManager([\n  new Option('background', true, 'white'),\n  new Option('backgroundAlpha', true, 1, Utilities.abs),\n  new Option('element'),\n  new Option('foreground', true, 'black'),\n  new Option('foregroundAlpha', true, 1, Utilities.abs),\n  new Option('level', true, 'L', Utilities.toUpperCase),\n  new Option('mime', true, 'image/png'),\n  new Option('padding', true, null, Utilities.abs),\n  new Option('size', true, 100, Utilities.abs),\n  new Option('value', true, '')\n]);\nvar serviceManager = new ServiceManager();\n\n/**\n * Enables configuration of a QR code generator which uses HTML5 <code>canvas</code> for rendering.\n *\n * @param {QRious~Options} [options] - the options to be used\n * @throws {Error} If any <code>options</code> are invalid.\n * @public\n * @class\n * @extends Nevis\n */\nvar QRious = Nevis.extend(function(options) {\n  optionManager.init(options, this, this.update.bind(this));\n\n  var element = optionManager.get('element', this);\n  var elementService = serviceManager.getService('element');\n  var canvas = element && elementService.isCanvas(element) ? element : elementService.createCanvas();\n  var image = element && elementService.isImage(element) ? element : elementService.createImage();\n\n  this._canvasRenderer = new CanvasRenderer(this, canvas, true);\n  this._imageRenderer = new ImageRenderer(this, image, image === element);\n\n  this.update();\n}, {\n\n  /**\n   * Returns all of the options configured for this {@link QRious}.\n   *\n   * Any changes made to the returned object will not be reflected in the options themselves or their corresponding\n   * underlying fields.\n   *\n   * @return {Object.<string, *>} A copy of the applied options.\n   * @public\n   * @memberof QRious#\n   */\n  get: function() {\n    return optionManager.getAll(this);\n  },\n\n  /**\n   * Sets all of the specified <code>options</code> and automatically updates this {@link QRious} if any of the\n   * underlying fields are changed as a result.\n   *\n   * This is the preferred method for updating multiple options at one time to avoid unnecessary updates between\n   * changes.\n   *\n   * @param {QRious~Options} options - the options to be set\n   * @return {void}\n   * @throws {Error} If any <code>options</code> are invalid or cannot be modified.\n   * @public\n   * @memberof QRious#\n   */\n  set: function(options) {\n    if (optionManager.setAll(options, this)) {\n      this.update();\n    }\n  },\n\n  /**\n   * Returns the image data URI for the generated QR code using the <code>mime</code> provided.\n   *\n   * @param {string} [mime] - the MIME type for the image\n   * @return {string} The image data URI for the QR code.\n   * @public\n   * @memberof QRious#\n   */\n  toDataURL: function(mime) {\n    return this.canvas.toDataURL(mime || this.mime);\n  },\n\n  /**\n   * Updates this {@link QRious} by generating a new {@link Frame} and re-rendering the QR code.\n   *\n   * @return {void}\n   * @protected\n   * @memberof QRious#\n   */\n  update: function() {\n    var frame = new Frame({\n      level: this.level,\n      value: this.value\n    });\n\n    this._canvasRenderer.render(frame);\n    this._imageRenderer.render(frame);\n  }\n\n}, {\n\n  /**\n   * Configures the <code>service</code> provided to be used by all {@link QRious} instances.\n   *\n   * @param {Service} service - the {@link Service} to be configured\n   * @return {void}\n   * @throws {Error} If a {@link Service} has already been configured with the same name.\n   * @public\n   * @static\n   * @memberof QRious\n   */\n  use: function(service) {\n    serviceManager.setService(service.getName(), service);\n  }\n\n});\n\nObject.defineProperties(QRious.prototype, {\n\n  canvas: {\n    /**\n     * Returns the <code>canvas</code> element being used to render the QR code for this {@link QRious}.\n     *\n     * @return {*} The <code>canvas</code> element.\n     * @public\n     * @memberof QRious#\n     * @alias canvas\n     */\n    get: function() {\n      return this._canvasRenderer.getElement();\n    }\n  },\n\n  image: {\n    /**\n     * Returns the <code>img</code> element being used to render the QR code for this {@link QRious}.\n     *\n     * @return {*} The <code>img</code> element.\n     * @public\n     * @memberof QRious#\n     * @alias image\n     */\n    get: function() {\n      return this._imageRenderer.getElement();\n    }\n  }\n\n});\n\nmodule.exports = QRious;\n\n/**\n * The options used by {@link QRious}.\n *\n * @typedef {Object} QRious~Options\n * @property {string} [background=\"white\"] - The background color to be applied to the QR code.\n * @property {number} [backgroundAlpha=1] - The background alpha to be applied to the QR code.\n * @property {*} [element] - The element to be used to render the QR code which may either be an <code>canvas</code> or\n * <code>img</code>. The element(s) will be created if needed.\n * @property {string} [foreground=\"black\"] - The foreground color to be applied to the QR code.\n * @property {number} [foregroundAlpha=1] - The foreground alpha to be applied to the QR code.\n * @property {string} [level=\"L\"] - The error correction level to be applied to the QR code.\n * @property {string} [mime=\"image/png\"] - The MIME type to be used to render the image for the QR code.\n * @property {number} [padding] - The padding for the QR code in pixels.\n * @property {number} [size=100] - The size of the QR code in pixels.\n * @property {string} [value=\"\"] - The value to be encoded within the QR code.\n */\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar Nevis = require('nevis/lite');\n\n/**\n * Defines a service contract that must be met by all implementations.\n *\n * @public\n * @class\n * @extends Nevis\n */\nvar Service = Nevis.extend({\n\n  /**\n   * Returns the name of this {@link Service}.\n   *\n   * @return {string} The service name.\n   * @public\n   * @abstract\n   * @memberof Service#\n   */\n  getName: function() {}\n\n});\n\nmodule.exports = Service;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar Service = require('../Service');\n\n/**\n * A service for working with elements.\n *\n * @public\n * @class\n * @extends Service\n */\nvar ElementService = Service.extend({\n\n  /**\n   * Creates an instance of a canvas element.\n   *\n   * Implementations of {@link ElementService} <b>must</b> override this method with their own specific logic.\n   *\n   * @return {*} The newly created canvas element.\n   * @public\n   * @abstract\n   * @memberof ElementService#\n   */\n  createCanvas: function() {},\n\n  /**\n   * Creates an instance of a image element.\n   *\n   * Implementations of {@link ElementService} <b>must</b> override this method with their own specific logic.\n   *\n   * @return {*} The newly created image element.\n   * @public\n   * @abstract\n   * @memberof ElementService#\n   */\n  createImage: function() {},\n\n  /**\n   * @override\n   */\n  getName: function() {\n    return 'element';\n  },\n\n  /**\n   * Returns whether the specified <code>element</code> is a canvas.\n   *\n   * Implementations of {@link ElementService} <b>must</b> override this method with their own specific logic.\n   *\n   * @param {*} element - the element to be checked\n   * @return {boolean} <code>true</code> if <code>element</code> is a canvas; otherwise <code>false</code>.\n   * @public\n   * @abstract\n   * @memberof ElementService#\n   */\n  isCanvas: function(element) {},\n\n  /**\n   * Returns whether the specified <code>element</code> is an image.\n   *\n   * Implementations of {@link ElementService} <b>must</b> override this method with their own specific logic.\n   *\n   * @param {*} element - the element to be checked\n   * @return {boolean} <code>true</code> if <code>element</code> is an image; otherwise <code>false</code>.\n   * @public\n   * @abstract\n   * @memberof ElementService#\n   */\n  isImage: function(element) {}\n\n});\n\nmodule.exports = ElementService;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar ElementService = require('qrious-core/src/service/element/ElementService');\n\n/**\n * An implementation of {@link ElementService} intended for use within a browser environment.\n *\n * @public\n * @class\n * @extends ElementService\n */\nvar BrowserElementService = ElementService.extend({\n\n  /**\n   * @override\n   */\n  createCanvas: function() {\n    return document.createElement('canvas');\n  },\n\n  /**\n   * @override\n   */\n  createImage: function() {\n    return document.createElement('img');\n  },\n\n  /**\n   * @override\n   */\n  isCanvas: function(element) {\n    return element instanceof HTMLCanvasElement;\n  },\n\n  /**\n   * @override\n   */\n  isImage: function(element) {\n    return element instanceof HTMLImageElement;\n  }\n\n});\n\nmodule.exports = BrowserElementService;\n","/*\n * QRious\n * Copyright (C) 2017 Alasdair Mercer\n * Copyright (C) 2010 Tom Zerucha\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n'use strict';\n\nvar QRious = require('qrious-core');\n\nvar BrowserElementService = require('./service/element/BrowserElementService');\n\nQRious.use(new BrowserElementService());\n\nmodule.exports = QRious;\n"],"names":["createObject","prototype","properties","result","Object","create","Constructor","extendObject","extend","name","constructor","statics","superConstructor","this","apply","arguments","class_","super_","own","target","sources","property","source","i","length","slice","call","hasOwnProperty","Nevis","Array","qrious","element","enabled","Boolean","draw","frame","getElement","render","getModuleSize","padding","pixels","Math","floor","size","width","max","getOffset","moduleSize","offset","resize","reset","Renderer","j","context","getContext","fillStyle","foreground","globalAlpha","foregroundAlpha","buffer","fillRect","lineWidth","clearRect","background","backgroundAlpha","height","BLOCK","BLOCKS","FINAL_FORMAT","LEVELS","L","M","Q","H","EXPONENT","LOG","Frame","options","dataBlock","eccBlock","index","neccBlock1","neccBlock2","valueLength","value","_badness","_level","ErrorCorrection","level","_polynomial","_value","_version","_stringBuffer","_dataBlock","_eccBlock","_neccBlock1","_neccBlock2","_createArray","_ecc","_mask","_insertFinders","_insertAlignments","_insertTimingGap","_reverseMask","_insertTimingRowAndColumn","_insertVersion","_syncMask","_convertBitStream","_calculatePolynomial","_appendEccToData","_interleaveBlocks","_pack","_finish","_addAlignment","x","y","_setMask","_appendData","data","dataLength","ecc","eccLength","bit","polynomial","stringBuffer","Galois","_modN","_calculateMaxLength","_applyMask","mask","r3x","r3y","_isMasked","_checkBadness","b","b1","h","bad","badness","N2","bw","_getBadness","count","big","N4","version","charCodeAt","maxLength","badRuns","N1","N3","currentMask","k","Alignment","Version","_getMaskBit","v","array","src","toDataURL","modifiable","defaultValue","valueTransformer","_valueTransformer","transform","transformer","abs","hasOwn","object","noop","toUpperCase","string","OptionManager","forEach","option","exists","get","_get","getAll","Utilities","init","changeHandler","_set","_createAccessor","_setAll","set","setAll","allowUnmodifiable","Error","changed","descriptor","defineProperty","fieldName","oldValue","newValue","_services","getService","service","setService","optionManager","Option","serviceManager","ServiceManager","QRious","update","bind","elementService","canvas","isCanvas","createCanvas","image","isImage","createImage","_canvasRenderer","CanvasRenderer","_imageRenderer","ImageRenderer","mime","use","getName","defineProperties","document","createElement","HTMLCanvasElement","HTMLImageElement","BrowserElementService"],"mappings":";;;kLAwDA,SAASA,EAAaC,EAAWC,GAC/B,IAAIC,EAcJ,MAZ6B,mBAAlBC,OAAOC,OAChBF,EAASC,OAAOC,OAAOJ,IAEvBK,EAAYL,UAAYA,EACxBE,EAAS,IAAIG,EACbA,EAAYL,UAAY,MAGtBC,GACFK,GAAa,EAAMJ,EAAQD,GAGtBC,EAwBT,SAASK,EAAOC,EAAMC,EAAaT,EAAWU,GAC5C,IAAIC,EAAmBC,KAyBvB,MAvBoB,iBAATJ,IACTE,EAAUV,EACVA,EAAYS,EACZA,EAAcD,EACdA,EAAO,MAGkB,mBAAhBC,IACTC,EAAUV,EACVA,EAAYS,EACZA,EAAc,WACZ,OAAOE,EAAiBE,MAAMD,KAAME,aAIxCR,GAAa,EAAOG,EAAaE,EAAkBD,GAEnDD,EAAYT,UAAYD,EAAaY,EAAiBX,UAAWA,GACjES,EAAYT,UAAUS,YAAcA,EAEpCA,EAAYM,OAASP,GAAQG,EAAiBI,OAC9CN,EAAYO,OAASL,EAEdF,EAeT,SAASH,EAAaW,EAAKC,EAAQC,GAMjC,IAAK,IAHDC,EACAC,EAEKC,EAAI,EAAGC,GALhBJ,EAAUK,EAAMC,KAAKX,UAAW,IAKCS,OAAQD,EAAIC,EAAQD,IAAK,CACxDD,EAASF,EAAQG,GAEjB,IAAKF,KAAYC,EACVJ,IAAOS,EAAeD,KAAKJ,EAAQD,KACtCF,EAAOE,GAAYC,EAAOD,KCnHlC,SAASO,SDFLtB,EAAyC,aAOzCqB,EAAiBvB,OAAOH,UAAU0B,eAOlCF,EAAQI,MAAM5B,UAAUwB,QA6GXjB,ECxHjBoB,EAAMZ,OAAS,QACfY,EAAMX,OAASb,OAyBfwB,EAAMpB,OAASA,QAEEoB,ICvBFA,EAAMpB,OAAO,SAASsB,EAAQC,EAASC,GAQpDnB,KAAKiB,OAASA,EASdjB,KAAKkB,QAAUA,EACflB,KAAKkB,QAAQD,OAASA,EAStBjB,KAAKmB,QAAUC,QAAQD,KAcvBE,KAAM,SAASC,KAYfC,WAAY,WAMV,OALKvB,KAAKmB,UACRnB,KAAKmB,SAAU,EACfnB,KAAKwB,UAGAxB,KAAKkB,SAkBdO,cAAe,SAASH,GACtB,IAAIL,EAASjB,KAAKiB,OACdS,EAAUT,EAAOS,SAAW,EAC5BC,EAASC,KAAKC,OAAOZ,EAAOa,KAAkB,EAAVJ,GAAgBJ,EAAMS,OAE9D,OAAOH,KAAKI,IAAI,EAAGL,IAgBrBM,UAAW,SAASX,GAClB,IAAIL,EAASjB,KAAKiB,OACdS,EAAUT,EAAOS,QAErB,GAAe,MAAXA,EACF,OAAOA,EAGT,IAAIQ,EAAalC,KAAKyB,cAAcH,GAChCa,EAASP,KAAKC,OAAOZ,EAAOa,KAAQI,EAAaZ,EAAMS,OAAU,GAErE,OAAOH,KAAKI,IAAI,EAAGG,IAWrBX,OAAQ,SAASF,GACXtB,KAAKmB,UACPnB,KAAKoC,SACLpC,KAAKqC,QACLrC,KAAKqB,KAAKC,KAcde,MAAO,aAYPD,OAAQ,iBC9JWE,EAAS3C,QAK5B0B,KAAM,SAASC,GACb,IAAIZ,EAAG6B,EACHtB,EAASjB,KAAKiB,OACdiB,EAAalC,KAAKyB,cAAcH,GAChCa,EAASnC,KAAKiC,UAAUX,GACxBkB,EAAUxC,KAAKkB,QAAQuB,WAAW,MAKtC,IAHAD,EAAQE,UAAYzB,EAAO0B,WAC3BH,EAAQI,YAAc3B,EAAO4B,gBAExBnC,EAAI,EAAGA,EAAIY,EAAMS,MAAOrB,IAC3B,IAAK6B,EAAI,EAAGA,EAAIjB,EAAMS,MAAOQ,IACvBjB,EAAMwB,OAAQP,EAAIjB,EAAMS,MAASrB,IACnC8B,EAAQO,SAAUb,EAAaxB,EAAKyB,EAASD,EAAaK,EAAKJ,EAAQD,EAAYA,IAS3FG,MAAO,WACL,IAAIpB,EAASjB,KAAKiB,OACduB,EAAUxC,KAAKkB,QAAQuB,WAAW,MAClCX,EAAOb,EAAOa,KAElBU,EAAQQ,UAAY,EACpBR,EAAQS,UAAU,EAAG,EAAGnB,EAAMA,GAC9BU,EAAQE,UAAYzB,EAAOiC,WAC3BV,EAAQI,YAAc3B,EAAOkC,gBAC7BX,EAAQO,SAAS,EAAG,EAAGjB,EAAMA,IAM/BM,OAAQ,WACN,IAAIlB,EAAUlB,KAAKkB,QAEnBA,EAAQa,MAAQb,EAAQkC,OAASpD,KAAKiB,OAAOa,UC3CjCf,EAAMpB,OAAO,MAU3B0D,OACE,EAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACxB,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAChE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,QCb9CtC,EAAMpB,OAAO,MAajC2D,QACE,EAAI,EAAI,GAAK,EAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,EAAK,GACzE,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GACzE,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GACzE,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,EAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GACzE,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GACzE,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GACzE,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GACzE,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GACzE,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GACzE,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GACzE,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GACzE,EAAI,EAAI,GAAK,GAAO,EAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,GAAI,EAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,GAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,GAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GAAO,GAAI,GAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,GAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,GAAI,EAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,GAAI,GAAK,GAAO,GAAI,GAAI,GAAK,GAAO,GAAI,GAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,GAAI,GAAK,GAAO,GAAI,GAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,EAAI,GAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GAAO,GAAI,GAAI,GAAK,GACzE,GAAI,EAAI,IAAK,GAAO,GAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GAAO,GAAI,EAAI,GAAK,GACzE,EAAI,EAAI,IAAK,GAAO,GAAI,EAAI,GAAK,GAAO,EAAI,GAAI,GAAK,GAAO,GAAI,GAAI,GAAK,GACzE,EAAI,GAAI,IAAK,GAAO,EAA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,IAAM,EAC1F,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAC1F,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAW5FC,KACE,IAAM,EAAM,EAAM,GAAM,EAAM,GAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAC1F,EAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,EAAM,GAAM,IAC1F,EAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAC1F,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,GAAM,IAAM,IAAM,IAC1F,EAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAC1F,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,GAAM,GAC1F,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAC1F,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAC1F,EAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAC1F,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAC1F,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAC1F,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IAC1F,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAA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"}
\ No newline at end of file
diff --git a/js/vendor/.yarn-integrity b/js/vendor/.yarn-integrity
new file mode 100644
index 0000000..f010195
--- /dev/null
+++ b/js/vendor/.yarn-integrity
@@ -0,0 +1,16 @@
+{
+  "systemParams": "win32-x64-93",
+  "modulesFolders": [
+    "vendor"
+  ],
+  "flags": [],
+  "linkedModules": [],
+  "topLevelPatterns": [
+    "js-qrcode@^1.0.0"
+  ],
+  "lockfileEntries": {
+    "js-qrcode@^1.0.0": "https://registry.yarnpkg.com/js-qrcode/-/js-qrcode-1.0.0.tgz#5694d07033ef00a8c17d0eeda017a756ed460955"
+  },
+  "files": [],
+  "artifacts": {}
+}
\ No newline at end of file
diff --git a/js/yarn.lock b/js/yarn.lock
new file mode 100644
index 0000000..fb57ccd
--- /dev/null
+++ b/js/yarn.lock
@@ -0,0 +1,4 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+