diff --git a/.tool-versions b/.tool-versions
index aa5a120..0b811ca 100644
--- a/.tool-versions
+++ b/.tool-versions
@@ -1,2 +1,2 @@
-gleam 1.0.0
-nodejs 20.10.0
+gleam 1.4.1
+nodejs 22.4.1
diff --git a/common.css b/common.css
new file mode 100644
index 0000000..5e40928
--- /dev/null
+++ b/common.css
@@ -0,0 +1,82 @@
+@import "./normalize.css";
+@import "./vendor/bootstrap-icons/bootstrap-icons.min.css";
+@import "./settings.css";
+
+.glass-bg,
+.glass-button,
+.glass-input {
+ background: var(--glass-background);
+}
+
+.glass-button:active {
+ background: rgba(255, 255, 255, var(--glass-opacity-active));
+}
+
+.glass-shadow,
+.glass-button,
+.glass-input {
+ box-shadow: var(--glass-shadow);
+}
+
+.glass-blur,
+.glass-button,
+.glass-input {
+ backdrop-filter: blur(var(--glass-blur));
+ -webkit-backdrop-filter: blur(var(--glass-blur));
+}
+
+.glass-border,
+.glass-button,
+.glass-input {
+ border: var(--glass-border);
+}
+
+.glass-button {
+ border-radius: var(--button-border-radius);
+
+ text-align: center;
+}
+
+.button-small,
+.glass-input {
+ border-radius: var(--button-border-radius-small);
+}
+
+.glass-button,
+.glass-input {
+ padding: var(--side-margin);
+}
+
+.button-group {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-around;
+ align-items: stretch;
+}
+
+.button-group > * {
+ flex: 1;
+}
+
+.button-group .glass-button {
+ border-radius: 0;
+ border-right: none;
+}
+
+.button-group .glass-button:first-child {
+ border-radius: var(--button-border-radius) 0 0 var(--button-border-radius);
+}
+
+.button-group .glass-button:last-child {
+ border-radius: 0 var(--button-border-radius) var(--button-border-radius) 0;
+ border-right: var(--glass-border);
+}
+
+.hidden {
+ display: none;
+}
+
+a {
+ color: var(--text-color);
+ text-decoration: none;
+}
diff --git a/gleam.toml b/gleam.toml
index 01103b9..05af1d8 100644
--- a/gleam.toml
+++ b/gleam.toml
@@ -1,7 +1,7 @@
name = "elektrofoni"
version = "1.0.0"
target = "javascript"
-gleam = ">= 0.33.0"
+gleam = ">= 1.4.0"
# Fill out these fields if you intend to generate HTML documentation or publish
# your project to the Hex package manager.
@@ -12,15 +12,15 @@ gleam = ">= 0.33.0"
# links = [{ title = "Website", href = "https://gleam.run" }]
[dependencies]
-gleam_stdlib = "~> 0.34"
-gleam_json = "~> 0.7"
+gleam_stdlib = "0.40.0"
+gleam_json = "~> 1.0"
gleam_http = "~> 3.5"
-gleam_javascript = "~> 0.7"
-gleam_fetch = "~> 0.3"
-plinth = "~> 0.1"
-varasto = "~> 2.0"
-lustre = "~> 3.1"
-birl = "~> 1.3"
+gleam_javascript = "0.11.0"
+gleam_fetch = "~> 1.0"
+plinth = "0.4.12"
+varasto = ">= 3.0.1 and < 4.0.0"
+lustre = "~> 4.3"
+birl = "~> 1.7"
[dev-dependencies]
-gleeunit = "~> 1.0"
+gleeunit = "~> 1.2"
diff --git a/index.html b/index.html
index ca38f10..b106d14 100644
--- a/index.html
+++ b/index.html
@@ -26,8 +26,6 @@
-
-