diff --git a/go.mod b/go.mod index 4526aae3d5501de31344e16c149200b281287a1c..be6bf8a770a03cdb13dc6d122563ce34339b40ec 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.12 require ( github.com/dgraph-io/badger v1.6.0 + github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/ethereum/go-ethereum v1.9.1 github.com/gdamore/tcell v1.2.0 github.com/go-zeromq/zmq4 v0.5.0 diff --git a/go.sum b/go.sum index 331a8ca2b0606ab27d583513ff5d7204af6baa29..23056f6d6b6b41a9ccda87e802b8ae76407e218c 100644 --- a/go.sum +++ b/go.sum @@ -18,6 +18,8 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/dgraph-io/badger v1.5.4/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= github.com/dgraph-io/badger v1.6.0 h1:DshxFxZWXUcO0xX476VJC07Xsr6ZCBVRHKZ93Oh7Evo= github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190323231341-8198c7b169ec/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= diff --git a/main.go b/main.go index 7b640965b688b4f20752a8ef153a9d1f8c2401a6..8f742526f78c50838f7a576d4b1e466ff59e7912 100644 --- a/main.go +++ b/main.go @@ -8,16 +8,18 @@ import ( "github.com/iotaledger/goshimmer/plugins/cli" "github.com/iotaledger/goshimmer/plugins/dashboard" "github.com/iotaledger/goshimmer/plugins/gossip" - "github.com/iotaledger/goshimmer/plugins/gossip-on-solidification" + gossip_on_solidification "github.com/iotaledger/goshimmer/plugins/gossip-on-solidification" "github.com/iotaledger/goshimmer/plugins/gracefulshutdown" "github.com/iotaledger/goshimmer/plugins/metrics" "github.com/iotaledger/goshimmer/plugins/statusscreen" statusscreen_tps "github.com/iotaledger/goshimmer/plugins/statusscreen-tps" "github.com/iotaledger/goshimmer/plugins/tangle" "github.com/iotaledger/goshimmer/plugins/tipselection" + "github.com/iotaledger/goshimmer/plugins/ui" "github.com/iotaledger/goshimmer/plugins/webapi" webapi_gtta "github.com/iotaledger/goshimmer/plugins/webapi-gtta" webapi_spammer "github.com/iotaledger/goshimmer/plugins/webapi-spammer" + "github.com/iotaledger/goshimmer/plugins/webauth" "github.com/iotaledger/goshimmer/plugins/zeromq" ) @@ -42,5 +44,8 @@ func main() { webapi.PLUGIN, webapi_gtta.PLUGIN, webapi_spammer.PLUGIN, + + ui.PLUGIN, + webauth.PLUGIN, ) } diff --git a/plugins/ui/css/bulma-darkly.css b/plugins/ui/css/bulma-darkly.css new file mode 100644 index 0000000000000000000000000000000000000000..ec4e4c4e2afd94099d97d41d1eb66f881a08985e --- /dev/null +++ b/plugins/ui/css/bulma-darkly.css @@ -0,0 +1,7033 @@ +/*! bulmaswatch v0.7.2 | MIT License */ +/*! bulma.io v0.7.2 | MIT License | github.com/jgthms/bulma */ +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic); +@keyframes spinAround { + from { + transform: rotate(0deg); } + to { + transform: rotate(359deg); } } + +.delete, .modal-close, .is-unselectable, .button, .file, .breadcrumb, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .tabs { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.select:not(.is-multiple):not(.is-loading)::after, .navbar-link:not(.is-arrowless)::after { + border: 3px solid transparent; + border-radius: 2px; + border-right: 0; + border-top: 0; + content: " "; + display: block; + height: 0.625em; + margin-top: -0.4375em; + pointer-events: none; + position: absolute; + top: 50%; + transform: rotate(-45deg); + transform-origin: center; + width: 0.625em; } + +.box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child), +.subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .list:not(:last-child), .message:not(:last-child), .tabs:not(:last-child) { + margin-bottom: 1.5rem; } + +.delete, .modal-close { + -moz-appearance: none; + -webkit-appearance: none; + background-color: rgba(10, 10, 10, 0.2); + border: none; + border-radius: 290486px; + cursor: pointer; + pointer-events: auto; + display: inline-block; + flex-grow: 0; + flex-shrink: 0; + font-size: 0; + height: 20px; + max-height: 20px; + max-width: 20px; + min-height: 20px; + min-width: 20px; + outline: none; + position: relative; + vertical-align: top; + width: 20px; } + .delete::before, .modal-close::before, .delete::after, .modal-close::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .delete::before, .modal-close::before { + height: 2px; + width: 50%; } + .delete::after, .modal-close::after { + height: 50%; + width: 2px; } + .delete:hover, .modal-close:hover, .delete:focus, .modal-close:focus { + background-color: rgba(10, 10, 10, 0.3); } + .delete:active, .modal-close:active { + background-color: rgba(10, 10, 10, 0.4); } + .is-small.delete, .is-small.modal-close { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + .is-medium.delete, .is-medium.modal-close { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + .is-large.delete, .is-large.modal-close { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +.button.is-loading::after, .select.is-loading::after, .control.is-loading::after, .loader { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdee0; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +.is-overlay, .image.is-square img, .image.is-1by1 img, .image.is-5by4 img, .image.is-4by3 img, .image.is-3by2 img, .image.is-5by3 img, .image.is-16by9 img, .image.is-2by1 img, .image.is-3by1 img, .image.is-4by5 img, .image.is-3by4 img, .image.is-2by3 img, .image.is-3by5 img, .image.is-9by16 img, .image.is-1by2 img, .image.is-1by3 img, .modal, .modal-background, .hero-video { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +.button, .input, +.textarea, .select select, .file-cta, +.file-name, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 0.4em; + box-shadow: none; + display: inline-flex; + font-size: 15px; + height: 2.25em; + justify-content: flex-start; + line-height: 1.5; + padding-bottom: calc(0.375em - 1px); + padding-left: calc(0.625em - 1px); + padding-right: calc(0.625em - 1px); + padding-top: calc(0.375em - 1px); + position: relative; + vertical-align: top; } + .button:focus, .input:focus, + .textarea:focus, .select select:focus, .file-cta:focus, + .file-name:focus, .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus, + .pagination-ellipsis:focus, .is-focused.button, .is-focused.input, + .is-focused.textarea, .select select.is-focused, .is-focused.file-cta, + .is-focused.file-name, .is-focused.pagination-previous, + .is-focused.pagination-next, + .is-focused.pagination-link, + .is-focused.pagination-ellipsis, .button:active, .input:active, + .textarea:active, .select select:active, .file-cta:active, + .file-name:active, .pagination-previous:active, + .pagination-next:active, + .pagination-link:active, + .pagination-ellipsis:active, .is-active.button, .is-active.input, + .is-active.textarea, .select select.is-active, .is-active.file-cta, + .is-active.file-name, .is-active.pagination-previous, + .is-active.pagination-next, + .is-active.pagination-link, + .is-active.pagination-ellipsis { + outline: none; } + .button[disabled], .input[disabled], + .textarea[disabled], .select select[disabled], .file-cta[disabled], + .file-name[disabled], .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled], + .pagination-ellipsis[disabled] { + cursor: not-allowed; } + +/*! minireset.css v0.0.3 | MIT License | github.com/jgthms/minireset.css */ +html, +body, +p, +ol, +ul, +li, +dl, +dt, +dd, +blockquote, +figure, +fieldset, +legend, +textarea, +pre, +iframe, +hr, +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + padding: 0; } + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: 100%; + font-weight: normal; } + +ul { + list-style: none; } + +button, +input, +select, +textarea { + margin: 0; } + +html { + box-sizing: border-box; } + +*, *::before, *::after { + box-sizing: inherit; } + +img, +audio, +video { + height: auto; + max-width: 100%; } + +iframe { + border: 0; } + +table { + border-collapse: collapse; + border-spacing: 0; } + +td, +th { + padding: 0; + text-align: left; } + +html { + background-color: #1f2424; + font-size: 15px; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + min-width: 300px; + overflow-x: hidden; + overflow-y: scroll; + text-rendering: optimizeLegibility; + text-size-adjust: 100%; } + +article, +aside, +figure, +footer, +header, +hgroup, +section { + display: block; } + +body, +button, +input, +select, +textarea { + font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + +code, +pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "Inconsolata", "Consolas", "Monaco", monospace; } + +body { + color: #fff; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; } + +a { + color: #1abc9c; + cursor: pointer; + text-decoration: none; } + a strong { + color: currentColor; } + a:hover { + color: #1dd2af; } + +code { + background-color: #282f2f; + color: #e74c3c; + font-size: 0.875em; + font-weight: normal; + padding: 0.25em 0.5em 0.25em; } + +hr { + background-color: #282f2f; + border: none; + display: block; + height: 2px; + margin: 1.5rem 0; } + +img { + height: auto; + max-width: 100%; } + +input[type="checkbox"], +input[type="radio"] { + vertical-align: baseline; } + +small { + font-size: 0.875em; } + +span { + font-style: inherit; + font-weight: inherit; } + +strong { + color: #f2f2f2; + font-weight: 700; } + +pre { + -webkit-overflow-scrolling: touch; + background-color: #282f2f; + color: #fff; + font-size: 0.875em; + overflow-x: auto; + padding: 1.25rem 1.5rem; + white-space: pre; + word-wrap: normal; } + pre code { + background-color: transparent; + color: currentColor; + font-size: 1em; + padding: 0; } + +table td, +table th { + text-align: left; + vertical-align: top; } + +table th { + color: #f2f2f2; } + +.is-clearfix::after { + clear: both; + content: " "; + display: table; } + +.is-pulled-left { + float: left !important; } + +.is-pulled-right { + float: right !important; } + +.is-clipped { + overflow: hidden !important; } + +.is-size-1 { + font-size: 3rem !important; } + +.is-size-2 { + font-size: 2.5rem !important; } + +.is-size-3 { + font-size: 2rem !important; } + +.is-size-4 { + font-size: 1.5rem !important; } + +.is-size-5 { + font-size: 1.25rem !important; } + +.is-size-6 { + font-size: 15px !important; } + +.is-size-7 { + font-size: 0.85em !important; } + +@media screen and (max-width: 768px) { + .is-size-1-mobile { + font-size: 3rem !important; } + .is-size-2-mobile { + font-size: 2.5rem !important; } + .is-size-3-mobile { + font-size: 2rem !important; } + .is-size-4-mobile { + font-size: 1.5rem !important; } + .is-size-5-mobile { + font-size: 1.25rem !important; } + .is-size-6-mobile { + font-size: 15px !important; } + .is-size-7-mobile { + font-size: 0.85em !important; } } + +@media screen and (min-width: 769px), print { + .is-size-1-tablet { + font-size: 3rem !important; } + .is-size-2-tablet { + font-size: 2.5rem !important; } + .is-size-3-tablet { + font-size: 2rem !important; } + .is-size-4-tablet { + font-size: 1.5rem !important; } + .is-size-5-tablet { + font-size: 1.25rem !important; } + .is-size-6-tablet { + font-size: 15px !important; } + .is-size-7-tablet { + font-size: 0.85em !important; } } + +@media screen and (max-width: 1087px) { + .is-size-1-touch { + font-size: 3rem !important; } + .is-size-2-touch { + font-size: 2.5rem !important; } + .is-size-3-touch { + font-size: 2rem !important; } + .is-size-4-touch { + font-size: 1.5rem !important; } + .is-size-5-touch { + font-size: 1.25rem !important; } + .is-size-6-touch { + font-size: 15px !important; } + .is-size-7-touch { + font-size: 0.85em !important; } } + +@media screen and (min-width: 1088px) { + .is-size-1-desktop { + font-size: 3rem !important; } + .is-size-2-desktop { + font-size: 2.5rem !important; } + .is-size-3-desktop { + font-size: 2rem !important; } + .is-size-4-desktop { + font-size: 1.5rem !important; } + .is-size-5-desktop { + font-size: 1.25rem !important; } + .is-size-6-desktop { + font-size: 15px !important; } + .is-size-7-desktop { + font-size: 0.85em !important; } } + +@media screen and (min-width: 1280px) { + .is-size-1-widescreen { + font-size: 3rem !important; } + .is-size-2-widescreen { + font-size: 2.5rem !important; } + .is-size-3-widescreen { + font-size: 2rem !important; } + .is-size-4-widescreen { + font-size: 1.5rem !important; } + .is-size-5-widescreen { + font-size: 1.25rem !important; } + .is-size-6-widescreen { + font-size: 15px !important; } + .is-size-7-widescreen { + font-size: 0.85em !important; } } + +@media screen and (min-width: 1472px) { + .is-size-1-fullhd { + font-size: 3rem !important; } + .is-size-2-fullhd { + font-size: 2.5rem !important; } + .is-size-3-fullhd { + font-size: 2rem !important; } + .is-size-4-fullhd { + font-size: 1.5rem !important; } + .is-size-5-fullhd { + font-size: 1.25rem !important; } + .is-size-6-fullhd { + font-size: 15px !important; } + .is-size-7-fullhd { + font-size: 0.85em !important; } } + +.has-text-centered { + text-align: center !important; } + +.has-text-justified { + text-align: justify !important; } + +.has-text-left { + text-align: left !important; } + +.has-text-right { + text-align: right !important; } + +@media screen and (max-width: 768px) { + .has-text-centered-mobile { + text-align: center !important; } } + +@media screen and (min-width: 769px), print { + .has-text-centered-tablet { + text-align: center !important; } } + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .has-text-centered-tablet-only { + text-align: center !important; } } + +@media screen and (max-width: 1087px) { + .has-text-centered-touch { + text-align: center !important; } } + +@media screen and (min-width: 1088px) { + .has-text-centered-desktop { + text-align: center !important; } } + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .has-text-centered-desktop-only { + text-align: center !important; } } + +@media screen and (min-width: 1280px) { + .has-text-centered-widescreen { + text-align: center !important; } } + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .has-text-centered-widescreen-only { + text-align: center !important; } } + +@media screen and (min-width: 1472px) { + .has-text-centered-fullhd { + text-align: center !important; } } + +@media screen and (max-width: 768px) { + .has-text-justified-mobile { + text-align: justify !important; } } + +@media screen and (min-width: 769px), print { + .has-text-justified-tablet { + text-align: justify !important; } } + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .has-text-justified-tablet-only { + text-align: justify !important; } } + +@media screen and (max-width: 1087px) { + .has-text-justified-touch { + text-align: justify !important; } } + +@media screen and (min-width: 1088px) { + .has-text-justified-desktop { + text-align: justify !important; } } + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .has-text-justified-desktop-only { + text-align: justify !important; } } + +@media screen and (min-width: 1280px) { + .has-text-justified-widescreen { + text-align: justify !important; } } + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .has-text-justified-widescreen-only { + text-align: justify !important; } } + +@media screen and (min-width: 1472px) { + .has-text-justified-fullhd { + text-align: justify !important; } } + +@media screen and (max-width: 768px) { + .has-text-left-mobile { + text-align: left !important; } } + +@media screen and (min-width: 769px), print { + .has-text-left-tablet { + text-align: left !important; } } + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .has-text-left-tablet-only { + text-align: left !important; } } + +@media screen and (max-width: 1087px) { + .has-text-left-touch { + text-align: left !important; } } + +@media screen and (min-width: 1088px) { + .has-text-left-desktop { + text-align: left !important; } } + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .has-text-left-desktop-only { + text-align: left !important; } } + +@media screen and (min-width: 1280px) { + .has-text-left-widescreen { + text-align: left !important; } } + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .has-text-left-widescreen-only { + text-align: left !important; } } + +@media screen and (min-width: 1472px) { + .has-text-left-fullhd { + text-align: left !important; } } + +@media screen and (max-width: 768px) { + .has-text-right-mobile { + text-align: right !important; } } + +@media screen and (min-width: 769px), print { + .has-text-right-tablet { + text-align: right !important; } } + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .has-text-right-tablet-only { + text-align: right !important; } } + +@media screen and (max-width: 1087px) { + .has-text-right-touch { + text-align: right !important; } } + +@media screen and (min-width: 1088px) { + .has-text-right-desktop { + text-align: right !important; } } + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .has-text-right-desktop-only { + text-align: right !important; } } + +@media screen and (min-width: 1280px) { + .has-text-right-widescreen { + text-align: right !important; } } + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .has-text-right-widescreen-only { + text-align: right !important; } } + +@media screen and (min-width: 1472px) { + .has-text-right-fullhd { + text-align: right !important; } } + +.is-capitalized { + text-transform: capitalize !important; } + +.is-lowercase { + text-transform: lowercase !important; } + +.is-uppercase { + text-transform: uppercase !important; } + +.is-italic { + font-style: italic !important; } + +.has-text-white { + color: white !important; } + +a.has-text-white:hover, a.has-text-white:focus { + color: #e6e6e6 !important; } + +.has-background-white { + background-color: white !important; } + +.has-text-black { + color: #0a0a0a !important; } + +a.has-text-black:hover, a.has-text-black:focus { + color: black !important; } + +.has-background-black { + background-color: #0a0a0a !important; } + +.has-text-light { + color: #ecf0f1 !important; } + +a.has-text-light:hover, a.has-text-light:focus { + color: #cfd9db !important; } + +.has-background-light { + background-color: #ecf0f1 !important; } + +.has-text-dark { + color: #282f2f !important; } + +a.has-text-dark:hover, a.has-text-dark:focus { + color: #111414 !important; } + +.has-background-dark { + background-color: #282f2f !important; } + +.has-text-primary { + color: #375a7f !important; } + +a.has-text-primary:hover, a.has-text-primary:focus { + color: #28415b !important; } + +.has-background-primary { + background-color: #375a7f !important; } + +.has-text-link { + color: #1abc9c !important; } + +a.has-text-link:hover, a.has-text-link:focus { + color: #148f77 !important; } + +.has-background-link { + background-color: #1abc9c !important; } + +.has-text-info { + color: #209cee !important; } + +a.has-text-info:hover, a.has-text-info:focus { + color: #0f81cc !important; } + +.has-background-info { + background-color: #209cee !important; } + +.has-text-success { + color: #2ecc71 !important; } + +a.has-text-success:hover, a.has-text-success:focus { + color: #25a25a !important; } + +.has-background-success { + background-color: #2ecc71 !important; } + +.has-text-warning { + color: #f1b70e !important; } + +a.has-text-warning:hover, a.has-text-warning:focus { + color: #c1920b !important; } + +.has-background-warning { + background-color: #f1b70e !important; } + +.has-text-danger { + color: #e74c3c !important; } + +a.has-text-danger:hover, a.has-text-danger:focus { + color: #d62c1a !important; } + +.has-background-danger { + background-color: #e74c3c !important; } + +.has-text-black-bis { + color: #121212 !important; } + +.has-background-black-bis { + background-color: #121212 !important; } + +.has-text-black-ter { + color: #242424 !important; } + +.has-background-black-ter { + background-color: #242424 !important; } + +.has-text-grey-darker { + color: #282f2f !important; } + +.has-background-grey-darker { + background-color: #282f2f !important; } + +.has-text-grey-dark { + color: #343c3d !important; } + +.has-background-grey-dark { + background-color: #343c3d !important; } + +.has-text-grey { + color: #5e6d6f !important; } + +.has-background-grey { + background-color: #5e6d6f !important; } + +.has-text-grey-light { + color: #8c9b9d !important; } + +.has-background-grey-light { + background-color: #8c9b9d !important; } + +.has-text-grey-lighter { + color: #dbdee0 !important; } + +.has-background-grey-lighter { + background-color: #dbdee0 !important; } + +.has-text-white-ter { + color: #ecf0f1 !important; } + +.has-background-white-ter { + background-color: #ecf0f1 !important; } + +.has-text-white-bis { + color: #fafafa !important; } + +.has-background-white-bis { + background-color: #fafafa !important; } + +.has-text-weight-light { + font-weight: 300 !important; } + +.has-text-weight-normal { + font-weight: 400 !important; } + +.has-text-weight-semibold { + font-weight: 600 !important; } + +.has-text-weight-bold { + font-weight: 700 !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1087px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1088px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1280px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1472px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1087px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1088px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1280px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1472px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1087px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1088px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1280px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1472px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1087px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1088px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1280px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1472px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1087px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1088px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1280px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1472px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1087px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1088px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1280px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1472px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1087px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1087px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1088px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1088px) and (max-width: 1279px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1280px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1280px) and (max-width: 1471px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1472px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.is-marginless { + margin: 0 !important; } + +.is-paddingless { + padding: 0 !important; } + +.is-radiusless { + border-radius: 0 !important; } + +.is-shadowless { + box-shadow: none !important; } + +.box { + background-color: #343c3d; + border-radius: 8px; + box-shadow: none; + color: #fff; + display: block; + padding: 1.25rem; } + +a.box:hover, a.box:focus { + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #1abc9c; } + +a.box:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #1abc9c; } + +.button { + background-color: #282f2f; + border-color: #4c5759; + border-width: 1px; + color: #375a7f; + cursor: pointer; + justify-content: center; + padding-bottom: calc(0.375em - 1px); + padding-left: 0.75em; + padding-right: 0.75em; + padding-top: calc(0.375em - 1px); + text-align: center; + white-space: nowrap; } + .button strong { + color: inherit; } + .button .icon, .button .icon.is-small, .button .icon.is-medium, .button .icon.is-large { + height: 1.5em; + width: 1.5em; } + .button .icon:first-child:not(:last-child) { + margin-left: calc(-0.375em - 1px); + margin-right: 0.1875em; } + .button .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: calc(-0.375em - 1px); } + .button .icon:first-child:last-child { + margin-left: calc(-0.375em - 1px); + margin-right: calc(-0.375em - 1px); } + .button:hover, .button.is-hovered { + border-color: #8c9b9d; + color: #f2f2f2; } + .button:focus, .button.is-focused { + border-color: #8c9b9d; + color: #17a689; } + .button:focus:not(:active), .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + .button:active, .button.is-active { + border-color: #343c3d; + color: #f2f2f2; } + .button.is-text { + background-color: transparent; + border-color: transparent; + color: #fff; + text-decoration: underline; } + .button.is-text:hover, .button.is-text.is-hovered, .button.is-text:focus, .button.is-text.is-focused { + background-color: #282f2f; + color: #f2f2f2; } + .button.is-text:active, .button.is-text.is-active { + background-color: #1d2122; + color: #f2f2f2; } + .button.is-text[disabled] { + background-color: transparent; + border-color: transparent; + box-shadow: none; } + .button.is-white { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + .button.is-white:hover, .button.is-white.is-hovered { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + .button.is-white:focus, .button.is-white.is-focused { + border-color: transparent; + color: #0a0a0a; } + .button.is-white:focus:not(:active), .button.is-white.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .button.is-white:active, .button.is-white.is-active { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + .button.is-white[disabled] { + background-color: white; + border-color: transparent; + box-shadow: none; } + .button.is-white.is-inverted { + background-color: #0a0a0a; + color: white; } + .button.is-white.is-inverted:hover { + background-color: black; } + .button.is-white.is-inverted[disabled] { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; + color: white; } + .button.is-white.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-white.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + .button.is-white.is-outlined:hover, .button.is-white.is-outlined:focus { + background-color: white; + border-color: white; + color: #0a0a0a; } + .button.is-white.is-outlined.is-loading::after { + border-color: transparent transparent white white !important; } + .button.is-white.is-outlined[disabled] { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + .button.is-white.is-inverted.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + .button.is-white.is-inverted.is-outlined:hover, .button.is-white.is-inverted.is-outlined:focus { + background-color: #0a0a0a; + color: white; } + .button.is-white.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + .button.is-black { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + .button.is-black:hover, .button.is-black.is-hovered { + background-color: #040404; + border-color: transparent; + color: white; } + .button.is-black:focus, .button.is-black.is-focused { + border-color: transparent; + color: white; } + .button.is-black:focus:not(:active), .button.is-black.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .button.is-black:active, .button.is-black.is-active { + background-color: black; + border-color: transparent; + color: white; } + .button.is-black[disabled] { + background-color: #0a0a0a; + border-color: transparent; + box-shadow: none; } + .button.is-black.is-inverted { + background-color: white; + color: #0a0a0a; } + .button.is-black.is-inverted:hover { + background-color: #f2f2f2; } + .button.is-black.is-inverted[disabled] { + background-color: white; + border-color: transparent; + box-shadow: none; + color: #0a0a0a; } + .button.is-black.is-loading::after { + border-color: transparent transparent white white !important; } + .button.is-black.is-outlined { + background-color: transparent; + border-color: #0a0a0a; + color: #0a0a0a; } + .button.is-black.is-outlined:hover, .button.is-black.is-outlined:focus { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .button.is-black.is-outlined.is-loading::after { + border-color: transparent transparent #0a0a0a #0a0a0a !important; } + .button.is-black.is-outlined[disabled] { + background-color: transparent; + border-color: #0a0a0a; + box-shadow: none; + color: #0a0a0a; } + .button.is-black.is-inverted.is-outlined { + background-color: transparent; + border-color: white; + color: white; } + .button.is-black.is-inverted.is-outlined:hover, .button.is-black.is-inverted.is-outlined:focus { + background-color: white; + color: #0a0a0a; } + .button.is-black.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: white; + box-shadow: none; + color: white; } + .button.is-light { + background-color: #ecf0f1; + border-color: transparent; + color: #282f2f; } + .button.is-light:hover, .button.is-light.is-hovered { + background-color: #e5eaec; + border-color: transparent; + color: #282f2f; } + .button.is-light:focus, .button.is-light.is-focused { + border-color: transparent; + color: #282f2f; } + .button.is-light:focus:not(:active), .button.is-light.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + .button.is-light:active, .button.is-light.is-active { + background-color: #dde4e6; + border-color: transparent; + color: #282f2f; } + .button.is-light[disabled] { + background-color: #ecf0f1; + border-color: transparent; + box-shadow: none; } + .button.is-light.is-inverted { + background-color: #282f2f; + color: #ecf0f1; } + .button.is-light.is-inverted:hover { + background-color: #1d2122; } + .button.is-light.is-inverted[disabled] { + background-color: #282f2f; + border-color: transparent; + box-shadow: none; + color: #ecf0f1; } + .button.is-light.is-loading::after { + border-color: transparent transparent #282f2f #282f2f !important; } + .button.is-light.is-outlined { + background-color: transparent; + border-color: #ecf0f1; + color: #ecf0f1; } + .button.is-light.is-outlined:hover, .button.is-light.is-outlined:focus { + background-color: #ecf0f1; + border-color: #ecf0f1; + color: #282f2f; } + .button.is-light.is-outlined.is-loading::after { + border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } + .button.is-light.is-outlined[disabled] { + background-color: transparent; + border-color: #ecf0f1; + box-shadow: none; + color: #ecf0f1; } + .button.is-light.is-inverted.is-outlined { + background-color: transparent; + border-color: #282f2f; + color: #282f2f; } + .button.is-light.is-inverted.is-outlined:hover, .button.is-light.is-inverted.is-outlined:focus { + background-color: #282f2f; + color: #ecf0f1; } + .button.is-light.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #282f2f; + box-shadow: none; + color: #282f2f; } + .button.is-dark { + background-color: #282f2f; + border-color: transparent; + color: #ecf0f1; } + .button.is-dark:hover, .button.is-dark.is-hovered { + background-color: #232829; + border-color: transparent; + color: #ecf0f1; } + .button.is-dark:focus, .button.is-dark.is-focused { + border-color: transparent; + color: #ecf0f1; } + .button.is-dark:focus:not(:active), .button.is-dark.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + .button.is-dark:active, .button.is-dark.is-active { + background-color: #1d2122; + border-color: transparent; + color: #ecf0f1; } + .button.is-dark[disabled] { + background-color: #282f2f; + border-color: transparent; + box-shadow: none; } + .button.is-dark.is-inverted { + background-color: #ecf0f1; + color: #282f2f; } + .button.is-dark.is-inverted:hover { + background-color: #dde4e6; } + .button.is-dark.is-inverted[disabled] { + background-color: #ecf0f1; + border-color: transparent; + box-shadow: none; + color: #282f2f; } + .button.is-dark.is-loading::after { + border-color: transparent transparent #ecf0f1 #ecf0f1 !important; } + .button.is-dark.is-outlined { + background-color: transparent; + border-color: #282f2f; + color: #282f2f; } + .button.is-dark.is-outlined:hover, .button.is-dark.is-outlined:focus { + background-color: #282f2f; + border-color: #282f2f; + color: #ecf0f1; } + .button.is-dark.is-outlined.is-loading::after { + border-color: transparent transparent #282f2f #282f2f !important; } + .button.is-dark.is-outlined[disabled] { + background-color: transparent; + border-color: #282f2f; + box-shadow: none; + color: #282f2f; } + .button.is-dark.is-inverted.is-outlined { + background-color: transparent; + border-color: #ecf0f1; + color: #ecf0f1; } + .button.is-dark.is-inverted.is-outlined:hover, .button.is-dark.is-inverted.is-outlined:focus { + background-color: #ecf0f1; + color: #282f2f; } + .button.is-dark.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #ecf0f1; + box-shadow: none; + color: #ecf0f1; } + .button.is-primary { + background-color: #375a7f; + border-color: transparent; + color: #fff; } + .button.is-primary:hover, .button.is-primary.is-hovered { + background-color: #335476; + border-color: transparent; + color: #fff; } + .button.is-primary:focus, .button.is-primary.is-focused { + border-color: transparent; + color: #fff; } + .button.is-primary:focus:not(:active), .button.is-primary.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + .button.is-primary:active, .button.is-primary.is-active { + background-color: #2f4d6d; + border-color: transparent; + color: #fff; } + .button.is-primary[disabled] { + background-color: #375a7f; + border-color: transparent; + box-shadow: none; } + .button.is-primary.is-inverted { + background-color: #fff; + color: #375a7f; } + .button.is-primary.is-inverted:hover { + background-color: #f2f2f2; } + .button.is-primary.is-inverted[disabled] { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #375a7f; } + .button.is-primary.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-primary.is-outlined { + background-color: transparent; + border-color: #375a7f; + color: #375a7f; } + .button.is-primary.is-outlined:hover, .button.is-primary.is-outlined:focus { + background-color: #375a7f; + border-color: #375a7f; + color: #fff; } + .button.is-primary.is-outlined.is-loading::after { + border-color: transparent transparent #375a7f #375a7f !important; } + .button.is-primary.is-outlined[disabled] { + background-color: transparent; + border-color: #375a7f; + box-shadow: none; + color: #375a7f; } + .button.is-primary.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-primary.is-inverted.is-outlined:hover, .button.is-primary.is-inverted.is-outlined:focus { + background-color: #fff; + color: #375a7f; } + .button.is-primary.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-link { + background-color: #1abc9c; + border-color: transparent; + color: #fff; } + .button.is-link:hover, .button.is-link.is-hovered { + background-color: #18b193; + border-color: transparent; + color: #fff; } + .button.is-link:focus, .button.is-link.is-focused { + border-color: transparent; + color: #fff; } + .button.is-link:focus:not(:active), .button.is-link.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + .button.is-link:active, .button.is-link.is-active { + background-color: #17a689; + border-color: transparent; + color: #fff; } + .button.is-link[disabled] { + background-color: #1abc9c; + border-color: transparent; + box-shadow: none; } + .button.is-link.is-inverted { + background-color: #fff; + color: #1abc9c; } + .button.is-link.is-inverted:hover { + background-color: #f2f2f2; } + .button.is-link.is-inverted[disabled] { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #1abc9c; } + .button.is-link.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-link.is-outlined { + background-color: transparent; + border-color: #1abc9c; + color: #1abc9c; } + .button.is-link.is-outlined:hover, .button.is-link.is-outlined:focus { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; } + .button.is-link.is-outlined.is-loading::after { + border-color: transparent transparent #1abc9c #1abc9c !important; } + .button.is-link.is-outlined[disabled] { + background-color: transparent; + border-color: #1abc9c; + box-shadow: none; + color: #1abc9c; } + .button.is-link.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-link.is-inverted.is-outlined:hover, .button.is-link.is-inverted.is-outlined:focus { + background-color: #fff; + color: #1abc9c; } + .button.is-link.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-info { + background-color: #209cee; + border-color: transparent; + color: #fff; } + .button.is-info:hover, .button.is-info.is-hovered { + background-color: #1496ed; + border-color: transparent; + color: #fff; } + .button.is-info:focus, .button.is-info.is-focused { + border-color: transparent; + color: #fff; } + .button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .button.is-info:active, .button.is-info.is-active { + background-color: #118fe4; + border-color: transparent; + color: #fff; } + .button.is-info[disabled] { + background-color: #209cee; + border-color: transparent; + box-shadow: none; } + .button.is-info.is-inverted { + background-color: #fff; + color: #209cee; } + .button.is-info.is-inverted:hover { + background-color: #f2f2f2; } + .button.is-info.is-inverted[disabled] { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #209cee; } + .button.is-info.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-info.is-outlined { + background-color: transparent; + border-color: #209cee; + color: #209cee; } + .button.is-info.is-outlined:hover, .button.is-info.is-outlined:focus { + background-color: #209cee; + border-color: #209cee; + color: #fff; } + .button.is-info.is-outlined.is-loading::after { + border-color: transparent transparent #209cee #209cee !important; } + .button.is-info.is-outlined[disabled] { + background-color: transparent; + border-color: #209cee; + box-shadow: none; + color: #209cee; } + .button.is-info.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-info.is-inverted.is-outlined:hover, .button.is-info.is-inverted.is-outlined:focus { + background-color: #fff; + color: #209cee; } + .button.is-info.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-success { + background-color: #2ecc71; + border-color: transparent; + color: #fff; } + .button.is-success:hover, .button.is-success.is-hovered { + background-color: #2cc26b; + border-color: transparent; + color: #fff; } + .button.is-success:focus, .button.is-success.is-focused { + border-color: transparent; + color: #fff; } + .button.is-success:focus:not(:active), .button.is-success.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 204, 113, 0.25); } + .button.is-success:active, .button.is-success.is-active { + background-color: #29b765; + border-color: transparent; + color: #fff; } + .button.is-success[disabled] { + background-color: #2ecc71; + border-color: transparent; + box-shadow: none; } + .button.is-success.is-inverted { + background-color: #fff; + color: #2ecc71; } + .button.is-success.is-inverted:hover { + background-color: #f2f2f2; } + .button.is-success.is-inverted[disabled] { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #2ecc71; } + .button.is-success.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-success.is-outlined { + background-color: transparent; + border-color: #2ecc71; + color: #2ecc71; } + .button.is-success.is-outlined:hover, .button.is-success.is-outlined:focus { + background-color: #2ecc71; + border-color: #2ecc71; + color: #fff; } + .button.is-success.is-outlined.is-loading::after { + border-color: transparent transparent #2ecc71 #2ecc71 !important; } + .button.is-success.is-outlined[disabled] { + background-color: transparent; + border-color: #2ecc71; + box-shadow: none; + color: #2ecc71; } + .button.is-success.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-success.is-inverted.is-outlined:hover, .button.is-success.is-inverted.is-outlined:focus { + background-color: #fff; + color: #2ecc71; } + .button.is-success.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-warning { + background-color: #f1b70e; + border-color: transparent; + color: #fff; } + .button.is-warning:hover, .button.is-warning.is-hovered { + background-color: #e5ae0d; + border-color: transparent; + color: #fff; } + .button.is-warning:focus, .button.is-warning.is-focused { + border-color: transparent; + color: #fff; } + .button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(241, 183, 14, 0.25); } + .button.is-warning:active, .button.is-warning.is-active { + background-color: #d9a50d; + border-color: transparent; + color: #fff; } + .button.is-warning[disabled] { + background-color: #f1b70e; + border-color: transparent; + box-shadow: none; } + .button.is-warning.is-inverted { + background-color: #fff; + color: #f1b70e; } + .button.is-warning.is-inverted:hover { + background-color: #f2f2f2; } + .button.is-warning.is-inverted[disabled] { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #f1b70e; } + .button.is-warning.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-warning.is-outlined { + background-color: transparent; + border-color: #f1b70e; + color: #f1b70e; } + .button.is-warning.is-outlined:hover, .button.is-warning.is-outlined:focus { + background-color: #f1b70e; + border-color: #f1b70e; + color: #fff; } + .button.is-warning.is-outlined.is-loading::after { + border-color: transparent transparent #f1b70e #f1b70e !important; } + .button.is-warning.is-outlined[disabled] { + background-color: transparent; + border-color: #f1b70e; + box-shadow: none; + color: #f1b70e; } + .button.is-warning.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-warning.is-inverted.is-outlined:hover, .button.is-warning.is-inverted.is-outlined:focus { + background-color: #fff; + color: #f1b70e; } + .button.is-warning.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-danger { + background-color: #e74c3c; + border-color: transparent; + color: #fff; } + .button.is-danger:hover, .button.is-danger.is-hovered { + background-color: #e64231; + border-color: transparent; + color: #fff; } + .button.is-danger:focus, .button.is-danger.is-focused { + border-color: transparent; + color: #fff; } + .button.is-danger:focus:not(:active), .button.is-danger.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(231, 76, 60, 0.25); } + .button.is-danger:active, .button.is-danger.is-active { + background-color: #e43725; + border-color: transparent; + color: #fff; } + .button.is-danger[disabled] { + background-color: #e74c3c; + border-color: transparent; + box-shadow: none; } + .button.is-danger.is-inverted { + background-color: #fff; + color: #e74c3c; } + .button.is-danger.is-inverted:hover { + background-color: #f2f2f2; } + .button.is-danger.is-inverted[disabled] { + background-color: #fff; + border-color: transparent; + box-shadow: none; + color: #e74c3c; } + .button.is-danger.is-loading::after { + border-color: transparent transparent #fff #fff !important; } + .button.is-danger.is-outlined { + background-color: transparent; + border-color: #e74c3c; + color: #e74c3c; } + .button.is-danger.is-outlined:hover, .button.is-danger.is-outlined:focus { + background-color: #e74c3c; + border-color: #e74c3c; + color: #fff; } + .button.is-danger.is-outlined.is-loading::after { + border-color: transparent transparent #e74c3c #e74c3c !important; } + .button.is-danger.is-outlined[disabled] { + background-color: transparent; + border-color: #e74c3c; + box-shadow: none; + color: #e74c3c; } + .button.is-danger.is-inverted.is-outlined { + background-color: transparent; + border-color: #fff; + color: #fff; } + .button.is-danger.is-inverted.is-outlined:hover, .button.is-danger.is-inverted.is-outlined:focus { + background-color: #fff; + color: #e74c3c; } + .button.is-danger.is-inverted.is-outlined[disabled] { + background-color: transparent; + border-color: #fff; + box-shadow: none; + color: #fff; } + .button.is-small { + border-radius: 3px; + font-size: 0.85em; } + .button.is-medium { + font-size: 1.25rem; } + .button.is-large { + font-size: 1.5rem; } + .button[disabled] { + background-color: #8c9b9d; + border-color: #dbdee0; + box-shadow: none; + opacity: 0.5; } + .button.is-fullwidth { + display: flex; + width: 100%; } + .button.is-loading { + color: transparent !important; + pointer-events: none; } + .button.is-loading::after { + position: absolute; + left: calc(50% - (1em / 2)); + top: calc(50% - (1em / 2)); + position: absolute !important; } + .button.is-static { + background-color: #ecf0f1; + border-color: #dbdee0; + color: #5e6d6f; + box-shadow: none; + pointer-events: none; } + .button.is-rounded { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + +.buttons { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .buttons .button { + margin-bottom: 0.5rem; } + .buttons .button:not(:last-child):not(.is-fullwidth) { + margin-right: 0.5rem; } + .buttons:last-child { + margin-bottom: -0.5rem; } + .buttons:not(:last-child) { + margin-bottom: 1rem; } + .buttons.has-addons .button:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .buttons.has-addons .button:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + margin-right: -1px; } + .buttons.has-addons .button:last-child { + margin-right: 0; } + .buttons.has-addons .button:hover, .buttons.has-addons .button.is-hovered { + z-index: 2; } + .buttons.has-addons .button:focus, .buttons.has-addons .button.is-focused, .buttons.has-addons .button:active, .buttons.has-addons .button.is-active, .buttons.has-addons .button.is-selected { + z-index: 3; } + .buttons.has-addons .button:focus:hover, .buttons.has-addons .button.is-focused:hover, .buttons.has-addons .button:active:hover, .buttons.has-addons .button.is-active:hover, .buttons.has-addons .button.is-selected:hover { + z-index: 4; } + .buttons.has-addons .button.is-expanded { + flex-grow: 1; } + .buttons.is-centered { + justify-content: center; } + .buttons.is-right { + justify-content: flex-end; } + +.container { + margin: 0 auto; + position: relative; } + @media screen and (min-width: 1088px) { + .container { + max-width: 960px; + width: 960px; } + .container.is-fluid { + margin-left: 64px; + margin-right: 64px; + max-width: none; + width: auto; } } + @media screen and (max-width: 1279px) { + .container.is-widescreen { + max-width: 1152px; + width: auto; } } + @media screen and (max-width: 1471px) { + .container.is-fullhd { + max-width: 1344px; + width: auto; } } + @media screen and (min-width: 1280px) { + .container { + max-width: 1152px; + width: 1152px; } } + @media screen and (min-width: 1472px) { + .container { + max-width: 1344px; + width: 1344px; } } + +.content li + li { + margin-top: 0.25em; } + +.content p:not(:last-child), +.content dl:not(:last-child), +.content ol:not(:last-child), +.content ul:not(:last-child), +.content blockquote:not(:last-child), +.content pre:not(:last-child), +.content table:not(:last-child) { + margin-bottom: 1em; } + +.content h1, +.content h2, +.content h3, +.content h4, +.content h5, +.content h6 { + color: #f2f2f2; + font-weight: 600; + line-height: 1.125; } + +.content h1 { + font-size: 2em; + margin-bottom: 0.5em; } + .content h1:not(:first-child) { + margin-top: 1em; } + +.content h2 { + font-size: 1.75em; + margin-bottom: 0.5714em; } + .content h2:not(:first-child) { + margin-top: 1.1428em; } + +.content h3 { + font-size: 1.5em; + margin-bottom: 0.6666em; } + .content h3:not(:first-child) { + margin-top: 1.3333em; } + +.content h4 { + font-size: 1.25em; + margin-bottom: 0.8em; } + +.content h5 { + font-size: 1.125em; + margin-bottom: 0.8888em; } + +.content h6 { + font-size: 1em; + margin-bottom: 1em; } + +.content blockquote { + background-color: #282f2f; + border-left: 5px solid #5e6d6f; + padding: 1.25em 1.5em; } + +.content ol { + list-style-position: outside; + margin-left: 2em; + margin-top: 1em; } + .content ol:not([type]) { + list-style-type: decimal; } + .content ol:not([type]).is-lower-alpha { + list-style-type: lower-alpha; } + .content ol:not([type]).is-lower-roman { + list-style-type: lower-roman; } + .content ol:not([type]).is-upper-alpha { + list-style-type: upper-alpha; } + .content ol:not([type]).is-upper-roman { + list-style-type: upper-roman; } + +.content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + .content ul ul ul { + list-style-type: square; } + +.content dd { + margin-left: 2em; } + +.content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + .content figure:not(:first-child) { + margin-top: 2em; } + .content figure:not(:last-child) { + margin-bottom: 2em; } + .content figure img { + display: inline-block; } + .content figure figcaption { + font-style: italic; } + +.content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 1.25em 1.5em; + white-space: pre; + word-wrap: normal; } + +.content sup, +.content sub { + font-size: 75%; } + +.content table { + width: 100%; } + .content table td, + .content table th { + border: 1px solid #5e6d6f; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .content table th { + color: #f2f2f2; + text-align: left; } + .content table thead td, + .content table thead th { + border-width: 0 0 2px; + color: #f2f2f2; } + .content table tfoot td, + .content table tfoot th { + border-width: 2px 0 0; + color: #f2f2f2; } + .content table tbody tr:last-child td, + .content table tbody tr:last-child th { + border-bottom-width: 0; } + +.content.is-small { + font-size: 0.85em; } + +.content.is-medium { + font-size: 1.25rem; } + +.content.is-large { + font-size: 1.5rem; } + +.input, +.textarea { + background-color: white; + border-color: #dbdee0; + color: #282f2f; + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + .input::-moz-placeholder, + .textarea::-moz-placeholder { + color: rgba(40, 47, 47, 0.3); } + .input::-webkit-input-placeholder, + .textarea::-webkit-input-placeholder { + color: rgba(40, 47, 47, 0.3); } + .input:-moz-placeholder, + .textarea:-moz-placeholder { + color: rgba(40, 47, 47, 0.3); } + .input:-ms-input-placeholder, + .textarea:-ms-input-placeholder { + color: rgba(40, 47, 47, 0.3); } + .input:hover, .input.is-hovered, + .textarea:hover, + .textarea.is-hovered { + border-color: #8c9b9d; } + .input:focus, .input.is-focused, .input:active, .input.is-active, + .textarea:focus, + .textarea.is-focused, + .textarea:active, + .textarea.is-active { + border-color: #1abc9c; + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + .input[disabled], + .textarea[disabled] { + background-color: #8c9b9d; + border-color: #282f2f; + box-shadow: none; + color: white; } + .input[disabled]::-moz-placeholder, + .textarea[disabled]::-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + .input[disabled]::-webkit-input-placeholder, + .textarea[disabled]::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + .input[disabled]:-moz-placeholder, + .textarea[disabled]:-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + .input[disabled]:-ms-input-placeholder, + .textarea[disabled]:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + .input[readonly], + .textarea[readonly] { + box-shadow: none; } + .input.is-white, + .textarea.is-white { + border-color: white; } + .input.is-white:focus, .input.is-white.is-focused, .input.is-white:active, .input.is-white.is-active, + .textarea.is-white:focus, + .textarea.is-white.is-focused, + .textarea.is-white:active, + .textarea.is-white.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .input.is-black, + .textarea.is-black { + border-color: #0a0a0a; } + .input.is-black:focus, .input.is-black.is-focused, .input.is-black:active, .input.is-black.is-active, + .textarea.is-black:focus, + .textarea.is-black.is-focused, + .textarea.is-black:active, + .textarea.is-black.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .input.is-light, + .textarea.is-light { + border-color: #ecf0f1; } + .input.is-light:focus, .input.is-light.is-focused, .input.is-light:active, .input.is-light.is-active, + .textarea.is-light:focus, + .textarea.is-light.is-focused, + .textarea.is-light:active, + .textarea.is-light.is-active { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + .input.is-dark, + .textarea.is-dark { + border-color: #282f2f; } + .input.is-dark:focus, .input.is-dark.is-focused, .input.is-dark:active, .input.is-dark.is-active, + .textarea.is-dark:focus, + .textarea.is-dark.is-focused, + .textarea.is-dark:active, + .textarea.is-dark.is-active { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + .input.is-primary, + .textarea.is-primary { + border-color: #375a7f; } + .input.is-primary:focus, .input.is-primary.is-focused, .input.is-primary:active, .input.is-primary.is-active, + .textarea.is-primary:focus, + .textarea.is-primary.is-focused, + .textarea.is-primary:active, + .textarea.is-primary.is-active { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + .input.is-link, + .textarea.is-link { + border-color: #1abc9c; } + .input.is-link:focus, .input.is-link.is-focused, .input.is-link:active, .input.is-link.is-active, + .textarea.is-link:focus, + .textarea.is-link.is-focused, + .textarea.is-link:active, + .textarea.is-link.is-active { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + .input.is-info, + .textarea.is-info { + border-color: #209cee; } + .input.is-info:focus, .input.is-info.is-focused, .input.is-info:active, .input.is-info.is-active, + .textarea.is-info:focus, + .textarea.is-info.is-focused, + .textarea.is-info:active, + .textarea.is-info.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .input.is-success, + .textarea.is-success { + border-color: #2ecc71; } + .input.is-success:focus, .input.is-success.is-focused, .input.is-success:active, .input.is-success.is-active, + .textarea.is-success:focus, + .textarea.is-success.is-focused, + .textarea.is-success:active, + .textarea.is-success.is-active { + box-shadow: 0 0 0 0.125em rgba(46, 204, 113, 0.25); } + .input.is-warning, + .textarea.is-warning { + border-color: #f1b70e; } + .input.is-warning:focus, .input.is-warning.is-focused, .input.is-warning:active, .input.is-warning.is-active, + .textarea.is-warning:focus, + .textarea.is-warning.is-focused, + .textarea.is-warning:active, + .textarea.is-warning.is-active { + box-shadow: 0 0 0 0.125em rgba(241, 183, 14, 0.25); } + .input.is-danger, + .textarea.is-danger { + border-color: #e74c3c; } + .input.is-danger:focus, .input.is-danger.is-focused, .input.is-danger:active, .input.is-danger.is-active, + .textarea.is-danger:focus, + .textarea.is-danger.is-focused, + .textarea.is-danger:active, + .textarea.is-danger.is-active { + box-shadow: 0 0 0 0.125em rgba(231, 76, 60, 0.25); } + .input.is-small, + .textarea.is-small { + border-radius: 3px; + font-size: 0.85em; } + .input.is-medium, + .textarea.is-medium { + font-size: 1.25rem; } + .input.is-large, + .textarea.is-large { + font-size: 1.5rem; } + .input.is-fullwidth, + .textarea.is-fullwidth { + display: block; + width: 100%; } + .input.is-inline, + .textarea.is-inline { + display: inline; + width: auto; } + +.input.is-rounded { + border-radius: 290486px; + padding-left: 1em; + padding-right: 1em; } + +.input.is-static { + background-color: transparent; + border-color: transparent; + box-shadow: none; + padding-left: 0; + padding-right: 0; } + +.textarea { + display: block; + max-width: 100%; + min-width: 100%; + padding: 0.625em; + resize: vertical; } + .textarea:not([rows]) { + max-height: 600px; + min-height: 120px; } + .textarea[rows] { + height: initial; } + .textarea.has-fixed-size { + resize: none; } + +.checkbox, +.radio { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + .checkbox input, + .radio input { + cursor: pointer; } + .checkbox:hover, + .radio:hover { + color: #8c9b9d; } + .checkbox[disabled], + .radio[disabled] { + color: white; + cursor: not-allowed; } + +.radio + .radio { + margin-left: 0.5em; } + +.select { + display: inline-block; + max-width: 100%; + position: relative; + vertical-align: top; } + .select:not(.is-multiple) { + height: 2.25em; } + .select:not(.is-multiple):not(.is-loading)::after { + border-color: #1abc9c; + right: 1.125em; + z-index: 4; } + .select.is-rounded select { + border-radius: 290486px; + padding-left: 1em; } + .select select { + background-color: white; + border-color: #dbdee0; + color: #282f2f; + cursor: pointer; + display: block; + font-size: 1em; + max-width: 100%; + outline: none; } + .select select::-moz-placeholder { + color: rgba(40, 47, 47, 0.3); } + .select select::-webkit-input-placeholder { + color: rgba(40, 47, 47, 0.3); } + .select select:-moz-placeholder { + color: rgba(40, 47, 47, 0.3); } + .select select:-ms-input-placeholder { + color: rgba(40, 47, 47, 0.3); } + .select select:hover, .select select.is-hovered { + border-color: #8c9b9d; } + .select select:focus, .select select.is-focused, .select select:active, .select select.is-active { + border-color: #1abc9c; + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + .select select[disabled] { + background-color: #8c9b9d; + border-color: #282f2f; + box-shadow: none; + color: white; } + .select select[disabled]::-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + .select select[disabled]::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + .select select[disabled]:-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + .select select[disabled]:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + .select select::-ms-expand { + display: none; } + .select select[disabled]:hover { + border-color: #282f2f; } + .select select:not([multiple]) { + padding-right: 2.5em; } + .select select[multiple] { + height: auto; + padding: 0; } + .select select[multiple] option { + padding: 0.5em 1em; } + .select:not(.is-multiple):not(.is-loading):hover::after { + border-color: #8c9b9d; } + .select.is-white:not(:hover)::after { + border-color: white; } + .select.is-white select { + border-color: white; } + .select.is-white select:hover, .select.is-white select.is-hovered { + border-color: #f2f2f2; } + .select.is-white select:focus, .select.is-white select.is-focused, .select.is-white select:active, .select.is-white select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .select.is-black:not(:hover)::after { + border-color: #0a0a0a; } + .select.is-black select { + border-color: #0a0a0a; } + .select.is-black select:hover, .select.is-black select.is-hovered { + border-color: black; } + .select.is-black select:focus, .select.is-black select.is-focused, .select.is-black select:active, .select.is-black select.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .select.is-light:not(:hover)::after { + border-color: #ecf0f1; } + .select.is-light select { + border-color: #ecf0f1; } + .select.is-light select:hover, .select.is-light select.is-hovered { + border-color: #dde4e6; } + .select.is-light select:focus, .select.is-light select.is-focused, .select.is-light select:active, .select.is-light select.is-active { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + .select.is-dark:not(:hover)::after { + border-color: #282f2f; } + .select.is-dark select { + border-color: #282f2f; } + .select.is-dark select:hover, .select.is-dark select.is-hovered { + border-color: #1d2122; } + .select.is-dark select:focus, .select.is-dark select.is-focused, .select.is-dark select:active, .select.is-dark select.is-active { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + .select.is-primary:not(:hover)::after { + border-color: #375a7f; } + .select.is-primary select { + border-color: #375a7f; } + .select.is-primary select:hover, .select.is-primary select.is-hovered { + border-color: #2f4d6d; } + .select.is-primary select:focus, .select.is-primary select.is-focused, .select.is-primary select:active, .select.is-primary select.is-active { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + .select.is-link:not(:hover)::after { + border-color: #1abc9c; } + .select.is-link select { + border-color: #1abc9c; } + .select.is-link select:hover, .select.is-link select.is-hovered { + border-color: #17a689; } + .select.is-link select:focus, .select.is-link select.is-focused, .select.is-link select:active, .select.is-link select.is-active { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + .select.is-info:not(:hover)::after { + border-color: #209cee; } + .select.is-info select { + border-color: #209cee; } + .select.is-info select:hover, .select.is-info select.is-hovered { + border-color: #118fe4; } + .select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .select.is-success:not(:hover)::after { + border-color: #2ecc71; } + .select.is-success select { + border-color: #2ecc71; } + .select.is-success select:hover, .select.is-success select.is-hovered { + border-color: #29b765; } + .select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(46, 204, 113, 0.25); } + .select.is-warning:not(:hover)::after { + border-color: #f1b70e; } + .select.is-warning select { + border-color: #f1b70e; } + .select.is-warning select:hover, .select.is-warning select.is-hovered { + border-color: #d9a50d; } + .select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(241, 183, 14, 0.25); } + .select.is-danger:not(:hover)::after { + border-color: #e74c3c; } + .select.is-danger select { + border-color: #e74c3c; } + .select.is-danger select:hover, .select.is-danger select.is-hovered { + border-color: #e43725; } + .select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(231, 76, 60, 0.25); } + .select.is-small { + border-radius: 3px; + font-size: 0.85em; } + .select.is-medium { + font-size: 1.25rem; } + .select.is-large { + font-size: 1.5rem; } + .select.is-disabled::after { + border-color: white; } + .select.is-fullwidth { + width: 100%; } + .select.is-fullwidth select { + width: 100%; } + .select.is-loading::after { + margin-top: 0; + position: absolute; + right: 0.625em; + top: 0.625em; + transform: none; } + .select.is-loading.is-small:after { + font-size: 0.85em; } + .select.is-loading.is-medium:after { + font-size: 1.25rem; } + .select.is-loading.is-large:after { + font-size: 1.5rem; } + +.file { + align-items: stretch; + display: flex; + justify-content: flex-start; + position: relative; } + .file.is-white .file-cta { + background-color: white; + border-color: transparent; + color: #0a0a0a; } + .file.is-white:hover .file-cta, .file.is-white.is-hovered .file-cta { + background-color: #f9f9f9; + border-color: transparent; + color: #0a0a0a; } + .file.is-white:focus .file-cta, .file.is-white.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25); + color: #0a0a0a; } + .file.is-white:active .file-cta, .file.is-white.is-active .file-cta { + background-color: #f2f2f2; + border-color: transparent; + color: #0a0a0a; } + .file.is-black .file-cta { + background-color: #0a0a0a; + border-color: transparent; + color: white; } + .file.is-black:hover .file-cta, .file.is-black.is-hovered .file-cta { + background-color: #040404; + border-color: transparent; + color: white; } + .file.is-black:focus .file-cta, .file.is-black.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25); + color: white; } + .file.is-black:active .file-cta, .file.is-black.is-active .file-cta { + background-color: black; + border-color: transparent; + color: white; } + .file.is-light .file-cta { + background-color: #ecf0f1; + border-color: transparent; + color: #282f2f; } + .file.is-light:hover .file-cta, .file.is-light.is-hovered .file-cta { + background-color: #e5eaec; + border-color: transparent; + color: #282f2f; } + .file.is-light:focus .file-cta, .file.is-light.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(236, 240, 241, 0.25); + color: #282f2f; } + .file.is-light:active .file-cta, .file.is-light.is-active .file-cta { + background-color: #dde4e6; + border-color: transparent; + color: #282f2f; } + .file.is-dark .file-cta { + background-color: #282f2f; + border-color: transparent; + color: #ecf0f1; } + .file.is-dark:hover .file-cta, .file.is-dark.is-hovered .file-cta { + background-color: #232829; + border-color: transparent; + color: #ecf0f1; } + .file.is-dark:focus .file-cta, .file.is-dark.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(40, 47, 47, 0.25); + color: #ecf0f1; } + .file.is-dark:active .file-cta, .file.is-dark.is-active .file-cta { + background-color: #1d2122; + border-color: transparent; + color: #ecf0f1; } + .file.is-primary .file-cta { + background-color: #375a7f; + border-color: transparent; + color: #fff; } + .file.is-primary:hover .file-cta, .file.is-primary.is-hovered .file-cta { + background-color: #335476; + border-color: transparent; + color: #fff; } + .file.is-primary:focus .file-cta, .file.is-primary.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(55, 90, 127, 0.25); + color: #fff; } + .file.is-primary:active .file-cta, .file.is-primary.is-active .file-cta { + background-color: #2f4d6d; + border-color: transparent; + color: #fff; } + .file.is-link .file-cta { + background-color: #1abc9c; + border-color: transparent; + color: #fff; } + .file.is-link:hover .file-cta, .file.is-link.is-hovered .file-cta { + background-color: #18b193; + border-color: transparent; + color: #fff; } + .file.is-link:focus .file-cta, .file.is-link.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(26, 188, 156, 0.25); + color: #fff; } + .file.is-link:active .file-cta, .file.is-link.is-active .file-cta { + background-color: #17a689; + border-color: transparent; + color: #fff; } + .file.is-info .file-cta { + background-color: #209cee; + border-color: transparent; + color: #fff; } + .file.is-info:hover .file-cta, .file.is-info.is-hovered .file-cta { + background-color: #1496ed; + border-color: transparent; + color: #fff; } + .file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25); + color: #fff; } + .file.is-info:active .file-cta, .file.is-info.is-active .file-cta { + background-color: #118fe4; + border-color: transparent; + color: #fff; } + .file.is-success .file-cta { + background-color: #2ecc71; + border-color: transparent; + color: #fff; } + .file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { + background-color: #2cc26b; + border-color: transparent; + color: #fff; } + .file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(46, 204, 113, 0.25); + color: #fff; } + .file.is-success:active .file-cta, .file.is-success.is-active .file-cta { + background-color: #29b765; + border-color: transparent; + color: #fff; } + .file.is-warning .file-cta { + background-color: #f1b70e; + border-color: transparent; + color: #fff; } + .file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { + background-color: #e5ae0d; + border-color: transparent; + color: #fff; } + .file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(241, 183, 14, 0.25); + color: #fff; } + .file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { + background-color: #d9a50d; + border-color: transparent; + color: #fff; } + .file.is-danger .file-cta { + background-color: #e74c3c; + border-color: transparent; + color: #fff; } + .file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { + background-color: #e64231; + border-color: transparent; + color: #fff; } + .file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(231, 76, 60, 0.25); + color: #fff; } + .file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { + background-color: #e43725; + border-color: transparent; + color: #fff; } + .file.is-small { + font-size: 0.85em; } + .file.is-medium { + font-size: 1.25rem; } + .file.is-medium .file-icon .fa { + font-size: 21px; } + .file.is-large { + font-size: 1.5rem; } + .file.is-large .file-icon .fa { + font-size: 28px; } + .file.has-name .file-cta { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + .file.has-name .file-name { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .file.has-name.is-empty .file-cta { + border-radius: 0.4em; } + .file.has-name.is-empty .file-name { + display: none; } + .file.is-boxed .file-label { + flex-direction: column; } + .file.is-boxed .file-cta { + flex-direction: column; + height: auto; + padding: 1em 3em; } + .file.is-boxed .file-name { + border-width: 0 1px 1px; } + .file.is-boxed .file-icon { + height: 1.5em; + width: 1.5em; } + .file.is-boxed .file-icon .fa { + font-size: 21px; } + .file.is-boxed.is-small .file-icon .fa { + font-size: 14px; } + .file.is-boxed.is-medium .file-icon .fa { + font-size: 28px; } + .file.is-boxed.is-large .file-icon .fa { + font-size: 35px; } + .file.is-boxed.has-name .file-cta { + border-radius: 0.4em 0.4em 0 0; } + .file.is-boxed.has-name .file-name { + border-radius: 0 0 0.4em 0.4em; + border-width: 0 1px 1px; } + .file.is-centered { + justify-content: center; } + .file.is-fullwidth .file-label { + width: 100%; } + .file.is-fullwidth .file-name { + flex-grow: 1; + max-width: none; } + .file.is-right { + justify-content: flex-end; } + .file.is-right .file-cta { + border-radius: 0 0.4em 0.4em 0; } + .file.is-right .file-name { + border-radius: 0.4em 0 0 0.4em; + border-width: 1px 0 1px 1px; + order: -1; } + +.file-label { + align-items: stretch; + display: flex; + cursor: pointer; + justify-content: flex-start; + overflow: hidden; + position: relative; } + .file-label:hover .file-cta { + background-color: #e5eaec; + color: #282f2f; } + .file-label:hover .file-name { + border-color: #596668; } + .file-label:active .file-cta { + background-color: #dde4e6; + color: #282f2f; } + .file-label:active .file-name { + border-color: #535f61; } + +.file-input { + height: 100%; + left: 0; + opacity: 0; + outline: none; + position: absolute; + top: 0; + width: 100%; } + +.file-cta, +.file-name { + border-color: #5e6d6f; + border-radius: 0.4em; + font-size: 1em; + padding-left: 1em; + padding-right: 1em; + white-space: nowrap; } + +.file-cta { + background-color: #ecf0f1; + color: #343c3d; } + +.file-name { + border-color: #5e6d6f; + border-style: solid; + border-width: 1px 1px 1px 0; + display: block; + max-width: 16em; + overflow: hidden; + text-align: left; + text-overflow: ellipsis; } + +.file-icon { + align-items: center; + display: flex; + height: 1em; + justify-content: center; + margin-right: 0.5em; + width: 1em; } + .file-icon .fa { + font-size: 14px; } + +.label { + color: #282f2f; + display: block; + font-size: 15px; + font-weight: 700; } + .label:not(:last-child) { + margin-bottom: 0.5em; } + .label.is-small { + font-size: 0.85em; } + .label.is-medium { + font-size: 1.25rem; } + .label.is-large { + font-size: 1.5rem; } + +.help { + display: block; + font-size: 0.85em; + margin-top: 0.25rem; } + .help.is-white { + color: white; } + .help.is-black { + color: #0a0a0a; } + .help.is-light { + color: #ecf0f1; } + .help.is-dark { + color: #282f2f; } + .help.is-primary { + color: #375a7f; } + .help.is-link { + color: #1abc9c; } + .help.is-info { + color: #209cee; } + .help.is-success { + color: #2ecc71; } + .help.is-warning { + color: #f1b70e; } + .help.is-danger { + color: #e74c3c; } + +.field:not(:last-child) { + margin-bottom: 0.75rem; } + +.field.has-addons { + display: flex; + justify-content: flex-start; } + .field.has-addons .control:not(:last-child) { + margin-right: -1px; } + .field.has-addons .control:not(:first-child):not(:last-child) .button, + .field.has-addons .control:not(:first-child):not(:last-child) .input, + .field.has-addons .control:not(:first-child):not(:last-child) .select select { + border-radius: 0; } + .field.has-addons .control:first-child .button, + .field.has-addons .control:first-child .input, + .field.has-addons .control:first-child .select select { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + .field.has-addons .control:last-child .button, + .field.has-addons .control:last-child .input, + .field.has-addons .control:last-child .select select { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .field.has-addons .control .button:not([disabled]):hover, .field.has-addons .control .button:not([disabled]).is-hovered, + .field.has-addons .control .input:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]).is-hovered, + .field.has-addons .control .select select:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]).is-hovered { + z-index: 2; } + .field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button:not([disabled]).is-focused, .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button:not([disabled]).is-active, + .field.has-addons .control .input:not([disabled]):focus, + .field.has-addons .control .input:not([disabled]).is-focused, + .field.has-addons .control .input:not([disabled]):active, + .field.has-addons .control .input:not([disabled]).is-active, + .field.has-addons .control .select select:not([disabled]):focus, + .field.has-addons .control .select select:not([disabled]).is-focused, + .field.has-addons .control .select select:not([disabled]):active, + .field.has-addons .control .select select:not([disabled]).is-active { + z-index: 3; } + .field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button:not([disabled]).is-focused:hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button:not([disabled]).is-active:hover, + .field.has-addons .control .input:not([disabled]):focus:hover, + .field.has-addons .control .input:not([disabled]).is-focused:hover, + .field.has-addons .control .input:not([disabled]):active:hover, + .field.has-addons .control .input:not([disabled]).is-active:hover, + .field.has-addons .control .select select:not([disabled]):focus:hover, + .field.has-addons .control .select select:not([disabled]).is-focused:hover, + .field.has-addons .control .select select:not([disabled]):active:hover, + .field.has-addons .control .select select:not([disabled]).is-active:hover { + z-index: 4; } + .field.has-addons .control.is-expanded { + flex-grow: 1; } + .field.has-addons.has-addons-centered { + justify-content: center; } + .field.has-addons.has-addons-right { + justify-content: flex-end; } + .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + +.field.is-grouped { + display: flex; + justify-content: flex-start; } + .field.is-grouped > .control { + flex-shrink: 0; } + .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + .field.is-grouped > .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.is-grouped.is-grouped-centered { + justify-content: center; } + .field.is-grouped.is-grouped-right { + justify-content: flex-end; } + .field.is-grouped.is-grouped-multiline { + flex-wrap: wrap; } + .field.is-grouped.is-grouped-multiline > .control:last-child, .field.is-grouped.is-grouped-multiline > .control:not(:last-child) { + margin-bottom: 0.75rem; } + .field.is-grouped.is-grouped-multiline:last-child { + margin-bottom: -0.75rem; } + .field.is-grouped.is-grouped-multiline:not(:last-child) { + margin-bottom: 0; } + +@media screen and (min-width: 769px), print { + .field.is-horizontal { + display: flex; } } + +.field-label .label { + font-size: inherit; } + +@media screen and (max-width: 768px) { + .field-label { + margin-bottom: 0.5rem; } } + +@media screen and (min-width: 769px), print { + .field-label { + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + margin-right: 1.5rem; + text-align: right; } + .field-label.is-small { + font-size: 0.85em; + padding-top: 0.375em; } + .field-label.is-normal { + padding-top: 0.375em; } + .field-label.is-medium { + font-size: 1.25rem; + padding-top: 0.375em; } + .field-label.is-large { + font-size: 1.5rem; + padding-top: 0.375em; } } + +.field-body .field .field { + margin-bottom: 0; } + +@media screen and (min-width: 769px), print { + .field-body { + display: flex; + flex-basis: 0; + flex-grow: 5; + flex-shrink: 1; } + .field-body .field { + margin-bottom: 0; } + .field-body > .field { + flex-shrink: 1; } + .field-body > .field:not(.is-narrow) { + flex-grow: 1; } + .field-body > .field:not(:last-child) { + margin-right: 0.75rem; } } + +.control { + clear: both; + font-size: 15px; + position: relative; + text-align: left; } + .control.has-icon .icon { + color: #dbdee0; + height: 2.25em; + pointer-events: none; + position: absolute; + top: 0; + width: 2.25em; + z-index: 4; } + .control.has-icon .input:focus + .icon { + color: #5e6d6f; } + .control.has-icon .input.is-small + .icon { + font-size: 0.85em; } + .control.has-icon .input.is-medium + .icon { + font-size: 1.25rem; } + .control.has-icon .input.is-large + .icon { + font-size: 1.5rem; } + .control.has-icon:not(.has-icon-right) .icon { + left: 0; } + .control.has-icon:not(.has-icon-right) .input { + padding-left: 2.25em; } + .control.has-icon.has-icon-right .icon { + right: 0; } + .control.has-icon.has-icon-right .input { + padding-right: 2.25em; } + .control.has-icons-left .input:focus ~ .icon, + .control.has-icons-left .select:focus ~ .icon, .control.has-icons-right .input:focus ~ .icon, + .control.has-icons-right .select:focus ~ .icon { + color: #5e6d6f; } + .control.has-icons-left .input.is-small ~ .icon, + .control.has-icons-left .select.is-small ~ .icon, .control.has-icons-right .input.is-small ~ .icon, + .control.has-icons-right .select.is-small ~ .icon { + font-size: 0.85em; } + .control.has-icons-left .input.is-medium ~ .icon, + .control.has-icons-left .select.is-medium ~ .icon, .control.has-icons-right .input.is-medium ~ .icon, + .control.has-icons-right .select.is-medium ~ .icon { + font-size: 1.25rem; } + .control.has-icons-left .input.is-large ~ .icon, + .control.has-icons-left .select.is-large ~ .icon, .control.has-icons-right .input.is-large ~ .icon, + .control.has-icons-right .select.is-large ~ .icon { + font-size: 1.5rem; } + .control.has-icons-left .icon, .control.has-icons-right .icon { + color: #dbdee0; + height: 2.25em; + pointer-events: none; + position: absolute; + top: 0; + width: 2.25em; + z-index: 4; } + .control.has-icons-left .input, + .control.has-icons-left .select select { + padding-left: 2.25em; } + .control.has-icons-left .icon.is-left { + left: 0; } + .control.has-icons-right .input, + .control.has-icons-right .select select { + padding-right: 2.25em; } + .control.has-icons-right .icon.is-right { + right: 0; } + .control.is-loading::after { + position: absolute !important; + right: 0.625em; + top: 0.625em; + z-index: 4; } + .control.is-loading.is-small:after { + font-size: 0.85em; } + .control.is-loading.is-medium:after { + font-size: 1.25rem; } + .control.is-loading.is-large:after { + font-size: 1.5rem; } + +.icon { + align-items: center; + display: inline-flex; + justify-content: center; + height: 1.5rem; + width: 1.5rem; } + .icon.is-small { + height: 1rem; + width: 1rem; } + .icon.is-medium { + height: 2rem; + width: 2rem; } + .icon.is-large { + height: 3rem; + width: 3rem; } + +.image { + display: block; + position: relative; } + .image img { + display: block; + height: auto; + width: 100%; } + .image img.is-rounded { + border-radius: 290486px; } + .image.is-square img, .image.is-1by1 img, .image.is-5by4 img, .image.is-4by3 img, .image.is-3by2 img, .image.is-5by3 img, .image.is-16by9 img, .image.is-2by1 img, .image.is-3by1 img, .image.is-4by5 img, .image.is-3by4 img, .image.is-2by3 img, .image.is-3by5 img, .image.is-9by16 img, .image.is-1by2 img, .image.is-1by3 img { + height: 100%; + width: 100%; } + .image.is-square, .image.is-1by1 { + padding-top: 100%; } + .image.is-5by4 { + padding-top: 80%; } + .image.is-4by3 { + padding-top: 75%; } + .image.is-3by2 { + padding-top: 66.6666%; } + .image.is-5by3 { + padding-top: 60%; } + .image.is-16by9 { + padding-top: 56.25%; } + .image.is-2by1 { + padding-top: 50%; } + .image.is-3by1 { + padding-top: 33.3333%; } + .image.is-4by5 { + padding-top: 125%; } + .image.is-3by4 { + padding-top: 133.3333%; } + .image.is-2by3 { + padding-top: 150%; } + .image.is-3by5 { + padding-top: 166.6666%; } + .image.is-9by16 { + padding-top: 177.7777%; } + .image.is-1by2 { + padding-top: 200%; } + .image.is-1by3 { + padding-top: 300%; } + .image.is-16x16 { + height: 16px; + width: 16px; } + .image.is-24x24 { + height: 24px; + width: 24px; } + .image.is-32x32 { + height: 32px; + width: 32px; } + .image.is-48x48 { + height: 48px; + width: 48px; } + .image.is-64x64 { + height: 64px; + width: 64px; } + .image.is-96x96 { + height: 96px; + width: 96px; } + .image.is-128x128 { + height: 128px; + width: 128px; } + +.notification { + background-color: #282f2f; + border-radius: 0.4em; + padding: 1.25rem 2.5rem 1.25rem 1.5rem; + position: relative; } + .notification a:not(.button):not(.dropdown-item) { + color: currentColor; + text-decoration: underline; } + .notification strong { + color: currentColor; } + .notification code, + .notification pre { + background: white; } + .notification pre code { + background: transparent; } + .notification > .delete { + position: absolute; + right: 0.5rem; + top: 0.5rem; } + .notification .title, + .notification .subtitle, + .notification .content { + color: currentColor; } + .notification.is-white { + background-color: white; + color: #0a0a0a; } + .notification.is-black { + background-color: #0a0a0a; + color: white; } + .notification.is-light { + background-color: #ecf0f1; + color: #282f2f; } + .notification.is-dark { + background-color: #282f2f; + color: #ecf0f1; } + .notification.is-primary { + background-color: #375a7f; + color: #fff; } + .notification.is-link { + background-color: #1abc9c; + color: #fff; } + .notification.is-info { + background-color: #209cee; + color: #fff; } + .notification.is-success { + background-color: #2ecc71; + color: #fff; } + .notification.is-warning { + background-color: #f1b70e; + color: #fff; } + .notification.is-danger { + background-color: #e74c3c; + color: #fff; } + +.progress { + -moz-appearance: none; + -webkit-appearance: none; + border: none; + border-radius: 290486px; + display: block; + height: 15px; + overflow: hidden; + padding: 0; + width: 100%; } + .progress::-webkit-progress-bar { + background-color: #5e6d6f; } + .progress::-webkit-progress-value { + background-color: #dbdee0; } + .progress::-moz-progress-bar { + background-color: #dbdee0; } + .progress::-ms-fill { + background-color: #dbdee0; + border: none; } + .progress.is-white::-webkit-progress-value { + background-color: white; } + .progress.is-white::-moz-progress-bar { + background-color: white; } + .progress.is-white::-ms-fill { + background-color: white; } + .progress.is-black::-webkit-progress-value { + background-color: #0a0a0a; } + .progress.is-black::-moz-progress-bar { + background-color: #0a0a0a; } + .progress.is-black::-ms-fill { + background-color: #0a0a0a; } + .progress.is-light::-webkit-progress-value { + background-color: #ecf0f1; } + .progress.is-light::-moz-progress-bar { + background-color: #ecf0f1; } + .progress.is-light::-ms-fill { + background-color: #ecf0f1; } + .progress.is-dark::-webkit-progress-value { + background-color: #282f2f; } + .progress.is-dark::-moz-progress-bar { + background-color: #282f2f; } + .progress.is-dark::-ms-fill { + background-color: #282f2f; } + .progress.is-primary::-webkit-progress-value { + background-color: #375a7f; } + .progress.is-primary::-moz-progress-bar { + background-color: #375a7f; } + .progress.is-primary::-ms-fill { + background-color: #375a7f; } + .progress.is-link::-webkit-progress-value { + background-color: #1abc9c; } + .progress.is-link::-moz-progress-bar { + background-color: #1abc9c; } + .progress.is-link::-ms-fill { + background-color: #1abc9c; } + .progress.is-info::-webkit-progress-value { + background-color: #209cee; } + .progress.is-info::-moz-progress-bar { + background-color: #209cee; } + .progress.is-info::-ms-fill { + background-color: #209cee; } + .progress.is-success::-webkit-progress-value { + background-color: #2ecc71; } + .progress.is-success::-moz-progress-bar { + background-color: #2ecc71; } + .progress.is-success::-ms-fill { + background-color: #2ecc71; } + .progress.is-warning::-webkit-progress-value { + background-color: #f1b70e; } + .progress.is-warning::-moz-progress-bar { + background-color: #f1b70e; } + .progress.is-warning::-ms-fill { + background-color: #f1b70e; } + .progress.is-danger::-webkit-progress-value { + background-color: #e74c3c; } + .progress.is-danger::-moz-progress-bar { + background-color: #e74c3c; } + .progress.is-danger::-ms-fill { + background-color: #e74c3c; } + .progress.is-small { + height: 0.85em; } + .progress.is-medium { + height: 1.25rem; } + .progress.is-large { + height: 1.5rem; } + +.table { + background-color: #343c3d; + color: #fff; } + .table td, + .table th { + border: 1px solid #5e6d6f; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .table td.is-white, + .table th.is-white { + background-color: white; + border-color: white; + color: #0a0a0a; } + .table td.is-black, + .table th.is-black { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .table td.is-light, + .table th.is-light { + background-color: #ecf0f1; + border-color: #ecf0f1; + color: #282f2f; } + .table td.is-dark, + .table th.is-dark { + background-color: #282f2f; + border-color: #282f2f; + color: #ecf0f1; } + .table td.is-primary, + .table th.is-primary { + background-color: #375a7f; + border-color: #375a7f; + color: #fff; } + .table td.is-link, + .table th.is-link { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; } + .table td.is-info, + .table th.is-info { + background-color: #209cee; + border-color: #209cee; + color: #fff; } + .table td.is-success, + .table th.is-success { + background-color: #2ecc71; + border-color: #2ecc71; + color: #fff; } + .table td.is-warning, + .table th.is-warning { + background-color: #f1b70e; + border-color: #f1b70e; + color: #fff; } + .table td.is-danger, + .table th.is-danger { + background-color: #e74c3c; + border-color: #e74c3c; + color: #fff; } + .table td.is-narrow, + .table th.is-narrow { + white-space: nowrap; + width: 1%; } + .table td.is-selected, + .table th.is-selected { + background-color: #375a7f; + color: #fff; } + .table td.is-selected a, + .table td.is-selected strong, + .table th.is-selected a, + .table th.is-selected strong { + color: currentColor; } + .table th { + color: #f2f2f2; + text-align: left; } + .table tr.is-selected { + background-color: #375a7f; + color: #fff; } + .table tr.is-selected a, + .table tr.is-selected strong { + color: currentColor; } + .table tr.is-selected td, + .table tr.is-selected th { + border-color: #fff; + color: currentColor; } + .table thead td, + .table thead th { + border-width: 0 0 2px; + color: #f2f2f2; } + .table tfoot td, + .table tfoot th { + border-width: 2px 0 0; + color: #f2f2f2; } + .table tbody tr:last-child td, + .table tbody tr:last-child th { + border-bottom-width: 0; } + .table.is-bordered td, + .table.is-bordered th { + border-width: 1px; } + .table.is-bordered tr:last-child td, + .table.is-bordered tr:last-child th { + border-bottom-width: 1px; } + .table.is-fullwidth { + width: 100%; } + .table.is-hoverable tbody tr:not(.is-selected):hover { + background-color: #282f2f; } + .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover { + background-color: #282f2f; } + .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) { + background-color: #2d3435; } + .table.is-narrow td, + .table.is-narrow th { + padding: 0.25em 0.5em; } + .table.is-striped tbody tr:not(.is-selected):nth-child(even) { + background-color: #282f2f; } + +.table-container { + -webkit-overflow-scrolling: touch; + overflow: auto; + overflow-y: hidden; + max-width: 100%; } + +.tags { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .tags .tag { + margin-bottom: 0.5rem; } + .tags .tag:not(:last-child) { + margin-right: 0.5rem; } + .tags:last-child { + margin-bottom: -0.5rem; } + .tags:not(:last-child) { + margin-bottom: 1rem; } + .tags.has-addons .tag { + margin-right: 0; } + .tags.has-addons .tag:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .tags.has-addons .tag:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + .tags.is-centered { + justify-content: center; } + .tags.is-centered .tag { + margin-right: 0.25rem; + margin-left: 0.25rem; } + .tags.is-right { + justify-content: flex-end; } + .tags.is-right .tag:not(:first-child) { + margin-left: 0.5rem; } + .tags.is-right .tag:not(:last-child) { + margin-right: 0; } + +.tag:not(body) { + align-items: center; + background-color: #282f2f; + border-radius: 0.4em; + color: #fff; + display: inline-flex; + font-size: 0.85em; + height: 2em; + justify-content: center; + line-height: 1.5; + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + .tag:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + .tag:not(body).is-white { + background-color: white; + color: #0a0a0a; } + .tag:not(body).is-black { + background-color: #0a0a0a; + color: white; } + .tag:not(body).is-light { + background-color: #ecf0f1; + color: #282f2f; } + .tag:not(body).is-dark { + background-color: #282f2f; + color: #ecf0f1; } + .tag:not(body).is-primary { + background-color: #375a7f; + color: #fff; } + .tag:not(body).is-link { + background-color: #1abc9c; + color: #fff; } + .tag:not(body).is-info { + background-color: #209cee; + color: #fff; } + .tag:not(body).is-success { + background-color: #2ecc71; + color: #fff; } + .tag:not(body).is-warning { + background-color: #f1b70e; + color: #fff; } + .tag:not(body).is-danger { + background-color: #e74c3c; + color: #fff; } + .tag:not(body).is-medium { + font-size: 15px; } + .tag:not(body).is-large { + font-size: 1.25rem; } + .tag:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + .tag:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + .tag:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + .tag:not(body).is-delete { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + .tag:not(body).is-delete::before, .tag:not(body).is-delete::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .tag:not(body).is-delete::before { + height: 1px; + width: 50%; } + .tag:not(body).is-delete::after { + height: 50%; + width: 1px; } + .tag:not(body).is-delete:hover, .tag:not(body).is-delete:focus { + background-color: #1d2122; } + .tag:not(body).is-delete:active { + background-color: #111414; } + .tag:not(body).is-rounded { + border-radius: 290486px; } + +a.tag:hover { + text-decoration: underline; } + +.title, +.subtitle { + word-break: break-word; } + .title em, + .title span, + .subtitle em, + .subtitle span { + font-weight: inherit; } + .title sub, + .subtitle sub { + font-size: 0.75em; } + .title sup, + .subtitle sup { + font-size: 0.75em; } + .title .tag, + .subtitle .tag { + vertical-align: middle; } + +.title { + color: #fff; + font-size: 2rem; + font-weight: 500; + line-height: 1.125; } + .title strong { + color: inherit; + font-weight: inherit; } + .title + .highlight { + margin-top: -0.75rem; } + .title:not(.is-spaced) + .subtitle { + margin-top: -1.25rem; } + .title.is-1 { + font-size: 3rem; } + .title.is-2 { + font-size: 2.5rem; } + .title.is-3 { + font-size: 2rem; } + .title.is-4 { + font-size: 1.5rem; } + .title.is-5 { + font-size: 1.25rem; } + .title.is-6 { + font-size: 15px; } + .title.is-7 { + font-size: 0.85em; } + +.subtitle { + color: #8c9b9d; + font-size: 1.25rem; + font-weight: 400; + line-height: 1.25; } + .subtitle strong { + color: #8c9b9d; + font-weight: 600; } + .subtitle:not(.is-spaced) + .title { + margin-top: -1.25rem; } + .subtitle.is-1 { + font-size: 3rem; } + .subtitle.is-2 { + font-size: 2.5rem; } + .subtitle.is-3 { + font-size: 2rem; } + .subtitle.is-4 { + font-size: 1.5rem; } + .subtitle.is-5 { + font-size: 1.25rem; } + .subtitle.is-6 { + font-size: 15px; } + .subtitle.is-7 { + font-size: 0.85em; } + +.heading { + display: block; + font-size: 11px; + letter-spacing: 1px; + margin-bottom: 5px; + text-transform: uppercase; } + +.highlight { + font-weight: 400; + max-width: 100%; + overflow: hidden; + padding: 0; } + .highlight pre { + overflow: auto; + max-width: 100%; } + +.number { + align-items: center; + background-color: #282f2f; + border-radius: 290486px; + display: inline-flex; + font-size: 1.25rem; + height: 2em; + justify-content: center; + margin-right: 1.5rem; + min-width: 2.5em; + padding: 0.25rem 0.5rem; + text-align: center; + vertical-align: top; } + +.breadcrumb { + font-size: 15px; + white-space: nowrap; } + .breadcrumb a { + align-items: center; + color: #1abc9c; + display: flex; + justify-content: center; + padding: 0 0.75em; } + .breadcrumb a:hover { + color: #1dd2af; } + .breadcrumb li { + align-items: center; + display: flex; } + .breadcrumb li:first-child a { + padding-left: 0; } + .breadcrumb li.is-active a { + color: #f2f2f2; + cursor: default; + pointer-events: none; } + .breadcrumb li + li::before { + color: #8c9b9d; + content: "\0002f"; } + .breadcrumb ul, + .breadcrumb ol { + align-items: flex-start; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; } + .breadcrumb .icon:first-child { + margin-right: 0.5em; } + .breadcrumb .icon:last-child { + margin-left: 0.5em; } + .breadcrumb.is-centered ol, + .breadcrumb.is-centered ul { + justify-content: center; } + .breadcrumb.is-right ol, + .breadcrumb.is-right ul { + justify-content: flex-end; } + .breadcrumb.is-small { + font-size: 0.85em; } + .breadcrumb.is-medium { + font-size: 1.25rem; } + .breadcrumb.is-large { + font-size: 1.5rem; } + .breadcrumb.has-arrow-separator li + li::before { + content: "\02192"; } + .breadcrumb.has-bullet-separator li + li::before { + content: "\02022"; } + .breadcrumb.has-dot-separator li + li::before { + content: "\000b7"; } + .breadcrumb.has-succeeds-separator li + li::before { + content: "\0227B"; } + +.card { + background-color: white; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + color: #fff; + max-width: 100%; + position: relative; } + +.card-header { + background-color: transparent; + align-items: stretch; + box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); + display: flex; } + +.card-header-title { + align-items: center; + color: #f2f2f2; + display: flex; + flex-grow: 1; + font-weight: 700; + padding: 0.75rem; } + .card-header-title.is-centered { + justify-content: center; } + +.card-header-icon { + align-items: center; + cursor: pointer; + display: flex; + justify-content: center; + padding: 0.75rem; } + +.card-image { + display: block; + position: relative; } + +.card-content { + background-color: transparent; + padding: 1.5rem; } + +.card-footer { + background-color: transparent; + border-top: 1px solid #5e6d6f; + align-items: stretch; + display: flex; } + +.card-footer-item { + align-items: center; + display: flex; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 0; + justify-content: center; + padding: 0.75rem; } + .card-footer-item:not(:last-child) { + border-right: 1px solid #5e6d6f; } + +.card .media:not(:last-child) { + margin-bottom: 0.75rem; } + +.dropdown { + display: inline-flex; + position: relative; + vertical-align: top; } + .dropdown.is-active .dropdown-menu, .dropdown.is-hoverable:hover .dropdown-menu { + display: block; } + .dropdown.is-right .dropdown-menu { + left: auto; + right: 0; } + .dropdown.is-up .dropdown-menu { + bottom: 100%; + padding-bottom: 4px; + padding-top: initial; + top: auto; } + +.dropdown-menu { + display: none; + left: 0; + min-width: 12rem; + padding-top: 4px; + position: absolute; + top: 100%; + z-index: 20; } + +.dropdown-content { + background-color: #282f2f; + border-radius: 0.4em; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + +.dropdown-item { + color: #fff; + display: block; + font-size: 0.875rem; + line-height: 1.5; + padding: 0.375rem 1rem; + position: relative; } + +a.dropdown-item, +button.dropdown-item { + padding-right: 3rem; + text-align: left; + white-space: nowrap; + width: 100%; } + a.dropdown-item:hover, + button.dropdown-item:hover { + background-color: #282f2f; + color: #0a0a0a; } + a.dropdown-item.is-active, + button.dropdown-item.is-active { + background-color: #1abc9c; + color: #fff; } + +.dropdown-divider { + background-color: #5e6d6f; + border: none; + display: block; + height: 1px; + margin: 0.5rem 0; } + +.level { + align-items: center; + justify-content: space-between; } + .level code { + border-radius: 0.4em; } + .level img { + display: inline-block; + vertical-align: top; } + .level.is-mobile { + display: flex; } + .level.is-mobile .level-left, + .level.is-mobile .level-right { + display: flex; } + .level.is-mobile .level-left + .level-right { + margin-top: 0; } + .level.is-mobile .level-item:not(:last-child) { + margin-bottom: 0; + margin-right: 0.75rem; } + .level.is-mobile .level-item:not(.is-narrow) { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + .level { + display: flex; } + .level > .level-item:not(.is-narrow) { + flex-grow: 1; } } + +.level-item { + align-items: center; + display: flex; + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; + justify-content: center; } + .level-item .title, + .level-item .subtitle { + margin-bottom: 0; } + @media screen and (max-width: 768px) { + .level-item:not(:last-child) { + margin-bottom: 0.75rem; } } + +.level-left, +.level-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + .level-left .level-item.is-flexible, + .level-right .level-item.is-flexible { + flex-grow: 1; } + @media screen and (min-width: 769px), print { + .level-left .level-item:not(:last-child), + .level-right .level-item:not(:last-child) { + margin-right: 0.75rem; } } + +.level-left { + align-items: center; + justify-content: flex-start; } + @media screen and (max-width: 768px) { + .level-left + .level-right { + margin-top: 1.5rem; } } + @media screen and (min-width: 769px), print { + .level-left { + display: flex; } } + +.level-right { + align-items: center; + justify-content: flex-end; } + @media screen and (min-width: 769px), print { + .level-right { + display: flex; } } + +.list { + background-color: white; + border-radius: 0.4em; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); } + +.list-item { + display: block; + padding: 0.5em 1em; } + .list-item:not(a) { + color: #fff; } + .list-item:first-child { + border-top-left-radius: 0.4em; + border-top-right-radius: 0.4em; } + .list-item:last-child { + border-top-left-radius: 0.4em; + border-top-right-radius: 0.4em; } + .list-item:not(:last-child) { + border-bottom: 1px solid #5e6d6f; } + .list-item.is-active { + background-color: #1abc9c; + color: #fff; } + +a.list-item { + background-color: #282f2f; + cursor: pointer; } + +.media { + align-items: flex-start; + display: flex; + text-align: left; } + .media .content:not(:last-child) { + margin-bottom: 0.75rem; } + .media .media { + border-top: 1px solid rgba(94, 109, 111, 0.5); + display: flex; + padding-top: 0.75rem; } + .media .media .content:not(:last-child), + .media .media .control:not(:last-child) { + margin-bottom: 0.5rem; } + .media .media .media { + padding-top: 0.5rem; } + .media .media .media + .media { + margin-top: 0.5rem; } + .media + .media { + border-top: 1px solid rgba(94, 109, 111, 0.5); + margin-top: 1rem; + padding-top: 1rem; } + .media.is-large + .media { + margin-top: 1.5rem; + padding-top: 1.5rem; } + +.media-left, +.media-right { + flex-basis: auto; + flex-grow: 0; + flex-shrink: 0; } + +.media-left { + margin-right: 1rem; } + +.media-right { + margin-left: 1rem; } + +.media-content { + flex-basis: auto; + flex-grow: 1; + flex-shrink: 1; + text-align: left; } + +@media screen and (max-width: 768px) { + .media-content { + overflow-x: auto; } } + +.menu { + font-size: 15px; } + .menu.is-small { + font-size: 0.85em; } + .menu.is-medium { + font-size: 1.25rem; } + .menu.is-large { + font-size: 1.5rem; } + +.menu-list { + line-height: 1.25; } + .menu-list a { + border-radius: 3px; + color: #fff; + display: block; + padding: 0.5em 0.75em; } + .menu-list a:hover { + background-color: #282f2f; + color: #f2f2f2; } + .menu-list a.is-active { + background-color: #1abc9c; + color: #fff; } + .menu-list li ul { + border-left: 1px solid #5e6d6f; + margin: 0.75em; + padding-left: 0.75em; } + +.menu-label { + color: white; + font-size: 0.75em; + letter-spacing: 0.1em; + text-transform: uppercase; } + .menu-label:not(:first-child) { + margin-top: 1em; } + .menu-label:not(:last-child) { + margin-bottom: 1em; } + +.message { + background-color: #282f2f; + border-radius: 0.4em; + font-size: 15px; } + .message strong { + color: currentColor; } + .message a:not(.button):not(.tag) { + color: currentColor; + text-decoration: underline; } + .message.is-small { + font-size: 0.85em; } + .message.is-medium { + font-size: 1.25rem; } + .message.is-large { + font-size: 1.5rem; } + .message.is-white { + background-color: white; } + .message.is-white .message-header { + background-color: white; + color: #0a0a0a; } + .message.is-white .message-body { + border-color: white; + color: #4d4d4d; } + .message.is-black { + background-color: #fafafa; } + .message.is-black .message-header { + background-color: #0a0a0a; + color: white; } + .message.is-black .message-body { + border-color: #0a0a0a; + color: #090909; } + .message.is-light { + background-color: #f9fafb; } + .message.is-light .message-header { + background-color: #ecf0f1; + color: #282f2f; } + .message.is-light .message-body { + border-color: #ecf0f1; + color: #505050; } + .message.is-dark { + background-color: #f9fafa; } + .message.is-dark .message-header { + background-color: #282f2f; + color: #ecf0f1; } + .message.is-dark .message-body { + border-color: #282f2f; + color: #212526; } + .message.is-primary { + background-color: #f8fafc; } + .message.is-primary .message-header { + background-color: #375a7f; + color: #fff; } + .message.is-primary .message-body { + border-color: #375a7f; + color: #2b4159; } + .message.is-link { + background-color: #f6fefc; } + .message.is-link .message-header { + background-color: #1abc9c; + color: #fff; } + .message.is-link .message-body { + border-color: #1abc9c; + color: #0b2f28; } + .message.is-info { + background-color: #f6fbfe; } + .message.is-info .message-header { + background-color: #209cee; + color: #fff; } + .message.is-info .message-body { + border-color: #209cee; + color: #12537e; } + .message.is-success { + background-color: #f7fdf9; } + .message.is-success .message-header { + background-color: #2ecc71; + color: #fff; } + .message.is-success .message-body { + border-color: #2ecc71; + color: #133622; } + .message.is-warning { + background-color: #fefcf5; } + .message.is-warning .message-header { + background-color: #f1b70e; + color: #fff; } + .message.is-warning .message-body { + border-color: #f1b70e; + color: #2b2107; } + .message.is-danger { + background-color: #fef7f6; } + .message.is-danger .message-header { + background-color: #e74c3c; + color: #fff; } + .message.is-danger .message-body { + border-color: #e74c3c; + color: #a82a1d; } + +.message-header { + align-items: center; + background-color: #fff; + border-radius: 0.4em 0.4em 0 0; + color: rgba(0, 0, 0, 0.7); + display: flex; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.75em 1em; + position: relative; } + .message-header .delete { + flex-grow: 0; + flex-shrink: 0; + margin-left: 0.75em; } + .message-header + .message-body { + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.message-body { + border-color: #5e6d6f; + border-radius: 0.4em; + border-style: solid; + border-width: 0 0 0 4px; + color: #fff; + padding: 1.25em 1.5em; } + .message-body code, + .message-body pre { + background-color: white; } + .message-body pre code { + background-color: transparent; } + +.modal { + align-items: center; + display: none; + flex-direction: column; + justify-content: center; + overflow: hidden; + position: fixed; + z-index: 40; } + .modal.is-active { + display: flex; } + +.modal-background { + background-color: rgba(10, 10, 10, 0.86); } + +.modal-content, +.modal-card { + margin: 0 20px; + max-height: calc(100vh - 160px); + overflow: auto; + position: relative; + width: 100%; } + @media screen and (min-width: 769px), print { + .modal-content, + .modal-card { + margin: 0 auto; + max-height: calc(100vh - 40px); + width: 640px; } } + +.modal-close { + background: none; + height: 40px; + position: fixed; + right: 20px; + top: 20px; + width: 40px; } + +.modal-card { + display: flex; + flex-direction: column; + max-height: calc(100vh - 40px); + overflow: hidden; + -ms-overflow-y: visible; } + +.modal-card-head, +.modal-card-foot { + align-items: center; + background-color: #282f2f; + display: flex; + flex-shrink: 0; + justify-content: flex-start; + padding: 20px; + position: relative; } + +.modal-card-head { + border-bottom: 1px solid #5e6d6f; + border-top-left-radius: 8px; + border-top-right-radius: 8px; } + +.modal-card-title { + color: #f2f2f2; + flex-grow: 1; + flex-shrink: 0; + font-size: 1.5rem; + line-height: 1; } + +.modal-card-foot { + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + border-top: 1px solid #5e6d6f; } + .modal-card-foot .button:not(:last-child) { + margin-right: 10px; } + +.modal-card-body { + -webkit-overflow-scrolling: touch; + background-color: white; + flex-grow: 1; + flex-shrink: 1; + overflow: auto; + padding: 20px; } + +.navbar { + background-color: #375a7f; + min-height: 4rem; + position: relative; + z-index: 30; } + .navbar.is-white { + background-color: white; + color: #0a0a0a; } + .navbar.is-white .navbar-brand > .navbar-item, + .navbar.is-white .navbar-brand .navbar-link { + color: #0a0a0a; } + .navbar.is-white .navbar-brand > a.navbar-item:hover, .navbar.is-white .navbar-brand > a.navbar-item.is-active, + .navbar.is-white .navbar-brand .navbar-link:hover, + .navbar.is-white .navbar-brand .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-brand .navbar-link::after { + border-color: #0a0a0a; } + .navbar.is-white .navbar-burger { + color: #0a0a0a; } + @media screen and (min-width: 1088px) { + .navbar.is-white .navbar-start > .navbar-item, + .navbar.is-white .navbar-start .navbar-link, + .navbar.is-white .navbar-end > .navbar-item, + .navbar.is-white .navbar-end .navbar-link { + color: #0a0a0a; } + .navbar.is-white .navbar-start > a.navbar-item:hover, .navbar.is-white .navbar-start > a.navbar-item.is-active, + .navbar.is-white .navbar-start .navbar-link:hover, + .navbar.is-white .navbar-start .navbar-link.is-active, + .navbar.is-white .navbar-end > a.navbar-item:hover, + .navbar.is-white .navbar-end > a.navbar-item.is-active, + .navbar.is-white .navbar-end .navbar-link:hover, + .navbar.is-white .navbar-end .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-start .navbar-link::after, + .navbar.is-white .navbar-end .navbar-link::after { + border-color: #0a0a0a; } + .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #f2f2f2; + color: #0a0a0a; } + .navbar.is-white .navbar-dropdown a.navbar-item.is-active { + background-color: white; + color: #0a0a0a; } } + .navbar.is-black { + background-color: #0a0a0a; + color: white; } + .navbar.is-black .navbar-brand > .navbar-item, + .navbar.is-black .navbar-brand .navbar-link { + color: white; } + .navbar.is-black .navbar-brand > a.navbar-item:hover, .navbar.is-black .navbar-brand > a.navbar-item.is-active, + .navbar.is-black .navbar-brand .navbar-link:hover, + .navbar.is-black .navbar-brand .navbar-link.is-active { + background-color: black; + color: white; } + .navbar.is-black .navbar-brand .navbar-link::after { + border-color: white; } + .navbar.is-black .navbar-burger { + color: white; } + @media screen and (min-width: 1088px) { + .navbar.is-black .navbar-start > .navbar-item, + .navbar.is-black .navbar-start .navbar-link, + .navbar.is-black .navbar-end > .navbar-item, + .navbar.is-black .navbar-end .navbar-link { + color: white; } + .navbar.is-black .navbar-start > a.navbar-item:hover, .navbar.is-black .navbar-start > a.navbar-item.is-active, + .navbar.is-black .navbar-start .navbar-link:hover, + .navbar.is-black .navbar-start .navbar-link.is-active, + .navbar.is-black .navbar-end > a.navbar-item:hover, + .navbar.is-black .navbar-end > a.navbar-item.is-active, + .navbar.is-black .navbar-end .navbar-link:hover, + .navbar.is-black .navbar-end .navbar-link.is-active { + background-color: black; + color: white; } + .navbar.is-black .navbar-start .navbar-link::after, + .navbar.is-black .navbar-end .navbar-link::after { + border-color: white; } + .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link { + background-color: black; + color: white; } + .navbar.is-black .navbar-dropdown a.navbar-item.is-active { + background-color: #0a0a0a; + color: white; } } + .navbar.is-light { + background-color: #ecf0f1; + color: #282f2f; } + .navbar.is-light .navbar-brand > .navbar-item, + .navbar.is-light .navbar-brand .navbar-link { + color: #282f2f; } + .navbar.is-light .navbar-brand > a.navbar-item:hover, .navbar.is-light .navbar-brand > a.navbar-item.is-active, + .navbar.is-light .navbar-brand .navbar-link:hover, + .navbar.is-light .navbar-brand .navbar-link.is-active { + background-color: #dde4e6; + color: #282f2f; } + .navbar.is-light .navbar-brand .navbar-link::after { + border-color: #282f2f; } + .navbar.is-light .navbar-burger { + color: #282f2f; } + @media screen and (min-width: 1088px) { + .navbar.is-light .navbar-start > .navbar-item, + .navbar.is-light .navbar-start .navbar-link, + .navbar.is-light .navbar-end > .navbar-item, + .navbar.is-light .navbar-end .navbar-link { + color: #282f2f; } + .navbar.is-light .navbar-start > a.navbar-item:hover, .navbar.is-light .navbar-start > a.navbar-item.is-active, + .navbar.is-light .navbar-start .navbar-link:hover, + .navbar.is-light .navbar-start .navbar-link.is-active, + .navbar.is-light .navbar-end > a.navbar-item:hover, + .navbar.is-light .navbar-end > a.navbar-item.is-active, + .navbar.is-light .navbar-end .navbar-link:hover, + .navbar.is-light .navbar-end .navbar-link.is-active { + background-color: #dde4e6; + color: #282f2f; } + .navbar.is-light .navbar-start .navbar-link::after, + .navbar.is-light .navbar-end .navbar-link::after { + border-color: #282f2f; } + .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #dde4e6; + color: #282f2f; } + .navbar.is-light .navbar-dropdown a.navbar-item.is-active { + background-color: #ecf0f1; + color: #282f2f; } } + .navbar.is-dark { + background-color: #282f2f; + color: #ecf0f1; } + .navbar.is-dark .navbar-brand > .navbar-item, + .navbar.is-dark .navbar-brand .navbar-link { + color: #ecf0f1; } + .navbar.is-dark .navbar-brand > a.navbar-item:hover, .navbar.is-dark .navbar-brand > a.navbar-item.is-active, + .navbar.is-dark .navbar-brand .navbar-link:hover, + .navbar.is-dark .navbar-brand .navbar-link.is-active { + background-color: #1d2122; + color: #ecf0f1; } + .navbar.is-dark .navbar-brand .navbar-link::after { + border-color: #ecf0f1; } + .navbar.is-dark .navbar-burger { + color: #ecf0f1; } + @media screen and (min-width: 1088px) { + .navbar.is-dark .navbar-start > .navbar-item, + .navbar.is-dark .navbar-start .navbar-link, + .navbar.is-dark .navbar-end > .navbar-item, + .navbar.is-dark .navbar-end .navbar-link { + color: #ecf0f1; } + .navbar.is-dark .navbar-start > a.navbar-item:hover, .navbar.is-dark .navbar-start > a.navbar-item.is-active, + .navbar.is-dark .navbar-start .navbar-link:hover, + .navbar.is-dark .navbar-start .navbar-link.is-active, + .navbar.is-dark .navbar-end > a.navbar-item:hover, + .navbar.is-dark .navbar-end > a.navbar-item.is-active, + .navbar.is-dark .navbar-end .navbar-link:hover, + .navbar.is-dark .navbar-end .navbar-link.is-active { + background-color: #1d2122; + color: #ecf0f1; } + .navbar.is-dark .navbar-start .navbar-link::after, + .navbar.is-dark .navbar-end .navbar-link::after { + border-color: #ecf0f1; } + .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1d2122; + color: #ecf0f1; } + .navbar.is-dark .navbar-dropdown a.navbar-item.is-active { + background-color: #282f2f; + color: #ecf0f1; } } + .navbar.is-primary { + background-color: #375a7f; + color: #fff; } + .navbar.is-primary .navbar-brand > .navbar-item, + .navbar.is-primary .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-primary .navbar-brand > a.navbar-item:hover, .navbar.is-primary .navbar-brand > a.navbar-item.is-active, + .navbar.is-primary .navbar-brand .navbar-link:hover, + .navbar.is-primary .navbar-brand .navbar-link.is-active { + background-color: #2f4d6d; + color: #fff; } + .navbar.is-primary .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-primary .navbar-burger { + color: #fff; } + @media screen and (min-width: 1088px) { + .navbar.is-primary .navbar-start > .navbar-item, + .navbar.is-primary .navbar-start .navbar-link, + .navbar.is-primary .navbar-end > .navbar-item, + .navbar.is-primary .navbar-end .navbar-link { + color: #fff; } + .navbar.is-primary .navbar-start > a.navbar-item:hover, .navbar.is-primary .navbar-start > a.navbar-item.is-active, + .navbar.is-primary .navbar-start .navbar-link:hover, + .navbar.is-primary .navbar-start .navbar-link.is-active, + .navbar.is-primary .navbar-end > a.navbar-item:hover, + .navbar.is-primary .navbar-end > a.navbar-item.is-active, + .navbar.is-primary .navbar-end .navbar-link:hover, + .navbar.is-primary .navbar-end .navbar-link.is-active { + background-color: #2f4d6d; + color: #fff; } + .navbar.is-primary .navbar-start .navbar-link::after, + .navbar.is-primary .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #2f4d6d; + color: #fff; } + .navbar.is-primary .navbar-dropdown a.navbar-item.is-active { + background-color: #375a7f; + color: #fff; } } + .navbar.is-link { + background-color: #1abc9c; + color: #fff; } + .navbar.is-link .navbar-brand > .navbar-item, + .navbar.is-link .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-link .navbar-brand > a.navbar-item:hover, .navbar.is-link .navbar-brand > a.navbar-item.is-active, + .navbar.is-link .navbar-brand .navbar-link:hover, + .navbar.is-link .navbar-brand .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + .navbar.is-link .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-link .navbar-burger { + color: #fff; } + @media screen and (min-width: 1088px) { + .navbar.is-link .navbar-start > .navbar-item, + .navbar.is-link .navbar-start .navbar-link, + .navbar.is-link .navbar-end > .navbar-item, + .navbar.is-link .navbar-end .navbar-link { + color: #fff; } + .navbar.is-link .navbar-start > a.navbar-item:hover, .navbar.is-link .navbar-start > a.navbar-item.is-active, + .navbar.is-link .navbar-start .navbar-link:hover, + .navbar.is-link .navbar-start .navbar-link.is-active, + .navbar.is-link .navbar-end > a.navbar-item:hover, + .navbar.is-link .navbar-end > a.navbar-item.is-active, + .navbar.is-link .navbar-end .navbar-link:hover, + .navbar.is-link .navbar-end .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + .navbar.is-link .navbar-start .navbar-link::after, + .navbar.is-link .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #17a689; + color: #fff; } + .navbar.is-link .navbar-dropdown a.navbar-item.is-active { + background-color: #1abc9c; + color: #fff; } } + .navbar.is-info { + background-color: #209cee; + color: #fff; } + .navbar.is-info .navbar-brand > .navbar-item, + .navbar.is-info .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-info .navbar-brand > a.navbar-item:hover, .navbar.is-info .navbar-brand > a.navbar-item.is-active, + .navbar.is-info .navbar-brand .navbar-link:hover, + .navbar.is-info .navbar-brand .navbar-link.is-active { + background-color: #118fe4; + color: #fff; } + .navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-burger { + color: #fff; } + @media screen and (min-width: 1088px) { + .navbar.is-info .navbar-start > .navbar-item, + .navbar.is-info .navbar-start .navbar-link, + .navbar.is-info .navbar-end > .navbar-item, + .navbar.is-info .navbar-end .navbar-link { + color: #fff; } + .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, + .navbar.is-info .navbar-start .navbar-link:hover, + .navbar.is-info .navbar-start .navbar-link.is-active, + .navbar.is-info .navbar-end > a.navbar-item:hover, + .navbar.is-info .navbar-end > a.navbar-item.is-active, + .navbar.is-info .navbar-end .navbar-link:hover, + .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #118fe4; + color: #fff; } + .navbar.is-info .navbar-start .navbar-link::after, + .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #118fe4; + color: #fff; } + .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #209cee; + color: #fff; } } + .navbar.is-success { + background-color: #2ecc71; + color: #fff; } + .navbar.is-success .navbar-brand > .navbar-item, + .navbar.is-success .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, + .navbar.is-success .navbar-brand .navbar-link:hover, + .navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #29b765; + color: #fff; } + .navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-burger { + color: #fff; } + @media screen and (min-width: 1088px) { + .navbar.is-success .navbar-start > .navbar-item, + .navbar.is-success .navbar-start .navbar-link, + .navbar.is-success .navbar-end > .navbar-item, + .navbar.is-success .navbar-end .navbar-link { + color: #fff; } + .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, + .navbar.is-success .navbar-start .navbar-link:hover, + .navbar.is-success .navbar-start .navbar-link.is-active, + .navbar.is-success .navbar-end > a.navbar-item:hover, + .navbar.is-success .navbar-end > a.navbar-item.is-active, + .navbar.is-success .navbar-end .navbar-link:hover, + .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #29b765; + color: #fff; } + .navbar.is-success .navbar-start .navbar-link::after, + .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #29b765; + color: #fff; } + .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #2ecc71; + color: #fff; } } + .navbar.is-warning { + background-color: #f1b70e; + color: #fff; } + .navbar.is-warning .navbar-brand > .navbar-item, + .navbar.is-warning .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, + .navbar.is-warning .navbar-brand .navbar-link:hover, + .navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #d9a50d; + color: #fff; } + .navbar.is-warning .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-warning .navbar-burger { + color: #fff; } + @media screen and (min-width: 1088px) { + .navbar.is-warning .navbar-start > .navbar-item, + .navbar.is-warning .navbar-start .navbar-link, + .navbar.is-warning .navbar-end > .navbar-item, + .navbar.is-warning .navbar-end .navbar-link { + color: #fff; } + .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, + .navbar.is-warning .navbar-start .navbar-link:hover, + .navbar.is-warning .navbar-start .navbar-link.is-active, + .navbar.is-warning .navbar-end > a.navbar-item:hover, + .navbar.is-warning .navbar-end > a.navbar-item.is-active, + .navbar.is-warning .navbar-end .navbar-link:hover, + .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #d9a50d; + color: #fff; } + .navbar.is-warning .navbar-start .navbar-link::after, + .navbar.is-warning .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #d9a50d; + color: #fff; } + .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #f1b70e; + color: #fff; } } + .navbar.is-danger { + background-color: #e74c3c; + color: #fff; } + .navbar.is-danger .navbar-brand > .navbar-item, + .navbar.is-danger .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, + .navbar.is-danger .navbar-brand .navbar-link:hover, + .navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #e43725; + color: #fff; } + .navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-burger { + color: #fff; } + @media screen and (min-width: 1088px) { + .navbar.is-danger .navbar-start > .navbar-item, + .navbar.is-danger .navbar-start .navbar-link, + .navbar.is-danger .navbar-end > .navbar-item, + .navbar.is-danger .navbar-end .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, + .navbar.is-danger .navbar-start .navbar-link:hover, + .navbar.is-danger .navbar-start .navbar-link.is-active, + .navbar.is-danger .navbar-end > a.navbar-item:hover, + .navbar.is-danger .navbar-end > a.navbar-item.is-active, + .navbar.is-danger .navbar-end .navbar-link:hover, + .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #e43725; + color: #fff; } + .navbar.is-danger .navbar-start .navbar-link::after, + .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #e43725; + color: #fff; } + .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #e74c3c; + color: #fff; } } + .navbar > .container { + align-items: stretch; + display: flex; + min-height: 4rem; + width: 100%; } + .navbar.has-shadow { + box-shadow: 0 2px 0 0 #282f2f; } + .navbar.is-fixed-bottom, .navbar.is-fixed-top { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom { + bottom: 0; } + .navbar.is-fixed-bottom.has-shadow { + box-shadow: 0 -2px 0 0 #282f2f; } + .navbar.is-fixed-top { + top: 0; } + +html.has-navbar-fixed-top, +body.has-navbar-fixed-top { + padding-top: 4rem; } + +html.has-navbar-fixed-bottom, +body.has-navbar-fixed-bottom { + padding-bottom: 4rem; } + +.navbar-brand, +.navbar-tabs { + align-items: stretch; + display: flex; + flex-shrink: 0; + min-height: 4rem; } + +.navbar-brand a.navbar-item:hover { + background-color: transparent; } + +.navbar-tabs { + -webkit-overflow-scrolling: touch; + max-width: 100vw; + overflow-x: auto; + overflow-y: hidden; } + +.navbar-burger { + color: #fff; + cursor: pointer; + display: block; + height: 4rem; + position: relative; + width: 4rem; + margin-left: auto; } + .navbar-burger span { + background-color: currentColor; + display: block; + height: 1px; + left: calc(50% - 8px); + position: absolute; + transform-origin: center; + transition-duration: 86ms; + transition-property: background-color, opacity, transform; + transition-timing-function: ease-out; + width: 16px; } + .navbar-burger span:nth-child(1) { + top: calc(50% - 6px); } + .navbar-burger span:nth-child(2) { + top: calc(50% - 1px); } + .navbar-burger span:nth-child(3) { + top: calc(50% + 4px); } + .navbar-burger:hover { + background-color: rgba(0, 0, 0, 0.05); } + .navbar-burger.is-active span:nth-child(1) { + transform: translateY(5px) rotate(45deg); } + .navbar-burger.is-active span:nth-child(2) { + opacity: 0; } + .navbar-burger.is-active span:nth-child(3) { + transform: translateY(-5px) rotate(-45deg); } + +.navbar-menu { + display: none; } + +.navbar-item, +.navbar-link { + color: #fff; + display: block; + line-height: 1.5; + padding: 0.5rem 0.75rem; + position: relative; } + .navbar-item .icon:only-child, + .navbar-link .icon:only-child { + margin-left: -0.25rem; + margin-right: -0.25rem; } + +a.navbar-item, +.navbar-link { + cursor: pointer; } + a.navbar-item:hover, a.navbar-item.is-active, + .navbar-link:hover, + .navbar-link.is-active { + background-color: transparent; + color: #1abc9c; } + +.navbar-item { + display: block; + flex-grow: 0; + flex-shrink: 0; } + .navbar-item img { + max-height: 1.75rem; } + .navbar-item.has-dropdown { + padding: 0; } + .navbar-item.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .navbar-item.is-tab { + border-bottom: 1px solid transparent; + min-height: 4rem; + padding-bottom: calc(0.5rem - 1px); } + .navbar-item.is-tab:hover { + background-color: transparent; + border-bottom-color: #1abc9c; } + .navbar-item.is-tab.is-active { + background-color: transparent; + border-bottom-color: #1abc9c; + border-bottom-style: solid; + border-bottom-width: 3px; + color: #1abc9c; + padding-bottom: calc(0.5rem - 3px); } + +.navbar-content { + flex-grow: 1; + flex-shrink: 1; } + +.navbar-link:not(.is-arrowless) { + padding-right: 2.5em; } + .navbar-link:not(.is-arrowless)::after { + border-color: #fff; + margin-top: -0.375em; + right: 1.125em; } + +.navbar-dropdown { + font-size: 0.875rem; + padding-bottom: 0.5rem; + padding-top: 0.5rem; } + .navbar-dropdown .navbar-item { + padding-left: 1.5rem; + padding-right: 1.5rem; } + +.navbar-divider { + background-color: rgba(0, 0, 0, 0.2); + border: none; + display: none; + height: 2px; + margin: 0.5rem 0; } + +@media screen and (max-width: 1087px) { + .navbar > .container { + display: block; } + .navbar-brand .navbar-item, + .navbar-tabs .navbar-item { + align-items: center; + display: flex; } + .navbar-link::after { + display: none; } + .navbar-menu { + background-color: #375a7f; + box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); + padding: 0.5rem 0; } + .navbar-menu.is-active { + display: block; } + .navbar.is-fixed-bottom-touch, .navbar.is-fixed-top-touch { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom-touch { + bottom: 0; } + .navbar.is-fixed-bottom-touch.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + .navbar.is-fixed-top-touch { + top: 0; } + .navbar.is-fixed-top .navbar-menu, .navbar.is-fixed-top-touch .navbar-menu { + -webkit-overflow-scrolling: touch; + max-height: calc(100vh - 4rem); + overflow: auto; } + html.has-navbar-fixed-top-touch, + body.has-navbar-fixed-top-touch { + padding-top: 4rem; } + html.has-navbar-fixed-bottom-touch, + body.has-navbar-fixed-bottom-touch { + padding-bottom: 4rem; } } + +@media screen and (min-width: 1088px) { + .navbar, + .navbar-menu, + .navbar-start, + .navbar-end { + align-items: stretch; + display: flex; } + .navbar { + min-height: 4rem; } + .navbar.is-spaced { + padding: 1rem 2rem; } + .navbar.is-spaced .navbar-start, + .navbar.is-spaced .navbar-end { + align-items: center; } + .navbar.is-spaced a.navbar-item, + .navbar.is-spaced .navbar-link { + border-radius: 0.4em; } + .navbar.is-transparent a.navbar-item:hover, .navbar.is-transparent a.navbar-item.is-active, + .navbar.is-transparent .navbar-link:hover, + .navbar.is-transparent .navbar-link.is-active { + background-color: transparent !important; } + .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link { + background-color: transparent !important; } + .navbar.is-transparent .navbar-dropdown a.navbar-item:hover { + background-color: transparent; + color: #dbdee0; } + .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active { + background-color: transparent; + color: #1abc9c; } + .navbar-burger { + display: none; } + .navbar-item, + .navbar-link { + align-items: center; + display: flex; } + .navbar-item { + display: flex; } + .navbar-item.has-dropdown { + align-items: stretch; } + .navbar-item.has-dropdown-up .navbar-link::after { + transform: rotate(135deg) translate(0.25em, -0.25em); } + .navbar-item.has-dropdown-up .navbar-dropdown { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 8px 8px 0 0; + border-top: none; + bottom: 100%; + box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1); + top: auto; } + .navbar-item.is-active .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown { + display: block; } + .navbar.is-spaced .navbar-item.is-active .navbar-dropdown, .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed { + opacity: 1; + pointer-events: auto; + transform: translateY(0); } + .navbar-menu { + flex-grow: 1; + flex-shrink: 0; } + .navbar-start { + justify-content: flex-start; + margin-right: auto; } + .navbar-end { + justify-content: flex-end; + margin-left: auto; } + .navbar-dropdown { + background-color: #375a7f; + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + border-top: 1px solid rgba(0, 0, 0, 0.2); + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1); + display: none; + font-size: 0.875rem; + left: 0; + min-width: 100%; + position: absolute; + top: 100%; + z-index: 20; } + .navbar-dropdown .navbar-item { + padding: 0.375rem 1rem; + white-space: nowrap; } + .navbar-dropdown a.navbar-item { + padding-right: 3rem; } + .navbar-dropdown a.navbar-item:hover { + background-color: transparent; + color: #dbdee0; } + .navbar-dropdown a.navbar-item.is-active { + background-color: transparent; + color: #1abc9c; } + .navbar.is-spaced .navbar-dropdown, .navbar-dropdown.is-boxed { + border-radius: 8px; + border-top: none; + box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); + display: block; + opacity: 0; + pointer-events: none; + top: calc(100% + (-4px)); + transform: translateY(-5px); + transition-duration: 86ms; + transition-property: opacity, transform; } + .navbar-dropdown.is-right { + left: auto; + right: 0; } + .navbar-divider { + display: block; } + .navbar > .container .navbar-brand, + .container > .navbar .navbar-brand { + margin-left: -.75rem; } + .navbar > .container .navbar-menu, + .container > .navbar .navbar-menu { + margin-right: -.75rem; } + .navbar.is-fixed-bottom-desktop, .navbar.is-fixed-top-desktop { + left: 0; + position: fixed; + right: 0; + z-index: 30; } + .navbar.is-fixed-bottom-desktop { + bottom: 0; } + .navbar.is-fixed-bottom-desktop.has-shadow { + box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } + .navbar.is-fixed-top-desktop { + top: 0; } + html.has-navbar-fixed-top-desktop, + body.has-navbar-fixed-top-desktop { + padding-top: 4rem; } + html.has-navbar-fixed-bottom-desktop, + body.has-navbar-fixed-bottom-desktop { + padding-bottom: 4rem; } + html.has-spaced-navbar-fixed-top, + body.has-spaced-navbar-fixed-top { + padding-top: 6rem; } + html.has-spaced-navbar-fixed-bottom, + body.has-spaced-navbar-fixed-bottom { + padding-bottom: 6rem; } + a.navbar-item.is-active, + .navbar-link.is-active { + color: #1abc9c; } + a.navbar-item.is-active:not(:hover), + .navbar-link.is-active:not(:hover) { + background-color: transparent; } + .navbar-item.has-dropdown:hover .navbar-link, .navbar-item.has-dropdown.is-active .navbar-link { + background-color: transparent; } } + +.pagination { + font-size: 15px; + margin: -0.25rem; } + .pagination.is-small { + font-size: 0.85em; } + .pagination.is-medium { + font-size: 1.25rem; } + .pagination.is-large { + font-size: 1.5rem; } + .pagination.is-rounded .pagination-previous, + .pagination.is-rounded .pagination-next { + padding-left: 1em; + padding-right: 1em; + border-radius: 290486px; } + .pagination.is-rounded .pagination-link { + border-radius: 290486px; } + +.pagination, +.pagination-list { + align-items: center; + display: flex; + justify-content: center; + text-align: center; } + +.pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis { + font-size: 1em; + padding-left: 0.5em; + padding-right: 0.5em; + justify-content: center; + margin: 0.25rem; + text-align: center; } + +.pagination-previous, +.pagination-next, +.pagination-link { + border-color: #5e6d6f; + color: #1abc9c; + min-width: 2.25em; } + .pagination-previous:hover, + .pagination-next:hover, + .pagination-link:hover { + border-color: #8c9b9d; + color: #1dd2af; } + .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus { + border-color: #8c9b9d; } + .pagination-previous:active, + .pagination-next:active, + .pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled] { + background-color: #dbdee0; + border-color: #dbdee0; + box-shadow: none; + color: #5e6d6f; + opacity: 0.5; } + +.pagination-previous, +.pagination-next { + padding-left: 0.75em; + padding-right: 0.75em; + white-space: nowrap; } + +.pagination-link.is-current { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; } + +.pagination-ellipsis { + color: #8c9b9d; + pointer-events: none; } + +.pagination-list { + flex-wrap: wrap; } + +@media screen and (max-width: 768px) { + .pagination { + flex-wrap: wrap; } + .pagination-previous, + .pagination-next { + flex-grow: 1; + flex-shrink: 1; } + .pagination-list li { + flex-grow: 1; + flex-shrink: 1; } } + +@media screen and (min-width: 769px), print { + .pagination-list { + flex-grow: 1; + flex-shrink: 1; + justify-content: flex-start; + order: 1; } + .pagination-previous { + order: 2; } + .pagination-next { + order: 3; } + .pagination { + justify-content: space-between; } + .pagination.is-centered .pagination-previous { + order: 1; } + .pagination.is-centered .pagination-list { + justify-content: center; + order: 2; } + .pagination.is-centered .pagination-next { + order: 3; } + .pagination.is-right .pagination-previous { + order: 1; } + .pagination.is-right .pagination-next { + order: 2; } + .pagination.is-right .pagination-list { + justify-content: flex-end; + order: 3; } } + +.panel { + font-size: 15px; } + .panel:not(:last-child) { + margin-bottom: 1.5rem; } + +.panel-heading, +.panel-tabs, +.panel-block { + border-bottom: 1px solid #5e6d6f; + border-left: 1px solid #5e6d6f; + border-right: 1px solid #5e6d6f; } + .panel-heading:first-child, + .panel-tabs:first-child, + .panel-block:first-child { + border-top: 1px solid #5e6d6f; } + +.panel-heading { + background-color: #282f2f; + border-radius: 0.4em 0.4em 0 0; + color: #f2f2f2; + font-size: 1.25em; + font-weight: 300; + line-height: 1.25; + padding: 0.5em 0.75em; } + +.panel-tabs { + align-items: flex-end; + display: flex; + font-size: 0.875em; + justify-content: center; } + .panel-tabs a { + border-bottom: 1px solid #5e6d6f; + margin-bottom: -1px; + padding: 0.5em; } + .panel-tabs a.is-active { + border-bottom-color: #343c3d; + color: #17a689; } + +.panel-list a { + color: #fff; } + .panel-list a:hover { + color: #1abc9c; } + +.panel-block { + align-items: center; + color: #f2f2f2; + display: flex; + justify-content: flex-start; + padding: 0.5em 0.75em; } + .panel-block input[type="checkbox"] { + margin-right: 0.75em; } + .panel-block > .control { + flex-grow: 1; + flex-shrink: 1; + width: 100%; } + .panel-block.is-wrapped { + flex-wrap: wrap; } + .panel-block.is-active { + border-left-color: #1abc9c; + color: #17a689; } + .panel-block.is-active .panel-icon { + color: #1abc9c; } + +a.panel-block, +label.panel-block { + cursor: pointer; } + a.panel-block:hover, + label.panel-block:hover { + background-color: #282f2f; } + +.panel-icon { + display: inline-block; + font-size: 14px; + height: 1em; + line-height: 1em; + text-align: center; + vertical-align: top; + width: 1em; + color: white; + margin-right: 0.75em; } + .panel-icon .fa { + font-size: inherit; + line-height: inherit; } + +.tabs { + -webkit-overflow-scrolling: touch; + align-items: stretch; + display: flex; + font-size: 15px; + justify-content: space-between; + overflow: hidden; + overflow-x: auto; + white-space: nowrap; } + .tabs a { + align-items: center; + border-bottom-color: #5e6d6f; + border-bottom-style: solid; + border-bottom-width: 1px; + color: #fff; + display: flex; + justify-content: center; + margin-bottom: -1px; + padding: 0.5em 1em; + vertical-align: top; } + .tabs a:hover { + border-bottom-color: #f2f2f2; + color: #f2f2f2; } + .tabs li { + display: block; } + .tabs li.is-active a { + border-bottom-color: #1abc9c; + color: #1abc9c; } + .tabs ul { + align-items: center; + border-bottom-color: #5e6d6f; + border-bottom-style: solid; + border-bottom-width: 1px; + display: flex; + flex-grow: 1; + flex-shrink: 0; + justify-content: flex-start; } + .tabs ul.is-left { + padding-right: 0.75em; } + .tabs ul.is-center { + flex: none; + justify-content: center; + padding-left: 0.75em; + padding-right: 0.75em; } + .tabs ul.is-right { + justify-content: flex-end; + padding-left: 0.75em; } + .tabs .icon:first-child { + margin-right: 0.5em; } + .tabs .icon:last-child { + margin-left: 0.5em; } + .tabs.is-centered ul { + justify-content: center; } + .tabs.is-right ul { + justify-content: flex-end; } + .tabs.is-boxed a { + border: 1px solid transparent; + border-radius: 0.4em 0.4em 0 0; } + .tabs.is-boxed a:hover { + background-color: #282f2f; + border-bottom-color: #5e6d6f; } + .tabs.is-boxed li.is-active a { + background-color: white; + border-color: #5e6d6f; + border-bottom-color: transparent !important; } + .tabs.is-fullwidth li { + flex-grow: 1; + flex-shrink: 0; } + .tabs.is-toggle a { + border-color: #5e6d6f; + border-style: solid; + border-width: 1px; + margin-bottom: 0; + position: relative; } + .tabs.is-toggle a:hover { + background-color: #282f2f; + border-color: #8c9b9d; + z-index: 2; } + .tabs.is-toggle li + li { + margin-left: -1px; } + .tabs.is-toggle li:first-child a { + border-radius: 0.4em 0 0 0.4em; } + .tabs.is-toggle li:last-child a { + border-radius: 0 0.4em 0.4em 0; } + .tabs.is-toggle li.is-active a { + background-color: #1abc9c; + border-color: #1abc9c; + color: #fff; + z-index: 1; } + .tabs.is-toggle ul { + border-bottom: none; } + .tabs.is-toggle.is-toggle-rounded li:first-child a { + border-bottom-left-radius: 290486px; + border-top-left-radius: 290486px; + padding-left: 1.25em; } + .tabs.is-toggle.is-toggle-rounded li:last-child a { + border-bottom-right-radius: 290486px; + border-top-right-radius: 290486px; + padding-right: 1.25em; } + .tabs.is-small { + font-size: 0.85em; } + .tabs.is-medium { + font-size: 1.25rem; } + .tabs.is-large { + font-size: 1.5rem; } + +.column { + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + padding: 0.75rem; } + .columns.is-mobile > .column.is-narrow { + flex: none; } + .columns.is-mobile > .column.is-full { + flex: none; + width: 100%; } + .columns.is-mobile > .column.is-three-quarters { + flex: none; + width: 75%; } + .columns.is-mobile > .column.is-two-thirds { + flex: none; + width: 66.6666%; } + .columns.is-mobile > .column.is-half { + flex: none; + width: 50%; } + .columns.is-mobile > .column.is-one-third { + flex: none; + width: 33.3333%; } + .columns.is-mobile > .column.is-one-quarter { + flex: none; + width: 25%; } + .columns.is-mobile > .column.is-one-fifth { + flex: none; + width: 20%; } + .columns.is-mobile > .column.is-two-fifths { + flex: none; + width: 40%; } + .columns.is-mobile > .column.is-three-fifths { + flex: none; + width: 60%; } + .columns.is-mobile > .column.is-four-fifths { + flex: none; + width: 80%; } + .columns.is-mobile > .column.is-offset-three-quarters { + margin-left: 75%; } + .columns.is-mobile > .column.is-offset-two-thirds { + margin-left: 66.6666%; } + .columns.is-mobile > .column.is-offset-half { + margin-left: 50%; } + .columns.is-mobile > .column.is-offset-one-third { + margin-left: 33.3333%; } + .columns.is-mobile > .column.is-offset-one-quarter { + margin-left: 25%; } + .columns.is-mobile > .column.is-offset-one-fifth { + margin-left: 20%; } + .columns.is-mobile > .column.is-offset-two-fifths { + margin-left: 40%; } + .columns.is-mobile > .column.is-offset-three-fifths { + margin-left: 60%; } + .columns.is-mobile > .column.is-offset-four-fifths { + margin-left: 80%; } + .columns.is-mobile > .column.is-1 { + flex: none; + width: 8.33333%; } + .columns.is-mobile > .column.is-offset-1 { + margin-left: 8.33333%; } + .columns.is-mobile > .column.is-2 { + flex: none; + width: 16.66667%; } + .columns.is-mobile > .column.is-offset-2 { + margin-left: 16.66667%; } + .columns.is-mobile > .column.is-3 { + flex: none; + width: 25%; } + .columns.is-mobile > .column.is-offset-3 { + margin-left: 25%; } + .columns.is-mobile > .column.is-4 { + flex: none; + width: 33.33333%; } + .columns.is-mobile > .column.is-offset-4 { + margin-left: 33.33333%; } + .columns.is-mobile > .column.is-5 { + flex: none; + width: 41.66667%; } + .columns.is-mobile > .column.is-offset-5 { + margin-left: 41.66667%; } + .columns.is-mobile > .column.is-6 { + flex: none; + width: 50%; } + .columns.is-mobile > .column.is-offset-6 { + margin-left: 50%; } + .columns.is-mobile > .column.is-7 { + flex: none; + width: 58.33333%; } + .columns.is-mobile > .column.is-offset-7 { + margin-left: 58.33333%; } + .columns.is-mobile > .column.is-8 { + flex: none; + width: 66.66667%; } + .columns.is-mobile > .column.is-offset-8 { + margin-left: 66.66667%; } + .columns.is-mobile > .column.is-9 { + flex: none; + width: 75%; } + .columns.is-mobile > .column.is-offset-9 { + margin-left: 75%; } + .columns.is-mobile > .column.is-10 { + flex: none; + width: 83.33333%; } + .columns.is-mobile > .column.is-offset-10 { + margin-left: 83.33333%; } + .columns.is-mobile > .column.is-11 { + flex: none; + width: 91.66667%; } + .columns.is-mobile > .column.is-offset-11 { + margin-left: 91.66667%; } + .columns.is-mobile > .column.is-12 { + flex: none; + width: 100%; } + .columns.is-mobile > .column.is-offset-12 { + margin-left: 100%; } + @media screen and (max-width: 768px) { + .column.is-narrow-mobile { + flex: none; } + .column.is-full-mobile { + flex: none; + width: 100%; } + .column.is-three-quarters-mobile { + flex: none; + width: 75%; } + .column.is-two-thirds-mobile { + flex: none; + width: 66.6666%; } + .column.is-half-mobile { + flex: none; + width: 50%; } + .column.is-one-third-mobile { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-mobile { + flex: none; + width: 25%; } + .column.is-one-fifth-mobile { + flex: none; + width: 20%; } + .column.is-two-fifths-mobile { + flex: none; + width: 40%; } + .column.is-three-fifths-mobile { + flex: none; + width: 60%; } + .column.is-four-fifths-mobile { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-mobile { + margin-left: 75%; } + .column.is-offset-two-thirds-mobile { + margin-left: 66.6666%; } + .column.is-offset-half-mobile { + margin-left: 50%; } + .column.is-offset-one-third-mobile { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-mobile { + margin-left: 25%; } + .column.is-offset-one-fifth-mobile { + margin-left: 20%; } + .column.is-offset-two-fifths-mobile { + margin-left: 40%; } + .column.is-offset-three-fifths-mobile { + margin-left: 60%; } + .column.is-offset-four-fifths-mobile { + margin-left: 80%; } + .column.is-1-mobile { + flex: none; + width: 8.33333%; } + .column.is-offset-1-mobile { + margin-left: 8.33333%; } + .column.is-2-mobile { + flex: none; + width: 16.66667%; } + .column.is-offset-2-mobile { + margin-left: 16.66667%; } + .column.is-3-mobile { + flex: none; + width: 25%; } + .column.is-offset-3-mobile { + margin-left: 25%; } + .column.is-4-mobile { + flex: none; + width: 33.33333%; } + .column.is-offset-4-mobile { + margin-left: 33.33333%; } + .column.is-5-mobile { + flex: none; + width: 41.66667%; } + .column.is-offset-5-mobile { + margin-left: 41.66667%; } + .column.is-6-mobile { + flex: none; + width: 50%; } + .column.is-offset-6-mobile { + margin-left: 50%; } + .column.is-7-mobile { + flex: none; + width: 58.33333%; } + .column.is-offset-7-mobile { + margin-left: 58.33333%; } + .column.is-8-mobile { + flex: none; + width: 66.66667%; } + .column.is-offset-8-mobile { + margin-left: 66.66667%; } + .column.is-9-mobile { + flex: none; + width: 75%; } + .column.is-offset-9-mobile { + margin-left: 75%; } + .column.is-10-mobile { + flex: none; + width: 83.33333%; } + .column.is-offset-10-mobile { + margin-left: 83.33333%; } + .column.is-11-mobile { + flex: none; + width: 91.66667%; } + .column.is-offset-11-mobile { + margin-left: 91.66667%; } + .column.is-12-mobile { + flex: none; + width: 100%; } + .column.is-offset-12-mobile { + margin-left: 100%; } } + @media screen and (min-width: 769px), print { + .column.is-narrow, .column.is-narrow-tablet { + flex: none; } + .column.is-full, .column.is-full-tablet { + flex: none; + width: 100%; } + .column.is-three-quarters, .column.is-three-quarters-tablet { + flex: none; + width: 75%; } + .column.is-two-thirds, .column.is-two-thirds-tablet { + flex: none; + width: 66.6666%; } + .column.is-half, .column.is-half-tablet { + flex: none; + width: 50%; } + .column.is-one-third, .column.is-one-third-tablet { + flex: none; + width: 33.3333%; } + .column.is-one-quarter, .column.is-one-quarter-tablet { + flex: none; + width: 25%; } + .column.is-one-fifth, .column.is-one-fifth-tablet { + flex: none; + width: 20%; } + .column.is-two-fifths, .column.is-two-fifths-tablet { + flex: none; + width: 40%; } + .column.is-three-fifths, .column.is-three-fifths-tablet { + flex: none; + width: 60%; } + .column.is-four-fifths, .column.is-four-fifths-tablet { + flex: none; + width: 80%; } + .column.is-offset-three-quarters, .column.is-offset-three-quarters-tablet { + margin-left: 75%; } + .column.is-offset-two-thirds, .column.is-offset-two-thirds-tablet { + margin-left: 66.6666%; } + .column.is-offset-half, .column.is-offset-half-tablet { + margin-left: 50%; } + .column.is-offset-one-third, .column.is-offset-one-third-tablet { + margin-left: 33.3333%; } + .column.is-offset-one-quarter, .column.is-offset-one-quarter-tablet { + margin-left: 25%; } + .column.is-offset-one-fifth, .column.is-offset-one-fifth-tablet { + margin-left: 20%; } + .column.is-offset-two-fifths, .column.is-offset-two-fifths-tablet { + margin-left: 40%; } + .column.is-offset-three-fifths, .column.is-offset-three-fifths-tablet { + margin-left: 60%; } + .column.is-offset-four-fifths, .column.is-offset-four-fifths-tablet { + margin-left: 80%; } + .column.is-1, .column.is-1-tablet { + flex: none; + width: 8.33333%; } + .column.is-offset-1, .column.is-offset-1-tablet { + margin-left: 8.33333%; } + .column.is-2, .column.is-2-tablet { + flex: none; + width: 16.66667%; } + .column.is-offset-2, .column.is-offset-2-tablet { + margin-left: 16.66667%; } + .column.is-3, .column.is-3-tablet { + flex: none; + width: 25%; } + .column.is-offset-3, .column.is-offset-3-tablet { + margin-left: 25%; } + .column.is-4, .column.is-4-tablet { + flex: none; + width: 33.33333%; } + .column.is-offset-4, .column.is-offset-4-tablet { + margin-left: 33.33333%; } + .column.is-5, .column.is-5-tablet { + flex: none; + width: 41.66667%; } + .column.is-offset-5, .column.is-offset-5-tablet { + margin-left: 41.66667%; } + .column.is-6, .column.is-6-tablet { + flex: none; + width: 50%; } + .column.is-offset-6, .column.is-offset-6-tablet { + margin-left: 50%; } + .column.is-7, .column.is-7-tablet { + flex: none; + width: 58.33333%; } + .column.is-offset-7, .column.is-offset-7-tablet { + margin-left: 58.33333%; } + .column.is-8, .column.is-8-tablet { + flex: none; + width: 66.66667%; } + .column.is-offset-8, .column.is-offset-8-tablet { + margin-left: 66.66667%; } + .column.is-9, .column.is-9-tablet { + flex: none; + width: 75%; } + .column.is-offset-9, .column.is-offset-9-tablet { + margin-left: 75%; } + .column.is-10, .column.is-10-tablet { + flex: none; + width: 83.33333%; } + .column.is-offset-10, .column.is-offset-10-tablet { + margin-left: 83.33333%; } + .column.is-11, .column.is-11-tablet { + flex: none; + width: 91.66667%; } + .column.is-offset-11, .column.is-offset-11-tablet { + margin-left: 91.66667%; } + .column.is-12, .column.is-12-tablet { + flex: none; + width: 100%; } + .column.is-offset-12, .column.is-offset-12-tablet { + margin-left: 100%; } } + @media screen and (max-width: 1087px) { + .column.is-narrow-touch { + flex: none; } + .column.is-full-touch { + flex: none; + width: 100%; } + .column.is-three-quarters-touch { + flex: none; + width: 75%; } + .column.is-two-thirds-touch { + flex: none; + width: 66.6666%; } + .column.is-half-touch { + flex: none; + width: 50%; } + .column.is-one-third-touch { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-touch { + flex: none; + width: 25%; } + .column.is-one-fifth-touch { + flex: none; + width: 20%; } + .column.is-two-fifths-touch { + flex: none; + width: 40%; } + .column.is-three-fifths-touch { + flex: none; + width: 60%; } + .column.is-four-fifths-touch { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-touch { + margin-left: 75%; } + .column.is-offset-two-thirds-touch { + margin-left: 66.6666%; } + .column.is-offset-half-touch { + margin-left: 50%; } + .column.is-offset-one-third-touch { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-touch { + margin-left: 25%; } + .column.is-offset-one-fifth-touch { + margin-left: 20%; } + .column.is-offset-two-fifths-touch { + margin-left: 40%; } + .column.is-offset-three-fifths-touch { + margin-left: 60%; } + .column.is-offset-four-fifths-touch { + margin-left: 80%; } + .column.is-1-touch { + flex: none; + width: 8.33333%; } + .column.is-offset-1-touch { + margin-left: 8.33333%; } + .column.is-2-touch { + flex: none; + width: 16.66667%; } + .column.is-offset-2-touch { + margin-left: 16.66667%; } + .column.is-3-touch { + flex: none; + width: 25%; } + .column.is-offset-3-touch { + margin-left: 25%; } + .column.is-4-touch { + flex: none; + width: 33.33333%; } + .column.is-offset-4-touch { + margin-left: 33.33333%; } + .column.is-5-touch { + flex: none; + width: 41.66667%; } + .column.is-offset-5-touch { + margin-left: 41.66667%; } + .column.is-6-touch { + flex: none; + width: 50%; } + .column.is-offset-6-touch { + margin-left: 50%; } + .column.is-7-touch { + flex: none; + width: 58.33333%; } + .column.is-offset-7-touch { + margin-left: 58.33333%; } + .column.is-8-touch { + flex: none; + width: 66.66667%; } + .column.is-offset-8-touch { + margin-left: 66.66667%; } + .column.is-9-touch { + flex: none; + width: 75%; } + .column.is-offset-9-touch { + margin-left: 75%; } + .column.is-10-touch { + flex: none; + width: 83.33333%; } + .column.is-offset-10-touch { + margin-left: 83.33333%; } + .column.is-11-touch { + flex: none; + width: 91.66667%; } + .column.is-offset-11-touch { + margin-left: 91.66667%; } + .column.is-12-touch { + flex: none; + width: 100%; } + .column.is-offset-12-touch { + margin-left: 100%; } } + @media screen and (min-width: 1088px) { + .column.is-narrow-desktop { + flex: none; } + .column.is-full-desktop { + flex: none; + width: 100%; } + .column.is-three-quarters-desktop { + flex: none; + width: 75%; } + .column.is-two-thirds-desktop { + flex: none; + width: 66.6666%; } + .column.is-half-desktop { + flex: none; + width: 50%; } + .column.is-one-third-desktop { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-desktop { + flex: none; + width: 25%; } + .column.is-one-fifth-desktop { + flex: none; + width: 20%; } + .column.is-two-fifths-desktop { + flex: none; + width: 40%; } + .column.is-three-fifths-desktop { + flex: none; + width: 60%; } + .column.is-four-fifths-desktop { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-desktop { + margin-left: 75%; } + .column.is-offset-two-thirds-desktop { + margin-left: 66.6666%; } + .column.is-offset-half-desktop { + margin-left: 50%; } + .column.is-offset-one-third-desktop { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-desktop { + margin-left: 25%; } + .column.is-offset-one-fifth-desktop { + margin-left: 20%; } + .column.is-offset-two-fifths-desktop { + margin-left: 40%; } + .column.is-offset-three-fifths-desktop { + margin-left: 60%; } + .column.is-offset-four-fifths-desktop { + margin-left: 80%; } + .column.is-1-desktop { + flex: none; + width: 8.33333%; } + .column.is-offset-1-desktop { + margin-left: 8.33333%; } + .column.is-2-desktop { + flex: none; + width: 16.66667%; } + .column.is-offset-2-desktop { + margin-left: 16.66667%; } + .column.is-3-desktop { + flex: none; + width: 25%; } + .column.is-offset-3-desktop { + margin-left: 25%; } + .column.is-4-desktop { + flex: none; + width: 33.33333%; } + .column.is-offset-4-desktop { + margin-left: 33.33333%; } + .column.is-5-desktop { + flex: none; + width: 41.66667%; } + .column.is-offset-5-desktop { + margin-left: 41.66667%; } + .column.is-6-desktop { + flex: none; + width: 50%; } + .column.is-offset-6-desktop { + margin-left: 50%; } + .column.is-7-desktop { + flex: none; + width: 58.33333%; } + .column.is-offset-7-desktop { + margin-left: 58.33333%; } + .column.is-8-desktop { + flex: none; + width: 66.66667%; } + .column.is-offset-8-desktop { + margin-left: 66.66667%; } + .column.is-9-desktop { + flex: none; + width: 75%; } + .column.is-offset-9-desktop { + margin-left: 75%; } + .column.is-10-desktop { + flex: none; + width: 83.33333%; } + .column.is-offset-10-desktop { + margin-left: 83.33333%; } + .column.is-11-desktop { + flex: none; + width: 91.66667%; } + .column.is-offset-11-desktop { + margin-left: 91.66667%; } + .column.is-12-desktop { + flex: none; + width: 100%; } + .column.is-offset-12-desktop { + margin-left: 100%; } } + @media screen and (min-width: 1280px) { + .column.is-narrow-widescreen { + flex: none; } + .column.is-full-widescreen { + flex: none; + width: 100%; } + .column.is-three-quarters-widescreen { + flex: none; + width: 75%; } + .column.is-two-thirds-widescreen { + flex: none; + width: 66.6666%; } + .column.is-half-widescreen { + flex: none; + width: 50%; } + .column.is-one-third-widescreen { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-widescreen { + flex: none; + width: 25%; } + .column.is-one-fifth-widescreen { + flex: none; + width: 20%; } + .column.is-two-fifths-widescreen { + flex: none; + width: 40%; } + .column.is-three-fifths-widescreen { + flex: none; + width: 60%; } + .column.is-four-fifths-widescreen { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-widescreen { + margin-left: 75%; } + .column.is-offset-two-thirds-widescreen { + margin-left: 66.6666%; } + .column.is-offset-half-widescreen { + margin-left: 50%; } + .column.is-offset-one-third-widescreen { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-widescreen { + margin-left: 25%; } + .column.is-offset-one-fifth-widescreen { + margin-left: 20%; } + .column.is-offset-two-fifths-widescreen { + margin-left: 40%; } + .column.is-offset-three-fifths-widescreen { + margin-left: 60%; } + .column.is-offset-four-fifths-widescreen { + margin-left: 80%; } + .column.is-1-widescreen { + flex: none; + width: 8.33333%; } + .column.is-offset-1-widescreen { + margin-left: 8.33333%; } + .column.is-2-widescreen { + flex: none; + width: 16.66667%; } + .column.is-offset-2-widescreen { + margin-left: 16.66667%; } + .column.is-3-widescreen { + flex: none; + width: 25%; } + .column.is-offset-3-widescreen { + margin-left: 25%; } + .column.is-4-widescreen { + flex: none; + width: 33.33333%; } + .column.is-offset-4-widescreen { + margin-left: 33.33333%; } + .column.is-5-widescreen { + flex: none; + width: 41.66667%; } + .column.is-offset-5-widescreen { + margin-left: 41.66667%; } + .column.is-6-widescreen { + flex: none; + width: 50%; } + .column.is-offset-6-widescreen { + margin-left: 50%; } + .column.is-7-widescreen { + flex: none; + width: 58.33333%; } + .column.is-offset-7-widescreen { + margin-left: 58.33333%; } + .column.is-8-widescreen { + flex: none; + width: 66.66667%; } + .column.is-offset-8-widescreen { + margin-left: 66.66667%; } + .column.is-9-widescreen { + flex: none; + width: 75%; } + .column.is-offset-9-widescreen { + margin-left: 75%; } + .column.is-10-widescreen { + flex: none; + width: 83.33333%; } + .column.is-offset-10-widescreen { + margin-left: 83.33333%; } + .column.is-11-widescreen { + flex: none; + width: 91.66667%; } + .column.is-offset-11-widescreen { + margin-left: 91.66667%; } + .column.is-12-widescreen { + flex: none; + width: 100%; } + .column.is-offset-12-widescreen { + margin-left: 100%; } } + @media screen and (min-width: 1472px) { + .column.is-narrow-fullhd { + flex: none; } + .column.is-full-fullhd { + flex: none; + width: 100%; } + .column.is-three-quarters-fullhd { + flex: none; + width: 75%; } + .column.is-two-thirds-fullhd { + flex: none; + width: 66.6666%; } + .column.is-half-fullhd { + flex: none; + width: 50%; } + .column.is-one-third-fullhd { + flex: none; + width: 33.3333%; } + .column.is-one-quarter-fullhd { + flex: none; + width: 25%; } + .column.is-one-fifth-fullhd { + flex: none; + width: 20%; } + .column.is-two-fifths-fullhd { + flex: none; + width: 40%; } + .column.is-three-fifths-fullhd { + flex: none; + width: 60%; } + .column.is-four-fifths-fullhd { + flex: none; + width: 80%; } + .column.is-offset-three-quarters-fullhd { + margin-left: 75%; } + .column.is-offset-two-thirds-fullhd { + margin-left: 66.6666%; } + .column.is-offset-half-fullhd { + margin-left: 50%; } + .column.is-offset-one-third-fullhd { + margin-left: 33.3333%; } + .column.is-offset-one-quarter-fullhd { + margin-left: 25%; } + .column.is-offset-one-fifth-fullhd { + margin-left: 20%; } + .column.is-offset-two-fifths-fullhd { + margin-left: 40%; } + .column.is-offset-three-fifths-fullhd { + margin-left: 60%; } + .column.is-offset-four-fifths-fullhd { + margin-left: 80%; } + .column.is-1-fullhd { + flex: none; + width: 8.33333%; } + .column.is-offset-1-fullhd { + margin-left: 8.33333%; } + .column.is-2-fullhd { + flex: none; + width: 16.66667%; } + .column.is-offset-2-fullhd { + margin-left: 16.66667%; } + .column.is-3-fullhd { + flex: none; + width: 25%; } + .column.is-offset-3-fullhd { + margin-left: 25%; } + .column.is-4-fullhd { + flex: none; + width: 33.33333%; } + .column.is-offset-4-fullhd { + margin-left: 33.33333%; } + .column.is-5-fullhd { + flex: none; + width: 41.66667%; } + .column.is-offset-5-fullhd { + margin-left: 41.66667%; } + .column.is-6-fullhd { + flex: none; + width: 50%; } + .column.is-offset-6-fullhd { + margin-left: 50%; } + .column.is-7-fullhd { + flex: none; + width: 58.33333%; } + .column.is-offset-7-fullhd { + margin-left: 58.33333%; } + .column.is-8-fullhd { + flex: none; + width: 66.66667%; } + .column.is-offset-8-fullhd { + margin-left: 66.66667%; } + .column.is-9-fullhd { + flex: none; + width: 75%; } + .column.is-offset-9-fullhd { + margin-left: 75%; } + .column.is-10-fullhd { + flex: none; + width: 83.33333%; } + .column.is-offset-10-fullhd { + margin-left: 83.33333%; } + .column.is-11-fullhd { + flex: none; + width: 91.66667%; } + .column.is-offset-11-fullhd { + margin-left: 91.66667%; } + .column.is-12-fullhd { + flex: none; + width: 100%; } + .column.is-offset-12-fullhd { + margin-left: 100%; } } + +.columns { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + .columns:last-child { + margin-bottom: -0.75rem; } + .columns:not(:last-child) { + margin-bottom: calc(1.5rem - 0.75rem); } + .columns.is-centered { + justify-content: center; } + .columns.is-gapless { + margin-left: 0; + margin-right: 0; + margin-top: 0; } + .columns.is-gapless > .column { + margin: 0; + padding: 0 !important; } + .columns.is-gapless:not(:last-child) { + margin-bottom: 1.5rem; } + .columns.is-gapless:last-child { + margin-bottom: 0; } + .columns.is-mobile { + display: flex; } + .columns.is-multiline { + flex-wrap: wrap; } + .columns.is-vcentered { + align-items: center; } + @media screen and (min-width: 769px), print { + .columns:not(.is-desktop) { + display: flex; } } + @media screen and (min-width: 1088px) { + .columns.is-desktop { + display: flex; } } + +.columns.is-variable { + --columnGap: 0.75rem; + margin-left: calc(-1 * var(--columnGap)); + margin-right: calc(-1 * var(--columnGap)); } + .columns.is-variable .column { + padding-left: var(--columnGap); + padding-right: var(--columnGap); } + .columns.is-variable.is-0 { + --columnGap: 0rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-0-mobile { + --columnGap: 0rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-0-tablet { + --columnGap: 0rem; } } + @media screen and (min-width: 769px) and (max-width: 1087px) { + .columns.is-variable.is-0-tablet-only { + --columnGap: 0rem; } } + @media screen and (max-width: 1087px) { + .columns.is-variable.is-0-touch { + --columnGap: 0rem; } } + @media screen and (min-width: 1088px) { + .columns.is-variable.is-0-desktop { + --columnGap: 0rem; } } + @media screen and (min-width: 1088px) and (max-width: 1279px) { + .columns.is-variable.is-0-desktop-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1280px) { + .columns.is-variable.is-0-widescreen { + --columnGap: 0rem; } } + @media screen and (min-width: 1280px) and (max-width: 1471px) { + .columns.is-variable.is-0-widescreen-only { + --columnGap: 0rem; } } + @media screen and (min-width: 1472px) { + .columns.is-variable.is-0-fullhd { + --columnGap: 0rem; } } + .columns.is-variable.is-1 { + --columnGap: 0.25rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-1-mobile { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-1-tablet { + --columnGap: 0.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1087px) { + .columns.is-variable.is-1-tablet-only { + --columnGap: 0.25rem; } } + @media screen and (max-width: 1087px) { + .columns.is-variable.is-1-touch { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1088px) { + .columns.is-variable.is-1-desktop { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1088px) and (max-width: 1279px) { + .columns.is-variable.is-1-desktop-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1280px) { + .columns.is-variable.is-1-widescreen { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1280px) and (max-width: 1471px) { + .columns.is-variable.is-1-widescreen-only { + --columnGap: 0.25rem; } } + @media screen and (min-width: 1472px) { + .columns.is-variable.is-1-fullhd { + --columnGap: 0.25rem; } } + .columns.is-variable.is-2 { + --columnGap: 0.5rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-2-mobile { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-2-tablet { + --columnGap: 0.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1087px) { + .columns.is-variable.is-2-tablet-only { + --columnGap: 0.5rem; } } + @media screen and (max-width: 1087px) { + .columns.is-variable.is-2-touch { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1088px) { + .columns.is-variable.is-2-desktop { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1088px) and (max-width: 1279px) { + .columns.is-variable.is-2-desktop-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1280px) { + .columns.is-variable.is-2-widescreen { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1280px) and (max-width: 1471px) { + .columns.is-variable.is-2-widescreen-only { + --columnGap: 0.5rem; } } + @media screen and (min-width: 1472px) { + .columns.is-variable.is-2-fullhd { + --columnGap: 0.5rem; } } + .columns.is-variable.is-3 { + --columnGap: 0.75rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-3-mobile { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-3-tablet { + --columnGap: 0.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1087px) { + .columns.is-variable.is-3-tablet-only { + --columnGap: 0.75rem; } } + @media screen and (max-width: 1087px) { + .columns.is-variable.is-3-touch { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1088px) { + .columns.is-variable.is-3-desktop { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1088px) and (max-width: 1279px) { + .columns.is-variable.is-3-desktop-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1280px) { + .columns.is-variable.is-3-widescreen { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1280px) and (max-width: 1471px) { + .columns.is-variable.is-3-widescreen-only { + --columnGap: 0.75rem; } } + @media screen and (min-width: 1472px) { + .columns.is-variable.is-3-fullhd { + --columnGap: 0.75rem; } } + .columns.is-variable.is-4 { + --columnGap: 1rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-4-mobile { + --columnGap: 1rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-4-tablet { + --columnGap: 1rem; } } + @media screen and (min-width: 769px) and (max-width: 1087px) { + .columns.is-variable.is-4-tablet-only { + --columnGap: 1rem; } } + @media screen and (max-width: 1087px) { + .columns.is-variable.is-4-touch { + --columnGap: 1rem; } } + @media screen and (min-width: 1088px) { + .columns.is-variable.is-4-desktop { + --columnGap: 1rem; } } + @media screen and (min-width: 1088px) and (max-width: 1279px) { + .columns.is-variable.is-4-desktop-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1280px) { + .columns.is-variable.is-4-widescreen { + --columnGap: 1rem; } } + @media screen and (min-width: 1280px) and (max-width: 1471px) { + .columns.is-variable.is-4-widescreen-only { + --columnGap: 1rem; } } + @media screen and (min-width: 1472px) { + .columns.is-variable.is-4-fullhd { + --columnGap: 1rem; } } + .columns.is-variable.is-5 { + --columnGap: 1.25rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-5-mobile { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-5-tablet { + --columnGap: 1.25rem; } } + @media screen and (min-width: 769px) and (max-width: 1087px) { + .columns.is-variable.is-5-tablet-only { + --columnGap: 1.25rem; } } + @media screen and (max-width: 1087px) { + .columns.is-variable.is-5-touch { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1088px) { + .columns.is-variable.is-5-desktop { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1088px) and (max-width: 1279px) { + .columns.is-variable.is-5-desktop-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1280px) { + .columns.is-variable.is-5-widescreen { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1280px) and (max-width: 1471px) { + .columns.is-variable.is-5-widescreen-only { + --columnGap: 1.25rem; } } + @media screen and (min-width: 1472px) { + .columns.is-variable.is-5-fullhd { + --columnGap: 1.25rem; } } + .columns.is-variable.is-6 { + --columnGap: 1.5rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-6-mobile { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-6-tablet { + --columnGap: 1.5rem; } } + @media screen and (min-width: 769px) and (max-width: 1087px) { + .columns.is-variable.is-6-tablet-only { + --columnGap: 1.5rem; } } + @media screen and (max-width: 1087px) { + .columns.is-variable.is-6-touch { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1088px) { + .columns.is-variable.is-6-desktop { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1088px) and (max-width: 1279px) { + .columns.is-variable.is-6-desktop-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1280px) { + .columns.is-variable.is-6-widescreen { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1280px) and (max-width: 1471px) { + .columns.is-variable.is-6-widescreen-only { + --columnGap: 1.5rem; } } + @media screen and (min-width: 1472px) { + .columns.is-variable.is-6-fullhd { + --columnGap: 1.5rem; } } + .columns.is-variable.is-7 { + --columnGap: 1.75rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-7-mobile { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-7-tablet { + --columnGap: 1.75rem; } } + @media screen and (min-width: 769px) and (max-width: 1087px) { + .columns.is-variable.is-7-tablet-only { + --columnGap: 1.75rem; } } + @media screen and (max-width: 1087px) { + .columns.is-variable.is-7-touch { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1088px) { + .columns.is-variable.is-7-desktop { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1088px) and (max-width: 1279px) { + .columns.is-variable.is-7-desktop-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1280px) { + .columns.is-variable.is-7-widescreen { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1280px) and (max-width: 1471px) { + .columns.is-variable.is-7-widescreen-only { + --columnGap: 1.75rem; } } + @media screen and (min-width: 1472px) { + .columns.is-variable.is-7-fullhd { + --columnGap: 1.75rem; } } + .columns.is-variable.is-8 { + --columnGap: 2rem; } + @media screen and (max-width: 768px) { + .columns.is-variable.is-8-mobile { + --columnGap: 2rem; } } + @media screen and (min-width: 769px), print { + .columns.is-variable.is-8-tablet { + --columnGap: 2rem; } } + @media screen and (min-width: 769px) and (max-width: 1087px) { + .columns.is-variable.is-8-tablet-only { + --columnGap: 2rem; } } + @media screen and (max-width: 1087px) { + .columns.is-variable.is-8-touch { + --columnGap: 2rem; } } + @media screen and (min-width: 1088px) { + .columns.is-variable.is-8-desktop { + --columnGap: 2rem; } } + @media screen and (min-width: 1088px) and (max-width: 1279px) { + .columns.is-variable.is-8-desktop-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1280px) { + .columns.is-variable.is-8-widescreen { + --columnGap: 2rem; } } + @media screen and (min-width: 1280px) and (max-width: 1471px) { + .columns.is-variable.is-8-widescreen-only { + --columnGap: 2rem; } } + @media screen and (min-width: 1472px) { + .columns.is-variable.is-8-fullhd { + --columnGap: 2rem; } } + +.tile { + align-items: stretch; + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; + min-height: min-content; } + .tile.is-ancestor { + margin-left: -0.75rem; + margin-right: -0.75rem; + margin-top: -0.75rem; } + .tile.is-ancestor:last-child { + margin-bottom: -0.75rem; } + .tile.is-ancestor:not(:last-child) { + margin-bottom: 0.75rem; } + .tile.is-child { + margin: 0 !important; } + .tile.is-parent { + padding: 0.75rem; } + .tile.is-vertical { + flex-direction: column; } + .tile.is-vertical > .tile.is-child:not(:last-child) { + margin-bottom: 1.5rem !important; } + @media screen and (min-width: 769px), print { + .tile:not(.is-child) { + display: flex; } + .tile.is-1 { + flex: none; + width: 8.33333%; } + .tile.is-2 { + flex: none; + width: 16.66667%; } + .tile.is-3 { + flex: none; + width: 25%; } + .tile.is-4 { + flex: none; + width: 33.33333%; } + .tile.is-5 { + flex: none; + width: 41.66667%; } + .tile.is-6 { + flex: none; + width: 50%; } + .tile.is-7 { + flex: none; + width: 58.33333%; } + .tile.is-8 { + flex: none; + width: 66.66667%; } + .tile.is-9 { + flex: none; + width: 75%; } + .tile.is-10 { + flex: none; + width: 83.33333%; } + .tile.is-11 { + flex: none; + width: 91.66667%; } + .tile.is-12 { + flex: none; + width: 100%; } } + +.hero { + align-items: stretch; + display: flex; + flex-direction: column; + justify-content: space-between; } + .hero .navbar { + background: none; } + .hero .tabs ul { + border-bottom: none; } + .hero.is-white { + background-color: white; + color: #0a0a0a; } + .hero.is-white a:not(.button):not(.dropdown-item):not(.tag), + .hero.is-white strong { + color: inherit; } + .hero.is-white .title { + color: #0a0a0a; } + .hero.is-white .subtitle { + color: rgba(10, 10, 10, 0.9); } + .hero.is-white .subtitle a:not(.button), + .hero.is-white .subtitle strong { + color: #0a0a0a; } + @media screen and (max-width: 1087px) { + .hero.is-white .navbar-menu { + background-color: white; } } + .hero.is-white .navbar-item, + .hero.is-white .navbar-link { + color: rgba(10, 10, 10, 0.7); } + .hero.is-white a.navbar-item:hover, .hero.is-white a.navbar-item.is-active, + .hero.is-white .navbar-link:hover, + .hero.is-white .navbar-link.is-active { + background-color: #f2f2f2; + color: #0a0a0a; } + .hero.is-white .tabs a { + color: #0a0a0a; + opacity: 0.9; } + .hero.is-white .tabs a:hover { + opacity: 1; } + .hero.is-white .tabs li.is-active a { + opacity: 1; } + .hero.is-white .tabs.is-boxed a, .hero.is-white .tabs.is-toggle a { + color: #0a0a0a; } + .hero.is-white .tabs.is-boxed a:hover, .hero.is-white .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-white .tabs.is-boxed li.is-active a, .hero.is-white .tabs.is-boxed li.is-active a:hover, .hero.is-white .tabs.is-toggle li.is-active a, .hero.is-white .tabs.is-toggle li.is-active a:hover { + background-color: #0a0a0a; + border-color: #0a0a0a; + color: white; } + .hero.is-white.is-bold { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } } + .hero.is-black { + background-color: #0a0a0a; + color: white; } + .hero.is-black a:not(.button):not(.dropdown-item):not(.tag), + .hero.is-black strong { + color: inherit; } + .hero.is-black .title { + color: white; } + .hero.is-black .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-black .subtitle a:not(.button), + .hero.is-black .subtitle strong { + color: white; } + @media screen and (max-width: 1087px) { + .hero.is-black .navbar-menu { + background-color: #0a0a0a; } } + .hero.is-black .navbar-item, + .hero.is-black .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-black a.navbar-item:hover, .hero.is-black a.navbar-item.is-active, + .hero.is-black .navbar-link:hover, + .hero.is-black .navbar-link.is-active { + background-color: black; + color: white; } + .hero.is-black .tabs a { + color: white; + opacity: 0.9; } + .hero.is-black .tabs a:hover { + opacity: 1; } + .hero.is-black .tabs li.is-active a { + opacity: 1; } + .hero.is-black .tabs.is-boxed a, .hero.is-black .tabs.is-toggle a { + color: white; } + .hero.is-black .tabs.is-boxed a:hover, .hero.is-black .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-black .tabs.is-boxed li.is-active a, .hero.is-black .tabs.is-boxed li.is-active a:hover, .hero.is-black .tabs.is-toggle li.is-active a, .hero.is-black .tabs.is-toggle li.is-active a:hover { + background-color: white; + border-color: white; + color: #0a0a0a; } + .hero.is-black.is-bold { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } + @media screen and (max-width: 768px) { + .hero.is-black.is-bold .navbar-menu { + background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } } + .hero.is-light { + background-color: #ecf0f1; + color: #282f2f; } + .hero.is-light a:not(.button):not(.dropdown-item):not(.tag), + .hero.is-light strong { + color: inherit; } + .hero.is-light .title { + color: #282f2f; } + .hero.is-light .subtitle { + color: rgba(40, 47, 47, 0.9); } + .hero.is-light .subtitle a:not(.button), + .hero.is-light .subtitle strong { + color: #282f2f; } + @media screen and (max-width: 1087px) { + .hero.is-light .navbar-menu { + background-color: #ecf0f1; } } + .hero.is-light .navbar-item, + .hero.is-light .navbar-link { + color: rgba(40, 47, 47, 0.7); } + .hero.is-light a.navbar-item:hover, .hero.is-light a.navbar-item.is-active, + .hero.is-light .navbar-link:hover, + .hero.is-light .navbar-link.is-active { + background-color: #dde4e6; + color: #282f2f; } + .hero.is-light .tabs a { + color: #282f2f; + opacity: 0.9; } + .hero.is-light .tabs a:hover { + opacity: 1; } + .hero.is-light .tabs li.is-active a { + opacity: 1; } + .hero.is-light .tabs.is-boxed a, .hero.is-light .tabs.is-toggle a { + color: #282f2f; } + .hero.is-light .tabs.is-boxed a:hover, .hero.is-light .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-light .tabs.is-boxed li.is-active a, .hero.is-light .tabs.is-boxed li.is-active a:hover, .hero.is-light .tabs.is-toggle li.is-active a, .hero.is-light .tabs.is-toggle li.is-active a:hover { + background-color: #282f2f; + border-color: #282f2f; + color: #ecf0f1; } + .hero.is-light.is-bold { + background-image: linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%); } + @media screen and (max-width: 768px) { + .hero.is-light.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%); } } + .hero.is-dark { + background-color: #282f2f; + color: #ecf0f1; } + .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag), + .hero.is-dark strong { + color: inherit; } + .hero.is-dark .title { + color: #ecf0f1; } + .hero.is-dark .subtitle { + color: rgba(236, 240, 241, 0.9); } + .hero.is-dark .subtitle a:not(.button), + .hero.is-dark .subtitle strong { + color: #ecf0f1; } + @media screen and (max-width: 1087px) { + .hero.is-dark .navbar-menu { + background-color: #282f2f; } } + .hero.is-dark .navbar-item, + .hero.is-dark .navbar-link { + color: rgba(236, 240, 241, 0.7); } + .hero.is-dark a.navbar-item:hover, .hero.is-dark a.navbar-item.is-active, + .hero.is-dark .navbar-link:hover, + .hero.is-dark .navbar-link.is-active { + background-color: #1d2122; + color: #ecf0f1; } + .hero.is-dark .tabs a { + color: #ecf0f1; + opacity: 0.9; } + .hero.is-dark .tabs a:hover { + opacity: 1; } + .hero.is-dark .tabs li.is-active a { + opacity: 1; } + .hero.is-dark .tabs.is-boxed a, .hero.is-dark .tabs.is-toggle a { + color: #ecf0f1; } + .hero.is-dark .tabs.is-boxed a:hover, .hero.is-dark .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-dark .tabs.is-boxed li.is-active a, .hero.is-dark .tabs.is-boxed li.is-active a:hover, .hero.is-dark .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover { + background-color: #ecf0f1; + border-color: #ecf0f1; + color: #282f2f; } + .hero.is-dark.is-bold { + background-image: linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%); } + @media screen and (max-width: 768px) { + .hero.is-dark.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%); } } + .hero.is-primary { + background-color: #375a7f; + color: #fff; } + .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag), + .hero.is-primary strong { + color: inherit; } + .hero.is-primary .title { + color: #fff; } + .hero.is-primary .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-primary .subtitle a:not(.button), + .hero.is-primary .subtitle strong { + color: #fff; } + @media screen and (max-width: 1087px) { + .hero.is-primary .navbar-menu { + background-color: #375a7f; } } + .hero.is-primary .navbar-item, + .hero.is-primary .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-primary a.navbar-item:hover, .hero.is-primary a.navbar-item.is-active, + .hero.is-primary .navbar-link:hover, + .hero.is-primary .navbar-link.is-active { + background-color: #2f4d6d; + color: #fff; } + .hero.is-primary .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-primary .tabs a:hover { + opacity: 1; } + .hero.is-primary .tabs li.is-active a { + opacity: 1; } + .hero.is-primary .tabs.is-boxed a, .hero.is-primary .tabs.is-toggle a { + color: #fff; } + .hero.is-primary .tabs.is-boxed a:hover, .hero.is-primary .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-primary .tabs.is-boxed li.is-active a, .hero.is-primary .tabs.is-boxed li.is-active a:hover, .hero.is-primary .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #375a7f; } + .hero.is-primary.is-bold { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } + @media screen and (max-width: 768px) { + .hero.is-primary.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } } + .hero.is-link { + background-color: #1abc9c; + color: #fff; } + .hero.is-link a:not(.button):not(.dropdown-item):not(.tag), + .hero.is-link strong { + color: inherit; } + .hero.is-link .title { + color: #fff; } + .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-link .subtitle a:not(.button), + .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1087px) { + .hero.is-link .navbar-menu { + background-color: #1abc9c; } } + .hero.is-link .navbar-item, + .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, + .hero.is-link .navbar-link:hover, + .hero.is-link .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-link .tabs a:hover { + opacity: 1; } + .hero.is-link .tabs li.is-active a { + opacity: 1; } + .hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { + color: #fff; } + .hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #1abc9c; } + .hero.is-link.is-bold { + background-image: linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%); } + @media screen and (max-width: 768px) { + .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%); } } + .hero.is-info { + background-color: #209cee; + color: #fff; } + .hero.is-info a:not(.button):not(.dropdown-item):not(.tag), + .hero.is-info strong { + color: inherit; } + .hero.is-info .title { + color: #fff; } + .hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-info .subtitle a:not(.button), + .hero.is-info .subtitle strong { + color: #fff; } + @media screen and (max-width: 1087px) { + .hero.is-info .navbar-menu { + background-color: #209cee; } } + .hero.is-info .navbar-item, + .hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, + .hero.is-info .navbar-link:hover, + .hero.is-info .navbar-link.is-active { + background-color: #118fe4; + color: #fff; } + .hero.is-info .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-info .tabs a:hover { + opacity: 1; } + .hero.is-info .tabs li.is-active a { + opacity: 1; } + .hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { + color: #fff; } + .hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #209cee; } + .hero.is-info.is-bold { + background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); } + @media screen and (max-width: 768px) { + .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); } } + .hero.is-success { + background-color: #2ecc71; + color: #fff; } + .hero.is-success a:not(.button):not(.dropdown-item):not(.tag), + .hero.is-success strong { + color: inherit; } + .hero.is-success .title { + color: #fff; } + .hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-success .subtitle a:not(.button), + .hero.is-success .subtitle strong { + color: #fff; } + @media screen and (max-width: 1087px) { + .hero.is-success .navbar-menu { + background-color: #2ecc71; } } + .hero.is-success .navbar-item, + .hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, + .hero.is-success .navbar-link:hover, + .hero.is-success .navbar-link.is-active { + background-color: #29b765; + color: #fff; } + .hero.is-success .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-success .tabs a:hover { + opacity: 1; } + .hero.is-success .tabs li.is-active a { + opacity: 1; } + .hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { + color: #fff; } + .hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #2ecc71; } + .hero.is-success.is-bold { + background-image: linear-gradient(141deg, #1bac40 0%, #2ecc71 71%, #3ada98 100%); } + @media screen and (max-width: 768px) { + .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1bac40 0%, #2ecc71 71%, #3ada98 100%); } } + .hero.is-warning { + background-color: #f1b70e; + color: #fff; } + .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag), + .hero.is-warning strong { + color: inherit; } + .hero.is-warning .title { + color: #fff; } + .hero.is-warning .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-warning .subtitle a:not(.button), + .hero.is-warning .subtitle strong { + color: #fff; } + @media screen and (max-width: 1087px) { + .hero.is-warning .navbar-menu { + background-color: #f1b70e; } } + .hero.is-warning .navbar-item, + .hero.is-warning .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, + .hero.is-warning .navbar-link:hover, + .hero.is-warning .navbar-link.is-active { + background-color: #d9a50d; + color: #fff; } + .hero.is-warning .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-warning .tabs a:hover { + opacity: 1; } + .hero.is-warning .tabs li.is-active a { + opacity: 1; } + .hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { + color: #fff; } + .hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #f1b70e; } + .hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #cb7601 0%, #f1b70e 71%, #f8e520 100%); } + @media screen and (max-width: 768px) { + .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #cb7601 0%, #f1b70e 71%, #f8e520 100%); } } + .hero.is-danger { + background-color: #e74c3c; + color: #fff; } + .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag), + .hero.is-danger strong { + color: inherit; } + .hero.is-danger .title { + color: #fff; } + .hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-danger .subtitle a:not(.button), + .hero.is-danger .subtitle strong { + color: #fff; } + @media screen and (max-width: 1087px) { + .hero.is-danger .navbar-menu { + background-color: #e74c3c; } } + .hero.is-danger .navbar-item, + .hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, + .hero.is-danger .navbar-link:hover, + .hero.is-danger .navbar-link.is-active { + background-color: #e43725; + color: #fff; } + .hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-danger .tabs a:hover { + opacity: 1; } + .hero.is-danger .tabs li.is-active a { + opacity: 1; } + .hero.is-danger .tabs.is-boxed a, .hero.is-danger .tabs.is-toggle a { + color: #fff; } + .hero.is-danger .tabs.is-boxed a:hover, .hero.is-danger .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-danger .tabs.is-boxed li.is-active a, .hero.is-danger .tabs.is-boxed li.is-active a:hover, .hero.is-danger .tabs.is-toggle li.is-active a, .hero.is-danger .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #e74c3c; } + .hero.is-danger.is-bold { + background-image: linear-gradient(141deg, #e20e1e 0%, #e74c3c 71%, #ef784e 100%); } + @media screen and (max-width: 768px) { + .hero.is-danger.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e20e1e 0%, #e74c3c 71%, #ef784e 100%); } } + .hero.is-small .hero-body { + padding-bottom: 1.5rem; + padding-top: 1.5rem; } + @media screen and (min-width: 769px), print { + .hero.is-medium .hero-body { + padding-bottom: 9rem; + padding-top: 9rem; } } + @media screen and (min-width: 769px), print { + .hero.is-large .hero-body { + padding-bottom: 18rem; + padding-top: 18rem; } } + .hero.is-halfheight .hero-body, .hero.is-fullheight .hero-body, .hero.is-fullheight-with-navbar .hero-body { + align-items: center; + display: flex; } + .hero.is-halfheight .hero-body > .container, .hero.is-fullheight .hero-body > .container, .hero.is-fullheight-with-navbar .hero-body > .container { + flex-grow: 1; + flex-shrink: 1; } + .hero.is-halfheight { + min-height: 50vh; } + .hero.is-fullheight { + min-height: 100vh; } + .hero.is-fullheight-with-navbar { + min-height: calc(100vh - 4rem); } + +.hero-video { + overflow: hidden; } + .hero-video video { + left: 50%; + min-height: 100%; + min-width: 100%; + position: absolute; + top: 50%; + transform: translate3d(-50%, -50%, 0); } + .hero-video.is-transparent { + opacity: 0.3; } + @media screen and (max-width: 768px) { + .hero-video { + display: none; } } + +.hero-buttons { + margin-top: 1.5rem; } + @media screen and (max-width: 768px) { + .hero-buttons .button { + display: flex; } + .hero-buttons .button:not(:last-child) { + margin-bottom: 0.75rem; } } + @media screen and (min-width: 769px), print { + .hero-buttons { + display: flex; + justify-content: center; } + .hero-buttons .button:not(:last-child) { + margin-right: 1.5rem; } } + +.hero-head, +.hero-foot { + flex-grow: 0; + flex-shrink: 0; } + +.hero-body { + flex-grow: 1; + flex-shrink: 0; + padding: 3rem 1.5rem; } + +.section { + padding: 3rem 1.5rem; } + @media screen and (min-width: 1088px) { + .section.is-medium { + padding: 9rem 1.5rem; } + .section.is-large { + padding: 18rem 1.5rem; } } + +.footer { + background-color: #282f2f; + padding: 3rem 1.5rem 6rem; } + +hr { + height: 2px; } + +h6 { + text-transform: uppercase; + letter-spacing: 0.5px; } + +.hero { + background-color: #343c3d; } + +a { + transition: all 200ms ease; } + +.button { + transition: all 200ms ease; + border-width: 2px; + color: white; } + .button.is-active, .button.is-focused, .button:active, .button:focus { + box-shadow: 0 0 0 2px rgba(140, 155, 157, 0.5); } + .button.is-white.is-hovered, .button.is-white:hover { + background-color: white; } + .button.is-white.is-active, .button.is-white.is-focused, .button.is-white:active, .button.is-white:focus { + border-color: white; + box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5); } + .button.is-black.is-hovered, .button.is-black:hover { + background-color: #1d1d1d; } + .button.is-black.is-active, .button.is-black.is-focused, .button.is-black:active, .button.is-black:focus { + border-color: #0a0a0a; + box-shadow: 0 0 0 2px rgba(10, 10, 10, 0.5); } + .button.is-light.is-hovered, .button.is-light:hover { + background-color: white; } + .button.is-light.is-active, .button.is-light.is-focused, .button.is-light:active, .button.is-light:focus { + border-color: #ecf0f1; + box-shadow: 0 0 0 2px rgba(236, 240, 241, 0.5); } + .button.is-dark.is-hovered, .button.is-dark:hover { + background-color: #3a4344; } + .button.is-dark.is-active, .button.is-dark.is-focused, .button.is-dark:active, .button.is-dark:focus { + border-color: #282f2f; + box-shadow: 0 0 0 2px rgba(40, 47, 47, 0.5); } + .button.is-primary.is-hovered, .button.is-primary:hover { + background-color: #436d9a; } + .button.is-primary.is-active, .button.is-primary.is-focused, .button.is-primary:active, .button.is-primary:focus { + border-color: #375a7f; + box-shadow: 0 0 0 2px rgba(55, 90, 127, 0.5); } + .button.is-link.is-hovered, .button.is-link:hover { + background-color: #1fdeb8; } + .button.is-link.is-active, .button.is-link.is-focused, .button.is-link:active, .button.is-link:focus { + border-color: #1abc9c; + box-shadow: 0 0 0 2px rgba(26, 188, 156, 0.5); } + .button.is-info.is-hovered, .button.is-info:hover { + background-color: #44acf1; } + .button.is-info.is-active, .button.is-info.is-focused, .button.is-info:active, .button.is-info:focus { + border-color: #209cee; + box-shadow: 0 0 0 2px rgba(32, 156, 238, 0.5); } + .button.is-success.is-hovered, .button.is-success:hover { + background-color: #4ad685; } + .button.is-success.is-active, .button.is-success.is-focused, .button.is-success:active, .button.is-success:focus { + border-color: #2ecc71; + box-shadow: 0 0 0 2px rgba(46, 204, 113, 0.5); } + .button.is-warning.is-hovered, .button.is-warning:hover { + background-color: #f3c232; } + .button.is-warning.is-active, .button.is-warning.is-focused, .button.is-warning:active, .button.is-warning:focus { + border-color: #f1b70e; + box-shadow: 0 0 0 2px rgba(241, 183, 14, 0.5); } + .button.is-danger.is-hovered, .button.is-danger:hover { + background-color: #eb6b5e; } + .button.is-danger.is-active, .button.is-danger.is-focused, .button.is-danger:active, .button.is-danger:focus { + border-color: #e74c3c; + box-shadow: 0 0 0 2px rgba(231, 76, 60, 0.5); } + +.label { + color: #dbdee0; } + +.button, +.control.has-icons-left .icon, +.control.has-icons-right .icon, +.input, +.pagination-ellipsis, +.pagination-link, +.pagination-next, +.pagination-previous, +.select, +.select select, +.textarea { + height: 2.5em; } + +.input, +.textarea { + transition: all 200ms ease; + box-shadow: none; + border-width: 2px; + padding-left: 1em; + padding-right: 1em; } + +.select:after, +.select select { + border-width: 2px; } + +.control.has-addons .button, +.control.has-addons .input, +.control.has-addons .select { + margin-right: -2px; } + +.notification { + background-color: #343c3d; } + +.card { + box-shadow: none; + border: 2px solid #343c3d; + background-color: #282f2f; + border-radius: 0.4em; } + .card .card-image img { + border-radius: 0.4em 0.4em 0 0; } + .card .card-header { + box-shadow: none; + background-color: rgba(18, 18, 18, 0.2); + border-radius: 0.4em 0.4em 0 0; } + .card .card-footer { + background-color: rgba(18, 18, 18, 0.2); } + .card .card-footer, + .card .card-footer-item { + border-width: 2px; + border-color: #343c3d; } + +.notification.is-white a:not(.button) { + color: #0a0a0a; + text-decoration: underline; } + +.notification.is-black a:not(.button) { + color: white; + text-decoration: underline; } + +.notification.is-light a:not(.button) { + color: #282f2f; + text-decoration: underline; } + +.notification.is-dark a:not(.button) { + color: #ecf0f1; + text-decoration: underline; } + +.notification.is-primary a:not(.button) { + color: #fff; + text-decoration: underline; } + +.notification.is-link a:not(.button) { + color: #fff; + text-decoration: underline; } + +.notification.is-info a:not(.button) { + color: #fff; + text-decoration: underline; } + +.notification.is-success a:not(.button) { + color: #fff; + text-decoration: underline; } + +.notification.is-warning a:not(.button) { + color: #fff; + text-decoration: underline; } + +.notification.is-danger a:not(.button) { + color: #fff; + text-decoration: underline; } + +.tag { + border-radius: 0.4em; } + +.menu-list a { + transition: all 300ms ease; } + +.modal-card-body { + background-color: #282f2f; } + +.modal-card-foot, +.modal-card-head { + border-color: #343c3d; } + +.message-header { + font-weight: 700; + background-color: #343c3d; + color: white; } + +.message-body { + border-width: 2px; + border-color: #343c3d; } + +.navbar { + border-radius: 0.4em; } + .navbar.is-transparent { + background: none; } + .navbar.is-primary .navbar-dropdown a.navbar-item.is-active { + background-color: #1abc9c; } + @media screen and (max-width: 1087px) { + .navbar .navbar-menu { + background-color: #375a7f; + border-radius: 0 0 0.4em 0.4em; } } + +.hero .navbar, +body > .navbar { + border-radius: 0; } + +.pagination-link, +.pagination-next, +.pagination-previous { + border-width: 2px; } + +.panel-block, +.panel-heading, +.panel-tabs { + border-width: 2px; } + .panel-block:first-child, + .panel-heading:first-child, + .panel-tabs:first-child { + border-top-width: 2px; } + +.panel-heading { + font-weight: 700; } + +.panel-tabs a { + border-width: 2px; + margin-bottom: -2px; } + .panel-tabs a.is-active { + border-bottom-color: #17a689; } + +.panel-block:hover { + color: #1dd2af; } + .panel-block:hover .panel-icon { + color: #1dd2af; } + +.panel-block.is-active .panel-icon { + color: #17a689; } + +.tabs a { + border-bottom-width: 2px; + margin-bottom: -2px; } + +.tabs ul { + border-bottom-width: 2px; } + +.tabs.is-boxed a { + border-width: 2px; } + +.tabs.is-boxed li.is-active a { + background-color: #1f2424; } + +.tabs.is-toggle li a { + border-width: 2px; + margin-bottom: 0; } + +.tabs.is-toggle li + li { + margin-left: -2px; } + +.hero.is-white .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + +.hero.is-black .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + +.hero.is-light .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + +.hero.is-dark .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + +.hero.is-primary .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + +.hero.is-link .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + +.hero.is-info .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + +.hero.is-success .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + +.hero.is-warning .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + +.hero.is-danger .navbar .navbar-dropdown .navbar-item:hover { + background-color: transparent; } + +/*# sourceMappingURL=bulmaswatch.min.css.map */ \ No newline at end of file diff --git a/plugins/ui/css/shimmer-ui-gif.gif b/plugins/ui/css/shimmer-ui-gif.gif new file mode 100644 index 0000000000000000000000000000000000000000..b9b978ab89823875a06b4abb2d02cd4c5550e69e Binary files /dev/null and b/plugins/ui/css/shimmer-ui-gif.gif differ diff --git a/plugins/ui/css/styles.css b/plugins/ui/css/styles.css new file mode 100644 index 0000000000000000000000000000000000000000..e78374b0296a197a1cc2894bc8020208d1964a72 --- /dev/null +++ b/plugins/ui/css/styles.css @@ -0,0 +1,204 @@ +/* mobile */ +html { + font-size:12px; +} +/* tablets */ +@media only screen and (min-width: 600px) { + html { + font-size:14px; + } +} +/* desktop */ +@media only screen and (min-width: 768px) { + html { + font-size:16px; + } +} +body { + opacity: 1; + transition: 0.35s opacity; +} +body.fade { + opacity: 0; + transition: none; +} + +/* bulma */ +[v-cloak] { + display: none; +} +.section { + padding: 1.8rem 1.5rem; +} +.columns { + margin-bottom: 0 !important; +} +.header{ + background:#005050; + padding-bottom: 0; +} + +/* main */ +.title{ + display: flex; + align-items: center; +} +.login{ + background:#004965; + border: 1px solid #5e6d6f; + padding:20px; + font-size: 0.9rem; + border-radius: 0.4em; + box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); +} +.login button{ + width:100%; + margin-top:12px; +} +.login div { + display: flex; + align-items: center; + font-size:1.2rem; +} +.login div:first-child { + margin-bottom:12px; +} +.login div span { + min-width:6.5rem; +} +.status{ + margin-left:54px; +} +.status > span { + margin-left:8px; +} +.tps.input { + width:100px; +} +.tx-toolbar { + display: flex; + justify-content: space-between; + height:50px; +} +.graph { + border: 1px solid #5e6d6f; + overflow: hidden; +} +#graph { + width:100%; + height: 100%; +} +.hovered-node{ + position: absolute; + top: 0; + font-size: 0.75rem; + padding: 5px 10px; + width: 100%; + color: #c5c5c5; +} +.chart-container { + height: calc(100% - 50px); + display: flex; + border:1px solid #5e6d6f; + overflow: hidden; +} + +/* tables */ +.info-list{ + background:#004965; + border: 1px solid #5e6d6f; + font-size: 0.9rem; +} +.info-list .list-item{ + display: flex; + justify-content: space-between; + white-space: nowrap; + overflow: hidden; +} + +.logs-container { + overflow: scroll; + display: flex; + flex-direction: column-reverse; + border:1px solid #5e6d6f; +} +.logs-list { + background:#004965; + table-layout: fixed; + width: 100%; + font-size: 0.9rem; +} +.logs-list th { + background: #00374c; +} +.logs-list td { + font-family: "Inconsolata", "Consolas", "Monaco", monospace; + padding: 0.25em 0.75em; + overflow: auto; + white-space: nowrap; +} +.logs-list td::-webkit-scrollbar { height: 0 !important } +.logs-list td:first-child { + font-weight: bold; +} +.logs-list td:last-child span { + width:35px; + text-align: center; + font-weight: bold; + display: inline-block; +} + +.tx-container { + height: 100%; + overflow: scroll; + display: flex; + flex-direction: column-reverse; + border:1px solid #5e6d6f; +} +.tx-list { + background:#004965; + table-layout: fixed; + width: 100%; + font-size: 0.9rem; +} +.tx-list th { + padding-bottom: 3px; + border-top:1px solid #5e6d6f !important; + background: #00374c; +} +.tx-list tbody tr { + cursor: pointer; +} +.tx-list tbody tr:hover { + background: #00374c; +} +.tx-list td { + font-family: "Inconsolata", "Consolas", "Monaco", monospace; + padding: 0.25em 0.75em; + overflow: auto; + white-space: nowrap; +} +.tx-list td::-webkit-scrollbar { height: 0 !important } +.tx-list td:first-child { + font-weight: bold; +} +.tx-list tr.full-tx { + display:block; + width:100%; +} +.tx-list tr.full-tx td { + padding:0; + width:100%; +} +.tx-list tr.full-tx pre:hover { + background:#232929; +} +.no-txs{ + height:100%; + width:100%; + display:flex; + align-items: center; + justify-content: center; + color:grey; + font-size: 0.8rem; +} diff --git a/plugins/ui/favicon.ico b/plugins/ui/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..61334f976a39dfc6c85a75501d1473fd8456e341 Binary files /dev/null and b/plugins/ui/favicon.ico differ diff --git a/plugins/ui/index.html b/plugins/ui/index.html new file mode 100644 index 0000000000000000000000000000000000000000..894902d911a18bfd83ff7271e728c4ce7180b7dc --- /dev/null +++ b/plugins/ui/index.html @@ -0,0 +1,156 @@ +<!DOCTYPE html> +<html> + +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="ui/favicon.ico"> + <title>Shimmer UI</title> + <link rel="stylesheet" href="ui/css/bulma-darkly.css"> + <link rel="stylesheet" href="ui/css/styles.css"> +</head> + +<body class="fade"> + <section id="app"> + <section class="section header" ref="header"> + <div class="container"> + <div class="columns"> + <div class="column"> + <h1 class="title"> + <iota-icon size="42"></iota-icon> + Shimmer + </h1> + <span v-if="loggedIn" class="status">Status:<span class="tag is-light">{{synced}}</span> + </div> + + <div v-if="!loggedIn" class="column"> + <form class="login" @submit="login"> + <div> + <span>Username:</span> + <input class="input" placeholder="Username" name="username"> + </div> + <div> + <span>Password:</span> + <input class="input" placeholder="Username" name="password"> + </div> + <button type="submit" class="button is-primary">Login</button> + </form> + </div> + + <div v-if="loggedIn" class="column"> + <div class="list info-list"> + <div v-for="(c, i) in infoKeys" class="list-item"> + <span>{{ c }}:</span> + <span v-if="infoValues[i]">{{ infoValues[i] }}</span> + </li> + </div> + </div> + </div> + </div> + <div v-if="loggedIn" class="tabs is-boxed"> + <ul> + <li v-for="t in tabs" @click="selectTab(t)" + :class="selectedTab===t?'is-active':''"> + <a>{{t}}</a> + </li> + </ul> + </div> + </section> + + <section class="section" v-if="selectedTab==='Logs'"> + <div class="container logs-container" :style="footerContainerStyle()"> + <table class="table logs-list"> + <thead v-if="logs.length>0"><tr> + <th style="width:75px;">Time</th> + <th>Message</th> + <th style="width:75px;">Status</th> + </tr></thead> + <tbody> + <tr v-for="log in logs"> + <td>{{ log.time }}</td> + <td>{{ log.source }}: {{ log.message }}</td> + <td>[<span :style="`color:${log.color};`">{{ log.label }}</span>]</td> + </tr> + </tbody> + </table> + </div> + </section> + + <section class="section" v-if="selectedTab==='Spammer'"> + <div class="container" :style="footerContainerStyle()"> + <div class="tx-toolbar"> + <div class="field is-grouped"> + <p class="control"> + <input ref="tpsinput" class="input tps" type="number" v-model="tpsToSpam" placeholder="TPS"> + </p> + <p class="control"> + <button class="button is-info" @click="startSpam()" :disabled="tpsToSpam<1"> + <play-icon size="19"></play-icon> + </button> + </p> + <p class="control"> + <button class="button is-primary" @click="stopSpam()" :disabled="info.receivedTps<1"> + <stop-icon size="19"></stop-icon> + </button> + </p> + </div> + <!-- <div class="field is-grouped"> + <button class="button" @click="clearTxs()" :disabled="txs.length<1"> + Clear + </button> + </div> --> + </div> + <div class="chart-container"> + <tps-chart ref="tpschart"></tps-chart> + </div> + </div> + </section> + + <section class="section" v-if="selectedTab==='Transactions'"> + <div class="container transactions" :style="footerContainerStyle()"> + <div class="tx-container"> + <table v-if="txs.length>0" class="table tx-list"> + <thead><tr> + <th style="width:50px;"><iota-icon size="20"></iota-icon></th> + <th style="line-height:21px;">Hash</th> + </tr></thead> + <tbody> + <tr v-for="tx in txs" @click="selectTxHash(tx.hash)" :class="selectedTxHash===tx.hash ? 'full-tx' : ''"> + <td v-if="selectedTxHash!==tx.hash">{{ tx.value }}</td> + <td> + <span v-if="selectedTxHash!==tx.hash">{{ tx.hash }}</span> + <pre v-if="selectedTxHash===tx.hash" :style="`width:calc(${windowWidth-2}px - 3rem);`">{{ JSON.stringify(tx,null,2) }}</pre> + </td> + </tr> + </tbody> + </table> + <div v-if="txs.length===0" class="no-txs">No transactions yet</div> + </div> + </div> + </section> + + <section class="section" v-if="selectedTab==='Neighbors'"> + <div class="container graph" :style="footerContainerStyle()"> + <force-graph :neighbors="neighbors" :me="info.id"></force-graph> + </div> + </section> + + </section> + + <!-- <script src="https://unpkg.com/vue@2.5.9"></script> --> + <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.min.js"></script> + <script src="https://unpkg.com/dayjs@1.8.15"></script> + <script src="https://unpkg.com/3d-force-graph"></script> + <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> + <script src="https://code.highcharts.com/stock/highstock.js"></script> + <script src="https://code.highcharts.com/stock/modules/exporting.js"></script> + <script src="https://code.highcharts.com/stock/modules/export-data.js"></script> + <script src="ui/js/initials.js"></script> + <script src="ui/js/utils.js"></script> + <script src="ui/js/icons.js"></script> + <script src="ui/js/forcegraph.js"></script> + <script src="ui/js/tpschart.js"></script> + <script src="ui/js/main.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/plugins/ui/js/forcegraph.js b/plugins/ui/js/forcegraph.js new file mode 100644 index 0000000000000000000000000000000000000000..d77a7ae7515ae82e1e3a6934f59667eeaa5e6e3c --- /dev/null +++ b/plugins/ui/js/forcegraph.js @@ -0,0 +1,58 @@ + +Vue.component('force-graph', { + props:['neighbors', 'me'], + data: function() { + return { + hoveredNode: null + } + }, + watch:{ + neighbors: function (val, oldVal) { + let updateNeeded + val.forEach(node=> { + if(!oldVal.find(n=> n.id===node.id)) updateNeeded=true + }) + oldVal.forEach(node=> { + if(!val.find(n=> n.id===node.id)) updateNeeded=true + }) + if (updateNeeded) this.graph.graphData(this.makeGraph()) + }, + }, + methods:{ + makeGraph() { + return { + nodes: [{id: this.me}, ...this.neighbors], + links: this.neighbors.filter(id => id) + .map(id => ({ source: id, target: this.me })) + }; + } + }, + mounted() { + const el = document.getElementById('3d-graph') + const parentStyle = window.getComputedStyle(el.parentNode) + this.graph = ForceGraph3D()(el) + .width(parseInt(parentStyle.width)-2) + .height(parseInt(parentStyle.height)-2) + .enableNodeDrag(false) + .onNodeHover(node => { + this.hoveredNode = node + el.style.cursor = node ? 'pointer' : null + }) + .onNodeClick(node => console.log(node)) + .nodeColor(node => { + if (node.id===this.me) return 'rgba(0,200,255,1)' + return node.accepted ? 'rgba(150,255,150,1)' : 'rgba(255,255,255,1)' + }) + .linkColor('rgba(255,255,255,1)') + .linkOpacity(0.85) + .graphData(this.makeGraph()) + }, + + template: `<div style="height:100%;"> + <div id="3d-graph"></div> + <div v-if="hoveredNode" class="hovered-node"> + ID: {{hoveredNode.id}} + <span v-if="hoveredNode.address">Address: {{hoveredNode.address}}</span> + </div> + </div>` +}) \ No newline at end of file diff --git a/plugins/ui/js/icons.js b/plugins/ui/js/icons.js new file mode 100644 index 0000000000000000000000000000000000000000..515f7bacadf202a09da3e79f6ad75976ffbd1fc5 --- /dev/null +++ b/plugins/ui/js/icons.js @@ -0,0 +1,20 @@ + +Vue.component('iota-icon', { + props:['size'], + template: '<svg :height="size" :width="size" style="margin-right:10px;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 128 128" xml:space="preserve"><path d="M79.6 24.9c-.1-2.8 2.4-5.4 5.6-5.3 2.8.1 5.1 2.5 5.1 5.4 0 3-2.5 5.3-5.6 5.3-2.8 0-5.1-2.5-5.1-5.4z" fill="#FFF"/><path d="M91 95.4c3 0 5.3 2.3 5.3 5.3s-2.4 5.4-5.4 5.4c-2.9 0-5.3-2.4-5.3-5.4 0-3 2.4-5.3 5.4-5.3z" fill="#FFF"/><path d="M22.4 73.4c-3 0-5.3-2.4-5.3-5.5 0-2.9 2.4-5.2 5.4-5.2 3 0 5.3 2.4 5.3 5.5-.1 2.9-2.5 5.2-5.4 5.2z" fill="#FFF"/><path d="M81.9 39.2c0-2.6 2-4.6 4.6-4.6 2.5 0 4.6 2.1 4.6 4.6 0 2.5-2.1 4.6-4.6 4.6-2.6 0-4.6-2.1-4.6-4.6z" fill="#FFF"/><path d="M33.9 55.1c2.6 0 4.6 2 4.7 4.5 0 2.5-2.1 4.6-4.6 4.6-2.5 0-4.6-2.1-4.6-4.6-.1-2.5 2-4.5 4.5-4.5z" fill="#FFF"/><path d="M98.4 45.4c-2.5 0-4.6-2.1-4.6-4.6 0-2.6 2.1-4.6 4.6-4.6 2.5 0 4.6 2.1 4.6 4.6 0 2.6-2 4.6-4.6 4.6z" fill="#FFF"/><path d="M77.9 99.5c-2.5 0-4.6-2.1-4.6-4.6 0-2.5 2-4.5 4.6-4.6 2.5 0 4.6 2.1 4.6 4.6 0 2.5-2.1 4.6-4.6 4.6z" fill="#FFF"/><path d="M33.9 48.5c0 2.5-2.1 4.6-4.6 4.6-2.5 0-4.5-2.1-4.5-4.6 0-2.5 2.1-4.6 4.6-4.6 2.5-.1 4.6 2 4.5 4.6z" fill="#FFF"/><path d="M70.4 109c-2.5 0-4.5-2-4.5-4.6 0-2.5 2-4.5 4.6-4.6 2.5 0 4.6 2.1 4.6 4.6-.1 2.6-2.1 4.6-4.7 4.6z" fill="#FFF"/><path d="M56.9 97.1c0-2.2 1.7-3.9 3.9-3.9s3.9 1.8 3.9 4-1.8 3.9-3.9 3.9c-2.2 0-3.9-1.8-3.9-4z" fill="#FFF"/><path d="M100.9 52.9c0 2.2-1.8 3.9-3.9 3.9-2.1 0-3.9-1.8-3.9-3.9 0-2.2 1.8-4 3.9-3.9 2.1 0 3.9 1.7 3.9 3.9z" fill="#FFF"/><path d="M44.4 43.7c0 2.2-1.7 3.9-3.9 3.9s-3.9-1.7-3.9-4c0-2.2 1.7-3.9 3.9-3.9 2.3.1 4 1.8 3.9 4z" fill="#FFF"/><path d="M49 54.9c0 2.2-1.7 3.9-3.9 3.9s-3.9-1.7-3.9-3.9 1.7-4 3.9-3.9c2.2 0 3.9 1.7 3.9 3.9z" fill="#FFF"/><path d="M35 33.5c0-2.2 1.8-3.9 3.9-3.9 2.2 0 3.9 1.8 3.9 3.9 0 2.2-1.7 3.9-3.9 3.9S35 35.7 35 33.5z" fill="#FFF"/><path d="M81.1 51.3c0-2.2 1.7-3.9 3.9-3.9s4 1.8 3.9 4c0 2.2-1.8 3.9-3.9 3.9-2.2-.2-3.9-1.9-3.9-4z" fill="#FFF"/><path d="M68.2 83.7c2.1 0 3.9 1.8 3.9 3.9 0 2.2-1.8 3.9-4 3.9s-3.9-1.7-3.9-3.9c.1-2.2 1.9-3.9 4-3.9z" fill="#FFF"/><path d="M56.7 103.6c0 2.2-1.7 3.9-3.9 3.9s-3.9-1.7-3.9-3.9 1.8-4 3.9-3.9c2.2 0 3.9 1.7 3.9 3.9z" fill="#FFF"/><path d="M106.5 60.5c-2.1 0-3.8-1.8-3.9-3.9 0-2.2 1.8-3.9 4-3.9 2.1 0 3.9 1.8 3.9 3.9 0 2.2-1.8 3.9-4 3.9z" fill="#FFF"/><path d="M57.5 89.3c0 1.9-1.5 3.4-3.4 3.3-1.9 0-3.4-1.5-3.4-3.3 0-1.9 1.5-3.4 3.4-3.4s3.4 1.5 3.4 3.4z" fill="#FFF"/><path d="M50.7 38.5c1.9 0 3.3 1.5 3.3 3.3 0 1.8-1.5 3.4-3.3 3.4-1.8 0-3.4-1.5-3.4-3.4.1-1.8 1.6-3.3 3.4-3.3z" fill="#FFF"/><path d="M58.2 79.7c0-1.9 1.4-3.4 3.3-3.4s3.4 1.5 3.4 3.3c0 1.9-1.5 3.3-3.3 3.3-1.9.1-3.4-1.3-3.4-3.2z" fill="#FFF"/><path d="M46.2 99.1c-1.9 0-3.4-1.4-3.4-3.3s1.5-3.3 3.3-3.4c1.9 0 3.4 1.5 3.4 3.4 0 1.8-1.5 3.3-3.3 3.3z" fill="#FFF"/><path d="M84.7 61c0 1.8-1.4 3.3-3.3 3.3s-3.4-1.5-3.3-3.4c0-1.9 1.5-3.3 3.3-3.3 1.9 0 3.3 1.5 3.3 3.4z" fill="#FFF"/><path d="M49.1 35c-1.9 0-3.4-1.4-3.4-3.3s1.5-3.4 3.4-3.4c1.8 0 3.3 1.5 3.4 3.4 0 1.8-1.5 3.3-3.4 3.3z" fill="#FFF"/><path d="M93.4 66c-1.9 0-3.3-1.5-3.3-3.3 0-1.8 1.5-3.3 3.4-3.3s3.3 1.5 3.3 3.4c0 1.8-1.5 3.2-3.4 3.2z" fill="#FFF"/><path d="M55.2 56.4c-1.8 0-3.3-1.5-3.3-3.4 0-1.8 1.6-3.3 3.4-3.3 1.9 0 3.3 1.5 3.3 3.4s-1.5 3.3-3.4 3.3z" fill="#FFF"/><path d="M103 69.6c-1.9-.1-3.3-1.6-3.3-3.5.1-1.8 1.6-3.3 3.4-3.2 1.9.1 3.4 1.6 3.3 3.6-.1 1.8-1.6 3.2-3.4 3.1z" fill="#FFF"/><path d="M64 56.4c-1.6 0-2.9-1.3-2.9-2.9 0-1.6 1.3-2.8 2.9-2.8 1.6 0 2.9 1.3 2.8 2.9.1 1.6-1.1 2.8-2.8 2.8z" fill="#FFF"/><path d="M95.4 73.7c0-1.6 1.2-2.9 2.8-2.9 1.6 0 2.9 1.2 2.9 2.9 0 1.6-1.4 3-2.9 3-1.5-.1-2.8-1.4-2.8-3z" fill="#FFF"/><path d="M60.7 32.2c0 1.6-1.2 2.8-2.9 2.8-1.6 0-2.9-1.3-2.9-2.9 0-1.6 1.3-2.9 3-2.8 1.6 0 2.8 1.3 2.8 2.9z" fill="#FFF"/><path d="M60.4 71.9c0 1.6-1.2 2.8-2.8 2.9-1.7 0-2.9-1.3-2.9-2.9 0-1.6 1.3-2.9 2.9-2.9 1.6 0 2.8 1.3 2.8 2.9z" fill="#FFF"/><path d="M50.2 84.3c-1.6 0-2.9-1.2-2.9-2.8 0-1.6 1.3-2.9 2.9-2.9 1.5 0 2.8 1.3 2.8 2.8 0 1.6-1.2 2.9-2.8 2.9z" fill="#FFF"/><path d="M91.5 70c0 1.6-1.2 2.9-2.9 2.9-1.5 0-2.9-1.4-2.9-2.9 0-1.6 1.3-2.9 2.9-2.9 1.7 0 2.9 1.3 2.9 2.9z" fill="#FFF"/><path d="M76.7 65.5c1.7 0 2.8 1.2 2.9 2.8 0 1.6-1.2 2.9-2.9 2.9-1.6 0-2.9-1.3-2.9-2.9 0-1.6 1.2-2.8 2.9-2.8z" fill="#FFF"/><path d="M45 87.9c0 1.6-1.3 2.9-2.9 2.9-1.6 0-2.9-1.3-2.9-2.9 0-1.6 1.3-2.9 2.9-2.9 1.6 0 2.9 1.3 2.9 2.9z" fill="#FFF"/><path d="M59.5 45.2c-1.6 0-2.9-1.3-2.9-2.9 0-1.5 1.3-2.9 2.9-2.9 1.5 0 2.9 1.3 2.9 2.9 0 1.6-1.3 2.9-2.9 2.9z" fill="#FFF"/><path d="M85.8 75.1c0 1.4-1.1 2.5-2.5 2.5s-2.4-1.1-2.4-2.5 1.1-2.5 2.4-2.5c1.3.1 2.4 1.2 2.5 2.5z" fill="#FFF"/><path d="M58.2 64.6c0 1.4-1.1 2.5-2.4 2.5-1.3 0-2.5-1.2-2.5-2.5s1.2-2.5 2.5-2.5c1.3.1 2.4 1.2 2.4 2.5z" fill="#FFF"/><path d="M40.4 78.2c1.4 0 2.5 1.1 2.4 2.5 0 1.3-1.2 2.5-2.5 2.5-1.4 0-2.5-1.2-2.5-2.6.1-1.4 1.2-2.4 2.6-2.4z" fill="#FFF"/><path d="M71.2 58c-1.4 0-2.5-1-2.5-2.4s1-2.5 2.5-2.5c1.4 0 2.5 1.1 2.5 2.4 0 1.5-1.1 2.5-2.5 2.5z" fill="#FFF"/><path d="M66.7 41.9c1.4 0 2.4 1.1 2.4 2.5s-1.1 2.5-2.4 2.5c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.5 2.5-2.5z" fill="#FFF"/><path d="M50.7 74.2c0 1.4-1.1 2.5-2.4 2.5-1.3 0-2.5-1.2-2.5-2.6 0-1.4 1.1-2.4 2.5-2.4s2.4 1.1 2.4 2.5z" fill="#FFF"/><path d="M71.3 71.1c1.4 0 2.4 1.1 2.4 2.5S72.6 76 71.3 76c-1.4 0-2.5-1.1-2.5-2.5.1-1.4 1.1-2.4 2.5-2.4z" fill="#FFF"/><path d="M95.3 78.8c0 1.4-1 2.5-2.5 2.5-1.4 0-2.4-1.1-2.4-2.5 0-1.3 1.1-2.5 2.4-2.5 1.4 0 2.5 1.1 2.5 2.5z" fill="#FFF"/><path d="M65.1 31.8c1.4 0 2.4 1 2.4 2.4s-1.1 2.5-2.4 2.5c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.4 2.5-2.4z" fill="#FFF"/><path d="M72.7 37.3c0 1.2-1 2.1-2.2 2.1-1.2 0-2.1-1-2.1-2.1 0-1.2.9-2.1 2.1-2.1 1.3 0 2.2.9 2.2 2.1z" fill="#FFF"/><path d="M38.1 74.2c0-1.2.9-2 2.1-2 1.2 0 2.2 1 2.1 2.2 0 1.1-1 2.1-2.1 2.1-1.2 0-2.1-1-2.1-2.3z" fill="#FFF"/><path d="M89.6 82.1c0 1.2-.9 2.2-2.1 2.2-1.2 0-2.2-1-2.2-2.1 0-1.2 1-2.1 2.2-2.1 1.2-.1 2.1.8 2.1 2z" fill="#FFF"/><path d="M50.3 67.9c0 1.2-1 2.1-2.1 2.1-1.2 0-2.1-1-2.1-2.2 0-1.1 1-2.1 2.1-2.1 1.2 0 2.1 1 2.1 2.2z" fill="#FFF"/><path d="M72.2 49.5c-1.2 0-2.1-.9-2.1-2.1 0-1.2.9-2.1 2.1-2.1 1.2 0 2.1.9 2.1 2.1 0 1.3-.9 2.1-2.1 2.1z" fill="#FFF"/><path d="M77.9 76.3c1.2 0 2.1.9 2.1 2.1 0 1.2-1 2.2-2.2 2.2-1.1 0-2-1-2-2.1 0-1.3.9-2.2 2.1-2.2z" fill="#FFF"/><path d="M43.1 69.1c0 1-.8 1.8-1.8 1.8s-1.9-.9-1.9-1.9c0-1 .9-1.8 1.9-1.8 1.1.1 1.8.8 1.8 1.9z" fill="#FFF"/><path d="M84.2 83.8c0 1-.8 1.8-1.8 1.8s-1.8-.9-1.8-1.8c0-1 .8-1.8 1.9-1.8.9 0 1.7.8 1.7 1.8z" fill="#FFF"/><path d="M74.5 39.1c1.1 0 1.9.7 1.9 1.8 0 1-.8 1.8-1.8 1.8s-1.8-.7-1.8-1.8c0-1 .7-1.8 1.7-1.8z" fill="#FFF"/></svg>' +}) +Vue.component('play-circle-icon', { + props:['size'], + template: '<svg :height="size" :width="size" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256 464c114.875 0 208-93.125 208-208S370.875 48 256 48 48 141.125 48 256s93.125 208 208 208zm-32-112V160l96 96-96 96z"/></svg>' +}) +Vue.component('play-icon', { + props:['size'], + template: '<svg :height="size" :width="size" fill="#FFF" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M96 52v408l320-204L96 52z"/></svg>' +}) +Vue.component('stop-icon', { + props:['size'], + template: '<svg :height="size" :width="size" fill="#FFF" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M405.333 64H106.667C83.198 64 64 83.198 64 106.667v298.666C64 428.802 83.198 448 106.667 448h298.666C428.802 448 448 428.802 448 405.333V106.667C448 83.198 428.802 64 405.333 64z"/></svg>' +}) +Vue.component('empty-icon', { + template: '<svg></svg>' +}) \ No newline at end of file diff --git a/plugins/ui/js/initials.js b/plugins/ui/js/initials.js new file mode 100644 index 0000000000000000000000000000000000000000..93157c1ac6520edd8e3ccf0a6b551816bce889bb --- /dev/null +++ b/plugins/ui/js/initials.js @@ -0,0 +1,13 @@ +var initialData = { + loggedIn: false, + connected: false, + tabs: ['Logs', 'Spammer', 'Transactions', 'Neighbors'], + selectedTab: '', + logs: [], + tpsToSpam: 1, + receivedTps:0, + txs: [], + info: {}, + selectedTxHash:null, + tps:0, +} diff --git a/plugins/ui/js/main.js b/plugins/ui/js/main.js new file mode 100644 index 0000000000000000000000000000000000000000..86ca5b51dddc3283c4daf74a65c6ffc4a9f5626c --- /dev/null +++ b/plugins/ui/js/main.js @@ -0,0 +1,148 @@ +new Vue({ + el: '#app', + created() { + this.init() + window.addEventListener('resize', (e)=>{ + debounce(this.setHeaderSize, 300) + }) + }, + data: initialData, + methods: { + async login(e){ + e.preventDefault() + const formData = new FormData(e.target); + const pass = formData.get('password') + const user = formData.get('username') + const r = await api.get('login?username='+user+'&password='+pass) + if(r.token){ + this.init() + } + }, + async init() { + try{ + const r = await api.get('loghistory') + this.updateLogs(r) + } catch(e) { + this.show() + return + } + this.show() + this.loggedIn = true + this.selectedTab = 'Logs' + this.ws = new WebSocket( + api.addToken('ws://'+window.location.host+'/ws') + ) + this.ws.onopen = (e) => { this.connected=true } + this.ws.onclose = (e) => { this.connected=false } + this.ws.onerror = (e) => { this.connected=false } + this.ws.onmessage = (e) => { this.receive(e.data) } + }, + show() { + document.body.className = ''; + setTimeout(()=>this.setHeaderSize(),15) + }, + footerContainerStyle() { + const size = Math.max(window.innerHeight-this.headerSize, 300) + return `height:calc(${size-1}px - 3.6rem);` + }, + startSpam() { + console.log('start spam', this.tpsToSpam) + api.get(`spammer?cmd=start&tps=${this.tpsToSpam}`) + }, + stopSpam() { + console.log('stop spam') + api.get('spammer?cmd=stop') + }, + selectTab(tab) { + if(tab==='Spammer'){ + setTimeout(()=> this.$refs.tpsinput.focus(), 1) + } + this.selectedTab=tab + }, + selectTxHash(hash) { + if(hash===this.selectedTxHash){ + this.selectedTxHash = null + } else { + this.selectedTxHash = hash + } + }, + receive(data) { + let j + try { + j = JSON.parse(data) + } catch(err){} + this.parseResponse(j) + }, + send(data) { + this.ws.send(JSON.stringify(data)) + }, + parseResponse(r) { + if(r.info){ // node info + this.info = r.info + if(this.$refs.tpschart){ + this.$refs.tpschart.addPoint(r.info.receivedTps) + } + } + if(r.txs) { + this.updateTxs(r.txs) + } + if(r.logs) { + this.updateLogs(r.logs) + } + }, + updateLogs(newLogs){ + this.logs = this.logs.concat( + newLogs.map(j=>{ + return { + message:j.message, + source:j.source, + label:logLevels[j.level].label, + color:logLevels[j.level].color, + time: dayjs(j.time).format('hh:mm:ss')} + }) + ) + }, + updateTxs(tx) { + const txs = this.txs.concat(tx).reverse() + this.txs = txs.splice(0,1000).reverse() + }, + clearTxs() { + this.txs = [] + }, + setHeaderSize() { + const h = window.getComputedStyle(this.$refs.header).height + this.headerSize = parseInt(h) + this.windowWidth = window.innerWidth + }, + }, + computed: { + synced() { return this.connected ? 'Synced':'......' }, + infoKeys() { + return ['TPS', 'Node ID', 'Neighbors', 'Peers', 'Uptime'] + }, + infoValues() { + const i = this.info + return i.id ? [ + `${i.receivedTps} received / ${i.solidTps} new`, + i.id, + `${i.chosenNeighbors.length} chosen / ${i.acceptedNeighbors.length} accepted`, + `${i.knownPeers} total / ${i.neighborhood} neighborhood`, + uptimeConverter(i.uptime) + ] : Array(5).fill('...') + }, + neighbors() { + if(this.info.chosenNeighbors && this.info.acceptedNeighbors) { + const cn = this.info.chosenNeighbors.map(s=>{ + const a = s.split(' / ') + return {id: a[1]||'', address: a[0], accepted: false} + }) + const an = this.info.acceptedNeighbors.map(s=>{ + const a = s.split(' / ') + return {id: a[1]||'', address: a[0], accepted: true} + }) + return cn.concat(an) + } + return [] + } + }, +}) \ No newline at end of file diff --git a/plugins/ui/js/tpschart.js b/plugins/ui/js/tpschart.js new file mode 100644 index 0000000000000000000000000000000000000000..b3d89d3f6a9e1561a630180ed8a317261c737cb7 --- /dev/null +++ b/plugins/ui/js/tpschart.js @@ -0,0 +1,282 @@ +Vue.component('tps-chart', { + props: ['tps'], + watch:{ + tps: function (val, oldVal) { + console.log(val) + } + }, + methods: { + addPoint(value) { + var time = Date.now() - 1000; + this.chart.series[0].addPoint([time, value], true); + }, + }, + async created() { + const tpsqueue = await api.get('tpsqueue') + var time = Date.now() - 1000 * (tpsqueue.length + 1); + for (let i = 0; i < tpsqueue.length; i++) { + this.chart.series[0].addPoint([time += 1000, tpsqueue[i]], false); + } + this.chart.redraw(); + }, + mounted() { + Highcharts.createElement('link', { + href: 'https://fonts.googleapis.com/css?family=Unica+One', + rel: 'stylesheet', + type: 'text/css' + }, null, document.getElementsByTagName('head')[0]); + Highcharts.theme = highchartsTheme + Highcharts.setOptions(Highcharts.theme); + // Start Here + var time = Date.now() - 3000; + + data = [[time - 5000, 0]]; + var tzoffset = new Date().getTimezoneOffset(); + this.chart = Highcharts.stockChart('chart', { + rangeSelector: { + selected: 1 + }, + title: { + text: 'Transactions per second' + }, + time: { + timezoneOffset: tzoffset + }, + rangeSelector: { + buttons: [ + { + type: 'minute', + count: 5, + text: '5m' + }, { + type: 'minute', + count: 15, + text: '15m' + }, { + type: 'minute', + count: 30, + text: '30m' + }, { + type: 'hour', + count: 60, + text: '1h' + }], + inputEnabled: false + }, + series: [{ + name: 'Transactions per second', + data: data, + type: 'areaspline', + threshold: null, + tooltip: { + valueDecimals: 0 + }, + fillColor: { + linearGradient: { + x1: 0, + y1: 0, + x2: 0, + y2: 1 + }, + stops: [ + [0, Highcharts.getOptions().colors[0]], + [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')] + ] + } + }] + }); + }, + template: '<div id="chart" style="height:100%;min-width:100%"></div>' +}) + +var highchartsTheme = { + colors: ['#2b908f', '#90ee7e', '#f45b5b', '#7798BF', '#aaeeee', '#ff0066', + '#eeaaee', '#55BF3B', '#DF5353', '#7798BF', '#aaeeee'], + chart: { + backgroundColor: { + linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 }, + stops: [ + [0, '#2a2a2b'], + [1, '#3e3e40'] + ] + }, + // style: { + // fontFamily: 'sans-serif' + // }, + plotBorderColor: '#606063' + }, + title: { + style: { + color: '#E0E0E3', + // textTransform: 'uppercase', + fontSize: '20px' + } + }, + subtitle: { + style: { + color: '#E0E0E3', + // textTransform: 'uppercase' + } + }, + xAxis: { + gridLineColor: '#707073', + labels: { + style: { + color: '#E0E0E3' + } + }, + lineColor: '#707073', + minorGridLineColor: '#505053', + tickColor: '#707073', + title: { + style: { + color: '#A0A0A3' + } + } + }, + yAxis: { + gridLineColor: '#707073', + labels: { + style: { + color: '#E0E0E3' + } + }, + lineColor: '#707073', + minorGridLineColor: '#505053', + tickColor: '#707073', + tickWidth: 1, + title: { + style: { + color: '#A0A0A3' + } + } + }, + tooltip: { + backgroundColor: 'rgba(0, 0, 0, 0.85)', + style: { + color: '#F0F0F0' + } + }, + plotOptions: { + series: { + dataLabels: { + color: '#B0B0B3' + }, + marker: { + lineColor: '#333' + } + }, + boxplot: { + fillColor: '#505053' + }, + candlestick: { + lineColor: 'white' + }, + errorbar: { + color: 'white' + } + }, + legend: { + itemStyle: { + color: '#E0E0E3' + }, + itemHoverStyle: { + color: '#FFF' + }, + itemHiddenStyle: { + color: '#606063' + } + }, + credits: { + style: { + color: '#666' + } + }, + labels: { + style: { + color: '#707073' + } + }, + drilldown: { + activeAxisLabelStyle: { + color: '#F0F0F3' + }, + activeDataLabelStyle: { + color: '#F0F0F3' + } + }, + navigation: { + buttonOptions: { + symbolStroke: '#DDDDDD', + theme: { + fill: '#505053' + } + } + }, + // scroll charts + rangeSelector: { + buttonTheme: { + fill: '#505053', + stroke: '#000000', + style: { + color: '#CCC' + }, + states: { + hover: { + fill: '#707073', + stroke: '#000000', + style: { + color: 'white' + } + }, + select: { + fill: '#000003', + stroke: '#000000', + style: { + color: 'white' + } + } + } + }, + inputBoxBorderColor: '#505053', + inputStyle: { + backgroundColor: '#333', + color: 'silver' + }, + labelStyle: { + color: 'silver' + } + }, + navigator: { + handles: { + backgroundColor: '#666', + borderColor: '#AAA' + }, + outlineColor: '#CCC', + maskFill: 'rgba(255,255,255,0.1)', + series: { + color: '#7798BF', + lineColor: '#A6C7ED' + }, + xAxis: { + gridLineColor: '#505053' + } + }, + scrollbar: { + barBackgroundColor: '#808083', + barBorderColor: '#808083', + buttonArrowColor: '#CCC', + buttonBackgroundColor: '#606063', + buttonBorderColor: '#606063', + rifleColor: '#FFF', + trackBackgroundColor: '#404043', + trackBorderColor: '#404043' + }, + // special colors for some of the + legendBackgroundColor: 'rgba(0, 0, 0, 0.5)', + background2: '#505053', + dataLabelsColor: '#B0B0B3', + textColor: '#C0C0C0', + contrastTextColor: '#F0F0F3', + maskColor: 'rgba(255,255,255,0.3)' +} \ No newline at end of file diff --git a/plugins/ui/js/utils.js b/plugins/ui/js/utils.js new file mode 100644 index 0000000000000000000000000000000000000000..d61b55e13d864739b609cbbfe12e26dd8fe5cef3 --- /dev/null +++ b/plugins/ui/js/utils.js @@ -0,0 +1,78 @@ +function uptimeConverter(seconds) { + var s = '' + var hrs = Math.floor(seconds / 3600); + if (hrs) s += hrs+'h ' + seconds -= hrs*3600; + var mnts = Math.floor(seconds / 60); + if (mnts) s += mnts+'m ' + seconds -= mnts*60; + s += seconds + 's' + return s +} + +// indexed by number +const logLevels = [{ + color: '#e74c3c', + name: 'LOG_LEVEL_FAILURE', + label: 'FAIL', +},{ + color: '#f1b70e', + name: 'LOG_LEVEL_WARNING', + label: 'WARN', +},{ + color: '#2ecc71', + name: 'LOG_LEVEL_SUCCESS', + label: 'OK', +},{ + color: '#209cee', + name: 'LOG_LEVEL_INFO', + label: 'INFO', +},{ + color: '#375a7f', + name: 'LOG_LEVEL_DEBUG', + label: 'NOTE', +}] + +const api = { + get: async function(u) { + const url = this.trim('/'+u) + const r = await fetch(this.addToken(url)) + const j = await r.json() + if(url.startsWith('login') && j.token) { + localStorage.setItem('token', j.token) + await sleep(1) + } + return j + }, + post: async function(u, data){ + const url = this.trim('/'+u) + const r = await fetch(this.addToken(url), { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + data: JSON.stringify(data) + }) + const j = await r.json() + return j + }, + trim: function(s) { + return s.replace(/^\//, ''); + }, + addToken: function(s) { + const token = localStorage.getItem('token') + if (!token) return s + const char = s.includes('?') ? '&' : '?' + return s + char + 'token=' + token + } +} + +let inDebounce +function debounce(func, delay) { + const context = this + const args = arguments + clearTimeout(inDebounce) + inDebounce = setTimeout(() => func.apply(context, args), delay) +} + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} \ No newline at end of file diff --git a/plugins/ui/logger.go b/plugins/ui/logger.go new file mode 100644 index 0000000000000000000000000000000000000000..9b159c6a89463a96ff91f29f7c1fb3a6b7461183 --- /dev/null +++ b/plugins/ui/logger.go @@ -0,0 +1,50 @@ +package ui + +import ( + "time" + + "github.com/iotaledger/goshimmer/packages/node" +) + +var logHistory = make([]*statusMessage, 0) + +type statusMessage struct { + Source string `json:"source"` + Level int `json:"level"` + Message string `json:"message"` + Time time.Time `json:"time"` +} + +type resp map[string]interface{} + +func storeAndSendStatusMessage(pluginName string, message string, level int) { + + msg := &statusMessage{ + Source: pluginName, + Level: level, + Message: message, + Time: time.Now(), + } + logHistory = append(logHistory, msg) + ws.send(resp{ + "logs": []*statusMessage{msg}, + }) +} + +var uiLogger = &node.Logger{ + LogInfo: func(pluginName string, message string) { + storeAndSendStatusMessage(pluginName, message, node.LOG_LEVEL_INFO) + }, + LogSuccess: func(pluginName string, message string) { + storeAndSendStatusMessage(pluginName, message, node.LOG_LEVEL_SUCCESS) + }, + LogWarning: func(pluginName string, message string) { + storeAndSendStatusMessage(pluginName, message, node.LOG_LEVEL_WARNING) + }, + LogFailure: func(pluginName string, message string) { + storeAndSendStatusMessage(pluginName, message, node.LOG_LEVEL_FAILURE) + }, + LogDebug: func(pluginName string, message string) { + storeAndSendStatusMessage(pluginName, message, node.LOG_LEVEL_DEBUG) + }, +} diff --git a/plugins/ui/nodeInfo.go b/plugins/ui/nodeInfo.go new file mode 100644 index 0000000000000000000000000000000000000000..f643e9f5dee819534c6b6af136fd3dff68a7bcb1 --- /dev/null +++ b/plugins/ui/nodeInfo.go @@ -0,0 +1,73 @@ +package ui + +import ( + "sync/atomic" + "time" + + "github.com/iotaledger/goshimmer/packages/accountability" + "github.com/iotaledger/goshimmer/plugins/autopeering/instances/acceptedneighbors" + "github.com/iotaledger/goshimmer/plugins/autopeering/instances/chosenneighbors" + "github.com/iotaledger/goshimmer/plugins/autopeering/instances/knownpeers" + "github.com/iotaledger/goshimmer/plugins/autopeering/instances/neighborhood" +) + +var start = time.Now() + +var receivedTpsCounter uint64 +var solidTpsCounter uint64 + +var tpsQueue []uint32 + +const maxQueueSize int = 3600 + +type nodeInfo struct { + ID string `json:"id"` + ChosenNeighbors []string `json:"chosenNeighbors"` + AcceptedNeighbors []string `json:"acceptedNeighbors"` + KnownPeersSize int `json:"knownPeers"` + NeighborhoodSize int `json:"neighborhood"` + Uptime uint64 `json:"uptime"` + ReceivedTps uint64 `json:"receivedTps"` + SolidTps uint64 `json:"solidTps"` +} + +func gatherInfo() nodeInfo { + + // update tps queue + tpsQueue = append(tpsQueue, uint32(receivedTpsCounter)) + if len(tpsQueue) > maxQueueSize { + tpsQueue = tpsQueue[1:] + } + + // update neighbors + chosenNeighbors := []string{} + acceptedNeighbors := []string{} + for _, peer := range chosenneighbors.INSTANCE.Peers.GetMap() { + chosenNeighbors = append(chosenNeighbors, peer.String()) + } + for _, peer := range acceptedneighbors.INSTANCE.Peers.GetMap() { + acceptedNeighbors = append(acceptedNeighbors, peer.String()) + } + + receivedTps, solidTps := updateTpsCounters() + duration := time.Since(start) / time.Second + info := nodeInfo{ + ID: accountability.OwnId().StringIdentifier, + ChosenNeighbors: chosenNeighbors, + AcceptedNeighbors: acceptedNeighbors, + KnownPeersSize: knownpeers.INSTANCE.Peers.Len(), + NeighborhoodSize: neighborhood.INSTANCE.Peers.Len(), + Uptime: uint64(duration), + ReceivedTps: receivedTps, + SolidTps: solidTps, + } + return info +} + +func updateTpsCounters() (uint64, uint64) { + receivedTps := atomic.LoadUint64(&receivedTpsCounter) + solidTps := atomic.LoadUint64(&solidTpsCounter) + atomic.StoreUint64(&receivedTpsCounter, 0) + atomic.StoreUint64(&solidTpsCounter, 0) + return receivedTps, solidTps +} diff --git a/plugins/ui/txLog.go b/plugins/ui/txLog.go new file mode 100644 index 0000000000000000000000000000000000000000..3f64ac6198e10a319a3bd3ece9fc2fa7059c8cb9 --- /dev/null +++ b/plugins/ui/txLog.go @@ -0,0 +1,31 @@ +package ui + +import ( + "strings" + + "github.com/iotaledger/goshimmer/packages/model/value_transaction" + "github.com/iotaledger/iota.go/transaction" +) + +// cleared every second +var transactions []transaction.Transaction + +var emptyTag = strings.Repeat("9", 27) + +func logTransactions() interface{} { + a := transactions + transactions = make([]transaction.Transaction, 0) + return a +} + +func saveTx(tx *value_transaction.ValueTransaction) { + transactions = append(transactions, transaction.Transaction{ + Hash: tx.MetaTransaction.GetHash(), + Address: tx.GetAddress(), + Value: tx.GetValue(), + Timestamp: uint64(tx.GetTimestamp()), + TrunkTransaction: tx.MetaTransaction.GetTrunkTransactionHash(), + BranchTransaction: tx.MetaTransaction.GetBranchTransactionHash(), + Tag: emptyTag, + }) +} diff --git a/plugins/ui/ui.go b/plugins/ui/ui.go new file mode 100644 index 0000000000000000000000000000000000000000..14fb97b9057c97a36624b426018860f454ceabf5 --- /dev/null +++ b/plugins/ui/ui.go @@ -0,0 +1,71 @@ +package ui + +import ( + "net/http" + "sync/atomic" + "time" + + "github.com/iotaledger/goshimmer/packages/daemon" + "github.com/iotaledger/goshimmer/packages/events" + "github.com/iotaledger/goshimmer/packages/model/meta_transaction" + "github.com/iotaledger/goshimmer/packages/model/value_transaction" + "github.com/iotaledger/goshimmer/packages/node" + "github.com/iotaledger/goshimmer/plugins/gossip" + "github.com/iotaledger/goshimmer/plugins/tangle" + "github.com/iotaledger/goshimmer/plugins/webapi" + + "github.com/labstack/echo" +) + +func configure(plugin *node.Plugin) { + webapi.AddEndpoint("ws", upgrader) + webapi.AddEndpoint("loghistory", func(c echo.Context) error { + return c.JSON(http.StatusOK, logHistory) + }) + webapi.AddEndpoint("tpsqueue", func(c echo.Context) error { + return c.JSON(http.StatusOK, tpsQueue) + }) + + gossip.Events.ReceiveTransaction.Attach(events.NewClosure(func(_ *meta_transaction.MetaTransaction) { + atomic.AddUint64(&receivedTpsCounter, 1) + })) + tangle.Events.TransactionSolid.Attach(events.NewClosure(func(_ *value_transaction.ValueTransaction) { + atomic.AddUint64(&solidTpsCounter, 1) + })) + tangle.Events.TransactionStored.Attach(events.NewClosure(func(tx *value_transaction.ValueTransaction) { + go func() { + saveTx(tx) + }() + })) + + node.DEFAULT_LOGGER.SetEnabled(false) + + uiLogger.SetEnabled(true) + plugin.Node.AddLogger(uiLogger) + + daemon.Events.Shutdown.Attach(events.NewClosure(func() { + node.DEFAULT_LOGGER.SetEnabled(true) + })) +} + +func run(plugin *node.Plugin) { + + webapi.Server.Static("ui", "plugins/ui") + + daemon.BackgroundWorker("UI Refresher", func() { + for { + select { + case <-daemon.ShutdownSignal: + return + case <-time.After(1 * time.Second): + ws.send(resp{ + "info": gatherInfo(), + "txs": logTransactions(), + }) + } + } + }) +} + +// PLUGIN plugs the UI into the main program +var PLUGIN = node.NewPlugin("UI", node.Disabled, configure, run) diff --git a/plugins/ui/websocket.go b/plugins/ui/websocket.go new file mode 100644 index 0000000000000000000000000000000000000000..84cacf53969a34dfa2ef750141af299be20f6043 --- /dev/null +++ b/plugins/ui/websocket.go @@ -0,0 +1,41 @@ +package ui + +import ( + "encoding/json" + "fmt" + + "github.com/labstack/echo" + "golang.org/x/net/websocket" +) + +type socket struct { + conn *websocket.Conn +} + +var ws socket + +func (sock socket) send(msg interface{}) { + payload, err := json.Marshal(msg) + if err == nil && sock.conn != nil { + fmt.Fprint(sock.conn, string(payload)) + } +} + +func upgrader(c echo.Context) error { + + websocket.Handler(func(conn *websocket.Conn) { + ws.conn = conn + defer conn.Close() + for { + msg := "" + err := websocket.Message.Receive(conn, &msg) + if err != nil { + //c.Logger().Error(err) + break + } + fmt.Printf("%s\n", msg) + } + }).ServeHTTP(c.Response(), c.Request()) + + return nil +} diff --git a/plugins/webauth/webauth.go b/plugins/webauth/webauth.go new file mode 100644 index 0000000000000000000000000000000000000000..805590dcf2da589578bc83aed966ba17d0d51959 --- /dev/null +++ b/plugins/webauth/webauth.go @@ -0,0 +1,73 @@ +package webauth + +import ( + "net/http" + "os" + "strings" + "time" + + "github.com/iotaledger/goshimmer/packages/daemon" + "github.com/iotaledger/goshimmer/packages/node" + "github.com/iotaledger/goshimmer/plugins/webapi" + "github.com/labstack/echo" + "github.com/labstack/echo/middleware" + + "github.com/dgrijalva/jwt-go" +) + +var secret = "secret" + +func configure(plugin *node.Plugin) { + + jwtKey := os.Getenv("JWT_KEY") + if jwtKey != "" { + secret = jwtKey + } + + webapi.Server.Use(middleware.JWTWithConfig(middleware.JWTConfig{ + SigningKey: []byte(secret), + TokenLookup: "query:token", + Skipper: func(c echo.Context) bool { + // if strings.HasPrefix(c.Request().Host, "localhost") { + // return true + // } + if strings.HasPrefix(c.Path(), "/ui") || c.Path() == "/login" { + return true + } + return false + }, + })) +} + +func run(plugin *node.Plugin) { + daemon.BackgroundWorker("webauth", func() { + webapi.AddEndpoint("login", func(c echo.Context) error { + username := c.FormValue("username") + password := c.FormValue("password") + uiUser := os.Getenv("UI_USER") + uiPass := os.Getenv("UI_PASS") + + // Throws unauthorized error + if username != uiUser || password != uiPass { + return echo.ErrUnauthorized + } + + token := jwt.New(jwt.SigningMethodHS256) + claims := token.Claims.(jwt.MapClaims) + claims["name"] = username + claims["exp"] = time.Now().Add(time.Hour * 24 * 7).Unix() + + t, err := token.SignedString([]byte(secret)) + if err != nil { + return err + } + + return c.JSON(http.StatusOK, map[string]string{ + "token": t, + }) + }) + }) +} + +// PLUGIN plugs the UI into the main program +var PLUGIN = node.NewPlugin("webauth", node.Disabled, configure, run)