summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-09-04 17:13:52 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-09-04 17:13:52 +0200
commit851dabd3e72e971efd916f8eedc73ff1ac2470c6 (patch)
tree1476d8ee0a4a75d9ff410fdf34947c1ce0ae7608
parentfbffca727dde4d27e2e5232d6e5ed2c351257698 (diff)
parent2cf9c60c8e9c0cc997e213ef64fcb31296a880e7 (diff)
Merge branch 'style'HEADmaster
-rw-r--r--src/frontend.rs133
-rw-r--r--src/main.rs1
-rw-r--r--static/bulma.css11811
3 files changed, 11886 insertions, 59 deletions
diff --git a/src/frontend.rs b/src/frontend.rs
index 964367e..386bb95 100644
--- a/src/frontend.rs
+++ b/src/frontend.rs
@@ -6,25 +6,27 @@ use actix_web::HttpRequest;
use actix_web::HttpResponse;
use actix_web::Error;
+// TODO: This is not how you do it
+#[get("/style.css")]
+pub async fn css() -> &'static str {
+ std::include_str!("../static/bulma.css")
+}
+
#[get("/")]
pub async fn index() -> Result<maud::Markup> {
- Ok(maud::html! {
- html {
- body {
- h1 { "Waterlevels" }
-
- p { "Please note that the application is resource-constrained to 25 MB RAM and 100 Landscape elements or 1000 hours of rain!" }
- p { "The application will fail with bigger numbers or if OOM." }
+ Ok(make_body(maud::html! {
+ small {
+ p { "Please note that the application is resource-constrained to 25 MB RAM and 100 Landscape elements or 1000 hours of rain!" }
+ p { "The application will fail with bigger numbers or if OOM." }
+ }
- form action="/make_landscape" method="post" {
- label { "Elements" }
- input type="number" name="elements" checked;
+ form action="/make_landscape" method="post" {
+ label for="elements" { "Elements" }
+ input type="number" name="elements" checked;
- input type="submit";
- }
- }
+ input type="submit";
}
- })
+ }))
}
@@ -36,36 +38,26 @@ pub struct LandscapeSize {
#[post("/make_landscape")]
pub async fn make_landscape(form: web::Form<LandscapeSize>) -> Result<maud::Markup> {
if form.elements > 100 {
- return Ok(maud::html! {
- html {
- body {
- p { "For runtime reasons, this application only supports landscapes up to 100 elements" }
- }
- }
- })
+ return Ok(make_body(maud::html! {
+ p { "For runtime reasons, this application only supports landscapes up to 100 elements" }
+ }))
}
- Ok(maud::html! {
- html {
- body {
- h1 { "Hello World!" }
-
- p { "Please fill in the landscape values" }
- form action="/calculate" method="get" {
- @for _n in 0..form.elements {
- p {
- input type="number" name="levels[]" checked;
- }
- }
-
- input type="number" name="hours" checked;
- label for="hours" { "Hours of Rain" }
-
- input type="submit";
+ Ok(make_body(maud::html! {
+ p { "Please fill in the landscape values" }
+ form action="/calculate" method="get" {
+ @for _n in 0..form.elements {
+ p {
+ input type="number" name="levels[]" checked;
}
}
+
+ input type="number" name="hours" checked;
+ label for="hours" { "Hours of Rain" }
+
+ input type="submit";
}
- })
+ }))
}
#[derive(serde::Deserialize)]
@@ -94,37 +86,60 @@ pub async fn calculate(req: HttpRequest) -> Result<maud::Markup> {
// TODO: We should propably error with 500 here, I'm not sure.
// This is just "good enough" for now.
if ls.hours > 1000 {
- return Ok(maud::html! {
- html {
- body {
- h1 { "Landscape error" }
-
- p { "Not gonna do that. Calculating " (ls.hours) " is way too resource intensive, please use a value below 1000" }
- }
- }
- })
+ return Ok(make_body(maud::html! {
+ h2 class="title is-2" { "Landscape error" }
+ p { "Not gonna do that. Calculating " (ls.hours) " is way too resource intensive, please use a value below 1000" }
+ }))
}
let calculated_landscape = crate::backend::landscape::Landscape::new(ls.levels.clone()).rain(ls.hours);
- Ok(maud::html! {
- html {
- body {
- h1 { "Landscape!" }
+ Ok(make_body(maud::html! {
+ h2 class="title is-2" { "Landscape" }
- p { "Filling in " (ls.hours) " hours" }
+ p { "Filling in " (ls.hours) " hours" }
- @for value in &ls.levels {
- p { (value) }
+ table class="table" {
+ tbody {
+ tr {
+ @for value in &ls.levels {
+ td { (value) }
+ }
}
+ }
+ }
- h2 { "Filled" }
+ h2 class="title is-2" { "Filled" }
- @for val in calculated_landscape.into_inner() {
- p { (val.0) " + " (val.1) }
+ table class="table" {
+ tbody {
+ tr {
+ @for val in calculated_landscape.into_inner() {
+ td { (val.0) " + " (val.1) }
+ }
}
}
}
- })
+ }))
}
+fn make_body(inner: maud::Markup) -> maud::Markup {
+ maud::html! {
+ link rel="stylesheet" href="style.css";
+ html {
+ body {
+ center {
+ h1 class="title is-1" { "Water Levels Application" }
+ }
+ div class="columns" {
+ div class="column is-one-fifth" {
+ }
+ div class="column" {
+ (inner)
+ }
+ }
+ }
+ }
+ }
+}
+
diff --git a/src/main.rs b/src/main.rs
index cf87858..8a99b08 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -29,6 +29,7 @@ async fn main() -> anyhow::Result<()> {
App::new()
.wrap(Logger::default())
.wrap(Logger::new("%a %{User-Agent}i"))
+ .service(crate::frontend::css)
.service(crate::frontend::index)
.service(crate::frontend::make_landscape)
.service(crate::frontend::calculate)
diff --git a/static/bulma.css b/static/bulma.css
new file mode 100644
index 0000000..35238eb
--- /dev/null
+++ b/static/bulma.css
@@ -0,0 +1,11811 @@
+/*! bulma.io v0.9.3 | MIT License | github.com/jgthms/bulma */
+/* Bulma Utilities */
+.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: 4px;
+ box-shadow: none;
+ display: inline-flex;
+ font-size: 1rem;
+ height: 2.5em;
+ justify-content: flex-start;
+ line-height: 1.5;
+ padding-bottom: calc(0.5em - 1px);
+ padding-left: calc(0.75em - 1px);
+ padding-right: calc(0.75em - 1px);
+ padding-top: calc(0.5em - 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],
+fieldset[disabled] .button,
+fieldset[disabled] .input,
+fieldset[disabled] .textarea,
+fieldset[disabled] .select select,
+.select fieldset[disabled] select,
+fieldset[disabled] .file-cta,
+fieldset[disabled] .file-name,
+fieldset[disabled] .pagination-previous,
+fieldset[disabled] .pagination-next,
+fieldset[disabled] .pagination-link,
+fieldset[disabled] .pagination-ellipsis {
+ cursor: not-allowed;
+}
+
+.button, .file, .breadcrumb, .pagination-previous,
+.pagination-next,
+.pagination-link,
+.pagination-ellipsis, .tabs, .is-unselectable {
+ -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), .breadcrumb:not(:last-child), .level:not(:last-child), .message:not(:last-child), .pagination:not(:last-child), .tabs:not(:last-child) {
+ margin-bottom: 1.5rem;
+}
+
+.delete, .modal-close {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ background-color: rgba(10, 10, 10, 0.2);
+ border: none;
+ border-radius: 9999px;
+ 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, .loader, .select.is-loading::after, .control.is-loading::after {
+ -webkit-animation: spinAround 500ms infinite linear;
+ animation: spinAround 500ms infinite linear;
+ border: 2px solid #dbdbdb;
+ border-radius: 9999px;
+ border-right-color: transparent;
+ border-top-color: transparent;
+ content: "";
+ display: block;
+ height: 1em;
+ position: relative;
+ width: 1em;
+}
+
+.image.is-square img,
+.image.is-square .has-ratio, .image.is-1by1 img,
+.image.is-1by1 .has-ratio, .image.is-5by4 img,
+.image.is-5by4 .has-ratio, .image.is-4by3 img,
+.image.is-4by3 .has-ratio, .image.is-3by2 img,
+.image.is-3by2 .has-ratio, .image.is-5by3 img,
+.image.is-5by3 .has-ratio, .image.is-16by9 img,
+.image.is-16by9 .has-ratio, .image.is-2by1 img,
+.image.is-2by1 .has-ratio, .image.is-3by1 img,
+.image.is-3by1 .has-ratio, .image.is-4by5 img,
+.image.is-4by5 .has-ratio, .image.is-3by4 img,
+.image.is-3by4 .has-ratio, .image.is-2by3 img,
+.image.is-2by3 .has-ratio, .image.is-3by5 img,
+.image.is-3by5 .has-ratio, .image.is-9by16 img,
+.image.is-9by16 .has-ratio, .image.is-1by2 img,
+.image.is-1by2 .has-ratio, .image.is-1by3 img,
+.image.is-1by3 .has-ratio, .modal, .modal-background, .is-overlay, .hero-video {
+ bottom: 0;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+.navbar-burger {
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ appearance: none;
+ background: none;
+ border: none;
+ color: currentColor;
+ font-family: inherit;
+ font-size: 1em;
+ margin: 0;
+ padding: 0;
+}
+
+/* Bulma Base */
+/*! minireset.css v0.0.6 | 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,
+video {
+ height: auto;
+ max-width: 100%;
+}
+
+iframe {
+ border: 0;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
+
+td:not([align]),
+th:not([align]) {
+ text-align: inherit;
+}
+
+html {
+ background-color: white;
+ font-size: 16px;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ min-width: 300px;
+ overflow-x: hidden;
+ overflow-y: scroll;
+ text-rendering: optimizeLegibility;
+ -webkit-text-size-adjust: 100%;
+ -moz-text-size-adjust: 100%;
+ text-size-adjust: 100%;
+}
+
+article,
+aside,
+figure,
+footer,
+header,
+hgroup,
+section {
+ display: block;
+}
+
+body,
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
+}
+
+code,
+pre {
+ -moz-osx-font-smoothing: auto;
+ -webkit-font-smoothing: auto;
+ font-family: monospace;
+}
+
+body {
+ color: #4a4a4a;
+ font-size: 1em;
+ font-weight: 400;
+ line-height: 1.5;
+}
+
+a {
+ color: #485fc7;
+ cursor: pointer;
+ text-decoration: none;
+}
+
+a strong {
+ color: currentColor;
+}
+
+a:hover {
+ color: #363636;
+}
+
+code {
+ background-color: whitesmoke;
+ color: #da1039;
+ font-size: 0.875em;
+ font-weight: normal;
+ padding: 0.25em 0.5em 0.25em;
+}
+
+hr {
+ background-color: whitesmoke;
+ 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: #363636;
+ font-weight: 700;
+}
+
+fieldset {
+ border: none;
+}
+
+pre {
+ -webkit-overflow-scrolling: touch;
+ background-color: whitesmoke;
+ color: #4a4a4a;
+ 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 {
+ vertical-align: top;
+}
+
+table td:not([align]),
+table th:not([align]) {
+ text-align: inherit;
+}
+
+table th {
+ color: #363636;
+}
+
+@-webkit-keyframes spinAround {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(359deg);
+ }
+}
+
+@keyframes spinAround {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(359deg);
+ }
+}
+
+/* Bulma Elements */
+.box {
+ background-color: white;
+ border-radius: 6px;
+ box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02);
+ color: #4a4a4a;
+ display: block;
+ padding: 1.25rem;
+}
+
+a.box:hover, a.box:focus {
+ box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0 0 1px #485fc7;
+}
+
+a.box:active {
+ box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #485fc7;
+}
+
+.button {
+ background-color: white;
+ border-color: #dbdbdb;
+ border-width: 1px;
+ color: #363636;
+ cursor: pointer;
+ justify-content: center;
+ padding-bottom: calc(0.5em - 1px);
+ padding-left: 1em;
+ padding-right: 1em;
+ padding-top: calc(0.5em - 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.5em - 1px);
+ margin-right: 0.25em;
+}
+
+.button .icon:last-child:not(:first-child) {
+ margin-left: 0.25em;
+ margin-right: calc(-0.5em - 1px);
+}
+
+.button .icon:first-child:last-child {
+ margin-left: calc(-0.5em - 1px);
+ margin-right: calc(-0.5em - 1px);
+}
+
+.button:hover, .button.is-hovered {
+ border-color: #b5b5b5;
+ color: #363636;
+}
+
+.button:focus, .button.is-focused {
+ border-color: #485fc7;
+ color: #363636;
+}
+
+.button:focus:not(:active), .button.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(72, 95, 199, 0.25);
+}
+
+.button:active, .button.is-active {
+ border-color: #4a4a4a;
+ color: #363636;
+}
+
+.button.is-text {
+ background-color: transparent;
+ border-color: transparent;
+ color: #4a4a4a;
+ text-decoration: underline;
+}
+
+.button.is-text:hover, .button.is-text.is-hovered, .button.is-text:focus, .button.is-text.is-focused {
+ background-color: whitesmoke;
+ color: #363636;
+}
+
+.button.is-text:active, .button.is-text.is-active {
+ background-color: #e8e8e8;
+ color: #363636;
+}
+
+.button.is-text[disabled],
+fieldset[disabled] .button.is-text {
+ background-color: transparent;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-ghost {
+ background: none;
+ border-color: transparent;
+ color: #485fc7;
+ text-decoration: none;
+}
+
+.button.is-ghost:hover, .button.is-ghost.is-hovered {
+ color: #485fc7;
+ text-decoration: underline;
+}
+
+.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],
+fieldset[disabled] .button.is-white {
+ 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, .button.is-white.is-inverted.is-hovered {
+ background-color: black;
+}
+
+.button.is-white.is-inverted[disabled],
+fieldset[disabled] .button.is-white.is-inverted {
+ 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.is-hovered, .button.is-white.is-outlined:focus, .button.is-white.is-outlined.is-focused {
+ 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.is-loading:hover::after, .button.is-white.is-outlined.is-loading.is-hovered::after, .button.is-white.is-outlined.is-loading:focus::after, .button.is-white.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #0a0a0a #0a0a0a !important;
+}
+
+.button.is-white.is-outlined[disabled],
+fieldset[disabled] .button.is-white.is-outlined {
+ 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.is-hovered, .button.is-white.is-inverted.is-outlined:focus, .button.is-white.is-inverted.is-outlined.is-focused {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.button.is-white.is-inverted.is-outlined.is-loading:hover::after, .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-white.is-inverted.is-outlined.is-loading:focus::after, .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent white white !important;
+}
+
+.button.is-white.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-white.is-inverted.is-outlined {
+ 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],
+fieldset[disabled] .button.is-black {
+ 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, .button.is-black.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-black.is-inverted[disabled],
+fieldset[disabled] .button.is-black.is-inverted {
+ 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.is-hovered, .button.is-black.is-outlined:focus, .button.is-black.is-outlined.is-focused {
+ 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.is-loading:hover::after, .button.is-black.is-outlined.is-loading.is-hovered::after, .button.is-black.is-outlined.is-loading:focus::after, .button.is-black.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent white white !important;
+}
+
+.button.is-black.is-outlined[disabled],
+fieldset[disabled] .button.is-black.is-outlined {
+ 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.is-hovered, .button.is-black.is-inverted.is-outlined:focus, .button.is-black.is-inverted.is-outlined.is-focused {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.button.is-black.is-inverted.is-outlined.is-loading:hover::after, .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-black.is-inverted.is-outlined.is-loading:focus::after, .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #0a0a0a #0a0a0a !important;
+}
+
+.button.is-black.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-black.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: white;
+ box-shadow: none;
+ color: white;
+}
+
+.button.is-light {
+ background-color: whitesmoke;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light:hover, .button.is-light.is-hovered {
+ background-color: #eeeeee;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light:focus, .button.is-light.is-focused {
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light:focus:not(:active), .button.is-light.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25);
+}
+
+.button.is-light:active, .button.is-light.is-active {
+ background-color: #e8e8e8;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light[disabled],
+fieldset[disabled] .button.is-light {
+ background-color: whitesmoke;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-light.is-inverted {
+ background-color: rgba(0, 0, 0, 0.7);
+ color: whitesmoke;
+}
+
+.button.is-light.is-inverted:hover, .button.is-light.is-inverted.is-hovered {
+ background-color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light.is-inverted[disabled],
+fieldset[disabled] .button.is-light.is-inverted {
+ background-color: rgba(0, 0, 0, 0.7);
+ border-color: transparent;
+ box-shadow: none;
+ color: whitesmoke;
+}
+
+.button.is-light.is-loading::after {
+ border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important;
+}
+
+.button.is-light.is-outlined {
+ background-color: transparent;
+ border-color: whitesmoke;
+ color: whitesmoke;
+}
+
+.button.is-light.is-outlined:hover, .button.is-light.is-outlined.is-hovered, .button.is-light.is-outlined:focus, .button.is-light.is-outlined.is-focused {
+ background-color: whitesmoke;
+ border-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light.is-outlined.is-loading::after {
+ border-color: transparent transparent whitesmoke whitesmoke !important;
+}
+
+.button.is-light.is-outlined.is-loading:hover::after, .button.is-light.is-outlined.is-loading.is-hovered::after, .button.is-light.is-outlined.is-loading:focus::after, .button.is-light.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important;
+}
+
+.button.is-light.is-outlined[disabled],
+fieldset[disabled] .button.is-light.is-outlined {
+ background-color: transparent;
+ border-color: whitesmoke;
+ box-shadow: none;
+ color: whitesmoke;
+}
+
+.button.is-light.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: rgba(0, 0, 0, 0.7);
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light.is-inverted.is-outlined:hover, .button.is-light.is-inverted.is-outlined.is-hovered, .button.is-light.is-inverted.is-outlined:focus, .button.is-light.is-inverted.is-outlined.is-focused {
+ background-color: rgba(0, 0, 0, 0.7);
+ color: whitesmoke;
+}
+
+.button.is-light.is-inverted.is-outlined.is-loading:hover::after, .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-light.is-inverted.is-outlined.is-loading:focus::after, .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent whitesmoke whitesmoke !important;
+}
+
+.button.is-light.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-light.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: rgba(0, 0, 0, 0.7);
+ box-shadow: none;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-dark {
+ background-color: #363636;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-dark:hover, .button.is-dark.is-hovered {
+ background-color: #2f2f2f;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-dark:focus, .button.is-dark.is-focused {
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-dark:focus:not(:active), .button.is-dark.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25);
+}
+
+.button.is-dark:active, .button.is-dark.is-active {
+ background-color: #292929;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-dark[disabled],
+fieldset[disabled] .button.is-dark {
+ background-color: #363636;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-dark.is-inverted {
+ background-color: #fff;
+ color: #363636;
+}
+
+.button.is-dark.is-inverted:hover, .button.is-dark.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-dark.is-inverted[disabled],
+fieldset[disabled] .button.is-dark.is-inverted {
+ background-color: #fff;
+ border-color: transparent;
+ box-shadow: none;
+ color: #363636;
+}
+
+.button.is-dark.is-loading::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-dark.is-outlined {
+ background-color: transparent;
+ border-color: #363636;
+ color: #363636;
+}
+
+.button.is-dark.is-outlined:hover, .button.is-dark.is-outlined.is-hovered, .button.is-dark.is-outlined:focus, .button.is-dark.is-outlined.is-focused {
+ background-color: #363636;
+ border-color: #363636;
+ color: #fff;
+}
+
+.button.is-dark.is-outlined.is-loading::after {
+ border-color: transparent transparent #363636 #363636 !important;
+}
+
+.button.is-dark.is-outlined.is-loading:hover::after, .button.is-dark.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-outlined.is-loading:focus::after, .button.is-dark.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-dark.is-outlined[disabled],
+fieldset[disabled] .button.is-dark.is-outlined {
+ background-color: transparent;
+ border-color: #363636;
+ box-shadow: none;
+ color: #363636;
+}
+
+.button.is-dark.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ color: #fff;
+}
+
+.button.is-dark.is-inverted.is-outlined:hover, .button.is-dark.is-inverted.is-outlined.is-hovered, .button.is-dark.is-inverted.is-outlined:focus, .button.is-dark.is-inverted.is-outlined.is-focused {
+ background-color: #fff;
+ color: #363636;
+}
+
+.button.is-dark.is-inverted.is-outlined.is-loading:hover::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #363636 #363636 !important;
+}
+
+.button.is-dark.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-dark.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ box-shadow: none;
+ color: #fff;
+}
+
+.button.is-primary {
+ background-color: #00d1b2;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-primary:hover, .button.is-primary.is-hovered {
+ background-color: #00c4a7;
+ border-color: transparent;
+ color: #fff;
+}<