diff --git a/package-lock.json b/package-lock.json index be475cf..a47437b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4266,7 +4266,8 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -4284,11 +4285,13 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4301,15 +4304,18 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "concat-map": { "version": "0.0.1", - "bundled": true + "bundled": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -4412,7 +4418,8 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -4422,6 +4429,7 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -4434,17 +4442,20 @@ "minimatch": { "version": "3.0.4", "bundled": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -4461,6 +4472,7 @@ "mkdirp": { "version": "0.5.1", "bundled": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -4533,7 +4545,8 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -4543,6 +4556,7 @@ "once": { "version": "1.4.0", "bundled": true, + "optional": true, "requires": { "wrappy": "1" } @@ -4618,7 +4632,8 @@ }, "safe-buffer": { "version": "5.1.1", - "bundled": true + "bundled": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -4648,6 +4663,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -4665,6 +4681,7 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -4703,11 +4720,13 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true }, "yallist": { "version": "3.0.2", - "bundled": true + "bundled": true, + "optional": true } } }, diff --git a/public/index.html b/public/index.html index a4b2255..e5bfce8 100644 --- a/public/index.html +++ b/public/index.html @@ -7,7 +7,7 @@ - POA Network Governance DApp + POA Governance DApp diff --git a/src/App.js b/src/App.js index 7f5cbf6..fc8024a 100644 --- a/src/App.js +++ b/src/App.js @@ -5,7 +5,7 @@ import { Route, Redirect } from 'react-router-dom' import { constants } from './utils/constants' import { getNetworkBranch } from './utils/utils' import { inject, observer } from 'mobx-react' -import { messages } from './utils/messages' +import messages from './utils/messages' import './assets/stylesheets/index.css' @@ -41,16 +41,29 @@ class App extends Component { onNewBallotRender = () => { const { commonStore, contractsStore } = this.props - if (!contractsStore.web3Instance) { - if (!commonStore.loading) { + if (!commonStore.loading) { + if (!contractsStore.injectedWeb3) { + commonStore.hideLoading() swal({ title: 'Error', html: messages.NO_METAMASK_MSG, - icon: 'error', type: 'error' }) + } else if (!contractsStore.networkMatch) { + commonStore.hideLoading() + swal({ + title: 'Warning!', + html: messages.networkMatchError(contractsStore.netId), + type: 'warning' + }) + } else if (contractsStore.votingKey && !contractsStore.isValidVotingKey) { + commonStore.hideLoading() + swal({ + title: 'Warning!', + html: messages.invalidVotingKeyMsg(contractsStore.votingKey), + type: 'warning' + }) } - return null } return } @@ -60,8 +73,7 @@ class App extends Component { } onSearch = e => { - const { commonStore } = this.props - commonStore.setSearchTerm(e.target.value.toLowerCase()) + this.setSearchTerm(e.target.value) } hideSearch = () => { @@ -85,13 +97,28 @@ class App extends Component { return 'All' } + setSearchTerm = term => { + const { commonStore } = this.props + commonStore.setSearchTerm(term.toLowerCase()) + if (this.refs.searchBar) { + this.refs.searchBar.setSearchTerm(term) + } + } + + onNetworkChange = e => { + this.setSearchTerm('') + this.props.onNetworkChange(e) + } + isNewBallotPage() { return `${constants.rootPath}/new` === this.props.location.pathname } render() { const { commonStore, contractsStore } = this.props - const networkBranch = this.getVotingNetworkBranch() + const networkBranch = commonStore.loadingNetworkBranch + ? commonStore.loadingNetworkBranch + : this.getVotingNetworkBranch() return networkBranch ? (
- {this.hideSearch() ? null : } + {this.hideSearch() ? null : ( + + )}
.Select-control{background-color:#f9f9f9}.Select.is-disabled>.Select-control:hover{box-shadow:none}.Select.is-searchable.is-open>.Select-control{cursor:text}.Select.is-searchable.is-focused:not(.is-open)>.Select-control{cursor:text}.Select.is-open>.Select-control{border-bottom-right-radius:0;border-bottom-left-radius:0;background:#fff}.Select.is-open>.Select-control .Select-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.Select.is-focused>.Select-control{background:#fff}.Select.is-focused:not(.is-open)>.Select-control{border-color:#cbcbcb #d7d7d7 #d7d7d7;box-shadow:none}.Select.has-value.is-clearable.Select--single>.Select-control .Select-value{padding-right:44px}.Select.has-value.Select--single>.Select-control .Select-value .Select-value-label,.Select.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value .Select-value-label{color:#333}.Select.has-value.Select--single>.Select-control .Select-value a.Select-value-label,.Select.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label{cursor:pointer;text-decoration:none}.Select.has-value.Select--single>.Select-control .Select-value a.Select-value-label:hover,.Select.has-value.Select--single>.Select-control .Select-value a.Select-value-label:focus,.Select.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label:hover,.Select.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label:focus{color:#8e959d;outline:none;text-decoration:underline}.Select.has-value.Select--single>.Select-control .Select-value a.Select-value-label:focus,.Select.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label:focus{background:#fff}.Select.has-value.is-pseudo-focused .Select-input{opacity:0}.Select.is-open .Select-arrow,.Select .Select-arrow-zone:hover>.Select-arrow{border-top-color:#666}.Select.Select--rtl{direction:rtl;text-align:right}.Select-control{background-color:#fff;border-collapse:separate;border-color:#f1f1f1 #e4e4e4 #cbcbcb;border-radius:3px;border-spacing:0;border:1px solid #e4e4e4;color:#333;cursor:default;display:table;height:40px;outline:none;overflow:hidden;position:relative;width:100%}.Select-control:hover{box-shadow:none}.Select-control .Select-input:focus{outline:none;background:#fff}.Select-placeholder,.Select--single>.Select-control .Select-value{bottom:0;color:#333;left:0;line-height:38px;padding-left:15px;padding-right:15px;position:absolute;right:0;top:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Select-input{height:38px;padding-left:15px;padding-right:15px;vertical-align:middle}.Select-input>input{background:none transparent;border:0 none;box-shadow:none;cursor:default;display:inline-block;font-family:inherit;font-size:inherit;margin:0;outline:none;line-height:17px;padding:10px 0 14px;-webkit-appearance:none}.is-focused .Select-input>input{cursor:text}.Select-control:not(.is-searchable)>.Select-input{outline:none}.Select-loading-zone{cursor:pointer;display:table-cell;position:relative;text-align:center;vertical-align:middle;width:16px}.Select-loading{-webkit-animation:Select-animation-spin 400ms infinite linear;-o-animation:Select-animation-spin 400ms infinite linear;animation:Select-animation-spin 400ms infinite linear;width:16px;height:16px;box-sizing:border-box;border-radius:50%;border:2px solid #e4e4e4;border-right-color:#333;display:inline-block;position:relative;vertical-align:middle}.Select-clear-zone{-webkit-animation:Select-animation-fadeIn 200ms;-o-animation:Select-animation-fadeIn 200ms;animation:Select-animation-fadeIn 200ms;color:#999;cursor:pointer;display:table-cell;position:relative;text-align:center;vertical-align:middle;width:19px}.Select-clear-zone:hover{color:#D0021B}.Select-clear{display:inline-block;font-size:20px;line-height:1}.Select--multi .Select-clear-zone{width:19px}.Select--multi .Select-multi-value-wrapper{display:inline-block}.Select .Select-aria-only{position:absolute;display:inline-block;height:1px;width:1px;margin:-1px;clip:rect(0, 0, 0, 0);overflow:hidden;float:left}.Select-arrow-zone{cursor:pointer;display:table-cell;position:relative;text-align:center;vertical-align:middle;width:25px;padding-right:5px}.Select--rtl .Select-arrow-zone{padding-right:0;padding-left:5px}.Select-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px;display:inline-block;height:0;width:0;position:relative}@-webkit-keyframes Select-animation-fadeIn{from{opacity:0}to{opacity:1}}@keyframes Select-animation-fadeIn{from{opacity:0}to{opacity:1}}.Select-menu-outer{border-bottom-right-radius:3px;border-bottom-left-radius:3px;background-color:#fff;border:1px solid #e4e4e4;border-top-color:#f2f2f2;box-shadow:none;box-sizing:border-box;margin-top:-1px;max-height:200px;position:absolute;top:100%;width:100%;z-index:1000;-webkit-overflow-scrolling:touch}.Select-menu{max-height:198px;overflow-y:auto}.Select-option{box-sizing:border-box;background-color:#fff;color:#666;cursor:pointer;display:block;padding:8px 15px}.Select-option:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.Select-option.is-selected{background-color:#f1f1f1;color:#000}.Select-option.is-focused{background-color:#e4e4e4;color:#333}.Select-option.is-disabled{color:#fff;cursor:default}.Select-noresults{box-sizing:border-box;color:#999;cursor:default;display:block;padding:8px 15px}.Select--multi .Select-input{vertical-align:middle;margin-left:15px;padding:0}.Select--multi.Select--rtl .Select-input{margin-left:0;margin-right:15px}.Select--multi.has-value .Select-input{margin-left:5px}.Select--multi .Select-value{background-color:#f2f9fc;border-radius:3px;border:1px solid #e5eef9;color:#000;display:inline-block;font-size:.9em;margin-left:5px;margin-top:5px;vertical-align:top}.Select--multi .Select-value-icon,.Select--multi .Select-value-label{display:inline-block;vertical-align:middle}.Select--multi .Select-value-label{border-bottom-right-radius:3px;border-top-right-radius:3px;cursor:default;padding:2px 5px}.Select--multi a.Select-value-label{color:#000;cursor:pointer;text-decoration:none}.Select--multi a.Select-value-label:hover{text-decoration:underline}.Select--multi .Select-value-icon{cursor:pointer;border-bottom-left-radius:3px;border-top-left-radius:3px;border-right:1px solid #e5eef9;padding:1px 5px 3px}.Select--multi .Select-value-icon:hover,.Select--multi .Select-value-icon:focus{background-color:#cbcbcb;color:#cbcbcb}.Select--multi .Select-value-icon:active{background-color:#e5eef9}.Select--multi.Select--rtl .Select-value{margin-left:0;margin-right:5px}.Select--multi.Select--rtl .Select-value-icon{border-right:none;border-left:1px solid #e5eef9}.Select--multi.is-disabled .Select-value{background-color:#fcfcfc;border:1px solid #e3e3e3;color:#999}.Select--multi.is-disabled .Select-value-icon{cursor:not-allowed;border-right:1px solid #e3e3e3}.Select--multi.is-disabled .Select-value-icon:hover,.Select--multi.is-disabled .Select-value-icon:focus,.Select--multi.is-disabled .Select-value-icon:active{background-color:#fcfcfc}@keyframes Select-animation-spin{to{transform:rotate(1turn)}}@-webkit-keyframes Select-animation-spin{to{-webkit-transform:rotate(1turn)}}*{box-sizing:border-box}/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.hidden{display:none}.display-block{display:block}.display-inline{display:inline}input[type='radio']{display:none}body{-webkit-font-smoothing:antialiased;color:#333;font-family:"Nunito", sans-serif;font-size:14px}html,body,#root,html.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown),body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){height:100%}.clearfix::after{content:"";clear:both;display:table}.lo-App{align-items:center;display:flex;flex-direction:column;height:100%;padding-top:120px;width:100%}.lo-App.lo-App-no-search-bar{padding-top:70px}.lo-App_Content{flex-grow:1;max-width:100%;padding-bottom:30px;position:relative;z-index:1}.lo-App_Content:before{background-color:rgba(92,52,162,0.5);bottom:0;content:'';display:none;left:0;position:fixed;right:0;top:0;z-index:1234}.lo-App_Content.lo-App_Content-mobile-menu-open:before{display:block}.lo-App_Content.lo-App_Content-core:before{background-color:rgba(92,52,162,0.5)}.lo-App_Content.lo-App_Content-sokol:before{background-color:rgba(106,201,185,0.5)}.lo-App_Content.lo-App_Content-dai:before{background-color:rgba(21,187,166,0.5)}.lo-App_Content.lo-App_Content-kovan:before{background-color:rgba(40,172,164,0.5)}.sw-BallotAbout{margin-top:-8px}.sw-BallotCard{background-color:#fff;border-radius:6px;border:1px solid #e4e4e4;margin-bottom:30px;padding:30px;transition:0.15s box-shadow}@media screen and (max-width: 768px){.sw-BallotCard{margin-bottom:15px;padding:15px}}.color-primary{color:#5c34a2}.sokol .color-primary{color:#6ac9b9}.kovan .color-primary{color:#28aca4}.color-danger{color:#f21b57}.sokol .color-danger{color:#f24c67}.kovan .color-danger{color:#f24c67}.color-success{color:#60db97}.sokol .color-success{color:#6ac9b9}.kovan .color-success{color:#28aca4}.blc-BallotDataPair{box-sizing:border-box;display:table-row;min-width:100%;padding-right:0;position:relative;vertical-align:top}@media (min-width: 768px){.blc-BallotDataPair{display:inline-block;min-width:0;padding-right:12px}}.blc-BallotDataPair:last-child{padding-right:0}.blc-BallotDataPair.blc-BallotDataPair-name{width:12%;word-break:break-word}.blc-BallotDataPair.blc-BallotDataPair-action{width:8%}.blc-BallotDataPair.blc-BallotDataPair-type{width:8%}.blc-BallotDataPair.blc-BallotDataPair-proposal{width:30%}.blc-BallotDataPair.blc-BallotDataPair-key{width:26%;word-break:break-all}.blc-BallotDataPair.blc-BallotDataPair-key-wide{width:50%;word-break:break-all}.blc-BallotDataPair.blc-BallotDataPair-proposed-receiver{width:45%;word-break:break-all}.blc-BallotDataPair.blc-BallotDataPair-funds-amount{width:23%;word-break:break-all}.blc-BallotDataPair.blc-BallotDataPair-proposed-min-threshold{width:30%;word-break:break-all}.blc-BallotDataPair.blc-BallotDataPair-contract-type{width:25%;word-break:break-all}.blc-BallotDataPair.blc-BallotDataPair-proposed-address{width:30%;word-break:break-all}.blc-BallotDataPair.blc-BallotDataPair-time{width:20%}.blc-BallotDataPair_Title{color:#777;font-size:13px;font-weight:400;line-height:28px;margin:0;text-align:left}.blc-BallotDataPair_Value{color:#333;font-size:14px;font-weight:400;line-height:28px;margin:0;text-align:left}.blc-BallotDataPair_Value.blc-BallotDataPair_Value-action{text-transform:capitalize}.blc-BallotDataPair_Value.blc-BallotDataPair_Value-type{text-transform:capitalize}.frm-BallotEmissionFundsMetadata{margin-bottom:30px}.frm-BallotEmissionFundsMetadata_Row{margin-bottom:30px;display:grid;grid-row-gap:30px;grid-template-columns:1fr}.frm-BallotEmissionFundsMetadata_Row:last-child{margin-bottom:0}@media (min-width: 1280px){.frm-BallotEmissionFundsMetadata_Row{grid-column-gap:30px;grid-template-columns:1fr 1fr}}.bc-BallotFooter{display:flex;flex-direction:column}@media (min-width: 768px){.bc-BallotFooter{align-items:center;flex-direction:row}}.bc-BallotFooter_Description{color:#777;font-size:14px;font-stretch:normal;font-style:normal;font-weight:normal;line-height:18px;max-width:340px}@media (min-width: 768px){.bc-BallotFooter_Description{padding-left:15px}}.bc-BallotFooter_Voted{box-sizing:border-box;color:#333;display:inline-block;font-size:14px;font-weight:700;line-height:1.2;margin-left:auto;padding:0 13px;text-transform:uppercase}.bc-BallotFooter_ID{color:#333;font-size:14px;font-weight:normal;line-height:1.1;margin-top:10px}@media (min-width: 768px){.bc-BallotFooter_ID{margin-left:auto;margin-top:0}}.bc-BallotFooter_voteID{font-weight:700}.bc-BallotInfoContainer{background-color:#f8f8f8;margin-bottom:30px;margin-left:-30px;margin-right:-30px;padding-bottom:30px;padding-left:30px;padding-right:30px;padding-top:30px}@media screen and (max-width: 768px){.bc-BallotInfoContainer{margin-left:-15px;margin-right:-15px;padding-left:15px;padding-right:15px}}.bc-BallotInfoContainer_Info{background-position:0 2px;background-repeat:no-repeat;color:#333333;font-size:14px;font-weight:normal;letter-spacing:normal;line-height:1.71;margin-bottom:20px;max-width:100%;min-height:32px;padding-left:30px;text-align:left;word-break:break-word}.bc-BallotInfoContainer_Info:last-child{margin-bottom:0}.bc-BallotInfoContainer_Info.bc-BallotInfoContainer_Info-minimum{background-image:url("../images/BallotInfoContainer/min.svg");background-size:18px 18px}.bc-BallotInfoContainer_Info.bc-BallotInfoContainer_Info-details{background-image:url("../images/BallotInfoContainer/info.svg");background-size:10px 18px;position:relative}.bc-BallotInfoContainer_ToggleShow{color:#5c34a2;cursor:pointer;display:inline-block;margin-left:5px}.bc-BallotInfoContainer_ToggleShow.bc-BallotInfoContainer_ToggleShow-core{color:#5c34a2}.bc-BallotInfoContainer_ToggleShow.bc-BallotInfoContainer_ToggleShow-sokol{color:#6ac9b9}.bc-BallotInfoContainer_ToggleShow.bc-BallotInfoContainer_ToggleShow-dai{color:#15bba6}.bc-BallotInfoContainer_ToggleShow.bc-BallotInfoContainer_ToggleShow-kovan{color:#28aca4}.frm-BallotKeysMetadata{margin-bottom:30px}.frm-BallotKeysMetadata_Row{margin-bottom:30px;display:grid;grid-row-gap:30px;grid-template-columns:1fr}.frm-BallotKeysMetadata_Row:last-child{margin-bottom:0}@media (min-width: 1280px){.frm-BallotKeysMetadata_Row{grid-column-gap:30px;grid-template-columns:1fr 1fr}}.frm-BallotMinThresholdMetadata{margin-bottom:30px}.frm-BallotMinThresholdMetadata_Row{margin-bottom:30px;display:grid;grid-row-gap:30px;grid-template-columns:1fr}.frm-BallotMinThresholdMetadata_Row:last-child{margin-bottom:0}@media (min-width: 1280px){.frm-BallotMinThresholdMetadata_Row{grid-column-gap:30px;grid-template-columns:1fr 1fr}}.frm-BallotProxyMetadata{margin-bottom:30px}.frm-BallotProxyMetadata_Row{margin-bottom:30px;display:grid;grid-row-gap:30px;grid-template-columns:1fr}.frm-BallotProxyMetadata_Row:last-child{margin-bottom:0}@media (min-width: 1280px){.frm-BallotProxyMetadata_Row{grid-column-gap:30px;grid-template-columns:1fr 1fr}}.sw-Ballots{max-width:100%;padding-left:10px;padding-right:10px;width:1000px}@media (min-width: 768px){.sw-Ballots{padding-left:20px;padding-right:20px}}@media (min-width: 1024px){.sw-Ballots{padding-left:20px;padding-right:20px}}.ld-BaseLoader{align-items:center;background-color:rgba(255,255,255,0.8);bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000000}.sw-ButtonAddBallot{align-items:center;border:none;border-radius:3px;color:#fff;cursor:pointer;display:flex;font-size:14px;font-weight:700;height:44px;justify-content:space-between;line-height:44px;opacity:1;outline:none;padding:0 15px;text-decoration:none;transition:0.15s background-color}.sw-ButtonAddBallot.sw-ButtonAddBallot-core{background-color:#5c34a2;color:#fff}.sw-ButtonAddBallot.sw-ButtonAddBallot-core:hover{background-color:#46287b}.sw-ButtonAddBallot.sw-ButtonAddBallot-sokol{background-color:#6ac9b9;color:#fff}.sw-ButtonAddBallot.sw-ButtonAddBallot-sokol:hover{background-color:#57c2b0}.sw-ButtonAddBallot.sw-ButtonAddBallot-dai{background-color:#15bba6;color:#fff}.sw-ButtonAddBallot.sw-ButtonAddBallot-dai:hover{background-color:#18d2ba}.sw-ButtonAddBallot.sw-ButtonAddBallot-kovan{background-color:#28aca4;color:#fff}.sw-ButtonAddBallot.sw-ButtonAddBallot-kovan:hover{background-color:#239790}.sw-ButtonFinalize{align-items:center;border-radius:5px;border:0;color:#fff;cursor:pointer;display:flex;font-size:14px;font-weight:700;height:42px;justify-content:space-between;line-height:42px;outline:none;padding:0 15px;text-decoration:none;text-transform:capitalize;transition:0.15s background-color}.sw-ButtonFinalize.sw-ButtonFinalize-core{background-color:#5c34a2}.sw-ButtonFinalize.sw-ButtonFinalize-core:active,.sw-ButtonFinalize.sw-ButtonFinalize-core:hover{background-color:#46287b}.sw-ButtonFinalize.sw-ButtonFinalize-sokol{background-color:#6ac9b9}.sw-ButtonFinalize.sw-ButtonFinalize-sokol:active,.sw-ButtonFinalize.sw-ButtonFinalize-sokol:hover{background-color:#45bba7}.sw-ButtonFinalize.sw-ButtonFinalize-dai{background-color:#15bba6}.sw-ButtonFinalize.sw-ButtonFinalize-dai:active,.sw-ButtonFinalize.sw-ButtonFinalize-dai:hover{background-color:#108d7d}.sw-ButtonFinalize.sw-ButtonFinalize-kovan{background-color:#28aca4}.sw-ButtonFinalize.sw-ButtonFinalize-kovan:active,.sw-ButtonFinalize.sw-ButtonFinalize-kovan:hover{background-color:#1e837d}.sw-ButtonFinalize.sw-ButtonFinalize-cancel,.sw-ButtonFinalize.sw-ButtonFinalize-cancel:active,.sw-ButtonFinalize.sw-ButtonFinalize-cancel:hover{background-color:#f21b57 !important}.sw-ButtonFinalize.sw-ButtonFinalize-disabled,.sw-ButtonFinalize.sw-ButtonFinalize-disabled:active,.sw-ButtonFinalize.sw-ButtonFinalize-disabled:hover{cursor:default;background-color:#f0f0f0 !important;color:#333}.bc-BallotFooter .sw-ButtonFinalize{margin-top:30px;order:3;width:100%}@media (min-width: 768px){.bc-BallotFooter .sw-ButtonFinalize{margin-top:0;order:0;width:auto}}.sw-ButtonFinalize_Text{margin-right:50px}.sw-ButtonLoadMore{align-items:center;background-color:transparent;background-size:14px 14px;border-radius:5px;border:2px solid #5c34a2;color:#5c34a2;cursor:pointer;display:flex;font-size:16px;font-weight:400;height:42px;justify-content:center;outline:none;padding:0 15px;text-decoration:none;width:100%}.sw-ButtonLoadMore.sw-ButtonLoadMore-core{border-color:#5c34a2}.sw-ButtonLoadMore.sw-ButtonLoadMore-sokol{border-color:#6ac9b9}.sw-ButtonLoadMore.sw-ButtonLoadMore-dai{border-color:#173250}.sw-ButtonLoadMore.sw-ButtonLoadMore-kovan{border-color:#28aca4}@media (min-width: 768px){.sw-ButtonLoadMore{width:auto}}.sw-ButtonLoadMore_Text{margin-right:15px}.sw-ButtonLoadMore:hover .sw-ButtonLoadMore_Text{opacity:0.7}.sw-ButtonLoadMore-core .sw-ButtonLoadMore_Text{color:#5c34a2}.sw-ButtonLoadMore-sokol .sw-ButtonLoadMore_Text{color:#6ac9b9}.sw-ButtonLoadMore-dai .sw-ButtonLoadMore_Text{color:#173250}.sw-ButtonLoadMore-kovan .sw-ButtonLoadMore_Text{color:#28aca4}.sw-ButtonNewBallot{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none;align-items:center;border-radius:3px;color:#fff;cursor:pointer;display:flex;font-size:14px;font-weight:700;height:36px;line-height:36px;opacity:1;outline:none;padding:0 15px;text-decoration:none;transition:0.15s background-color}.sw-ButtonNewBallot.sw-ButtonNewBallot-core{background-color:#60db97;box-shadow:0 5px 10px 0 rgba(92,52,162,0.3);color:#fff}.sw-ButtonNewBallot.sw-ButtonNewBallot-core:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-core:hover{background-color:#36d27c}.sw-ButtonNewBallot.sw-ButtonNewBallot-core.active,.sw-ButtonNewBallot.sw-ButtonNewBallot-core.active:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-core.active:hover{background-color:#60db97}.sw-ButtonNewBallot.sw-ButtonNewBallot-sokol{background-color:#fff;box-shadow:0 5px 10px 0 rgba(106,201,185,0.3);color:#6ac9b9}.sw-ButtonNewBallot.sw-ButtonNewBallot-sokol:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-sokol:hover{background-color:#f2f2f2}.sw-ButtonNewBallot.sw-ButtonNewBallot-sokol.active,.sw-ButtonNewBallot.sw-ButtonNewBallot-sokol.active:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-sokol.active:hover{background-color:#fff}.sw-ButtonNewBallot.sw-ButtonNewBallot-dai{background-color:#15bba6;box-shadow:0 5px 10px 0 rgba(21,187,166,0.3);color:#fff}.sw-ButtonNewBallot.sw-ButtonNewBallot-dai:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-dai:hover{background-color:#18d2ba}.sw-ButtonNewBallot.sw-ButtonNewBallot-dai.active,.sw-ButtonNewBallot.sw-ButtonNewBallot-dai.active:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-dai.active:hover{background-color:#15bba6}.sw-ButtonNewBallot.sw-ButtonNewBallot-kovan{background-color:#fff;box-shadow:0 5px 10px 0 rgba(40,172,164,0.3);color:#28aca4}.sw-ButtonNewBallot.sw-ButtonNewBallot-kovan:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-kovan:hover{background-color:#f2f2f2}.sw-ButtonNewBallot.sw-ButtonNewBallot-kovan.active,.sw-ButtonNewBallot.sw-ButtonNewBallot-kovan.active:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-kovan.active:hover{background-color:#fff}.sw-ButtonNewBallot.active{cursor:pointer;pointer-events:none}.sw-Header_Links .sw-ButtonNewBallot{margin-left:40px}.hd-MobileMenuLinks .sw-ButtonNewBallot{box-shadow:none;height:50px;justify-content:center;margin:0}.vt-ButtonVoting{border-radius:5px;border:0;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-size:14px;font-weight:700;line-height:42px;margin-right:20px;min-width:55px;outline:none;padding:0 15px;text-decoration:none;text-transform:capitalize;transition:0.15s background-color linear}.vt-ButtonVoting.vt-ButtonVoting-sm{min-width:55px}.vt-ButtonVoting.vt-ButtonVoting-md{min-width:78px}@media (min-width: 1024px){.vt-ButtonVoting.vt-ButtonVoting-left{margin-left:0;margin-right:20px}.vt-ButtonVoting.vt-ButtonVoting-right{margin-left:20px;margin-right:0;order:2}}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-core{background-color:#f21b57;box-shadow:0 5px 10px 0 rgba(242,27,87,0.3)}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-core:hover{background-color:#ce0c42}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-core{background-color:#50bbda;box-shadow:0 5px 10px 0 rgba(80,187,218,0.3)}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-core:hover{background-color:#2ba8cc}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-core{background-color:#60db97;box-shadow:0 5px 10px 0 rgba(96,219,151,0.3)}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-core:hover{background-color:#36d27c}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-sokol{background-color:#f24c67;box-shadow:0 5px 10px 0 rgba(242,76,103,0.3)}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-sokol:hover{background-color:#ef1c3f}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-sokol{background-color:#50bbda;box-shadow:0 5px 10px 0 rgba(80,187,218,0.3)}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-sokol:hover{background-color:#2ba8cc}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-sokol{background-color:#6ac9b9;box-shadow:0 5px 10px 0 rgba(106,201,185,0.3)}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-sokol:hover{background-color:#45bba7}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-dai{background-color:#f21b57;box-shadow:0 5px 10px 0 rgba(242,27,87,0.3)}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-dai:hover{background-color:#ce0c42}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-dai{background-color:#50bbda;box-shadow:0 5px 10px 0 rgba(80,187,218,0.3)}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-dai:hover{background-color:#2ba8cc}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-dai{background-color:#15bba6;box-shadow:0 5px 10px 0 rgba(21,187,166,0.3)}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-dai:hover{background-color:#108d7d}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-kovan{background-color:#f24c67;box-shadow:0 5px 10px 0 rgba(242,76,103,0.3)}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-kovan:hover{background-color:#ef1c3f}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-kovan{background-color:#50bbda;box-shadow:0 5px 10px 0 rgba(80,187,218,0.3)}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-kovan:hover{background-color:#2ba8cc}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-kovan{background-color:#6ac9b9;box-shadow:0 5px 10px 0 rgba(106,201,185,0.3)}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-kovan:hover{background-color:#45bba7}.sw-Footer{align-items:center;background-color:#5c34a2;color:#fff;display:flex;flex-shrink:0;justify-content:center;min-height:60px;overflow:hidden;padding:16px 0;transition:background-color 0.25s ease-out;width:100%}.sw-Footer.sw-Footer-core{background-color:#5c34a2}.sw-Footer.sw-Footer-sokol{background-color:#6ac9b9}.sw-Footer.sw-Footer-dai{background-color:#173250}.sw-Footer.sw-Footer-kovan{background-color:#28aca4}.sw-Footer_Content{max-width:100%;padding-left:10px;padding-right:10px;width:1000px;align-items:center;display:flex;flex-direction:column;justify-content:center}@media (min-width: 768px){.sw-Footer_Content{padding-left:20px;padding-right:20px}}@media (min-width: 1024px){.sw-Footer_Content{padding-left:20px;padding-right:20px}}@media (min-width: 768px){.sw-Footer_Content{flex-direction:row;justify-content:space-between}}.sw-Footer_Text{color:#fff;flex-grow:1;font-size:11px;font-weight:300;line-height:1.2;margin:0;padding:15px 0 0 0;text-align:center}@media (min-width: 768px){.sw-Footer_Text{padding-top:0}}.sw-Footer-dai .sw-Footer_Text{color:#fff}.frm-FormAutocomplete input[type="text"]{transition:0.25s background-color, 0.25s border-color;background-color:#fff;border-radius:3px;border:1px solid #e4e4e4;box-sizing:border-box;color:#202d3c;display:block;font-size:14px;outline:none;padding:0 10px;width:100%;height:40px}.frm-FormAutocomplete input[type="text"]:hover,.frm-FormAutocomplete input[type="text"]:active,.frm-FormAutocomplete input[type="text"]:focus{border-color:#cbcbcb;color:#202d3c}.frm-FormAutocomplete input[type="text"][disabled],.frm-FormAutocomplete input[type="text"][disabled]:hover,.frm-FormAutocomplete input[type="text"][disabled]:active,.frm-FormAutocomplete input[type="text"][disabled]:focus,.frm-FormAutocomplete input[type="text"].disabled,.frm-FormAutocomplete input[type="text"].disabled:hover,.frm-FormAutocomplete input[type="text"].disabled:active,.frm-FormAutocomplete input[type="text"].disabled:focus{background-color:#f9f9f9;border-color:#e4e4e4;color:#202d3c}.frm-FormFieldTitle{color:#333;display:inline-block;font-size:14px;line-height:1.2;margin-bottom:15px}.frm-FormHint{color:#777;font-size:13px;font-weight:400;line-height:1.38;margin:0;padding-top:12px;word-break:break-all;word-break:break-word}.frm-FormHint.frm-FormHint-core a{color:#5c34a2}.frm-FormHint.frm-FormHint-sokol a{color:#6ac9b9}.frm-FormHint.frm-FormHint-dai a{color:#15bba6}.frm-FormHint.frm-FormHint-kovan a{color:#28aca4}.frm-FormInput_Field{transition:0.25s background-color, 0.25s border-color;background-color:#fff;border-radius:3px;border:1px solid #e4e4e4;box-sizing:border-box;color:#202d3c;display:block;font-size:14px;outline:none;padding:0 10px;width:100%;height:40px}.frm-FormInput_Field:hover,.frm-FormInput_Field:active,.frm-FormInput_Field:focus{border-color:#cbcbcb;color:#202d3c}.frm-FormInput_Field[disabled],.frm-FormInput_Field[disabled]:hover,.frm-FormInput_Field[disabled]:active,.frm-FormInput_Field[disabled]:focus,.frm-FormInput_Field.disabled,.frm-FormInput_Field.disabled:hover,.frm-FormInput_Field.disabled:active,.frm-FormInput_Field.disabled:focus{background-color:#f9f9f9;border-color:#e4e4e4;color:#202d3c}.frm-FormSelect_Select select{transition:0.25s background-color, 0.25s border-color;background-color:#fff;border-radius:3px;border:1px solid #e4e4e4;box-sizing:border-box;color:#202d3c;display:block;font-size:14px;outline:none;padding:0 10px;width:100%;appearance:none;background-image:url("../images/Base/select.png");background-position:right 13px center;background-repeat:no-repeat;height:40px;padding-right:30px}.frm-FormSelect_Select select:hover,.frm-FormSelect_Select select:active,.frm-FormSelect_Select select:focus{border-color:#cbcbcb;color:#202d3c}.frm-FormSelect_Select select[disabled],.frm-FormSelect_Select select[disabled]:hover,.frm-FormSelect_Select select[disabled]:active,.frm-FormSelect_Select select[disabled]:focus,.frm-FormSelect_Select select.disabled,.frm-FormSelect_Select select.disabled:hover,.frm-FormSelect_Select select.disabled:active,.frm-FormSelect_Select select.disabled:focus{background-color:#f9f9f9;border-color:#e4e4e4;color:#202d3c}@media (min--moz-device-pixel-ratio: 1.3), (-o-min-device-pixel-ratio: 2.6 / 2), (-webkit-min-device-pixel-ratio: 1.3), (min-device-pixel-ratio: 1.3), (min-resolution: 1.3dppx){.frm-FormSelect_Select select{background-image:url("../images/Base/select@2x.png");background-size:8px 4px}}.frm-FormTextarea_Field{transition:0.25s background-color, 0.25s border-color;background-color:#fff;border-radius:3px;border:1px solid #e4e4e4;box-sizing:border-box;color:#202d3c;display:block;font-size:14px;outline:none;padding:0 10px;width:100%;height:70px;padding-bottom:10px;padding-top:10px;resize:none;width:100%}.frm-FormTextarea_Field:hover,.frm-FormTextarea_Field:active,.frm-FormTextarea_Field:focus{border-color:#cbcbcb;color:#202d3c}.frm-FormTextarea_Field[disabled],.frm-FormTextarea_Field[disabled]:hover,.frm-FormTextarea_Field[disabled]:active,.frm-FormTextarea_Field[disabled]:focus,.frm-FormTextarea_Field.disabled,.frm-FormTextarea_Field.disabled:hover,.frm-FormTextarea_Field.disabled:active,.frm-FormTextarea_Field.disabled:focus{background-color:#f9f9f9;border-color:#e4e4e4;color:#202d3c}.sw-Header{align-items:center;background-color:#5c34a2;color:#fff;display:flex;flex-shrink:0;height:70px;justify-content:center;left:0;overflow:hidden;position:fixed;right:0;top:0;transition:background-color 0.25s ease-out;width:100%;z-index:124}.sw-Header.sw-Header-menu-open{flex-direction:column;height:auto}.sw-Header.sw-Header-core{background-color:#5c34a2}.sw-Header.sw-Header-sokol{background-color:#6ac9b9}.sw-Header.sw-Header-dai{background-color:#173250}.sw-Header.sw-Header-kovan{background-color:#28aca4}.sw-Header_Content{max-width:100%;padding-left:10px;padding-right:10px;width:1000px;align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;min-height:70px}@media (min-width: 768px){.sw-Header_Content{padding-left:20px;padding-right:20px}}@media (min-width: 1024px){.sw-Header_Content{padding-left:20px;padding-right:20px}}.sw-Header_Links{align-items:center;display:none;height:70px;justify-content:flex-end;margin-left:auto;width:auto}@media (min-width: 768px){.sw-Header_Links{display:flex}}.nl-IconActive_Path.nl-IconActive_Path-core{fill:#60db97}.nl-IconActive_Path.nl-IconActive_Path-sokol{fill:#fff}.nl-IconActive_Path.nl-IconActive_Path-dai{fill:#15bba6}.nl-IconActive_Path.nl-IconActive_Path-kovan{fill:#fff}.sw-ButtonNewBallot .sw-IconAdd{margin-left:10px}.sw-ButtonAddBallot .sw-IconAdd{margin-left:10px}.sw-ButtonNewBallot .sw-IconAdd_Path.sw-IconAdd_Path-core{fill:#fff}.sw-ButtonNewBallot .sw-IconAdd_Path.sw-IconAdd_Path-sokol{fill:#6ac9b9}.sw-ButtonNewBallot .sw-IconAdd_Path.sw-IconAdd_Path-dai{fill:#fff}.sw-ButtonNewBallot .sw-IconAdd_Path.sw-IconAdd_Path-kovan{fill:#28aca4}.sw-ButtonAddBallot .sw-IconAdd_Path.sw-IconAdd_Path-core{fill:#fff}.sw-ButtonAddBallot .sw-IconAdd_Path.sw-IconAdd_Path-sokol{fill:#fff}.sw-ButtonAddBallot .sw-IconAdd_Path.sw-IconAdd_Path-dai{fill:#fff}.sw-ButtonAddBallot .sw-IconAdd_Path.sw-IconAdd_Path-kovan{fill:#fff}.nl-IconAll_Path.nl-IconAll_Path-core{fill:#60db97}.nl-IconAll_Path.nl-IconAll_Path-sokol{fill:#fff}.nl-IconAll_Path.nl-IconAll_Path-dai{fill:#15bba6}.nl-IconAll_Path.nl-IconAll_Path-kovan{fill:#fff}.sw-IconFinalize_Path.sw-IconFinalize_Path-core{fill:#fff}.sw-IconFinalize_Path.sw-IconFinalize_Path-sokol{fill:#fff}.sw-IconFinalize_Path.sw-IconFinalize_Path-dai{fill:#fff}.sw-IconFinalize_Path.sw-IconFinalize_Path-kovan{fill:#fff}.sw-ButtonFinalize-danger .sw-IconFinalize_Path{fill:#fff !important}.sw-ButtonFinalize-disabled .sw-IconFinalize_Path{fill:#333 !important}.sw-IconGithub{align-items:center;border-radius:3px;display:flex;font-size:0;justify-content:center;line-height:0;transition:box-shadow 0.15s ease-out}.sw-IconGithub:active,.sw-IconGithub:hover{box-shadow:0 0 15px 0 rgba(102,102,102,0.3)}.ft-SocialIcons .sw-IconGithub{margin-right:10px}.sw-IconLoadMore_Path.sw-IconLoadMore_Path-core{fill:#5c34a2}.sw-IconLoadMore_Path.sw-IconLoadMore_Path-sokol{fill:#6ac9b9}.sw-IconLoadMore_Path.sw-IconLoadMore_Path-dai{fill:#333}.sw-IconLoadMore_Path.sw-IconLoadMore_Path-kovan{fill:#28aca4}.sw-ButtonLoadMore:hover .sw-IconLoadMore_Path{opacity:0.7}.hd-IconMobileMenu{display:block;order:3}@media (min-width: 768px){.hd-IconMobileMenu{display:none}}.hd-IconMobileMenu_Path.hd-IconMobileMenu_Path-core{fill:#60db97}.hd-IconMobileMenu_Path.hd-IconMobileMenu_Path-sokol{fill:#fff}.hd-IconMobileMenu_Path.hd-IconMobileMenu_Path-dai{fill:#15bba6}.hd-IconMobileMenu_Path.hd-IconMobileMenu_Path-kovan{fill:#fff}.sw-IconPOA{align-items:center;border-radius:3px;display:flex;font-size:0;justify-content:center;line-height:0;transition:box-shadow 0.15s ease-out}.sw-IconPOA:active,.sw-IconPOA:hover{box-shadow:0 0 15px 0 rgba(102,102,102,0.3)}.sw-IconTelegram{align-items:center;border-radius:3px;display:flex;font-size:0;justify-content:center;line-height:0;transition:box-shadow 0.15s ease-out}.sw-IconTelegram:active,.sw-IconTelegram:hover{box-shadow:0 0 15px 0 rgba(102,102,102,0.3)}.ft-SocialIcons .sw-IconTelegram{margin-right:10px}.nl-IconToFinalize_Path.nl-IconToFinalize_Path-core{fill:#60db97}.nl-IconToFinalize_Path.nl-IconToFinalize_Path-sokol{fill:#fff}.nl-IconToFinalize_Path.nl-IconToFinalize_Path-dai{fill:#15bba6}.nl-IconToFinalize_Path.nl-IconToFinalize_Path-kovan{fill:#fff}.sw-IconTwitter{align-items:center;border-radius:3px;display:flex;font-size:0;justify-content:center;line-height:0;transition:box-shadow 0.15s ease-out}.sw-IconTwitter:active,.sw-IconTwitter:hover{box-shadow:0 0 15px 0 rgba(102,102,102,0.3)}.ft-SocialIcons .sw-IconTwitter{margin-right:10px}.frm-KeysTypes{margin-bottom:30px}.frm-KeysTypes_Row{margin-bottom:30px;display:grid;grid-row-gap:30px;grid-template-columns:1fr}.frm-KeysTypes_Row:last-child{margin-bottom:0}@media (min-width: 768px){.frm-KeysTypes_Row{grid-column-gap:30px;grid-template-columns:1fr 1fr 1fr}}.frm-KeysTypes_Button{position:relative}.frm-KeysTypes_Label{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none;border-radius:3px;border:1px solid #e4e4e4;color:#333;cursor:pointer;display:block;font-size:14px;font-weight:400;line-height:50px;margin:0;outline:none;padding:0 15px;text-decoration:none;text-transform:capitalize;text-align:center;transition:0.15s background-color ease-out, 0.15s border-color ease-out;position:relative;white-space:nowrap;z-index:1}.frm-KeysTypes_Label:hover{border-color:#bebebe}.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-core,.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-core:hover{background-color:#5c34a2;border-color:#5c34a2;box-shadow:0 5px 10px 0 rgba(92,52,162,0.3);color:#fff}.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-sokol,.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-sokol:hover{background-color:#6ac9b9;border-color:#6ac9b9;box-shadow:0 5px 10px 0 rgba(106,201,185,0.3);color:#fff}.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-dai,.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-dai:hover{background-color:#15bba6;border-color:#15bba6;box-shadow:0 5px 10px 0 rgba(21,187,166,0.3);color:#fff}.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-kovan,.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-kovan:hover{background-color:#28aca4;border-color:#28aca4;box-shadow:0 5px 10px 0 rgba(40,172,164,0.3);color:#fff}.frm-KeysTypes_Radio{height:100%;position:absolute;visibility:hidden;width:100%;z-index:12}.sw-LoadMore{display:flex;justify-content:center;width:100%}.sw-ButtonLoadMore-dai{border-color:transparent !important}.ld-Loading{align-items:center;background-color:rgba(92,52,162,0.5);bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000000}.ld-Loading.ld-Loading-core{background-color:rgba(92,52,162,0.5)}.ld-Loading.ld-Loading-sokol{background-color:rgba(106,201,185,0.5)}.ld-Loading.ld-Loading-dai{background-color:rgba(21,187,166,0.5)}.ld-Loading.ld-Loading-kovan{background-color:rgba(40,172,164,0.5)}.ld-Loading_Animation{display:flex;justify-content:space-between;width:206px}.ld-Loading_Image{margin-bottom:40px;width:120px}.ld-Loading_AnimationItem{animation-duration:2s;animation-fill-mode:forwards;animation-iteration-count:infinite;animation-name:fadeOut;animation-timing-function:linear;background-color:#fff;border-radius:50%;height:9px;opacity:.2;width:9px}.ld-Loading_AnimationItem:nth-child(2){animation-delay:.1s}.ld-Loading_AnimationItem:nth-child(3){animation-delay:.2s}.ld-Loading_AnimationItem:nth-child(4){animation-delay:.3s}.ld-Loading_AnimationItem:nth-child(5){animation-delay:.4s}.ld-Loading_AnimationItem:nth-child(6){animation-delay:.5s}@keyframes fadeOut{0%{opacity:.2}20%{opacity:1;transform:scale(1)}100%{opacity:.2;transform:scale(0.3)}}.sw-LogoDai{align-items:center;display:flex;justify-content:center}.sw-Header .sw-LogoDai{width:158px}.sw-Footer .sw-LogoDai{width:135px}.sw-LogoDai_Image{display:block;height:100%;width:100%}.sw-LogoPOA{align-items:center;display:flex;justify-content:center}.sw-Header .sw-LogoPOA{width:167px}.sw-Footer .sw-LogoPOA{width:130px}.sw-LogoPOA_Image{display:block;height:100%;width:100%}.sw-LogoSokol{align-items:center;display:flex;justify-content:center}.sw-Header .sw-LogoSokol{width:178px}.sw-Footer .sw-LogoSokol{height:26px}.sw-LogoSokol_Image{display:block;height:100%;width:100%}.sw-LogoKovan{align-items:center;display:flex;justify-content:center}.sw-Header .sw-LogoKovan{width:178px}.sw-Footer .sw-LogoKovan{height:26px}.sw-LogoKovan_Image{display:block;height:100%;width:100%}.sw-MainTitle{display:flex;justify-content:center;max-width:100%;min-height:fit-content;padding:30px 0}.sw-MainTitle_Content{max-width:100%;padding-left:10px;padding-right:10px;width:1000px;min-height:fit-content}@media (min-width: 768px){.sw-MainTitle_Content{padding-left:20px;padding-right:20px}}@media (min-width: 1024px){.sw-MainTitle_Content{padding-left:20px;padding-right:20px}}.sw-MainTitle_Text{color:#333;font-size:24px;line-height:38px;min-height:fit-content}.hd-MobileMenuLinks{background-color:#45277a;padding:10px;width:100%}.hd-MobileMenuLinks.hd-MobileMenuLinks-core{background-color:#45277a}.hd-MobileMenuLinks.hd-MobileMenuLinks-sokol{background-color:#41b19e}.hd-MobileMenuLinks.hd-MobileMenuLinks-dai{background-color:#132942}.hd-MobileMenuLinks.hd-MobileMenuLinks-kovan{background-color:#1f857f}.nl-NavigationLinks{display:flex}.hd-MobileMenuLinks .nl-NavigationLinks{align-items:center;flex-direction:column;margin-bottom:10px}.nl-NavigationLinks_Link{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none;align-items:center;color:#fff;display:flex;font-size:14px;font-weight:700;height:18px;line-height:18px;margin-left:0;opacity:0.7;text-decoration:none;transition:opacity ease-in 0.15s, background-color ease-in 0.15s}.nl-NavigationLinks_Link:active,.nl-NavigationLinks_Link:hover,.nl-NavigationLinks_Link.active{opacity:1}.nl-NavigationLinks_Link.active{cursor:default;pointer-events:none}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-core{color:#fff}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-core:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-core.active{background-color:#2f1b53}@media (min-width: 768px){.nl-NavigationLinks_Link.nl-NavigationLinks_Link-core:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-core.active{background-color:transparent}}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-sokol{color:#fff}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-sokol:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-sokol.active{background-color:#338c7d}@media (min-width: 768px){.nl-NavigationLinks_Link.nl-NavigationLinks_Link-sokol:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-sokol.active{background-color:transparent}}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-dai{color:#fff}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-dai:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-dai.active{background-color:#08101a}@media (min-width: 768px){.nl-NavigationLinks_Link.nl-NavigationLinks_Link-dai:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-dai.active{background-color:transparent}}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-kovan{color:#fff}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-kovan:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-kovan.active{background-color:#e6e6e6}@media (min-width: 768px){.nl-NavigationLinks_Link.nl-NavigationLinks_Link-kovan:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-kovan.active{background-color:transparent}}.hd-MobileMenuLinks .nl-NavigationLinks_Link{display:flex;flex-grow:1;height:50px;justify-content:center;width:100%}@media (min-width: 768px){.nl-NavigationLinks_Link{margin-left:34px}}.nl-NavigationLinks_Text{margin-left:10px;text-decoration:none}.new-NewBallot{max-width:100%;padding-left:10px;padding-right:10px;width:1000px}@media (min-width: 768px){.new-NewBallot{padding-left:20px;padding-right:20px}}@media (min-width: 1024px){.new-NewBallot{padding-left:20px;padding-right:20px}}.new-NewBallot_Form{background-color:#fff;border-radius:6px;border:1px solid #e4e4e4;display:block;margin-bottom:30px;overflow:hidden;transition:0.15s box-shadow}@media (min-width: 768px){.new-NewBallot_Form{display:flex}}.new-NewBallot_MenuContainer{background-color:#f8f8f8;border-bottom:1px solid #e4e4e4;box-sizing:border-box;padding-bottom:30px;padding-top:0;width:100%}@media (min-width: 768px){.new-NewBallot_MenuContainer{border-bottom:none;min-width:300px;width:300px}}.new-NewBallot_FormContent{box-sizing:border-box;flex-grow:1;padding:30px}@media (min-width: 768px){.new-NewBallot_FormContent{border-left:1px solid #e4e4e4}}.new-NewBallot_ButtonContainer{display:grid;grid-template-columns:1fr}@media (min-width: 1280px){.new-NewBallot_ButtonContainer{grid-column-gap:30px;grid-template-columns:1fr 1fr}}.mn-NewBallotMenu{background-color:#fff;border-bottom:1px solid #e4e4e4;list-style:none;margin:0;padding:30px}.mn-NewBallotMenu_Item{color:#333;cursor:pointer;font-size:16px;font-weight:400;line-height:45px;position:relative}.mn-NewBallotMenu_Item::before{background-color:transparent;border-bottom-right-radius:5px;border-top-right-radius:5px;content:'';height:30px;left:-30px;position:absolute;top:50%;transform:translateY(-50%);width:4px}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-core.mn-NewBallotMenu_Item-active{color:#5c34a2}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-core.mn-NewBallotMenu_Item-active::before{background-color:#5c34a2}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-sokol.mn-NewBallotMenu_Item-active{color:#6ac9b9}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-sokol.mn-NewBallotMenu_Item-active::before{background-color:#6ac9b9}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-dai.mn-NewBallotMenu_Item-active{color:#15bba6}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-dai.mn-NewBallotMenu_Item-active::before{background-color:#15bba6}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-kovan.mn-NewBallotMenu_Item-active{color:#28aca4}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-kovan.mn-NewBallotMenu_Item-active::before{background-color:#28aca4}.mn-NewBallotMenuInfo{padding:30px}.mn-NewBallotMenuInfo_Title{color:#333;font-size:16px;font-weight:400;margin:0 0 30px;padding-left:25px;position:relative}.mn-NewBallotMenuInfo_Title::before{background-image:url("../images/NewBallotMenuInfo/icon.svg");background-position:50% 50%;background-repeat:no-repeat;background-size:10px 18px;content:'';height:32px;left:0;position:absolute;top:50%;transform:translateY(-50%);width:10px}.mn-NewBallotMenuInfo_List{list-style:none;margin:0;padding:0}.mn-NewBallotMenuInfo_ListItem{color:#777;font-size:14px;line-height:1.71;margin-bottom:20px;padding-left:25px;position:relative}.mn-NewBallotMenuInfo_ListItem::before{background-color:#333;border-radius:50%;content:'';height:6px;left:0;position:absolute;top:8px;width:6px}.sw-SearchBar{background-color:#45277a;box-sizing:border-box;display:flex;flex-shrink:0;height:50px;justify-content:center;left:0;padding:10px 0 0 0;position:fixed;right:0;top:70px;z-index:123}.sw-SearchBar.sw-SearchBar-core{background-color:#45277a}.sw-SearchBar.sw-SearchBar-sokol{background-color:#41b19e}.sw-SearchBar.sw-SearchBar-dai{background-color:#132942}.sw-SearchBar.sw-SearchBar-kovan{background-color:#1f857f}.sw-SearchBar_Content{max-width:100%;padding-left:10px;padding-right:10px;width:1000px}@media (min-width: 768px){.sw-SearchBar_Content{padding-left:20px;padding-right:20px}}@media (min-width: 1024px){.sw-SearchBar_Content{padding-left:20px;padding-right:20px}}.sw-SearchBar_Input{background-color:transparent;background-position:0 50%;background-repeat:no-repeat;background-size:16px 16px;border-radius:0;border:none;box-sizing:border-box;display:block;font-size:14px;font-weight:400;height:30px;outline:none;padding-left:30px;width:100%}.sw-SearchBar_Input.sw-SearchBar_Input-core{background-image:url("../images/SearchBar/core.svg")}.sw-SearchBar_Input.sw-SearchBar_Input-core,.sw-SearchBar_Input.sw-SearchBar_Input-core:focus,.sw-SearchBar_Input.sw-SearchBar_Input-core:hover,.sw-SearchBar_Input.sw-SearchBar_Input-core:active{color:#fff}.sw-SearchBar_Input.sw-SearchBar_Input-core::-webkit-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-SearchBar_Input.sw-SearchBar_Input-core:-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-core::-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-core:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-SearchBar_Input.sw-SearchBar_Input-sokol{background-image:url("../images/SearchBar/sokol.svg")}.sw-SearchBar_Input.sw-SearchBar_Input-sokol,.sw-SearchBar_Input.sw-SearchBar_Input-sokol:focus,.sw-SearchBar_Input.sw-SearchBar_Input-sokol:hover,.sw-SearchBar_Input.sw-SearchBar_Input-sokol:active{color:#fff}.sw-SearchBar_Input.sw-SearchBar_Input-sokol::-webkit-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-SearchBar_Input.sw-SearchBar_Input-sokol:-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-sokol::-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-sokol:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-SearchBar_Input.sw-SearchBar_Input-dai{background-image:url("../images/SearchBar/dai.svg")}.sw-SearchBar_Input.sw-SearchBar_Input-dai,.sw-SearchBar_Input.sw-SearchBar_Input-dai:focus,.sw-SearchBar_Input.sw-SearchBar_Input-dai:hover,.sw-SearchBar_Input.sw-SearchBar_Input-dai:active{color:#fff}.sw-SearchBar_Input.sw-SearchBar_Input-dai::-webkit-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-SearchBar_Input.sw-SearchBar_Input-dai:-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-dai::-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-dai:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-SearchBar_Input.sw-SearchBar_Input-kovan{background-image:url("../images/SearchBar/kovan.svg")}.sw-SearchBar_Input.sw-SearchBar_Input-kovan,.sw-SearchBar_Input.sw-SearchBar_Input-kovan:focus,.sw-SearchBar_Input.sw-SearchBar_Input-kovan:hover,.sw-SearchBar_Input.sw-SearchBar_Input-kovan:active{color:#fff}.sw-SearchBar_Input.sw-SearchBar_Input-kovan::-webkit-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-SearchBar_Input.sw-SearchBar_Input-kovan:-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-kovan::-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-kovan:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-Separator{background-color:#e4e4e4;border:0;display:block;height:1px;margin:30px 0;width:100%}.ft-SocialIcons{align-items:center;display:flex;justify-content:space-between;padding-top:15px}@media (min-width: 768px){.ft-SocialIcons{padding-top:0}}.frm-Validator{margin-bottom:30px}.frm-Validator_Row{margin-bottom:30px;display:grid;grid-row-gap:30px;grid-template-columns:1fr}.frm-Validator_Row:last-child{margin-bottom:0}@media (min-width: 1280px){.frm-Validator_Row{grid-column-gap:30px;grid-template-columns:1fr 1fr}}.vt-VoteProgressBar{width:100%}.vt-VoteProgressBar_Scale{background-color:#f0f0f0;border-radius:5px;clear:left;height:10px;margin-top:34px;overflow:hidden}.vt-VoteProgressBar_Progress{border-bottom-right-radius:5px;border-top-right-radius:5px;height:100%}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-negative.vt-VoteProgressBar_Progress-core{background-color:#f21b57}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-neutral.vt-VoteProgressBar_Progress-core{background-color:#50bbda}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-positive.vt-VoteProgressBar_Progress-core{background-color:#60db97}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-negative.vt-VoteProgressBar_Progress-sokol{background-color:#f24c67}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-neutral.vt-VoteProgressBar_Progress-sokol{background-color:#50bbda}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-positive.vt-VoteProgressBar_Progress-sokol{background-color:#6ac9b9}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-negative.vt-VoteProgressBar_Progress-dai{background-color:#f21b57}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-neutral.vt-VoteProgressBar_Progress-dai{background-color:#50bbda}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-positive.vt-VoteProgressBar_Progress-dai{background-color:#15bba6}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-negative.vt-VoteProgressBar_Progress-kovan{background-color:#f24c67}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-neutral.vt-VoteProgressBar_Progress-kovan{background-color:#50bbda}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-positive.vt-VoteProgressBar_Progress-kovan{background-color:#6ac9b9}.vt-VoteProgressBar_Votes{color:#333;float:right;font-size:13px;margin:0 0 0 10px}.vt-VoteProgressBar_Percentage{color:#000;float:right;font-size:14px;font-weight:700;margin:0}.vt-Votes{border-top:1px solid #e4e4e4;display:flex;margin-bottom:30px;margin-top:30px;padding:30px 0 0 0}@media screen and (max-width: 768px){.vt-Votes{display:block;margin-top:15px;padding:15px 0 0 0}}@media screen and (max-width: 767px){.vt-Votes{margin-top:10px;padding:10px 0 0 0}}.vt-Votes_ScaleColumn{display:flex;flex-grow:1;justify-content:space-between;margin-right:40px}@media screen and (max-width: 768px){.vt-Votes_ScaleColumn{margin-bottom:30px;margin-right:0;overflow:hidden;width:100%}}.vt-Votes_ScaleColumn:last-child{margin-right:0}@media screen and (max-width: 768px){.vt-Votes_ScaleColumn.reverse-responsive{flex-direction:row-reverse}} +@import url("https://fonts.googleapis.com/css?family=Nunito:300,400,600,700");.text-light{font-weight:300}.text-normal{font-weight:400}.text-bold{font-weight:700}.text-semibold{font-weight:600}.text-italic{font-style:italic}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}@keyframes Select-animation-spin{to{transform:rotate(1turn)}}@-webkit-keyframes Select-animation-spin{to{-webkit-transform:rotate(1turn)}}.Select{position:relative}.Select input::-webkit-contacts-auto-fill-button,.Select input::-webkit-credentials-auto-fill-button{display:none !important}.Select input::-ms-clear{display:none !important}.Select input::-ms-reveal{display:none !important}.Select,.Select div,.Select input,.Select span{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.Select.is-disabled .Select-arrow-zone{cursor:default;pointer-events:none}.Select.is-disabled>.Select-control{background-color:#f9f9f9}.Select.is-disabled>.Select-control:hover{box-shadow:none}.Select.is-searchable.is-open>.Select-control{cursor:text}.Select.is-searchable.is-focused:not(.is-open)>.Select-control{cursor:text}.Select.is-open>.Select-control{border-bottom-right-radius:0;border-bottom-left-radius:0;background:#fff}.Select.is-open>.Select-control .Select-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.Select.is-focused>.Select-control{background:#fff}.Select.is-focused:not(.is-open)>.Select-control{border-color:#cbcbcb #d7d7d7 #d7d7d7;box-shadow:none}.Select.has-value.is-clearable.Select--single>.Select-control .Select-value{padding-right:44px}.Select.has-value.Select--single>.Select-control .Select-value .Select-value-label,.Select.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value .Select-value-label{color:#333}.Select.has-value.Select--single>.Select-control .Select-value a.Select-value-label,.Select.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label{cursor:pointer;text-decoration:none}.Select.has-value.Select--single>.Select-control .Select-value a.Select-value-label:hover,.Select.has-value.Select--single>.Select-control .Select-value a.Select-value-label:focus,.Select.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label:hover,.Select.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label:focus{color:#8e959d;outline:none;text-decoration:underline}.Select.has-value.Select--single>.Select-control .Select-value a.Select-value-label:focus,.Select.has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label:focus{background:#fff}.Select.has-value.is-pseudo-focused .Select-input{opacity:0}.Select.is-open .Select-arrow,.Select .Select-arrow-zone:hover>.Select-arrow{border-top-color:#666}.Select.Select--rtl{direction:rtl;text-align:right}.Select-control{background-color:#fff;border-collapse:separate;border-color:#f1f1f1 #e4e4e4 #cbcbcb;border-radius:3px;border-spacing:0;border:1px solid #e4e4e4;color:#333;cursor:default;display:table;height:40px;outline:none;overflow:hidden;position:relative;width:100%}.Select-control:hover{box-shadow:none}.Select-control .Select-input:focus{outline:none;background:#fff}.Select-placeholder,.Select--single>.Select-control .Select-value{bottom:0;color:#333;left:0;line-height:38px;padding-left:15px;padding-right:15px;position:absolute;right:0;top:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Select-input{height:38px;padding-left:15px;padding-right:15px;vertical-align:middle}.Select-input>input{background:none transparent;border:0 none;box-shadow:none;cursor:default;display:inline-block;font-family:inherit;font-size:inherit;margin:0;outline:none;line-height:17px;padding:10px 0 14px;-webkit-appearance:none}.is-focused .Select-input>input{cursor:text}.Select-control:not(.is-searchable)>.Select-input{outline:none}.Select-loading-zone{cursor:pointer;display:table-cell;position:relative;text-align:center;vertical-align:middle;width:16px}.Select-loading{-webkit-animation:Select-animation-spin 400ms infinite linear;-o-animation:Select-animation-spin 400ms infinite linear;animation:Select-animation-spin 400ms infinite linear;width:16px;height:16px;box-sizing:border-box;border-radius:50%;border:2px solid #e4e4e4;border-right-color:#333;display:inline-block;position:relative;vertical-align:middle}.Select-clear-zone{-webkit-animation:Select-animation-fadeIn 200ms;-o-animation:Select-animation-fadeIn 200ms;animation:Select-animation-fadeIn 200ms;color:#999;cursor:pointer;display:table-cell;position:relative;text-align:center;vertical-align:middle;width:19px}.Select-clear-zone:hover{color:#D0021B}.Select-clear{display:inline-block;font-size:20px;line-height:1}.Select--multi .Select-clear-zone{width:19px}.Select--multi .Select-multi-value-wrapper{display:inline-block}.Select .Select-aria-only{position:absolute;display:inline-block;height:1px;width:1px;margin:-1px;clip:rect(0, 0, 0, 0);overflow:hidden;float:left}.Select-arrow-zone{cursor:pointer;display:table-cell;position:relative;text-align:center;vertical-align:middle;width:25px;padding-right:5px}.Select--rtl .Select-arrow-zone{padding-right:0;padding-left:5px}.Select-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px;display:inline-block;height:0;width:0;position:relative}@-webkit-keyframes Select-animation-fadeIn{from{opacity:0}to{opacity:1}}@keyframes Select-animation-fadeIn{from{opacity:0}to{opacity:1}}.Select-menu-outer{border-bottom-right-radius:3px;border-bottom-left-radius:3px;background-color:#fff;border:1px solid #e4e4e4;border-top-color:#f2f2f2;box-shadow:none;box-sizing:border-box;margin-top:-1px;max-height:200px;position:absolute;top:100%;width:100%;z-index:1000;-webkit-overflow-scrolling:touch}.Select-menu{max-height:198px;overflow-y:auto}.Select-option{box-sizing:border-box;background-color:#fff;color:#666;cursor:pointer;display:block;padding:8px 15px}.Select-option:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.Select-option.is-selected{background-color:#f1f1f1;color:#000}.Select-option.is-focused{background-color:#e4e4e4;color:#333}.Select-option.is-disabled{color:#fff;cursor:default}.Select-noresults{box-sizing:border-box;color:#999;cursor:default;display:block;padding:8px 15px}.Select--multi .Select-input{vertical-align:middle;margin-left:15px;padding:0}.Select--multi.Select--rtl .Select-input{margin-left:0;margin-right:15px}.Select--multi.has-value .Select-input{margin-left:5px}.Select--multi .Select-value{background-color:#f2f9fc;border-radius:3px;border:1px solid #e5eef9;color:#000;display:inline-block;font-size:.9em;margin-left:5px;margin-top:5px;vertical-align:top}.Select--multi .Select-value-icon,.Select--multi .Select-value-label{display:inline-block;vertical-align:middle}.Select--multi .Select-value-label{border-bottom-right-radius:3px;border-top-right-radius:3px;cursor:default;padding:2px 5px}.Select--multi a.Select-value-label{color:#000;cursor:pointer;text-decoration:none}.Select--multi a.Select-value-label:hover{text-decoration:underline}.Select--multi .Select-value-icon{cursor:pointer;border-bottom-left-radius:3px;border-top-left-radius:3px;border-right:1px solid #e5eef9;padding:1px 5px 3px}.Select--multi .Select-value-icon:hover,.Select--multi .Select-value-icon:focus{background-color:#cbcbcb;color:#cbcbcb}.Select--multi .Select-value-icon:active{background-color:#e5eef9}.Select--multi.Select--rtl .Select-value{margin-left:0;margin-right:5px}.Select--multi.Select--rtl .Select-value-icon{border-right:none;border-left:1px solid #e5eef9}.Select--multi.is-disabled .Select-value{background-color:#fcfcfc;border:1px solid #e3e3e3;color:#999}.Select--multi.is-disabled .Select-value-icon{cursor:not-allowed;border-right:1px solid #e3e3e3}.Select--multi.is-disabled .Select-value-icon:hover,.Select--multi.is-disabled .Select-value-icon:focus,.Select--multi.is-disabled .Select-value-icon:active{background-color:#fcfcfc}@keyframes Select-animation-spin{to{transform:rotate(1turn)}}@-webkit-keyframes Select-animation-spin{to{-webkit-transform:rotate(1turn)}}*{box-sizing:border-box}/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.hidden{display:none}.display-block{display:block}.display-inline{display:inline}input[type='radio']{display:none}body{-webkit-font-smoothing:antialiased;color:#333;font-family:"Nunito", sans-serif;font-size:14px}html,body,#root,html.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown),body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){height:100%}.clearfix::after{content:"";clear:both;display:table}.lo-App{align-items:center;display:flex;flex-direction:column;height:100%;padding-top:120px;width:100%}.lo-App.lo-App-no-search-bar{padding-top:70px}.lo-App_Content{flex-grow:1;max-width:100%;padding-bottom:30px;position:relative;z-index:1}.lo-App_Content:before{background-color:rgba(92,52,162,0.5);bottom:0;content:'';display:none;left:0;position:fixed;right:0;top:0;z-index:1234}.lo-App_Content.lo-App_Content-mobile-menu-open:before{display:block}.lo-App_Content.lo-App_Content-core:before{background-color:rgba(92,52,162,0.5)}.lo-App_Content.lo-App_Content-sokol:before{background-color:rgba(106,201,185,0.5)}.lo-App_Content.lo-App_Content-dai:before{background-color:rgba(21,187,166,0.5)}.lo-App_Content.lo-App_Content-kovan:before{background-color:rgba(40,172,164,0.5)}.sw-BallotAbout{margin-top:-8px}.sw-BallotCard{background-color:#fff;border-radius:6px;border:1px solid #e4e4e4;margin-bottom:30px;padding:30px;transition:0.15s box-shadow}@media screen and (max-width: 768px){.sw-BallotCard{margin-bottom:15px;padding:15px}}.color-primary{color:#5c34a2}.sokol .color-primary{color:#6ac9b9}.kovan .color-primary{color:#28aca4}.color-danger{color:#f21b57}.sokol .color-danger{color:#f24c67}.kovan .color-danger{color:#f24c67}.color-success{color:#60db97}.sokol .color-success{color:#6ac9b9}.kovan .color-success{color:#28aca4}.blc-BallotDataPair{box-sizing:border-box;display:table-row;min-width:100%;padding-right:0;position:relative;vertical-align:top}@media (min-width: 768px){.blc-BallotDataPair{display:inline-block;min-width:0;padding-right:12px}}.blc-BallotDataPair:last-child{padding-right:0}.blc-BallotDataPair.blc-BallotDataPair-name{width:12%;word-break:break-word}.blc-BallotDataPair.blc-BallotDataPair-action{width:8%}.blc-BallotDataPair.blc-BallotDataPair-type{width:8%}.blc-BallotDataPair.blc-BallotDataPair-proposal{width:30%}.blc-BallotDataPair.blc-BallotDataPair-key{width:26%;word-break:break-all}.blc-BallotDataPair.blc-BallotDataPair-key-wide{width:50%;word-break:break-all}.blc-BallotDataPair.blc-BallotDataPair-proposed-receiver{width:45%;word-break:break-all}.blc-BallotDataPair.blc-BallotDataPair-funds-amount{width:23%;word-break:break-all}.blc-BallotDataPair.blc-BallotDataPair-proposed-min-threshold{width:30%;word-break:break-all}.blc-BallotDataPair.blc-BallotDataPair-contract-type{width:25%;word-break:break-all}.blc-BallotDataPair.blc-BallotDataPair-proposed-address{width:30%;word-break:break-all}.blc-BallotDataPair.blc-BallotDataPair-time{width:20%}.blc-BallotDataPair_Title{color:#777;font-size:13px;font-weight:400;line-height:28px;margin:0;text-align:left}.blc-BallotDataPair_Value{color:#333;font-size:14px;font-weight:400;line-height:28px;margin:0;text-align:left}.blc-BallotDataPair_Value.blc-BallotDataPair_Value-action{text-transform:capitalize}.blc-BallotDataPair_Value.blc-BallotDataPair_Value-type{text-transform:capitalize}.frm-BallotEmissionFundsMetadata{margin-bottom:30px}.frm-BallotEmissionFundsMetadata_Row{margin-bottom:30px;display:grid;grid-row-gap:30px;grid-template-columns:1fr}.frm-BallotEmissionFundsMetadata_Row:last-child{margin-bottom:0}@media (min-width: 1280px){.frm-BallotEmissionFundsMetadata_Row{grid-column-gap:30px;grid-template-columns:1fr 1fr}}.bc-BallotFooter{display:flex;flex-direction:column}@media (min-width: 768px){.bc-BallotFooter{align-items:center;flex-direction:row}}.bc-BallotFooter_Description{color:#777;font-size:14px;font-stretch:normal;font-style:normal;font-weight:normal;line-height:18px;max-width:340px}@media (min-width: 768px){.bc-BallotFooter_Description{padding-left:15px}}.bc-BallotFooter_Voted{box-sizing:border-box;color:#333;display:inline-block;font-size:14px;font-weight:700;line-height:1.2;margin-left:auto;padding:0 13px;text-transform:uppercase}.bc-BallotFooter_ID{color:#333;font-size:14px;font-weight:normal;line-height:1.1;margin-top:10px}@media (min-width: 768px){.bc-BallotFooter_ID{margin-left:auto;margin-top:0}}.bc-BallotFooter_voteID{font-weight:700}.bc-BallotInfoContainer{background-color:#f8f8f8;margin-bottom:30px;margin-left:-30px;margin-right:-30px;padding-bottom:30px;padding-left:30px;padding-right:30px;padding-top:30px}@media screen and (max-width: 768px){.bc-BallotInfoContainer{margin-left:-15px;margin-right:-15px;padding-left:15px;padding-right:15px}}.bc-BallotInfoContainer_Info{background-position:0 2px;background-repeat:no-repeat;color:#333333;font-size:14px;font-weight:normal;letter-spacing:normal;line-height:1.71;margin-bottom:20px;max-width:100%;min-height:32px;padding-left:30px;text-align:left;word-break:break-word}.bc-BallotInfoContainer_Info:last-child{margin-bottom:0}.bc-BallotInfoContainer_Info.bc-BallotInfoContainer_Info-minimum{background-image:url("../images/BallotInfoContainer/min.svg");background-size:18px 18px}.bc-BallotInfoContainer_Info.bc-BallotInfoContainer_Info-details{background-image:url("../images/BallotInfoContainer/info.svg");background-size:10px 18px;position:relative}.bc-BallotInfoContainer_ToggleShow{color:#5c34a2;cursor:pointer;display:inline-block;margin-left:5px}.bc-BallotInfoContainer_ToggleShow.bc-BallotInfoContainer_ToggleShow-core{color:#5c34a2}.bc-BallotInfoContainer_ToggleShow.bc-BallotInfoContainer_ToggleShow-sokol{color:#6ac9b9}.bc-BallotInfoContainer_ToggleShow.bc-BallotInfoContainer_ToggleShow-dai{color:#15bba6}.bc-BallotInfoContainer_ToggleShow.bc-BallotInfoContainer_ToggleShow-kovan{color:#28aca4}.frm-BallotKeysMetadata{margin-bottom:30px}.frm-BallotKeysMetadata_Row{margin-bottom:30px;display:grid;grid-row-gap:30px;grid-template-columns:1fr}.frm-BallotKeysMetadata_Row:last-child{margin-bottom:0}@media (min-width: 1280px){.frm-BallotKeysMetadata_Row{grid-column-gap:30px;grid-template-columns:1fr 1fr}}.frm-BallotMinThresholdMetadata{margin-bottom:30px}.frm-BallotMinThresholdMetadata_Row{margin-bottom:30px;display:grid;grid-row-gap:30px;grid-template-columns:1fr}.frm-BallotMinThresholdMetadata_Row:last-child{margin-bottom:0}@media (min-width: 1280px){.frm-BallotMinThresholdMetadata_Row{grid-column-gap:30px;grid-template-columns:1fr 1fr}}.frm-BallotProxyMetadata{margin-bottom:30px}.frm-BallotProxyMetadata_Row{margin-bottom:30px;display:grid;grid-row-gap:30px;grid-template-columns:1fr}.frm-BallotProxyMetadata_Row:last-child{margin-bottom:0}@media (min-width: 1280px){.frm-BallotProxyMetadata_Row{grid-column-gap:30px;grid-template-columns:1fr 1fr}}.sw-Ballots{max-width:100%;padding-left:10px;padding-right:10px;width:1000px}@media (min-width: 768px){.sw-Ballots{padding-left:20px;padding-right:20px}}@media (min-width: 1024px){.sw-Ballots{padding-left:20px;padding-right:20px}}.ld-BaseLoader{align-items:center;background-color:rgba(255,255,255,0.8);bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000000}.sw-ButtonAddBallot{align-items:center;border:none;border-radius:3px;color:#fff;cursor:pointer;display:flex;font-size:14px;font-weight:700;height:44px;justify-content:space-between;line-height:44px;opacity:1;outline:none;padding:0 15px;text-decoration:none;transition:0.15s background-color}.sw-ButtonAddBallot.sw-ButtonAddBallot-core{background-color:#5c34a2;color:#fff}.sw-ButtonAddBallot.sw-ButtonAddBallot-core:hover{background-color:#46287b}.sw-ButtonAddBallot.sw-ButtonAddBallot-sokol{background-color:#6ac9b9;color:#fff}.sw-ButtonAddBallot.sw-ButtonAddBallot-sokol:hover{background-color:#57c2b0}.sw-ButtonAddBallot.sw-ButtonAddBallot-dai{background-color:#15bba6;color:#fff}.sw-ButtonAddBallot.sw-ButtonAddBallot-dai:hover{background-color:#18d2ba}.sw-ButtonAddBallot.sw-ButtonAddBallot-kovan{background-color:#28aca4;color:#fff}.sw-ButtonAddBallot.sw-ButtonAddBallot-kovan:hover{background-color:#239790}.sw-ButtonFinalize{align-items:center;border-radius:5px;border:0;color:#fff;cursor:pointer;display:flex;font-size:14px;font-weight:700;height:42px;justify-content:space-between;line-height:42px;outline:none;padding:0 15px;text-decoration:none;text-transform:capitalize;transition:0.15s background-color}.sw-ButtonFinalize.sw-ButtonFinalize-core{background-color:#5c34a2}.sw-ButtonFinalize.sw-ButtonFinalize-core:active,.sw-ButtonFinalize.sw-ButtonFinalize-core:hover{background-color:#46287b}.sw-ButtonFinalize.sw-ButtonFinalize-sokol{background-color:#6ac9b9}.sw-ButtonFinalize.sw-ButtonFinalize-sokol:active,.sw-ButtonFinalize.sw-ButtonFinalize-sokol:hover{background-color:#45bba7}.sw-ButtonFinalize.sw-ButtonFinalize-dai{background-color:#15bba6}.sw-ButtonFinalize.sw-ButtonFinalize-dai:active,.sw-ButtonFinalize.sw-ButtonFinalize-dai:hover{background-color:#108d7d}.sw-ButtonFinalize.sw-ButtonFinalize-kovan{background-color:#28aca4}.sw-ButtonFinalize.sw-ButtonFinalize-kovan:active,.sw-ButtonFinalize.sw-ButtonFinalize-kovan:hover{background-color:#1e837d}.sw-ButtonFinalize.sw-ButtonFinalize-cancel,.sw-ButtonFinalize.sw-ButtonFinalize-cancel:active,.sw-ButtonFinalize.sw-ButtonFinalize-cancel:hover{background-color:#f21b57 !important}.sw-ButtonFinalize.sw-ButtonFinalize-disabled,.sw-ButtonFinalize.sw-ButtonFinalize-disabled:active,.sw-ButtonFinalize.sw-ButtonFinalize-disabled:hover{cursor:default;background-color:#f0f0f0 !important;color:#333}.bc-BallotFooter .sw-ButtonFinalize{margin-top:30px;order:3;width:100%}@media (min-width: 768px){.bc-BallotFooter .sw-ButtonFinalize{margin-top:0;order:0;width:auto}}.sw-ButtonFinalize_Text{margin-right:50px}.sw-ButtonLoadMore{align-items:center;background-color:transparent;background-size:14px 14px;border-radius:5px;border:2px solid #5c34a2;color:#5c34a2;cursor:pointer;display:flex;font-size:16px;font-weight:400;height:42px;justify-content:center;outline:none;padding:0 15px;text-decoration:none;width:100%}.sw-ButtonLoadMore.sw-ButtonLoadMore-core{border-color:#5c34a2}.sw-ButtonLoadMore.sw-ButtonLoadMore-sokol{border-color:#6ac9b9}.sw-ButtonLoadMore.sw-ButtonLoadMore-dai{border-color:#173250}.sw-ButtonLoadMore.sw-ButtonLoadMore-kovan{border-color:#28aca4}@media (min-width: 768px){.sw-ButtonLoadMore{width:auto}}.sw-ButtonLoadMore_Text{margin-right:15px}.sw-ButtonLoadMore:hover .sw-ButtonLoadMore_Text{opacity:0.7}.sw-ButtonLoadMore-core .sw-ButtonLoadMore_Text{color:#5c34a2}.sw-ButtonLoadMore-sokol .sw-ButtonLoadMore_Text{color:#6ac9b9}.sw-ButtonLoadMore-dai .sw-ButtonLoadMore_Text{color:#173250}.sw-ButtonLoadMore-kovan .sw-ButtonLoadMore_Text{color:#28aca4}.sw-ButtonNewBallot{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none;align-items:center;border-radius:3px;color:#fff;cursor:pointer;display:flex;font-size:14px;font-weight:700;height:36px;line-height:36px;opacity:1;outline:none;padding:0 15px;text-decoration:none;transition:0.15s background-color}.sw-ButtonNewBallot.sw-ButtonNewBallot-core{background-color:#60db97;box-shadow:0 5px 10px 0 rgba(92,52,162,0.3);color:#fff}.sw-ButtonNewBallot.sw-ButtonNewBallot-core:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-core:hover{background-color:#36d27c}.sw-ButtonNewBallot.sw-ButtonNewBallot-core.active,.sw-ButtonNewBallot.sw-ButtonNewBallot-core.active:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-core.active:hover{background-color:#60db97}.sw-ButtonNewBallot.sw-ButtonNewBallot-sokol{background-color:#fff;box-shadow:0 5px 10px 0 rgba(106,201,185,0.3);color:#6ac9b9}.sw-ButtonNewBallot.sw-ButtonNewBallot-sokol:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-sokol:hover{background-color:#f2f2f2}.sw-ButtonNewBallot.sw-ButtonNewBallot-sokol.active,.sw-ButtonNewBallot.sw-ButtonNewBallot-sokol.active:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-sokol.active:hover{background-color:#fff}.sw-ButtonNewBallot.sw-ButtonNewBallot-dai{background-color:#15bba6;box-shadow:0 5px 10px 0 rgba(21,187,166,0.3);color:#fff}.sw-ButtonNewBallot.sw-ButtonNewBallot-dai:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-dai:hover{background-color:#18d2ba}.sw-ButtonNewBallot.sw-ButtonNewBallot-dai.active,.sw-ButtonNewBallot.sw-ButtonNewBallot-dai.active:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-dai.active:hover{background-color:#15bba6}.sw-ButtonNewBallot.sw-ButtonNewBallot-kovan{background-color:#fff;box-shadow:0 5px 10px 0 rgba(40,172,164,0.3);color:#28aca4}.sw-ButtonNewBallot.sw-ButtonNewBallot-kovan:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-kovan:hover{background-color:#f2f2f2}.sw-ButtonNewBallot.sw-ButtonNewBallot-kovan.active,.sw-ButtonNewBallot.sw-ButtonNewBallot-kovan.active:active,.sw-ButtonNewBallot.sw-ButtonNewBallot-kovan.active:hover{background-color:#fff}.sw-ButtonNewBallot.active{cursor:pointer;pointer-events:none}.sw-Header_Links .sw-ButtonNewBallot{margin-left:40px}.hd-MobileMenuLinks .sw-ButtonNewBallot{box-shadow:none;height:50px;justify-content:center;margin:0}.vt-ButtonVoting{border-radius:5px;border:0;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-size:14px;font-weight:700;line-height:42px;margin-right:20px;min-width:55px;outline:none;padding:0 15px;text-decoration:none;text-transform:capitalize;transition:0.15s background-color linear}.vt-ButtonVoting.vt-ButtonVoting-sm{min-width:55px}.vt-ButtonVoting.vt-ButtonVoting-md{min-width:78px}@media (min-width: 1024px){.vt-ButtonVoting.vt-ButtonVoting-left{margin-left:0;margin-right:20px}.vt-ButtonVoting.vt-ButtonVoting-right{margin-left:20px;margin-right:0;order:2}}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-core{background-color:#f21b57;box-shadow:0 5px 10px 0 rgba(242,27,87,0.3)}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-core:hover{background-color:#ce0c42}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-core{background-color:#50bbda;box-shadow:0 5px 10px 0 rgba(80,187,218,0.3)}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-core:hover{background-color:#2ba8cc}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-core{background-color:#60db97;box-shadow:0 5px 10px 0 rgba(96,219,151,0.3)}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-core:hover{background-color:#36d27c}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-sokol{background-color:#f24c67;box-shadow:0 5px 10px 0 rgba(242,76,103,0.3)}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-sokol:hover{background-color:#ef1c3f}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-sokol{background-color:#50bbda;box-shadow:0 5px 10px 0 rgba(80,187,218,0.3)}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-sokol:hover{background-color:#2ba8cc}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-sokol{background-color:#6ac9b9;box-shadow:0 5px 10px 0 rgba(106,201,185,0.3)}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-sokol:hover{background-color:#45bba7}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-dai{background-color:#f21b57;box-shadow:0 5px 10px 0 rgba(242,27,87,0.3)}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-dai:hover{background-color:#ce0c42}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-dai{background-color:#50bbda;box-shadow:0 5px 10px 0 rgba(80,187,218,0.3)}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-dai:hover{background-color:#2ba8cc}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-dai{background-color:#15bba6;box-shadow:0 5px 10px 0 rgba(21,187,166,0.3)}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-dai:hover{background-color:#108d7d}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-kovan{background-color:#f24c67;box-shadow:0 5px 10px 0 rgba(242,76,103,0.3)}.vt-ButtonVoting.vt-ButtonVoting-negative.vt-ButtonVoting-kovan:hover{background-color:#ef1c3f}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-kovan{background-color:#50bbda;box-shadow:0 5px 10px 0 rgba(80,187,218,0.3)}.vt-ButtonVoting.vt-ButtonVoting-neutral.vt-ButtonVoting-kovan:hover{background-color:#2ba8cc}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-kovan{background-color:#6ac9b9;box-shadow:0 5px 10px 0 rgba(106,201,185,0.3)}.vt-ButtonVoting.vt-ButtonVoting-positive.vt-ButtonVoting-kovan:hover{background-color:#45bba7}.sw-Footer{align-items:center;background-color:#5c34a2;color:#fff;display:flex;flex-shrink:0;justify-content:center;min-height:60px;overflow:hidden;padding:16px 0;transition:background-color 0.25s ease-out;width:100%}.sw-Footer.sw-Footer-core{background-color:#5c34a2}.sw-Footer.sw-Footer-sokol{background-color:#6ac9b9}.sw-Footer.sw-Footer-dai{background-color:#173250}.sw-Footer.sw-Footer-kovan{background-color:#28aca4}.sw-Footer_Content{max-width:100%;padding-left:10px;padding-right:10px;width:1000px;align-items:center;display:flex;flex-direction:column;justify-content:center}@media (min-width: 768px){.sw-Footer_Content{padding-left:20px;padding-right:20px}}@media (min-width: 1024px){.sw-Footer_Content{padding-left:20px;padding-right:20px}}@media (min-width: 768px){.sw-Footer_Content{flex-direction:row;justify-content:space-between}}.sw-Footer_Text{color:#fff;flex-grow:1;font-size:11px;font-weight:300;line-height:1.2;margin:0;padding:15px 0 0 0;text-align:center}@media (min-width: 768px){.sw-Footer_Text{padding-top:0}}.sw-Footer-dai .sw-Footer_Text{color:#fff}.frm-FormAutocomplete input[type="text"]{transition:0.25s background-color, 0.25s border-color;background-color:#fff;border-radius:3px;border:1px solid #e4e4e4;box-sizing:border-box;color:#202d3c;display:block;font-size:14px;outline:none;padding:0 10px;width:100%;height:40px}.frm-FormAutocomplete input[type="text"]:hover,.frm-FormAutocomplete input[type="text"]:active,.frm-FormAutocomplete input[type="text"]:focus{border-color:#cbcbcb;color:#202d3c}.frm-FormAutocomplete input[type="text"][disabled],.frm-FormAutocomplete input[type="text"][disabled]:hover,.frm-FormAutocomplete input[type="text"][disabled]:active,.frm-FormAutocomplete input[type="text"][disabled]:focus,.frm-FormAutocomplete input[type="text"].disabled,.frm-FormAutocomplete input[type="text"].disabled:hover,.frm-FormAutocomplete input[type="text"].disabled:active,.frm-FormAutocomplete input[type="text"].disabled:focus{background-color:#f9f9f9;border-color:#e4e4e4;color:#202d3c}.frm-FormFieldTitle{color:#333;display:inline-block;font-size:14px;line-height:1.2;margin-bottom:15px}.frm-FormHint{color:#777;font-size:13px;font-weight:400;line-height:1.38;margin:0;padding-top:12px;word-break:break-all;word-break:break-word}.frm-FormHint.frm-FormHint-core a{color:#5c34a2}.frm-FormHint.frm-FormHint-sokol a{color:#6ac9b9}.frm-FormHint.frm-FormHint-dai a{color:#15bba6}.frm-FormHint.frm-FormHint-kovan a{color:#28aca4}.frm-FormInput_Field{transition:0.25s background-color, 0.25s border-color;background-color:#fff;border-radius:3px;border:1px solid #e4e4e4;box-sizing:border-box;color:#202d3c;display:block;font-size:14px;outline:none;padding:0 10px;width:100%;height:40px}.frm-FormInput_Field:hover,.frm-FormInput_Field:active,.frm-FormInput_Field:focus{border-color:#cbcbcb;color:#202d3c}.frm-FormInput_Field[disabled],.frm-FormInput_Field[disabled]:hover,.frm-FormInput_Field[disabled]:active,.frm-FormInput_Field[disabled]:focus,.frm-FormInput_Field.disabled,.frm-FormInput_Field.disabled:hover,.frm-FormInput_Field.disabled:active,.frm-FormInput_Field.disabled:focus{background-color:#f9f9f9;border-color:#e4e4e4;color:#202d3c}.frm-FormSelect_Select select{transition:0.25s background-color, 0.25s border-color;background-color:#fff;border-radius:3px;border:1px solid #e4e4e4;box-sizing:border-box;color:#202d3c;display:block;font-size:14px;outline:none;padding:0 10px;width:100%;appearance:none;background-image:url("../images/Base/select.png");background-position:right 13px center;background-repeat:no-repeat;height:40px;padding-right:30px}.frm-FormSelect_Select select:hover,.frm-FormSelect_Select select:active,.frm-FormSelect_Select select:focus{border-color:#cbcbcb;color:#202d3c}.frm-FormSelect_Select select[disabled],.frm-FormSelect_Select select[disabled]:hover,.frm-FormSelect_Select select[disabled]:active,.frm-FormSelect_Select select[disabled]:focus,.frm-FormSelect_Select select.disabled,.frm-FormSelect_Select select.disabled:hover,.frm-FormSelect_Select select.disabled:active,.frm-FormSelect_Select select.disabled:focus{background-color:#f9f9f9;border-color:#e4e4e4;color:#202d3c}@media (min--moz-device-pixel-ratio: 1.3), (-o-min-device-pixel-ratio: 2.6 / 2), (-webkit-min-device-pixel-ratio: 1.3), (min-device-pixel-ratio: 1.3), (min-resolution: 1.3dppx){.frm-FormSelect_Select select{background-image:url("../images/Base/select@2x.png");background-size:8px 4px}}.frm-FormTextarea_Field{transition:0.25s background-color, 0.25s border-color;background-color:#fff;border-radius:3px;border:1px solid #e4e4e4;box-sizing:border-box;color:#202d3c;display:block;font-size:14px;outline:none;padding:0 10px;width:100%;height:70px;padding-bottom:10px;padding-top:10px;resize:none;width:100%}.frm-FormTextarea_Field:hover,.frm-FormTextarea_Field:active,.frm-FormTextarea_Field:focus{border-color:#cbcbcb;color:#202d3c}.frm-FormTextarea_Field[disabled],.frm-FormTextarea_Field[disabled]:hover,.frm-FormTextarea_Field[disabled]:active,.frm-FormTextarea_Field[disabled]:focus,.frm-FormTextarea_Field.disabled,.frm-FormTextarea_Field.disabled:hover,.frm-FormTextarea_Field.disabled:active,.frm-FormTextarea_Field.disabled:focus{background-color:#f9f9f9;border-color:#e4e4e4;color:#202d3c}.sw-Header{align-items:center;background-color:#5c34a2;color:#fff;display:flex;flex-shrink:0;height:70px;justify-content:center;left:0;position:fixed;right:0;top:0;transition:background-color 0.25s ease-out;width:100%;z-index:124}.sw-Header.sw-Header-menu-open{flex-direction:column;height:auto}.sw-Header.sw-Header-core{background-color:#5c34a2}.sw-Header.sw-Header-sokol{background-color:#6ac9b9}.sw-Header.sw-Header-dai{background-color:#173250}.sw-Header.sw-Header-kovan{background-color:#28aca4}.sw-Header_Content{max-width:100%;padding-left:10px;padding-right:10px;width:1000px;align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;min-height:70px}@media (min-width: 768px){.sw-Header_Content{padding-left:20px;padding-right:20px}}@media (min-width: 1024px){.sw-Header_Content{padding-left:20px;padding-right:20px}}.sw-Header_Links{align-items:center;display:none;height:70px;justify-content:flex-end;margin-left:auto;width:auto}@media (min-width: 768px){.sw-Header_Links{display:flex}}.nl-IconActive_Path.nl-IconActive_Path-core{fill:#60db97}.nl-IconActive_Path.nl-IconActive_Path-sokol{fill:#fff}.nl-IconActive_Path.nl-IconActive_Path-dai{fill:#15bba6}.nl-IconActive_Path.nl-IconActive_Path-kovan{fill:#fff}.sw-ButtonNewBallot .sw-IconAdd{margin-left:10px}.sw-ButtonAddBallot .sw-IconAdd{margin-left:10px}.sw-ButtonNewBallot .sw-IconAdd_Path.sw-IconAdd_Path-core{fill:#fff}.sw-ButtonNewBallot .sw-IconAdd_Path.sw-IconAdd_Path-sokol{fill:#6ac9b9}.sw-ButtonNewBallot .sw-IconAdd_Path.sw-IconAdd_Path-dai{fill:#fff}.sw-ButtonNewBallot .sw-IconAdd_Path.sw-IconAdd_Path-kovan{fill:#28aca4}.sw-ButtonAddBallot .sw-IconAdd_Path.sw-IconAdd_Path-core{fill:#fff}.sw-ButtonAddBallot .sw-IconAdd_Path.sw-IconAdd_Path-sokol{fill:#fff}.sw-ButtonAddBallot .sw-IconAdd_Path.sw-IconAdd_Path-dai{fill:#fff}.sw-ButtonAddBallot .sw-IconAdd_Path.sw-IconAdd_Path-kovan{fill:#fff}.nl-IconAll_Path.nl-IconAll_Path-core{fill:#60db97}.nl-IconAll_Path.nl-IconAll_Path-sokol{fill:#fff}.nl-IconAll_Path.nl-IconAll_Path-dai{fill:#15bba6}.nl-IconAll_Path.nl-IconAll_Path-kovan{fill:#fff}.sw-IconFinalize_Path.sw-IconFinalize_Path-core{fill:#fff}.sw-IconFinalize_Path.sw-IconFinalize_Path-sokol{fill:#fff}.sw-IconFinalize_Path.sw-IconFinalize_Path-dai{fill:#fff}.sw-IconFinalize_Path.sw-IconFinalize_Path-kovan{fill:#fff}.sw-ButtonFinalize-danger .sw-IconFinalize_Path{fill:#fff !important}.sw-ButtonFinalize-disabled .sw-IconFinalize_Path{fill:#333 !important}.sw-IconGithub{align-items:center;border-radius:3px;display:flex;font-size:0;justify-content:center;line-height:0;transition:box-shadow 0.15s ease-out}.sw-IconGithub:active,.sw-IconGithub:hover{box-shadow:0 0 15px 0 rgba(102,102,102,0.3)}.ft-SocialIcons .sw-IconGithub{margin-right:10px}.sw-IconLoadMore_Path.sw-IconLoadMore_Path-core{fill:#5c34a2}.sw-IconLoadMore_Path.sw-IconLoadMore_Path-sokol{fill:#6ac9b9}.sw-IconLoadMore_Path.sw-IconLoadMore_Path-dai{fill:#333}.sw-IconLoadMore_Path.sw-IconLoadMore_Path-kovan{fill:#28aca4}.sw-ButtonLoadMore:hover .sw-IconLoadMore_Path{opacity:0.7}.hd-IconMobileMenu{display:block;order:3}@media (min-width: 768px){.hd-IconMobileMenu{display:none}}.hd-IconMobileMenu_Path.hd-IconMobileMenu_Path-core{fill:#60db97}.hd-IconMobileMenu_Path.hd-IconMobileMenu_Path-sokol{fill:#fff}.hd-IconMobileMenu_Path.hd-IconMobileMenu_Path-dai{fill:#15bba6}.hd-IconMobileMenu_Path.hd-IconMobileMenu_Path-kovan{fill:#fff}.nl-IconNetwork_Path.nl-IconNetwork_Path-core{fill:#60db97}.nl-IconNetwork_Path.nl-IconNetwork_Path-sokol{fill:#fff}.nl-IconNetwork_Path.nl-IconNetwork_Path-dai{fill:#15bba6}.nl-IconNetwork_Path.nl-IconNetwork_Path-kovan{fill:#fff}.sw-IconPOA{align-items:center;border-radius:3px;display:flex;font-size:0;justify-content:center;line-height:0;transition:box-shadow 0.15s ease-out}.sw-IconPOA:active,.sw-IconPOA:hover{box-shadow:0 0 15px 0 rgba(102,102,102,0.3)}.sw-IconTelegram{align-items:center;border-radius:3px;display:flex;font-size:0;justify-content:center;line-height:0;transition:box-shadow 0.15s ease-out}.sw-IconTelegram:active,.sw-IconTelegram:hover{box-shadow:0 0 15px 0 rgba(102,102,102,0.3)}.ft-SocialIcons .sw-IconTelegram{margin-right:10px}.nl-IconToFinalize_Path.nl-IconToFinalize_Path-core{fill:#60db97}.nl-IconToFinalize_Path.nl-IconToFinalize_Path-sokol{fill:#fff}.nl-IconToFinalize_Path.nl-IconToFinalize_Path-dai{fill:#15bba6}.nl-IconToFinalize_Path.nl-IconToFinalize_Path-kovan{fill:#fff}.sw-IconTwitter{align-items:center;border-radius:3px;display:flex;font-size:0;justify-content:center;line-height:0;transition:box-shadow 0.15s ease-out}.sw-IconTwitter:active,.sw-IconTwitter:hover{box-shadow:0 0 15px 0 rgba(102,102,102,0.3)}.ft-SocialIcons .sw-IconTwitter{margin-right:10px}.frm-KeysTypes{margin-bottom:30px}.frm-KeysTypes_Row{margin-bottom:30px;display:grid;grid-row-gap:30px;grid-template-columns:1fr}.frm-KeysTypes_Row:last-child{margin-bottom:0}@media (min-width: 768px){.frm-KeysTypes_Row{grid-column-gap:30px;grid-template-columns:1fr 1fr 1fr}}.frm-KeysTypes_Button{position:relative}.frm-KeysTypes_Label{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none;border-radius:3px;border:1px solid #e4e4e4;color:#333;cursor:pointer;display:block;font-size:14px;font-weight:400;line-height:50px;margin:0;outline:none;padding:0 15px;text-decoration:none;text-transform:capitalize;text-align:center;transition:0.15s background-color ease-out, 0.15s border-color ease-out;position:relative;white-space:nowrap;z-index:1}.frm-KeysTypes_Label:hover{border-color:#bebebe}.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-core,.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-core:hover{background-color:#5c34a2;border-color:#5c34a2;box-shadow:0 5px 10px 0 rgba(92,52,162,0.3);color:#fff}.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-sokol,.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-sokol:hover{background-color:#6ac9b9;border-color:#6ac9b9;box-shadow:0 5px 10px 0 rgba(106,201,185,0.3);color:#fff}.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-dai,.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-dai:hover{background-color:#15bba6;border-color:#15bba6;box-shadow:0 5px 10px 0 rgba(21,187,166,0.3);color:#fff}.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-kovan,.frm-KeysTypes_Radio:checked+.frm-KeysTypes_Label.frm-KeysTypes_Label-kovan:hover{background-color:#28aca4;border-color:#28aca4;box-shadow:0 5px 10px 0 rgba(40,172,164,0.3);color:#fff}.frm-KeysTypes_Radio{height:100%;position:absolute;visibility:hidden;width:100%;z-index:12}.sw-LoadMore{display:flex;justify-content:center;width:100%}.sw-ButtonLoadMore-dai{border-color:transparent !important}.ld-Loading{align-items:center;background-color:rgba(92,52,162,0.5);bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000000}.ld-Loading.ld-Loading-core{background-color:rgba(92,52,162,0.5)}.ld-Loading.ld-Loading-sokol{background-color:rgba(106,201,185,0.5)}.ld-Loading.ld-Loading-dai{background-color:rgba(21,187,166,0.5)}.ld-Loading.ld-Loading-kovan{background-color:rgba(40,172,164,0.5)}.ld-Loading_Animation{display:flex;justify-content:space-between;width:206px}.ld-Loading_Image{margin-bottom:40px;width:120px}.ld-Loading_AnimationItem{animation-duration:2s;animation-fill-mode:forwards;animation-iteration-count:infinite;animation-name:fadeOut;animation-timing-function:linear;background-color:#fff;border-radius:50%;height:9px;opacity:.2;width:9px}.ld-Loading_AnimationItem:nth-child(2){animation-delay:.1s}.ld-Loading_AnimationItem:nth-child(3){animation-delay:.2s}.ld-Loading_AnimationItem:nth-child(4){animation-delay:.3s}.ld-Loading_AnimationItem:nth-child(5){animation-delay:.4s}.ld-Loading_AnimationItem:nth-child(6){animation-delay:.5s}@keyframes fadeOut{0%{opacity:.2}20%{opacity:1;transform:scale(1)}100%{opacity:.2;transform:scale(0.3)}}.sw-LogoDai{align-items:center;display:flex;justify-content:center}.sw-Header .sw-LogoDai{width:158px}.sw-Footer .sw-LogoDai{width:135px}.sw-LogoDai_Image{display:block;height:100%;width:100%}.sw-LogoPOA{align-items:center;display:flex;justify-content:center}.sw-Header .sw-LogoPOA{width:167px}.sw-Footer .sw-LogoPOA{width:130px}.sw-LogoPOA_Image{display:block;height:100%;width:100%}.sw-LogoSokol{align-items:center;display:flex;justify-content:center}.sw-Header .sw-LogoSokol{width:178px}.sw-Footer .sw-LogoSokol{height:26px}.sw-LogoSokol_Image{display:block;height:100%;width:100%}.sw-LogoKovan{align-items:center;display:flex;justify-content:center}.sw-Header .sw-LogoKovan{width:178px}.sw-Footer .sw-LogoKovan{height:26px}.sw-LogoKovan_Image{display:block;height:100%;width:100%}.sw-MainTitle{display:flex;justify-content:center;max-width:100%;min-height:fit-content;padding:30px 0}.sw-MainTitle_Content{max-width:100%;padding-left:10px;padding-right:10px;width:1000px;min-height:fit-content}@media (min-width: 768px){.sw-MainTitle_Content{padding-left:20px;padding-right:20px}}@media (min-width: 1024px){.sw-MainTitle_Content{padding-left:20px;padding-right:20px}}.sw-MainTitle_Text{color:#333;font-size:24px;line-height:38px;min-height:fit-content}.hd-MobileMenuLinks{background-color:#45277a;padding:10px;width:100%}.hd-MobileMenuLinks.hd-MobileMenuLinks-core{background-color:#45277a}.hd-MobileMenuLinks.hd-MobileMenuLinks-sokol{background-color:#41b19e}.hd-MobileMenuLinks.hd-MobileMenuLinks-dai{background-color:#132942}.hd-MobileMenuLinks.hd-MobileMenuLinks-kovan{background-color:#1f857f}.nl-NavigationLinks{display:flex}.hd-MobileMenuLinks .nl-NavigationLinks{align-items:center;flex-direction:column;margin-bottom:10px}.nl-NavigationLinks_Link{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none;align-items:center;color:#fff;display:flex;font-size:14px;font-weight:700;height:18px;line-height:18px;margin-left:0;opacity:0.7;text-decoration:none;transition:opacity ease-in 0.15s, background-color ease-in 0.15s}.nl-NavigationLinks_Link:active,.nl-NavigationLinks_Link:hover,.nl-NavigationLinks_Link.active{opacity:1}.nl-NavigationLinks_Link.active{cursor:default;pointer-events:none}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-core{color:#fff}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-core:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-core.active{background-color:#2f1b53}@media (min-width: 768px){.nl-NavigationLinks_Link.nl-NavigationLinks_Link-core:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-core.active{background-color:transparent}}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-sokol{color:#fff}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-sokol:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-sokol.active{background-color:#338c7d}@media (min-width: 768px){.nl-NavigationLinks_Link.nl-NavigationLinks_Link-sokol:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-sokol.active{background-color:transparent}}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-dai{color:#fff}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-dai:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-dai.active{background-color:#08101a}@media (min-width: 768px){.nl-NavigationLinks_Link.nl-NavigationLinks_Link-dai:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-dai.active{background-color:transparent}}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-kovan{color:#fff}.nl-NavigationLinks_Link.nl-NavigationLinks_Link-kovan:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-kovan.active{background-color:#e6e6e6}@media (min-width: 768px){.nl-NavigationLinks_Link.nl-NavigationLinks_Link-kovan:active,.nl-NavigationLinks_Link.nl-NavigationLinks_Link-kovan.active{background-color:transparent}}.hd-MobileMenuLinks .nl-NavigationLinks_Link{display:flex;flex-grow:1;height:50px;justify-content:center;width:100%}@media (min-width: 768px){.nl-NavigationLinks_Link{margin-left:34px}}.nl-NavigationLinks_Text{margin-left:10px;text-decoration:none}.new-NewBallot{max-width:100%;padding-left:10px;padding-right:10px;width:1000px}@media (min-width: 768px){.new-NewBallot{padding-left:20px;padding-right:20px}}@media (min-width: 1024px){.new-NewBallot{padding-left:20px;padding-right:20px}}.new-NewBallot_Form{background-color:#fff;border-radius:6px;border:1px solid #e4e4e4;display:block;margin-bottom:30px;overflow:hidden;transition:0.15s box-shadow}@media (min-width: 768px){.new-NewBallot_Form{display:flex}}.new-NewBallot_MenuContainer{background-color:#f8f8f8;border-bottom:1px solid #e4e4e4;box-sizing:border-box;padding-bottom:30px;padding-top:0;width:100%}@media (min-width: 768px){.new-NewBallot_MenuContainer{border-bottom:none;min-width:300px;width:300px}}.new-NewBallot_FormContent{box-sizing:border-box;flex-grow:1;padding:30px}@media (min-width: 768px){.new-NewBallot_FormContent{border-left:1px solid #e4e4e4}}.new-NewBallot_ButtonContainer{display:grid;grid-template-columns:1fr}@media (min-width: 1280px){.new-NewBallot_ButtonContainer{grid-column-gap:30px;grid-template-columns:1fr 1fr}}.mn-NewBallotMenu{background-color:#fff;border-bottom:1px solid #e4e4e4;list-style:none;margin:0;padding:30px}.mn-NewBallotMenu_Item{color:#333;cursor:pointer;font-size:16px;font-weight:400;line-height:45px;position:relative}.mn-NewBallotMenu_Item::before{background-color:transparent;border-bottom-right-radius:5px;border-top-right-radius:5px;content:'';height:30px;left:-30px;position:absolute;top:50%;transform:translateY(-50%);width:4px}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-core.mn-NewBallotMenu_Item-active{color:#5c34a2}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-core.mn-NewBallotMenu_Item-active::before{background-color:#5c34a2}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-sokol.mn-NewBallotMenu_Item-active{color:#6ac9b9}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-sokol.mn-NewBallotMenu_Item-active::before{background-color:#6ac9b9}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-dai.mn-NewBallotMenu_Item-active{color:#15bba6}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-dai.mn-NewBallotMenu_Item-active::before{background-color:#15bba6}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-kovan.mn-NewBallotMenu_Item-active{color:#28aca4}.mn-NewBallotMenu_Item.mn-NewBallotMenu_Item-kovan.mn-NewBallotMenu_Item-active::before{background-color:#28aca4}.mn-NewBallotMenuInfo{padding:30px}.mn-NewBallotMenuInfo_Title{color:#333;font-size:16px;font-weight:400;margin:0 0 30px;padding-left:25px;position:relative}.mn-NewBallotMenuInfo_Title::before{background-image:url("../images/NewBallotMenuInfo/icon.svg");background-position:50% 50%;background-repeat:no-repeat;background-size:10px 18px;content:'';height:32px;left:0;position:absolute;top:50%;transform:translateY(-50%);width:10px}.mn-NewBallotMenuInfo_List{list-style:none;margin:0;padding:0}.mn-NewBallotMenuInfo_ListItem{color:#777;font-size:14px;line-height:1.71;margin-bottom:20px;padding-left:25px;position:relative}.mn-NewBallotMenuInfo_ListItem::before{background-color:#333;border-radius:50%;content:'';height:6px;left:0;position:absolute;top:8px;width:6px}.NetworkSelect{display:flex}@media (min-width: 768px){.NetworkSelect{position:relative;margin-left:34px}.NetworkSelect:hover .NetworkSelect_List{display:block}}.sw-Header_Content .NetworkSelect{display:none}@media (min-width: 768px){.sw-Header_Content .NetworkSelect{display:flex}}.NetworkSelect_Top{display:flex;align-items:center;opacity:.7;transition:.15s ease-in;height:50px;width:100%;justify-content:center;cursor:pointer}.NetworkSelect_Top:hover{opacity:1}@media (min-width: 768px){.NetworkSelect_Top:hover .nl-IconNetwork_Arrow{transform:rotate(180deg)}}.nl-NavigationLinks_Link.opacityFull{opacity:1;flex-direction:column;height:auto !important}.nl-IconNetwork_Arrow{margin-left:10px;transition:.15s ease-in}.nl-IconNetwork_Arrow path{fill:#fff;opacity:.52}.NetworkSelect_List{font-size:14px;font-weight:600;list-style:none;padding-left:0;width:100%;margin:0}@media (min-width: 768px){.NetworkSelect_List{display:none;position:absolute;top:100%;right:0;background-color:#fff;width:180px;border-radius:4px 0 4px 4px;box-shadow:0 5px 10px rgba(0,0,0,0.05);padding-top:8px;padding-bottom:8px}}@media (max-width: 768px){.NetworkSelect_List li.currentNetwork{display:none}}.NetworkSelect_List button{display:flex;width:100%;align-items:center;justify-content:center;text-decoration:none;color:#fff;transition:.15s ease-in;height:50px;background-color:transparent;border:none;cursor:pointer}@media (min-width: 768px){.NetworkSelect_List button{padding:8px 18px;height:auto;color:#333;justify-content:flex-start}.NetworkSelect_List button:hover{background-color:#f7f7f7}}.sw-SearchBar{background-color:#45277a;box-sizing:border-box;display:flex;flex-shrink:0;height:50px;justify-content:center;left:0;padding:10px 0 0 0;position:fixed;right:0;top:70px;z-index:123}.sw-SearchBar.sw-SearchBar-core{background-color:#45277a}.sw-SearchBar.sw-SearchBar-sokol{background-color:#41b19e}.sw-SearchBar.sw-SearchBar-dai{background-color:#132942}.sw-SearchBar.sw-SearchBar-kovan{background-color:#1f857f}.sw-SearchBar_Content{max-width:100%;padding-left:10px;padding-right:10px;width:1000px}@media (min-width: 768px){.sw-SearchBar_Content{padding-left:20px;padding-right:20px}}@media (min-width: 1024px){.sw-SearchBar_Content{padding-left:20px;padding-right:20px}}.sw-SearchBar_Input{background-color:transparent;background-position:0 50%;background-repeat:no-repeat;background-size:16px 16px;border-radius:0;border:none;box-sizing:border-box;display:block;font-size:14px;font-weight:400;height:30px;outline:none;padding-left:30px;width:100%}.sw-SearchBar_Input.sw-SearchBar_Input-core{background-image:url("../images/SearchBar/core.svg")}.sw-SearchBar_Input.sw-SearchBar_Input-core,.sw-SearchBar_Input.sw-SearchBar_Input-core:focus,.sw-SearchBar_Input.sw-SearchBar_Input-core:hover,.sw-SearchBar_Input.sw-SearchBar_Input-core:active{color:#fff}.sw-SearchBar_Input.sw-SearchBar_Input-core::-webkit-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-SearchBar_Input.sw-SearchBar_Input-core:-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-core::-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-core:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-SearchBar_Input.sw-SearchBar_Input-sokol{background-image:url("../images/SearchBar/sokol.svg")}.sw-SearchBar_Input.sw-SearchBar_Input-sokol,.sw-SearchBar_Input.sw-SearchBar_Input-sokol:focus,.sw-SearchBar_Input.sw-SearchBar_Input-sokol:hover,.sw-SearchBar_Input.sw-SearchBar_Input-sokol:active{color:#fff}.sw-SearchBar_Input.sw-SearchBar_Input-sokol::-webkit-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-SearchBar_Input.sw-SearchBar_Input-sokol:-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-sokol::-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-sokol:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-SearchBar_Input.sw-SearchBar_Input-dai{background-image:url("../images/SearchBar/dai.svg")}.sw-SearchBar_Input.sw-SearchBar_Input-dai,.sw-SearchBar_Input.sw-SearchBar_Input-dai:focus,.sw-SearchBar_Input.sw-SearchBar_Input-dai:hover,.sw-SearchBar_Input.sw-SearchBar_Input-dai:active{color:#fff}.sw-SearchBar_Input.sw-SearchBar_Input-dai::-webkit-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-SearchBar_Input.sw-SearchBar_Input-dai:-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-dai::-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-dai:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-SearchBar_Input.sw-SearchBar_Input-kovan{background-image:url("../images/SearchBar/kovan.svg")}.sw-SearchBar_Input.sw-SearchBar_Input-kovan,.sw-SearchBar_Input.sw-SearchBar_Input-kovan:focus,.sw-SearchBar_Input.sw-SearchBar_Input-kovan:hover,.sw-SearchBar_Input.sw-SearchBar_Input-kovan:active{color:#fff}.sw-SearchBar_Input.sw-SearchBar_Input-kovan::-webkit-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.sw-SearchBar_Input.sw-SearchBar_Input-kovan:-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-kovan::-moz-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important;opacity:1}.sw-SearchBar_Input.sw-SearchBar_Input-kovan:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important;font-size:14px !important}.top-Select{flex-grow:1;max-width:140px}@media (min-width: 1024px){.top-Select{margin-left:20px}}.sw-Separator{background-color:#e4e4e4;border:0;display:block;height:1px;margin:30px 0;width:100%}.ft-SocialIcons{align-items:center;display:flex;justify-content:space-between;padding-top:15px}@media (min-width: 768px){.ft-SocialIcons{padding-top:0}}.frm-Validator{margin-bottom:30px}.frm-Validator_Row{margin-bottom:30px;display:grid;grid-row-gap:30px;grid-template-columns:1fr}.frm-Validator_Row:last-child{margin-bottom:0}@media (min-width: 1280px){.frm-Validator_Row{grid-column-gap:30px;grid-template-columns:1fr 1fr}}.vt-VoteProgressBar{width:100%}.vt-VoteProgressBar_Scale{background-color:#f0f0f0;border-radius:5px;clear:left;height:10px;margin-top:34px;overflow:hidden}.vt-VoteProgressBar_Progress{border-bottom-right-radius:5px;border-top-right-radius:5px;height:100%}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-negative.vt-VoteProgressBar_Progress-core{background-color:#f21b57}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-neutral.vt-VoteProgressBar_Progress-core{background-color:#50bbda}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-positive.vt-VoteProgressBar_Progress-core{background-color:#60db97}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-negative.vt-VoteProgressBar_Progress-sokol{background-color:#f24c67}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-neutral.vt-VoteProgressBar_Progress-sokol{background-color:#50bbda}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-positive.vt-VoteProgressBar_Progress-sokol{background-color:#6ac9b9}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-negative.vt-VoteProgressBar_Progress-dai{background-color:#f21b57}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-neutral.vt-VoteProgressBar_Progress-dai{background-color:#50bbda}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-positive.vt-VoteProgressBar_Progress-dai{background-color:#15bba6}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-negative.vt-VoteProgressBar_Progress-kovan{background-color:#f24c67}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-neutral.vt-VoteProgressBar_Progress-kovan{background-color:#50bbda}.vt-VoteProgressBar_Progress.vt-VoteProgressBar_Progress-positive.vt-VoteProgressBar_Progress-kovan{background-color:#6ac9b9}.vt-VoteProgressBar_Votes{color:#333;float:right;font-size:13px;margin:0 0 0 10px}.vt-VoteProgressBar_Percentage{color:#000;float:right;font-size:14px;font-weight:700;margin:0}.vt-Votes{border-top:1px solid #e4e4e4;display:flex;margin-bottom:30px;margin-top:30px;padding:30px 0 0 0}@media screen and (max-width: 768px){.vt-Votes{display:block;margin-top:15px;padding:15px 0 0 0}}@media screen and (max-width: 767px){.vt-Votes{margin-top:10px;padding:10px 0 0 0}}.vt-Votes_ScaleColumn{display:flex;flex-grow:1;justify-content:space-between;margin-right:40px}@media screen and (max-width: 768px){.vt-Votes_ScaleColumn{margin-bottom:30px;margin-right:0;overflow:hidden;width:100%}}.vt-Votes_ScaleColumn:last-child{margin-right:0}@media screen and (max-width: 768px){.vt-Votes_ScaleColumn.reverse-responsive{flex-direction:row-reverse}} diff --git a/src/components/BallotCard/index.js b/src/components/BallotCard/index.js index 932353d..6a07070 100644 --- a/src/components/BallotCard/index.js +++ b/src/components/BallotCard/index.js @@ -7,7 +7,7 @@ import { BallotInfoContainer } from '../BallotInfoContainer' import { Votes } from '../Votes' import { getNetworkBranch } from '../../utils/utils' import { inject, observer } from 'mobx-react' -import { messages } from '../../utils/messages' +import messages from '../../utils/messages' import { observable, action, computed } from 'mobx' import { sendTransactionByVotingKey } from '../../utils/helpers' @@ -374,6 +374,9 @@ export class BallotCard extends React.Component { if (!contractsStore.votingKey) { swal('Warning!', messages.NO_METAMASK_MSG, 'warning') return + } else if (!contractsStore.networkMatch) { + swal('Warning!', messages.networkMatchError(contractsStore.netId), 'warning') + return } else if (!contractsStore.isValidVotingKey) { swal('Warning!', messages.invalidVotingKeyMsg(contractsStore.votingKey), 'warning') return @@ -511,6 +514,9 @@ export class BallotCard extends React.Component { if (!contractsStore.votingKey) { swal('Warning!', messages.NO_METAMASK_MSG, 'warning') return + } else if (!contractsStore.networkMatch) { + swal('Warning!', messages.networkMatchError(contractsStore.netId), 'warning') + return } else if (!contractsStore.isValidVotingKey) { swal('Warning!', messages.invalidVotingKeyMsg(contractsStore.votingKey), 'warning') return diff --git a/src/components/BallotProxyMetadata/index.js b/src/components/BallotProxyMetadata/index.js index b81e01b..88ff491 100644 --- a/src/components/BallotProxyMetadata/index.js +++ b/src/components/BallotProxyMetadata/index.js @@ -2,14 +2,12 @@ import React from 'react' import { FormInput } from '../FormInput' import { FormSelect } from '../FormSelect' import { inject, observer } from 'mobx-react' -import { constants } from '../../utils/constants' -import { getNetworkName } from '../../utils/utils' -@inject('ballotStore', 'contractsStore') +@inject('ballotStore') @observer export class BallotProxyMetadata extends React.Component { render() { - const { ballotStore, contractsStore, networkBranch } = this.props + const { ballotStore, networkBranch } = this.props let options = [ /*0*/ { value: '', label: '' }, /*1*/ { value: '1', label: ballotStore.ProxyBallotType[1] }, // KeysManager diff --git a/src/components/Header/index.js b/src/components/Header/index.js index 100165e..c5015e8 100644 --- a/src/components/Header/index.js +++ b/src/components/Header/index.js @@ -1,20 +1,31 @@ import React from 'react' + import { ButtonNewBallot } from '../ButtonNewBallot' import { IconMobileMenu } from '../IconMobileMenu' import { Logo } from '../Logo' import { MobileMenuLinks } from '../MobileMenuLinks' import { NavigationLinks } from '../NavigationLinks' +import NetworkSelect from '../NetworkSelect' -export const Header = ({ baseRootPath = '', networkBranch = undefined, onMenuToggle, showMobileMenu = false }) => { +export const Header = ({ + baseRootPath = '', + networkBranch = undefined, + onChange, + onMenuToggle, + showMobileMenu = false +}) => { return (
- {showMobileMenu ? : null} + {showMobileMenu ? ( + + ) : null}
+
diff --git a/src/components/MobileMenuLinks/index.js b/src/components/MobileMenuLinks/index.js index 62ed93e..b3ee1cb 100644 --- a/src/components/MobileMenuLinks/index.js +++ b/src/components/MobileMenuLinks/index.js @@ -1,12 +1,14 @@ import React from 'react' import { ButtonNewBallot } from '../ButtonNewBallot' import { NavigationLinks } from '../NavigationLinks' +import NetworkSelect from '../NetworkSelect' -export const MobileMenuLinks = ({ onClick, networkBranch }) => { +export const MobileMenuLinks = ({ onClick, networkBranch, onNetworkChange }) => { return (
+
) } diff --git a/src/components/NetworkSelect/index.js b/src/components/NetworkSelect/index.js new file mode 100644 index 0000000..9d0bc37 --- /dev/null +++ b/src/components/NetworkSelect/index.js @@ -0,0 +1,72 @@ +import React, { Component } from 'react' +import { constants } from '../../utils/constants' + +export default class NetworkSelect extends Component { + changeNetworkRPC(e) { + e.preventDefault() + let getCurrentClickedLink = e.target.innerHTML + let getCurrentClickedLinkId = '' + for (const _netId in constants.NETWORKS) { + if (constants.NETWORKS[_netId].FULLNAME === getCurrentClickedLink) { + getCurrentClickedLinkId = _netId + } + } + this.props.onChange({ value: getCurrentClickedLinkId }) + } + + render() { + let networkFullNames = [] + let currentNetworkFullName = '' + + const networks = constants.NETWORKS + + let netIds = [] + Object.keys(networks) + .sort((a, b) => (networks[a].SORTORDER > networks[b].SORTORDER ? 1 : -1)) + .forEach(function(_netId) { + netIds.push(_netId) + }) + + let selectedNetworkIndex = -1 + + netIds.forEach(_netId => { + networkFullNames.push(networks[_netId].FULLNAME) + if (networks[_netId].BRANCH === this.props.networkBranch) { + currentNetworkFullName = networks[_netId].FULLNAME + selectedNetworkIndex = networkFullNames.length - 1 + } + }) + + const listItems = networkFullNames.map((name, index) => { + let className = '' + if (index === selectedNetworkIndex) { + className = 'currentNetwork' + } + return ( +
  • + +
  • + ) + }) + + return ( +
    +
    + + + + + {currentNetworkFullName} + + + + +
    +
      {listItems}
    +
    + ) + } +} diff --git a/src/components/NewBallot/index.js b/src/components/NewBallot/index.js index 2a5a61b..0a189ab 100644 --- a/src/components/NewBallot/index.js +++ b/src/components/NewBallot/index.js @@ -15,7 +15,7 @@ import { Validator } from '../Validator' import { constants } from '../../utils/constants' import { getNetworkBranch } from '../../utils/utils' import { inject, observer } from 'mobx-react' -import { messages } from '../../utils/messages' +import messages from '../../utils/messages' import { sendTransactionByVotingKey } from '../../utils/helpers' @inject('commonStore', 'ballotStore', 'validatorStore', 'contractsStore', 'routing', 'ballotsStore') @@ -40,9 +40,10 @@ export class NewBallot extends React.Component { } checkValidation() { - const { commonStore, contractsStore, ballotStore, validatorStore } = this.props + const { commonStore, contractsStore, ballotStore } = this.props // Temporarily commented (until we implement https://github.com/poanetwork/poa-dapps-voting/issues/120) + // const { validatorStore } = this.props // if (ballotStore.isNewValidatorPersonalData) { // for (let validatorProp in validatorStore) { // if (validatorStore[validatorProp].length === 0) { @@ -255,6 +256,9 @@ export class NewBallot extends React.Component { if (!contractsStore.votingKey) { swal('Warning!', messages.NO_METAMASK_MSG, 'warning') return + } else if (!contractsStore.networkMatch) { + swal('Warning!', messages.networkMatchError(contractsStore.netId), 'warning') + return } else if (!contractsStore.isValidVotingKey) { swal('Warning!', messages.invalidVotingKeyMsg(contractsStore.votingKey), 'warning') return diff --git a/src/components/SearchBar/index.js b/src/components/SearchBar/index.js index c0091b7..2b1ec60 100644 --- a/src/components/SearchBar/index.js +++ b/src/components/SearchBar/index.js @@ -1,16 +1,36 @@ import React from 'react' -export const SearchBar = ({ extraClassName = '', networkBranch = false, onSearch }) => { - return ( -
    -
    - +export class SearchBar extends React.Component { + constructor(props) { + super(props) + this.state = { searchTerm: '' } + } + + setSearchTerm(searchTerm) { + this.setState({ searchTerm }) + } + + componentDidMount() { + const { searchTerm } = this.props + if (searchTerm !== undefined) { + this.setSearchTerm(searchTerm) + } + } + + render() { + const { networkBranch, onSearch } = this.props + return ( +
    +
    + +
    -
    - ) + ) + } } diff --git a/src/components/Validator/index.js b/src/components/Validator/index.js index a00e95b..1b17667 100644 --- a/src/components/Validator/index.js +++ b/src/components/Validator/index.js @@ -1,7 +1,7 @@ import React from 'react' -import { FormAutocomplete } from '../FormAutocomplete' -import { FormInput } from '../FormInput' -import { FormSelect } from '../FormSelect' +//import { FormAutocomplete } from '../FormAutocomplete' +//import { FormInput } from '../FormInput' +//import { FormSelect } from '../FormSelect' import { constants } from '../../utils/constants' import { geocodeByAddress } from 'react-places-autocomplete' import { inject, observer } from 'mobx-react' @@ -64,6 +64,7 @@ export class Validator extends React.Component { render() { return null // Temporarily empty (until we implement https://github.com/poanetwork/poa-dapps-voting/issues/120) + /* const { validatorStore, networkBranch } = this.props const inputProps = { value: validatorStore.address, @@ -190,5 +191,6 @@ export class Validator extends React.Component {
    ) + */ } } diff --git a/src/contracts/helpers.js b/src/contracts/helpers.js index 6956a7e..4815e69 100644 --- a/src/contracts/helpers.js +++ b/src/contracts/helpers.js @@ -1,5 +1,5 @@ import { constants } from '../utils/constants' -import { messages } from '../utils/messages' +import messages from '../utils/messages' import swal from 'sweetalert2' function addressesURL(branch) { diff --git a/src/index.js b/src/index.js index f8970f4..abc3853 100644 --- a/src/index.js +++ b/src/index.js @@ -16,6 +16,7 @@ import { Router, Route } from 'react-router-dom' import { RouterStore, syncHistoryWithStore } from 'mobx-react-router' import { constants } from './utils/constants' import { getContractsAddresses } from './contracts/addresses' +import { getNetworkBranch } from './utils/utils' const browserHistory = createBrowserHistory() const routingStore = new RouterStore() @@ -32,56 +33,14 @@ class AppMainRouter extends Component { super(props) commonStore.showLoading() - getWeb3() + window.addEventListener('load', () => this.initChain()) + } + + initChain = () => { + const netId = window.localStorage.netId + getWeb3(netId, this.onAccountChange) .then(async web3Config => { - await getContractsAddresses(constants.NETWORKS[web3Config.netId].BRANCH) - - contractsStore.setWeb3Instance(web3Config) - - const setPoaConsensus = contractsStore.setPoaConsensus(web3Config) - const setBallotsStorage = contractsStore.setBallotsStorage(web3Config) - const setKeysManager = contractsStore.setKeysManager(web3Config) - const setProxyStorage = contractsStore.setProxyStorage(web3Config) - const setVotingToChangeKeys = contractsStore.setVotingToChangeKeys(web3Config) - const setVotingToChangeMinThreshold = contractsStore.setVotingToChangeMinThreshold(web3Config) - const setVotingToChangeProxy = contractsStore.setVotingToChangeProxy(web3Config) - const setValidatorMetadata = contractsStore.setValidatorMetadata(web3Config) - - let promises = [ - setPoaConsensus, - setBallotsStorage, - setKeysManager, - setProxyStorage, - setVotingToChangeKeys, - setVotingToChangeMinThreshold, - setVotingToChangeProxy, - setValidatorMetadata - ] - - const networkName = constants.NETWORKS[web3Config.netId].NAME.toLowerCase() - if (networkName === constants.CORE || networkName === constants.SOKOL) { - // if we're in Core or Sokol - promises.push(contractsStore.setEmissionFunds(web3Config)) - promises.push(contractsStore.setVotingToManageEmissionFunds(web3Config)) - } - - await Promise.all(promises) - - await contractsStore.setMiningKey(web3Config) - await contractsStore.setVotingKey(web3Config) - - contractsStore.getKeysBallotThreshold() - contractsStore.getProxyBallotThreshold() - contractsStore.getBallotCancelingThreshold() - - await contractsStore.getBallotsLimits() - - await contractsStore.getAllValidatorMetadata() - await contractsStore.getAllBallots() - - console.log('votingKey', contractsStore.votingKey) - console.log('miningKey', contractsStore.miningKey) - + await this.initialize(web3Config) commonStore.hideLoading() }) .catch(error => { @@ -90,17 +49,82 @@ class AppMainRouter extends Component { swal({ title: 'Error', html: generateElement(error.message), - icon: 'error', type: 'error' }) }) } + initialize = async web3Config => { + await getContractsAddresses(constants.NETWORKS[web3Config.netId].BRANCH) + + contractsStore.setWeb3Instance(web3Config) + + const setPoaConsensus = contractsStore.setPoaConsensus(web3Config) + const setBallotsStorage = contractsStore.setBallotsStorage(web3Config) + const setKeysManager = contractsStore.setKeysManager(web3Config) + const setProxyStorage = contractsStore.setProxyStorage(web3Config) + const setVotingToChangeKeys = contractsStore.setVotingToChangeKeys(web3Config) + const setVotingToChangeMinThreshold = contractsStore.setVotingToChangeMinThreshold(web3Config) + const setVotingToChangeProxy = contractsStore.setVotingToChangeProxy(web3Config) + const setValidatorMetadata = contractsStore.setValidatorMetadata(web3Config) + + let promises = [ + setPoaConsensus, + setBallotsStorage, + setKeysManager, + setProxyStorage, + setVotingToChangeKeys, + setVotingToChangeMinThreshold, + setVotingToChangeProxy, + setValidatorMetadata + ] + + const networkName = constants.NETWORKS[web3Config.netId].NAME.toLowerCase() + if (networkName === constants.CORE || networkName === constants.SOKOL) { + // if we're in Core or Sokol + promises.push(contractsStore.setEmissionFunds(web3Config)) + promises.push(contractsStore.setVotingToManageEmissionFunds(web3Config)) + } + + await Promise.all(promises) + + await this.setKeys(web3Config.defaultAccount) + + contractsStore.getKeysBallotThreshold() + contractsStore.getProxyBallotThreshold() + contractsStore.getBallotCancelingThreshold() + + await contractsStore.getBallotsLimits() + + await contractsStore.getAllValidatorMetadata() + await contractsStore.getAllBallots() + } + + onNetworkChange = e => { + commonStore.showLoading(getNetworkBranch(e.value)) + window.localStorage.netId = e.value + contractsStore.resetContracts() + ballotsStore.reset() + this.initChain() + } + + onAccountChange = account => { + this.setKeys(account) + } + + setKeys = async account => { + await contractsStore.setMiningKey(account) + await contractsStore.setVotingKey(account) + + console.log('votingKey', contractsStore.votingKey) + console.log('miningKey', contractsStore.miningKey) + } + render() { return ( - + } /> ) diff --git a/src/stores/BallotsStore.js b/src/stores/BallotsStore.js index a6ba107..c7b747e 100644 --- a/src/stores/BallotsStore.js +++ b/src/stores/BallotsStore.js @@ -4,6 +4,10 @@ class BallotsStore { @observable ballotCards constructor() { + this.reset() + } + + reset() { this.ballotCards = [] } } diff --git a/src/stores/CommonStore.js b/src/stores/CommonStore.js index b7138ab..321e4bd 100644 --- a/src/stores/CommonStore.js +++ b/src/stores/CommonStore.js @@ -2,6 +2,7 @@ import { observable, action } from 'mobx' class CommonStore { @observable loading + @observable loadingNetworkBranch @observable rootPath @observable isActiveFilter @observable isToFinalizeFilter @@ -10,6 +11,7 @@ class CommonStore { constructor() { this.loading = false + this.loadingNetworkBranch = null this.isActiveFilter = false this.isToFinalizeFilter = false this.rootPath = '/poa-dapps-voting' @@ -17,13 +19,15 @@ class CommonStore { } @action('show loading') - showLoading() { + showLoading(loadingNetworkBranch) { this.loading = true + this.loadingNetworkBranch = loadingNetworkBranch } @action('hide loading') hideLoading() { this.loading = false + this.loadingNetworkBranch = null } @action('set search term') diff --git a/src/stores/ContractsStore.js b/src/stores/ContractsStore.js index e07e3fb..1ec1914 100644 --- a/src/stores/ContractsStore.js +++ b/src/stores/ContractsStore.js @@ -46,6 +46,7 @@ class ContractsStore { @observable minBallotDuration @observable validatorsMetadata @observable netId + @observable injectedWeb3 constructor() { this.votingKey = null @@ -53,6 +54,7 @@ class ContractsStore { this.validatorsMetadata = {} this.validatorLimits = { keys: null, minThreshold: null, proxy: null } this.minBallotDuration = { keys: 0, minThreshold: 0, proxy: 0 } + this.injectedWeb3 = false } @computed @@ -84,6 +86,22 @@ class ContractsStore { setWeb3Instance = web3Config => { this.web3Instance = web3Config.web3Instance this.netId = web3Config.netId + this.injectedWeb3 = web3Config.injectedWeb3 + this.networkMatch = web3Config.networkMatch + } + + @action('Reset contracts') + resetContracts = () => { + this.poaConsensus = null + this.ballotsStorage = null + this.emissionFunds = null + this.keysManager = null + this.proxyStorage = null + this.votingToChangeKeys = null + this.votingToChangeMinThreshold = null + this.votingToChangeProxy = null + this.votingToManageEmissionFunds = null + this.validatorMetadata = null } @action('Set PoA Consensus contract') @@ -182,14 +200,14 @@ class ContractsStore { } @action('Set voting key') - setVotingKey = web3Config => { - this.votingKey = web3Config.defaultAccount + setVotingKey = account => { + this.votingKey = account } @action('Set mining key') - setMiningKey = async web3Config => { + setMiningKey = async account => { try { - this.miningKey = await this.keysManager.instance.methods.miningKeyByVoting(web3Config.defaultAccount).call() + this.miningKey = await this.keysManager.instance.methods.miningKeyByVoting(account).call() } catch (e) { console.log(e) this.miningKey = '0x0000000000000000000000000000000000000000' diff --git a/src/utils/constants.js b/src/utils/constants.js index 056822b..29f9742 100644 --- a/src/utils/constants.js +++ b/src/utils/constants.js @@ -59,27 +59,31 @@ constants.KOVAN = 'kovan' constants.NETWORKS = { '42': { NAME: 'Kovan', + FULLNAME: 'Kovan Testnet', RPC: 'https://kovan.infura.io/v3/1125fe73d87c4e5396678f4e3089b3dd', BRANCH: constants.KOVAN, - TESTNET: true + SORTORDER: 3 }, '77': { NAME: 'Sokol', + FULLNAME: 'Sokol Testnet', RPC: 'https://sokol.poa.network', BRANCH: constants.SOKOL, - TESTNET: true + SORTORDER: 4 }, '99': { NAME: 'Core', + FULLNAME: 'POA Core', RPC: 'https://core.poa.network', BRANCH: constants.CORE, - TESTNET: false + SORTORDER: 1 }, '100': { - NAME: 'Dai', + NAME: 'xDai', + FULLNAME: 'xDai Stable Chain', RPC: 'https://dai.poa.network', BRANCH: constants.DAI, - TESTNET: false + SORTORDER: 2 } } diff --git a/src/utils/getWeb3.js b/src/utils/getWeb3.js index b61da6b..d69a135 100644 --- a/src/utils/getWeb3.js +++ b/src/utils/getWeb3.js @@ -1,80 +1,71 @@ import Web3 from 'web3' -import { messages } from './messages' +import helpers from './helpers' import { constants } from './constants' -import { netIdByName } from './helpers' -let getWeb3 = () => { - return new Promise((resolve, reject) => { - // Wait for loading completion to avoid race conditions with web3 injection timing. - window.addEventListener('load', async () => { - let web3 = null +const defaultNetId = helpers.netIdByBranch(constants.CORE) - // Checking if Web3 has been injected by the browser (Mist/MetaMask) - if (window.ethereum) { - web3 = new Web3(window.ethereum) - console.log('Injected web3 detected.') - try { - await window.ethereum.enable() - } catch (e) { - console.error('User denied account access') - reject({ message: messages.USER_DENIED_ACCOUNT_ACCESS }) - return - } - } else if (typeof window.web3 !== 'undefined') { - web3 = new Web3(window.web3.currentProvider) - console.log('Injected web3 detected.') +export default async function getWeb3(netId = defaultNetId, onAccountChange) { + let web3 = null + netId = Number(netId) + + // Checking if Web3 has been injected by the browser (Mist/MetaMask) + if (window.ethereum) { + web3 = new Web3(window.ethereum) + console.log('Injected web3 detected.') + try { + await window.ethereum.enable() + } catch (e) { + throw Error('You have denied access to your accounts') + } + window.ethereum.autoRefreshOnNetworkChange = true + } else if (window.web3) { + web3 = new Web3(window.web3.currentProvider) + console.log('Injected web3 detected.') + } + + const network = constants.NETWORKS[netId] + const injectedWeb3 = web3 !== null + let netIdName = network.NAME + let defaultAccount = null + let networkMatch = false + + if (web3) { + const accounts = await web3.eth.getAccounts() + defaultAccount = accounts[0] || null + + if (!defaultAccount) { + console.error('Unlock your wallet') + } + + let currentAccount = defaultAccount ? defaultAccount.toLowerCase() : '' + web3.currentProvider.publicConfigStore.on('update', function(obj) { + const account = obj.selectedAddress + if (account && account !== currentAccount) { + currentAccount = account + onAccountChange(account) } - - let errorMsg = null - let netIdName - let netId - let defaultAccount = null - - if (web3) { - netId = await web3.eth.net.getId() - console.log('netId', netId) - - if (!(netId in constants.NETWORKS)) { - netIdName = 'ERROR' - errorMsg = messages.WRONG_NETWORK_MSG - console.log('This is an unknown network.') - } else { - netIdName = constants.NETWORKS[netId].NAME - console.log(`This is ${netIdName}`) - } - - const accounts = await web3.eth.getAccounts() - - defaultAccount = accounts[0] || null - } else { - // Fallback to local if no web3 injection. - - console.log('No web3 instance injected, using Local web3.') - console.error('Metamask not found') - - netId = netIdByName(constants.CORE) - - const network = constants.NETWORKS[netId] - - web3 = new Web3(new Web3.providers.HttpProvider(network.RPC)) - netIdName = network.NAME - } - - document.title = `${netIdName} - POA Network Governance DApp` - - if (errorMsg !== null) { - reject({ message: errorMsg }) - return - } - - resolve({ - web3Instance: web3, - netIdName, - netId, - defaultAccount - }) }) - }) -} -export default getWeb3 + const web3NetId = await web3.eth.net.getId() + if (web3NetId === netId) { + networkMatch = true + } else { + web3 = null + } + } + + if (!web3) { + web3 = new Web3(new Web3.providers.HttpProvider(network.RPC)) + } + + document.title = `${netIdName} - POA Governance DApp` + + return { + web3Instance: web3, + netId, + netIdName, + injectedWeb3, + defaultAccount, + networkMatch + } +} diff --git a/src/utils/helpers.js b/src/utils/helpers.js index 1548423..c921bd5 100644 --- a/src/utils/helpers.js +++ b/src/utils/helpers.js @@ -58,10 +58,10 @@ function sendTransactionByVotingKey(props, to, data, cb, warning) { ) } -function netIdByName(netName) { - const netNameLowerCase = netName.toLowerCase() +function netIdByBranch(branch) { + const branchLowerCase = branch.toLowerCase() for (let netId in constants.NETWORKS) { - if (constants.NETWORKS[netId].NAME.toLowerCase() === netNameLowerCase) { + if (constants.NETWORKS[netId].BRANCH.toLowerCase() === branchLowerCase) { return netId } } @@ -71,5 +71,5 @@ function netIdByName(netName) { module.exports = { toAscii, sendTransactionByVotingKey, - netIdByName + netIdByBranch } diff --git a/src/utils/messages.js b/src/utils/messages.js index a433b4d..18b71d2 100644 --- a/src/utils/messages.js +++ b/src/utils/messages.js @@ -1,6 +1,8 @@ +import { getNetworkFullName } from './utils' + let messages = {} messages.invalidVotingKeyMsg = key => { - return `The key ${key} is not valid voting Key! Please make sure you have loaded correct voting key in Metamask` + return `The key ${key} is not valid Voting Key! Please make sure you have loaded correct Voting Key in MetaMask.` } messages.VOTED_SUCCESS_MSG = 'You successfully voted' messages.BALLOT_CREATED_SUCCESS_MSG = 'You successfully created a new ballot' @@ -16,12 +18,7 @@ messages.PROPOSED_ADDRESS_IS_NOT_ADDRESS_MSG = "Proposed address isn't address" messages.END_TIME_SHOULD_BE_GREATER_THAN_NOW_MSG = 'Ballot end time should be greater than now' messages.BALLOT_TYPE_IS_EMPTY_MSG = 'Ballot type is empty' messages.USER_DENIED_ACCOUNT_ACCESS = 'You have denied access to your accounts' -messages.NO_METAMASK_MSG = `You haven't chosen any account in MetaMask. -Please, choose your voting key in MetaMask and reload the page. -Check POA Network wiki for more info.` -messages.WRONG_NETWORK_MSG = `You aren't connected to POA Network. -Please, switch on POA plugin and refresh the page. -Check POA Network wiki for more info.` +messages.NO_METAMASK_MSG = 'Your MetaMask is locked or not installed.' messages.ballotIsNotActiveMsg = timeToStart => { return `The ballot is not active yet. Time to start: ${timeToStart}` } @@ -38,17 +35,20 @@ messages.EMISSION_RELEASE_TIME_IN_FUTURE = emissionReleaseTime => { } messages.PREVIOUS_BALLOT_NOT_FINALIZED = 'Previous ballot should be finalized first.' messages.BALLOT_CREATE_FAILED_TX = `Your transaction was failed. Please make sure you set correct parameters for ballot creation. -Make sure you don't have Transaction Error. Exception thrown in contract code message in Metamask before you sign it.` +Make sure you don't have Transaction Error. Exception thrown in contract code message in MetaMask before you sign it.` messages.VOTE_FAILED_TX = `Your transaction was failed. Please make sure you haven't already voted for this ballot. -Make sure you don't have Transaction Error. Exception thrown in contract code message in Metamask before you sign it.` +Make sure you don't have Transaction Error. Exception thrown in contract code message in MetaMask before you sign it.` messages.FINALIZE_FAILED_TX = `Your transaction was failed. Make sure you don't have Transaction Error. -Exception thrown in contract code message in Metamask before you sign it.` +Exception thrown in contract code message in MetaMask before you sign it.` messages.CANCEL_BALLOT_FAILED_TX = `Your transaction was failed. Make sure you don't have Transaction Error. -Exception thrown in contract code message in Metamask before you sign it.` +Exception thrown in contract code message in MetaMask before you sign it.` messages.DESCRIPTION_IS_EMPTY = 'Description cannot be empty' messages.wrongRepo = repo => { return `There is no contracts.json in configured repo ${repo}` } -module.exports = { - messages +messages.networkMatchError = function(netId) { + const networkName = getNetworkFullName(Number(netId)) + return `Networks in DApp and MetaMask do not match. Switch MetaMask to ${networkName} or change the network in DApp.` } + +export default messages diff --git a/src/utils/utils.js b/src/utils/utils.js index 08b65a5..aaf2db9 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -1,19 +1,11 @@ import { constants } from './constants' -export const isTestnet = netId => { - return netId in constants.NETWORKS && constants.NETWORKS[netId].TESTNET -} - -export const isValidNetwork = netId => { - return netId in constants.NETWORKS -} - export const getNetworkBranch = netId => { return constants.NETWORKS[netId].BRANCH } -export const getNetworkName = netId => { - return constants.NETWORKS[netId].NAME +export const getNetworkFullName = netId => { + return constants.NETWORKS[netId].FULLNAME } export const scrollToTop = () => {